/usr/share/mediawiki-extensions/base/Renameuser/RenameUserJob.php is in mediawiki-extensions-base 2.5.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | <?php
/**
* Custom job to perform updates on tables in busier environments
*/
class RenameUserJob extends Job {
/**
* Constructor
*
* @param Title $title Associated title
* @param array $params Job parameters
*/
public function __construct( $title, $params ) {
parent::__construct( 'renameUser', $title, $params );
}
/**
* Execute the job
*
* @return bool
*/
public function run() {
$dbw = wfGetDB( DB_MASTER );
extract( $this->params );
# Conditions like "*_user_text = 'x'
$conds = array( $column => $oldname );
# If user ID given, add that to condition to avoid rename collisions.
if( isset($userID) ) {
$conds[$uidColumn] = $userID;
}
# Bound by timestamp if given
if( isset($timestampColumn) ) {
$conds[] = "$timestampColumn >= '$minTimestamp'";
$conds[] = "$timestampColumn <= '$maxTimestamp'";
# Otherwise, bound by key (B/C)
} else if( isset($uniqueKey) ) {
$conds[$uniqueKey] = $keyId;
} else {
wfDebug( 'RenameUserJob::run - invalid job row given' ); // this shouldn't happen
return false;
}
# Update a chuck of rows!
$dbw->update( $table,
array( $column => $newname ),
$conds,
__METHOD__
);
# Special case: revisions may be deleted while renaming...
if( $table == 'revision' && isset($timestampColumn) ) {
$actual = $dbw->affectedRows();
# If some revisions were not renamed, they may have been deleted.
# Do a pass on the archive table to get these straglers...
if( $actual < $count ) {
$dbw->update( 'archive',
array( 'ar_user_text' => $newname ),
array( 'ar_user_text' => $oldname,
'ar_user' => $userID,
// No user,rev_id index, so use timestamp to bound
// the rows. This can use the user,timestamp index.
"ar_timestamp >= '$minTimestamp'",
"ar_timestamp <= '$maxTimestamp'"),
__METHOD__
);
}
}
# Special case: revisions may be restored while renaming...
if( $table == 'archive' && isset($timestampColumn) ) {
$actual = $dbw->affectedRows();
# If some revisions were not renamed, they may have been restored.
# Do a pass on the revision table to get these straglers...
if( $actual < $count ) {
$dbw->update( 'revision',
array( 'rev_user_text' => $newname ),
array( 'rev_user_text' => $oldname,
'rev_user' => $userID,
// No user,rev_id index, so use timestamp to bound
// the rows. This can use the user,timestamp index.
"rev_timestamp >= '$minTimestamp'",
"rev_timestamp <= '$maxTimestamp'"),
__METHOD__
);
}
}
return true;
}
}
|