From 08aa4418c30cfc18ccc69a0f0f9cb9e17be6c196 Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Mon, 12 Aug 2013 09:28:15 +0200 Subject: Update to MediaWiki 1.21.1 --- maintenance/createAndPromote.php | 81 ++++++++++++++++++++++++++++------------ 1 file changed, 57 insertions(+), 24 deletions(-) (limited to 'maintenance/createAndPromote.php') diff --git a/maintenance/createAndPromote.php b/maintenance/createAndPromote.php index ad5333fc..81fbbb3d 100644 --- a/maintenance/createAndPromote.php +++ b/maintenance/createAndPromote.php @@ -20,6 +20,7 @@ * @file * @ingroup Maintenance * @author Rob Church + * @author Pablo Castellano */ require_once( __DIR__ . '/Maintenance.php' ); @@ -31,50 +32,82 @@ require_once( __DIR__ . '/Maintenance.php' ); */ class CreateAndPromote extends Maintenance { + static $permitRoles = array( 'sysop', 'bureaucrat' ); + public function __construct() { parent::__construct(); - $this->mDescription = "Create a new user account"; - $this->addOption( "sysop", "Grant the account sysop rights" ); - $this->addOption( "bureaucrat", "Grant the account bureaucrat rights" ); + $this->mDescription = "Create a new user account and/or grant it additional rights"; + $this->addOption( "force", "If acccount exists already, just grant it rights or change password." ); + foreach( self::$permitRoles as $role ) { + $this->addOption( $role, "Add the account to the {$role} group" ); + } $this->addArg( "username", "Username of new user" ); - $this->addArg( "password", "Password to set" ); + $this->addArg( "password", "Password to set (not required if --force is used)", false); } public function execute() { $username = $this->getArg( 0 ); $password = $this->getArg( 1 ); - - $this->output( wfWikiID() . ": Creating and promoting User:{$username}..." ); + $force = $this->hasOption( 'force' ); + $inGroups = array(); $user = User::newFromName( $username ); if ( !is_object( $user ) ) { $this->error( "invalid username.", true ); - } elseif ( 0 != $user->idForName() ) { - $this->error( "account exists.", true ); } - # Try to set the password - try { - $user->setPassword( $password ); - } catch ( PasswordError $pwe ) { - $this->error( $pwe->getText(), true ); + $exists = ( 0 !== $user->idForName() ); + + if ( $exists && !$force ) { + $this->error( "Account exists. Perhaps you want the --force option?", true ); + } else if ( !$exists && !$password ) { + $this->error( "Argument required!", false ); + $this->maybeHelp( true ); + } else if ( $exists ) { + $inGroups = $user->getGroups(); } - # Insert the account into the database - $user->addToDatabase(); - $user->saveSettings(); + $promotions = array_diff( array_filter( self::$permitRoles, array( $this, 'hasOption' ) ), $inGroups ); - # Promote user - if ( $this->hasOption( 'sysop' ) ) { - $user->addGroup( 'sysop' ); + if ( $exists && !$password && count( $promotions ) === 0 ) { + $this->output( "Account exists and nothing to do.\n" ); + return; + } else if ( count( $promotions ) !== 0 ) { + $promoText = "User:{$username} into " . implode( ', ', $promotions ) . "...\n"; + if ( $exists ) { + $this->output( wfWikiID() . ": Promoting $promoText" ); + } else { + $this->output( wfWikiID() . ": Creating and promoting $promoText" ); + } } - if ( $this->hasOption( 'bureaucrat' ) ) { - $user->addGroup( 'bureaucrat' ); + + if ( $password ) { + # Try to set the password + try { + $user->setPassword( $password ); + if ( $exists ) { + $this->output( "Password set.\n" ); + $user->saveSettings(); + } + } catch ( PasswordError $pwe ) { + $this->error( $pwe->getText(), true ); + } } - # Increment site_stats.ss_users - $ssu = new SiteStatsUpdate( 0, 0, 0, 0, 1 ); - $ssu->doUpdate(); + if ( !$exists ) { + # Insert the account into the database + $user->addToDatabase(); + $user->saveSettings(); + } + + # Promote user + array_map( array( $user, 'addGroup' ), $promotions ); + + if ( !$exists ) { + # Increment site_stats.ss_users + $ssu = new SiteStatsUpdate( 0, 0, 0, 0, 1 ); + $ssu->doUpdate(); + } $this->output( "done.\n" ); } -- cgit v1.2.3-54-g00ecf