fu: Close-up of Fu, bringing a scoop of water to her mouth (Default)
fu ([personal profile] fu) wrote in [site community profile] changelog2010-10-22 02:57 pm

[dw-free] need a page for siteadmins to be able to initiate renames

[commit: http://hg.dwscoalition.org/dw-free/rev/8b6c7a57e647]

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

Rename page for admins to use.

Patch by [personal profile] fu.

Files modified:
  • cgi-bin/DW/Controller/Rename.pm
  • cgi-bin/DW/User/Rename.pm
  • views/admin/rename.tt
  • views/admin/rename_new.tt
--------------------------------------------------------------------------------
diff -r 444c0e7f053e -r 8b6c7a57e647 cgi-bin/DW/Controller/Rename.pm
--- a/cgi-bin/DW/Controller/Rename.pm	Fri Oct 22 22:44:44 2010 +0800
+++ b/cgi-bin/DW/Controller/Rename.pm	Fri Oct 22 22:57:33 2010 +0800
@@ -32,6 +32,8 @@ DW::Routing->register_regex( qr!^/rename
 
 DW::Routing->register_string( "/admin/rename", \&rename_admin_handler, app => 1 );
 DW::Routing->register_string( "/admin/rename/edit", \&rename_admin_edit_handler, app => 1 );
+
+DW::Routing->register_string( "/admin/rename/new", \&siteadmin_rename_handler, app => 1 );
 
 sub rename_handler {
     my $r = DW::Request->get;
@@ -309,4 +311,51 @@ sub handle_admin_post {
     return ( 0, $errref );
 }
 
+
+sub siteadmin_rename_handler {
+    my ( $ok, $rv ) = controller( privcheck => [ "siteadmin:rename" ] );
+    return $rv unless $ok;
+
+    my $r = DW::Request->get;
+    my $post_args = DW::Request->get->post_args || {};
+
+    my $vars = {};
+
+    if ( $r->method eq "POST" ) {
+        my ( $post_ok, $rv ) = handle_siteadmin_rename_post( $post_args );
+        return $rv if $post_ok;
+    
+        $vars->{error_list} = $rv;
+    }
+
+    return DW::Template->render_template( "admin/rename_new.tt", $vars );
+}
+
+
+sub handle_siteadmin_rename_post {
+    my ( $post_args ) = @_;
+
+    return ( 0, [ LJ::Lang::ml( '/rename.tt.error.invalidform' ) ] )
+        unless LJ::check_form_auth( $post_args->{lj_form_auth} );
+
+    my $errref = [];
+
+    my $from_user = LJ::load_user( $post_args->{user} );
+    my $to_user = $post_args->{touser};
+
+    push @$errref, LJ::Lang::ml( '/rename.tt.error.nojournal' ) unless $from_user;
+
+    $from_user->rename( $to_user,
+        token => DW::RenameToken->create_token( systemtoken => 1 ),
+        user => LJ::get_remote(),
+        force => 1,
+        errref => $errref,
+    );
+
+    return ( 1, DW::Template->render_template(
+        'success.tt', { message => "Successfully changed settings." }
+    ) ) unless @$errref;
+
+    return ( 0, $errref );
+}
 1;
diff -r 444c0e7f053e -r 8b6c7a57e647 cgi-bin/DW/User/Rename.pm
--- a/cgi-bin/DW/User/Rename.pm	Fri Oct 22 22:44:44 2010 +0800
+++ b/cgi-bin/DW/User/Rename.pm	Fri Oct 22 22:57:33 2010 +0800
@@ -178,8 +178,10 @@ sub rename {
     my $errref = $opts{errref} || [];
 
     my $remote = LJ::isu( $opts{user} ) ? $opts{user} : $self;
-    push @$errref, LJ::Lang::ml( 'rename.error.tokeninvalid' ) unless $opts{token} && $opts{token}->isa( "DW::RenameToken" )
-            && $opts{token}->ownerid == $remote->userid;
+    push @$errref, LJ::Lang::ml( 'rename.error.tokeninvalid' )
+        unless $opts{token} && $opts{token}->isa( "DW::RenameToken" )
+            && ( $opts{token}->ownerid == $remote->userid
+            || $remote->has_priv( "siteadmin", "rename" ) && $opts{force} ) ;
     push @$errref, LJ::Lang::ml( 'rename.error.tokenapplied' ) if $opts{token} && $opts{token}->applied;
 
     my $can_rename_to = $self->can_rename_to( $tousername, %opts );
diff -r 444c0e7f053e -r 8b6c7a57e647 views/admin/rename.tt
--- a/views/admin/rename.tt	Fri Oct 22 22:44:44 2010 +0800
+++ b/views/admin/rename.tt	Fri Oct 22 22:57:33 2010 +0800
@@ -23,7 +23,7 @@ the same terms as Perl itself.  For a co
             <tr>
                 <td>[%rename.from | html %]</td>
                 <td>[%rename.to | html %]</td>
-                <td>[%rename.owner.ljuser_display %]</td>
+                <td>[% rename.owner ? rename.owner.ljuser_display : "(system)" %]</td>
                 <td>[%rename.target.ljuser_display %]</td>
                 <td>[%rename.date%]</td>
                 <td><a href="[%site.root%]/admin/rename/edit?token=[%rename.token%]">[% '.renames.list.item.details' | ml | html %]</a></td>
diff -r 444c0e7f053e -r 8b6c7a57e647 views/admin/rename_new.tt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/views/admin/rename_new.tt	Fri Oct 22 22:57:33 2010 +0800
@@ -0,0 +1,34 @@
+[%# admin/rename/do.tt
+
+Admin page to do renames.
+
+Authors:
+    Afuna <coder.dw@afunamatata.com>
+
+This program is free software; you may redistribute it and/or modify it under
+the same terms as Perl itself.  For a copy of the license, please reference
+'perldoc perlartistic' or 'perldoc perlgpl'.
+%]
+
+[% sections.title = 'System Renames' %]
+
+[% IF error_list %]
+    <p>Error</p>
+    <ul class='error-list'>
+        [% FOREACH error = error_list %]
+            <li>[% error %] </li>
+        [% END %]
+    </ul>
+[% END %]
+
+<p>This allows a system user to perform a rename. The rules are slightly relaxed compared to normal renames: we check for validity of the username, but we don't care about other things like the journal's status or ownership.</p>
+<p>All existing relationships are kept; email and journal redirects are broken.</p>
+<form method="POST">
+    [% dw.form_auth %]
+    <div class='formfield'>
+        <label for="user">User:</label> <input type="text" name="user" id="user"/></div>
+    <div class='formfield'>
+        <label for="touser">To:</label> <input type="text" name="touser" id="touser" />
+    </div>
+    <input type="submit" value="Perform rename" />
+</form>
--------------------------------------------------------------------------------