fu: Close-up of Fu, bringing a scoop of water to her mouth (Default)
fu ([personal profile] fu) wrote in [site community profile] changelog2012-01-09 03:44 pm

[dw-free] renaming to a purged account gives errors

[commit: http://hg.dwscoalition.org/dw-free/rev/406739fa9fad]

http://bugs.dwscoalition.org/show_bug.cgi?id=4216

Don't log rename event if user is expunged: we don't need that data, and
it'll cause an error. Also fix up a few more places where expunged users in
the rename workflow will cause errors, because we can't get the data (user
is cluster 0). Tweak rename test to behave like actual expunge (besides
statusvis, set cluster to 0).

Patch by [personal profile] fu.

Files modified:
  • cgi-bin/DW/Controller/Rename.pm
  • cgi-bin/DW/RenameToken.pm
  • cgi-bin/DW/User/Rename.pm
  • t/rename.t
  • views/admin/rename_edit.tt
--------------------------------------------------------------------------------
diff -r 689461460794 -r 406739fa9fad cgi-bin/DW/Controller/Rename.pm
--- a/cgi-bin/DW/Controller/Rename.pm	Fri Jan 06 09:35:20 2012 -0600
+++ b/cgi-bin/DW/Controller/Rename.pm	Mon Jan 09 23:44:19 2012 +0800
@@ -306,15 +306,18 @@
 
     # load up the old values
     my $token_details = $token->details;
-    $form->{redirect} = $token_details->{redirect}->{username} ? "forward" : "disconnect";
-    $form->{rel_options} = { map { $_ => ! $token_details->{del}->{$_} } @rel_types };
-    $form->{others}->{email} = $token_details->{redirect}->{email};
+    if ( $token_details ) {
+        $form->{redirect} = $token_details->{redirect}->{username} ? "forward" : "disconnect";
+        $form->{rel_options} = { map { $_ => ! $token_details->{del}->{$_} } @rel_types };
+        $form->{others}->{email} = $token_details->{redirect}->{email};
+    }
 
     my $vars = {
         %$rv,
         formdata => $form,
         rel_types => \@rel_types,
         token => $token,
+        nodetails => $token_details ? 0: 1,
     };
 
     if ( $r->did_post ) {
diff -r 689461460794 -r 406739fa9fad cgi-bin/DW/RenameToken.pm
--- a/cgi-bin/DW/RenameToken.pm	Fri Jan 06 09:35:20 2012 -0600
+++ b/cgi-bin/DW/RenameToken.pm	Mon Jan 09 23:44:19 2012 +0800
@@ -325,6 +325,7 @@
 
     my $u = LJ::load_userid( $self->renuserid );
     return unless LJ::isu( $u );
+    return if $u->is_expunged; # can't retrieve the info from userlog
 
     # get more than we need and filter, just in case the timestamps don't match up perfectly
     my $results = $u->selectall_arrayref(
diff -r 689461460794 -r 406739fa9fad cgi-bin/DW/User/Rename.pm
--- a/cgi-bin/DW/User/Rename.pm	Fri Jan 06 09:35:20 2012 -0600
+++ b/cgi-bin/DW/User/Rename.pm	Mon Jan 09 23:44:19 2012 +0800
@@ -473,7 +473,8 @@
     $self->log_event( 'rename', {
         remote => $remote,
         %extra_args,
-    } );
+    } ) unless $self->is_expunged;  # if expunged, we don't need this info anymore
+                                    # also, would error; don't have a cluster 0
 }
 
 =head2 C<< $self->break_redirects >>
diff -r 689461460794 -r 406739fa9fad t/rename.t
--- a/t/rename.t	Fri Jan 06 09:35:20 2012 -0600
+++ b/t/rename.t	Mon Jan 09 23:44:19 2012 +0800
@@ -274,13 +274,19 @@
     my $fromusername = $fromu->username;
     my $tousername = $tou->user;
 
-    $tou->set_statusvis( "X" );
+    $tou->update_self( { clusterid => 0,
+                       statusvis => 'X',
+                       raw => "statusvisdate=NOW()" } );
+
+    LJ::start_request();
+    $tou = LJ::load_user( $tousername, 1 );
+    $fromu = LJ::load_user( $fromusername, 1 );
 
     ok( $fromu->can_rename_to( $tousername ), "Can always rename to expunged users." );
     ok( $fromu->rename( $tousername, token => new_token( $fromu ) ), "Rename to expunged user $tousername" );
 
-    $fromu = LJ::load_userid( $fromu->userid );
-    $tou = LJ::load_userid( $tou->userid );
+    $fromu = LJ::load_userid( $fromu->userid, 1 );
+    $tou = LJ::load_userid( $tou->userid, 1 );
     is( $fromu->user, $tousername, "Rename fromu to tou, which is under the control of fromu" );
     my $ex_user = substr( $tousername, 0, 10 );
     like( $tou->user, qr/^ex_$ex_user/ , "Moved out of the way." );
diff -r 689461460794 -r 406739fa9fad views/admin/rename_edit.tt
--- a/views/admin/rename_edit.tt	Fri Jan 06 09:35:20 2012 -0600
+++ b/views/admin/rename_edit.tt	Mon Jan 09 23:44:19 2012 +0800
@@ -35,12 +35,13 @@
                 <label>Account: </label>    [% form.data.user.ljuser_display %]
             </div>
             <div class="formfield">
-                <label>Renamed by: </label> [% form.data.byuser.ljuser_display %]
+                <label>Renamed by: </label> [% form.data.byuser.ljuser_display OR "(system)" %]
             </div>
 
         </fieldset>
 
         [% scope = dw.ml_scope( ); CALL dw.ml_scope( '/rename.tt' ) %]
+        [% UNLESS nodetails %]
         <h2>Options chosen</h2>
         <p>You will need to check the "override" to override the displayed options.</p>
         <fieldset>
@@ -78,6 +79,8 @@
         </fieldset>
 
         <input type="submit" value="Override rename options" />
+
+        [% END # nodetails %]
     </form>
     [% CALL dw.ml_scope( scope ); %]
 [% ELSE %]
--------------------------------------------------------------------------------