Changeset 2657

Show
Ignore:
Timestamp:
06/30/08 05:19:22 (20 months ago)
Author:
fumiakiy
Message:

Adjust ancestry upon moving a category so the family relationship won't contradict with each other. BugId:80296

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • branches/release-41/lib/MT/CMS/Category.pm

    r1933 r2657  
    435435} 
    436436 
     437sub _adjust_ancestry { 
     438    my ( $cat, $ancestor ) = @_; 
     439    return unless $cat && $ancestor; 
     440    if ( $ancestor->parent && ( $ancestor->parent != $cat->id ) ) { 
     441        _adjust_ancestry($cat, $ancestor->parent_category); 
     442    } 
     443    else { 
     444        $ancestor->parent($cat->parent); 
     445        $ancestor->save; 
     446    } 
     447} 
     448 
    437449sub move_category { 
    438450    my $app   = shift; 
     
    444456    my $cat        = $class->load( $app->param('move_cat_id') ) 
    445457        or return; 
    446     my $new_parent = $app->param('move-radio'); 
    447  
    448     return 1 if ( $new_parent == $cat->parent ); 
    449  
    450     $cat->parent($new_parent); 
     458 
     459    my $new_parent_id = $app->param('move-radio'); 
     460 
     461    return 1 if ( $new_parent_id == $cat->parent ); 
     462 
     463    if ( $new_parent_id ) { 
     464        my $new_parent = $class->load( $new_parent_id ) 
     465            or return; 
     466       if ( $cat->is_ancestor( $new_parent ) ) { 
     467            _adjust_ancestry( $cat, $new_parent ); 
     468        } 
     469    } 
     470    $cat->parent($new_parent_id); 
    451471    my @siblings = $class->load( 
    452472        {