Changeset 2863

Show
Ignore:
Timestamp:
07/29/08 22:38:06 (4 months ago)
Author:
arvind
Message:

Added callbacks:
* Pkg::unpack_revision
* Pkg::pack_revision
* Pkg::save_revision_filter
* Pkg::pre_save_revision
* Pkg::post_save_revision

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/feature-revision-histories/lib/MT/Revisable.pm

    r2855 r2863  
    5757    $class->install_column('current_revision'); 
    5858    $props->{defaults}{current_revision} = 0; 
    59      
    60     # To track how many revisions to store for each object, add 
    61     # a meta column in MT::Blog 
    62     # my $blog_class = MT->model('blog'); 
    63     # $blog_class->install_meta({ column_defs => { 
    64     #     "max_${datasource}_revision" => 'integer' 
    65     # }}); 
    6659     
    6760    # Callbacks: clean list of changed columns to only 
     
    130123    my ($cb, $app, $obj, $orig) = @_; 
    131124     
    132     my $current_revision = $obj->save_revision(); 
    133      
    134     $obj->current_revision($current_revision); 
    135     $obj->save or return $obj->error($obj->errstr); 
     125    $obj->save_revision(); 
    136126     
    137127    return 1; 
     
    162152sub pack_revision { 
    163153    my $obj = shift; 
     154    my $class = ref $obj || $obj; 
    164155    my $values = $obj->column_values; 
    165156 
     
    169160    } 
    170161     
     162    MT->run_callbacks($class . '::pack_revision', $obj, $values); 
     163     
    171164    return $values; 
    172165} 
     
    175168    my $obj = shift; 
    176169    my ($packed_obj) = @_; 
     170    my $class = ref $obj || $obj; 
    177171     
    178172    $obj->set_values($packed_obj); 
    179 
    180  
    181 sub save_revision { _handle(@_); } 
     173     
     174    MT->run_callbacks($class . '::unpack_revision', $obj, $packed_obj); 
     175
     176 
     177sub save_revision {  
     178    my $obj = shift; 
     179    my $class = ref $obj || $obj; 
     180     
     181    my $filter_result = MT->run_callbacks( $class . '::save_revision_filter', $obj ); 
     182    return if !$filter_result; 
     183     
     184    MT->run_callbacks( $class . '::pre_save_revision', $obj ); 
     185     
     186    my $current_revision = _handle($obj);     
     187    $obj->current_revision($current_revision); 
     188    $obj->save or return $obj->error($obj->errstr); 
     189     
     190    MT->run_callbacks( $class . '::post_save_revision', $obj, $current_revision ); 
     191     
     192    1; 
     193
     194     
    182195sub object_from_revision { _handle(@_); } 
    183196sub load_revision { _handle(@_); }