更新履歴をプラグインで利用する
MT::Revisable インターフェースとは
Movable Type の更新履歴フレームワークを利用することで、開発者はオブジェクトの更新履歴をプラグイン等で利用することができます。
以下のメソッドを利用します。
$obj->pack_revision()
オブジェクトの各更新履歴毎のhashrefを作成します。hashrefにはオブジェクトの標準カラムの内容とメタカラムの内容が含まれます。"
$obj->unpack_revision($packed_obj)
"pack_revision" の逆の働きをします。"$packed_obj" hashref を受け取り、中身を取り出して、必要に応じて "$obj" に値をセットします。"$packed_obj" に、通常のカラムあるいはメタのカラム以外の値を保存した場合は、"
$obj->save_revision()
Movable Type の管理画面や、サードパーティー製のクライアント(プライオリティの低い api/cms_post_save コールバック)でオブジェクトを保存するときに、自動的に呼び出されます。少なくともひとつのカラムに変更があった場合に、更新履歴が保存されます。
$obj->load_revision(\%terms, \%args)
"$obj" の更新履歴を読み出します。''MT::Object->load'' と同様に動作します。''$obj->load_revision($rev_numer)'' のように利用するか、あるいは \%terms と \%args を渡します。arrayref あるいは、arrayrefの配列を返します。
$obj->apply_revision(\%terms, \%args)
$objを''$obj->load_revision(\%terms, \%args)'' で読み出した更新履歴に戻します。また、適用前の値を新しい更新履歴として保存します。
任意のオブジェクトの更新履歴を管理する
MT::Revisable インターフェースを継承する
以下の手順で、プラグインが追加した任意のオブジェクトの更新履歴を管理することができます。
- 独自オブジェクトの継承関係にMT::Revisableを追加します。
- 履歴管理を行いたいカラムに対して"revisioned"属性を追加します。
package My::Object::Model; use base qw ( MT::Object MT::Revisable ); __PACKAGE__->install_properties({ 'id' => 'integer not null auto_increment', 'text' => 'string(255) not null revisioned', # ... }); 1;
MT::Revisable インターフェースを利用する
MT::Revisableを継承したオブジェクトは以下のように、MT:Revisable インターフェースのメソッドを利用することができるようになります。
sub load_my_revision { my ( $obj_id, $rev_id ) = @_; my $obj = My::Object::Model->load( $obj_id ); my $rev = $obj->load_revision( { rev_number => $rev_id } ); # ... }