Show
Ignore:
Timestamp:
04/25/08 03:52:07 (19 months ago)
Author:
bchoate
Message:

Handle special case where user has excessive permission records. BugId:79501

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • branches/release-36/lib/MT/Author.pm

    r2087 r2099  
    363363            } 
    364364            ($perm, my $sys_perm) = @perm; 
    365             $perm->add_permission($sys_perm); 
     365            $perm->add_permissions($sys_perm); 
    366366        } elsif (@perm == 1) { 
    367367            $perm = $perm[0]; 
    368368            if (!$perm->blog_id) { 
    369369                $perm->blog_id($obj->id); 
    370                 delete $perm->{column_values}->{id}; 
    371                 delete $perm->{changed_cols}->{id}; 
     370                delete $perm->{column_values}{blog_id}; 
     371                delete $perm->{changed_cols}{blog_id}; 
    372372            } 
    373         } elsif (@perm) { 
    374             die "invalid permissions for author " . $author->id; 
     373        } elsif (@perm > 2) { 
     374            # Condition sometimes caused by saving preferences. BugId:79501 
     375            # Handle by merging permissions and removing all but one 
     376            # Not ideal, but better than dying... 
     377            my ($sys_perm) = grep { ! $_->blog_id } @perm; 
     378            my @blog_perms = grep { $_->blog_id } sort { $b->modified_on cmp $a->modified_on } @perm; 
     379 
     380            my $new_perm = shift @blog_perms; # take last one saved 
     381            if (@blog_perms) { 
     382                foreach my $more_perms (@blog_perms) { 
     383                    $new_perm->add_permissions($more_perms); 
     384                    $new_perm->add_restrictions($more_perms); 
     385                    $more_perms->remove; 
     386                } 
     387                # save merged permission record 
     388                $new_perm->save; 
     389            } 
     390            $new_perm->add_permissions($sys_perm); 
     391            $new_perm->add_restrictions($sys_perm); 
     392            $perm = $new_perm; 
     393            @perm = ($perm); 
    375394        } 
    376395    } else {