Maintenance script to reassign edits from one user to another

This commit is contained in:
Rob Church 2006-01-26 21:41:40 +00:00
parent ca3bb02b6a
commit 3bda877eb5
3 changed files with 126 additions and 0 deletions

View file

@ -135,6 +135,7 @@ Maintenance:
* Maintenance script to delete unused text records
* Maintenance script to delete non-current revisions
* Maintenance script to wipe a page and all revisions from the database
* Maintenance script to reassign edits from one user to another
i18n / Languages:
* Partial support for Basque language (from wikipedia and meta)

View file

@ -0,0 +1,83 @@
<?php
/**
* Support functions for the reassignEdits script
*
* @package MediaWiki
* @subpackage Maintenance
* @author Rob Church <robchur@gmail.com>
*/
function ReassignEdits( $from, $to ) {
# This stuff needs to come off the master, wrapped in a transaction
$dbw =& wfGetDB( DB_MASTER );
$dbw->begin();
$tbl_arc = $dbw->tableName( 'archive' );
$tbl_rev = $dbw->tableName( 'revision' );
$from_txt = $from['text'];
$to_id = $to['id'];
$to_txt = $to['text'];
echo( "Searching for current revisions..." );
$res = $dbw->query( "SELECT rev_id FROM $tbl_rev WHERE rev_user_text = \"$from_txt\"" );
while( $row = $dbw->fetchObject( $res ) ) {
$cur[] = $row->rev_id;
}
$ccount = count( $cur );
echo( "found $ccount.\n" );
echo( "Searching for deleted revisions..." );
$res = $dbw->query( "SELECT ar_rev_id FROM $tbl_arc WHERE ar_user_text = \"$from_txt\"" );
while( $row = $dbw->fetchObject( $res ) ){
$old[] = $row->ar_rev_id;
}
$ocount = count( $old );
echo( "found $ocount.\n" );
if( $ccount > 0 || $ocount > 0 ) {
echo( "Reassigning edits to $to_txt..." );
}
if( $ccount > 0 ) {
$set = implode( ', ', $cur );
$res = $dbw->query( "UPDATE $tbl_rev SET rev_user = $to_id, rev_user_text = \"$to_txt\" WHERE rev_id IN ( $set )" );
}
if( $ocount > 0 ) {
$set = implode( ', ', $old );
$res = $dbw->query( "UPDATE $tbl_arc SET ar_user = $to_id, ar_user_text = \"$to_txt\" WHERE ar_rev_id IN ( $set )" );
}
if( $ccount > 0 || $ocount > 0 ) {
echo( "done.\n" );
}
$dbw->commit();
return( true );
}
function GetUserDetails( $spec ) {
# IP addresses are quick to handle
if( User::isIP( $spec ) ) {
return( array( 'id' => 0, 'text' => $spec, 'valid' => true ) );
}
# Need to check the user exists and get ID and canonical username
$user = User::newFromName( $spec );
if( $user->getID() ) {
# We have them
return( array( 'id' => $user->getID(), 'text' => $user->getName(), 'valid' => true ) );
} else {
# No such user
return( array( 'id' => 0, 'text' => $spec, 'valid' => false ) );
}
}
?>

View file

@ -0,0 +1,42 @@
<?php
/**
* Reassign edits from a user or IP address to another user
*
* @package MediaWiki
* @subpackage Maintenance
* @author Rob Church <robchur@gmail.com>
*/
$options = array( 'force' );
require_once( 'commandLine.inc' );
require_once( 'reassignEdits.inc' );
echo( "Reassign Edits\n\n" );
if( @$args[0] && @$args[1] ) {
$from = GetUserDetails( $args[0] );
$to = GetUserDetails( $args[1] );
$tor = $args[1];
if( $to['valid'] || @$options['force'] ) {
ReassignEdits( $from, $to );
} else {
echo( "User \"$tor\" not found.\n" );
}
} else {
ShowUsage();
}
/** Show script usage information */
function ShowUsage() {
echo( "Reassign edits from one user to another.\n\n" );
echo( "Usage: php reassignEdits.php <from> <to> [--force]\n\n" );
echo( " <from> : Name of the user to assign edits from\n" );
echo( " <to> : Name of the user to assign edits to\n" );
echo( " --force : Reassign even if the target user doesn't exist\n\n" );
}
?>