Changeset 2814

Show
Ignore:
Timestamp:
07/18/08 19:54:28 (5 months ago)
Author:
arvind
Message:

Track a revision number with each revision and store current_revision in original MT::Object

Files:

Legend:

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

    r2808 r2814  
    1414    my $pkg = shift; 
    1515    my ($class) = @_; 
    16     my $datasource = $class->datasource; 
     16    my $props = $class->properties; 
     17     
     18    $props->{column_defs}{current_revision} = { 
     19        label => 'Revision Number', 
     20        type  => 'integer', 
     21        not_null => 1         
     22    }; 
     23    $class->install_column('current_revision'); 
     24    $props->{defaults}{current_revision} = 0; 
    1725     
    1826    MT->add_callback( 'api_pre_save.entry', 1, undef, 
     
    2028    MT->add_callback( 'cms_pre_save.entry', 1, undef, 
    2129               \&mt_remove_unchanged_cols ); 
     30                
     31    $class->add_trigger( pre_save => \&increment_revision );            
    2232    $class->add_trigger( post_save => \&save_revision ); 
    2333} 
     
    4555            $obj_id => 'integer not null', 
    4656            $obj_ds => 'blob not null', 
     57            rev_number => 'integer not null', 
    4758            changed => 'string(255) not null' 
    4859        }, 
     
    5061            $obj_id => 1 
    5162        }, 
     63        defaults => { 
     64            rev_number => 0 
     65        }, 
     66        audit => 1, 
    5267        primary_key => 'id', 
    5368        datasource  => $class->datasource . '_rev' 
     
    172187} 
    173188 
    174 sub mt_save_revision { 
    175     my ($cb, $mt, $obj, $orig) = @_; 
    176      
    177     $obj->save_revision($orig); 
     189sub increment_revision { 
     190    my $obj = shift; 
     191    my ($orig) = @_; 
     192     
     193    # We default current_revision to 0 so we can always increment 
     194    # Initial save = rev 1 
     195    my $current_revision = $obj->current_revision; 
     196    $obj->current_revision(++$current_revision); 
    178197} 
    179198 
     
    195214        changed     => join ',', $obj->changed_cols 
    196215    }); 
     216    $revision->rev_number($obj->current_revision); 
    197217    $revision->save or return; 
    198218     
     
    211231    $rev_obj->unpack_revision($$packed_obj); 
    212232     
     233    # Here we cheat since audit columns aren't revisioned 
     234    $rev_obj->modified_by($rev->created_by); 
     235    $rev_obj->modified_on($rev->modified_on);     
     236     
    213237    my @changed = split ',', $rev->changed; 
    214238     
    215     return [ $rev_obj, \@changed]; 
     239    return [ $rev_obj, \@changed, $rev->rev_number]; 
    216240} 
    217241