mourningdove/cgi-bin/DW/Console/Command/RenameOpts.pm
2026-05-24 01:03:05 +00:00

99 lines
3.1 KiB
Perl

#!/usr/bin/perl
#
# DW::Console::Command::RenameOpts
#
# Console command for tweaking options on renamed users.
#
# Authors:
# Afuna <coder.dw@afunamatata.com>
#
# Copyright (c) 2010 by Dreamwidth Studios, LLC.
#
# 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'.
#
package DW::Console::Command::RenameOpts;
use strict;
use base qw/ LJ::Console::Command /;
use Carp qw/ croak /;
sub cmd { 'rename_opts' }
sub desc { 'Manage options attached to a rename. Requires priv: siteadmin:rename.' }
sub args_desc {
[
'command' =>
'Subcommand: redirect, break_redirect, break_email_redirect, del_trusted_by, del_watched_by, del_trusted, del_watched, del_communities.',
'username' => 'Username to act on.',
]
}
sub usage {
'redirect from_nonexistent_user to_existing_user | break_email_redirect from_user to_user | <subcommand> <username>';
}
sub can_execute {
my $remote = LJ::get_remote();
return $remote && $remote->has_priv( "siteadmin", "rename" );
}
sub execute {
my ( $self, $cmd, $user, $tousername ) = @_;
return $self->error( 'Invalid command. Usage: ' . usage() )
unless $cmd
&& $cmd =~
/^(?:redirect|break_redirect|break_email_redirect|del_trusted_by|del_watched_by|del_trusted|del_watched|del_communities)$/;
if ( $cmd eq 'redirect' ) {
# "from" is the user we are creating; "to" is an existing user
my $from_user = LJ::canonical_username($user);
my $to_u = LJ::load_user($tousername);
return $self->error('No destination user provided.')
unless $to_u;
return $self->error('Unable to setup redirection')
unless DW::User::Rename->create_redirect_journal( $from_user, $to_u->user );
}
elsif ( $cmd eq 'break_email_redirect' ) {
return $self->error(
'Need to provide the user being redirected from and the user being redirected to')
unless $user && $tousername;
return $self->error(
'Unable to break the email redirect. Note that from_user must redirect to to_user')
unless DW::User::Rename->break_email_redirection( $user, $tousername );
}
else {
my $u = LJ::load_user($user);
return $self->error('Invalid user.')
unless $u;
if ( $cmd eq 'break_redirect' ) {
if ( $u->break_redirects ) {
$u->set_expunged;
}
else {
$self->error("Unable to break redirection");
}
}
elsif ( $cmd eq 'del_trusted_by' ) { $u->delete_relationships( del_trusted_by => 1 ) }
elsif ( $cmd eq 'del_watched_by' ) { $u->delete_relationships( del_watched_by => 1 ) }
elsif ( $cmd eq 'del_trusted' ) { $u->delete_relationships( del_trusted => 1 ) }
elsif ( $cmd eq 'del_watched' ) { $u->delete_relationships( del_watched => 1 ) }
elsif ( $cmd eq 'del_communities' ) { $u->delete_relationships( del_communities => 1 ) }
}
$self->print('Done.');
return 1;
}
1;