| 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); |