/usr/share/mediawiki-extensions/base/Renameuser/RenameUserJob.php is in mediawiki-extensions-base 3.5~deb7u2.
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 89 90 91 92 93 94 95 96 97 98 99 | <?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 );
$table = $this->params['table'];
$column = $this->params['column'];
$oldname = $this->params['oldname'];
$userID = isset( $this->params['userID'] ) ? $this->params['userID'] : null;
$uidColumn = isset( $this->params['uidColumn'] ) ? $this->params['uidColumn'] : null;
$timestampColumn = isset( $this->params['timestampColumn'] ) ? $this->params['timestampColumn'] : null;
$minTimestamp = $this->params['minTimestamp'];
$maxTimestamp = $this->params['maxTimestamp'];
$uniqueKey = isset( $this->params['uniqueKey'] ) ? $this->params['uniqueKey'] : null;
$keyId = isset( $this->params['keyId'] ) ? $this->params['keyId'] : null;
$newname = $this->params['newname'];
$count = $this->params['count'];
# 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)
} elseif ( 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;
}
}
|