X-Git-Url: https://scripts.mit.edu/gitweb/autoinstallsdev/mediawiki.git/blobdiff_plain/8989532d3de45b196373107c7a812a68ac0ff2d9..d75ce11339b35963b5f8c3d53190819c1c025716:/maintenance/migrateUserGroup.php diff --git a/maintenance/migrateUserGroup.php b/maintenance/migrateUserGroup.php new file mode 100644 index 00000000..6d584f7d --- /dev/null +++ b/maintenance/migrateUserGroup.php @@ -0,0 +1,70 @@ +mDescription = "Re-assign users from an old group to a new one"; + $this->addArg( 'oldgroup', 'Old user group key', true ); + $this->addArg( 'newgroup', 'New user group key', true ); + $this->setBatchSize( 200 ); + } + + public function execute() { + $count = 0; + $oldGroup = $this->getArg( 0 ); + $newGroup = $this->getArg( 1 ); + $dbw = wfGetDB( DB_MASTER ); + $start = $dbw->selectField( 'user_groups', 'MIN(ug_user)', + array('ug_group' => $oldGroup), __FUNCTION__ ); + $end = $dbw->selectField( 'user_groups', 'MAX(ug_user)', + array('ug_group' => $oldGroup), __FUNCTION__ ); + if( $start === null ) { + $this->error( "Nothing to do - no users in the '$oldGroup' group", true ); + } + # Do remaining chunk + $end += $this->mBatchSize - 1; + $blockStart = $start; + $blockEnd = $start + $this->mBatchSize - 1; + // Migrate users over in batches... + while( $blockEnd <= $end ) { + $this->output( "Doing users $blockStart to $blockEnd\n" ); + $dbw->begin(); + $dbw->update( 'user_groups', + array('ug_group' => $newGroup), + array('ug_group' => $oldGroup, + "ug_user BETWEEN $blockStart AND $blockEnd" ) + ); + $count += $dbw->affectedRows(); + $dbw->commit(); + $blockStart += $this->mBatchSize; + $blockEnd += $this->mBatchSize; + wfWaitForSlaves( 5 ); + } + $this->output( "Done! $count user(s) in group '$oldGroup' are now in '$newGroup' instead.\n" ); + } +} + +$maintClass = "MigrateUserGroup"; +require_once( DO_MAINTENANCE );