[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
fu.
Files modified:
http://bugs.dwscoalition.org/show_bug.cgi?id=3150
Rename page for admins to use.
Patch by
![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
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> --------------------------------------------------------------------------------