X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;ds=sidebyside;f=includes%2Frevisiondelete%2FRevisionDeleteUser.php;h=6291e8d91e03619f0f44c6967f5eb5b9ac7d1cec;hb=a2c8c2969420a0f150c03f76e3a0bf9028fcda43;hp=79802d66e4f543e2d2fc898f5ecf72daea828a75;hpb=32d0ab4d4fe046f726fbc9ce4351076908c70a31;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/revisiondelete/RevisionDeleteUser.php b/includes/revisiondelete/RevisionDeleteUser.php index 79802d66e4..6291e8d91e 100644 --- a/includes/revisiondelete/RevisionDeleteUser.php +++ b/includes/revisiondelete/RevisionDeleteUser.php @@ -21,6 +21,8 @@ * @ingroup RevisionDelete */ +use Wikimedia\Rdbms\IDatabase; + /** * Backend functions for suppressing and unsuppressing all references to a given user, * used when blocking with HideUser enabled. This was spun out of SpecialBlockip.php @@ -40,6 +42,8 @@ class RevisionDeleteUser { * @return bool */ private static function setUsernameBitfields( $name, $userId, $op, $dbw ) { + global $wgActorTableSchemaMigrationStage; + if ( !$userId || ( $op !== '|' && $op !== '&' ) ) { return false; // sanity check } @@ -63,65 +67,127 @@ class RevisionDeleteUser { $userTitle = Title::makeTitleSafe( NS_USER, $name ); $userDbKey = $userTitle->getDBkey(); - # Hide name from live edits - $dbw->update( - 'revision', - array( self::buildSetBitDeletedField( 'rev_deleted', $op, $delUser, $dbw ) ), - array( 'rev_user' => $userId ), - __METHOD__ ); + if ( $wgActorTableSchemaMigrationStage < MIGRATION_NEW ) { + # Hide name from live edits + $dbw->update( + 'revision', + [ self::buildSetBitDeletedField( 'rev_deleted', $op, $delUser, $dbw ) ], + [ 'rev_user' => $userId ], + __METHOD__ ); - # Hide name from deleted edits - $dbw->update( - 'archive', - array( self::buildSetBitDeletedField( 'ar_deleted', $op, $delUser, $dbw ) ), - array( 'ar_user_text' => $name ), - __METHOD__ - ); + # Hide name from deleted edits + $dbw->update( + 'archive', + [ self::buildSetBitDeletedField( 'ar_deleted', $op, $delUser, $dbw ) ], + [ 'ar_user_text' => $name ], + __METHOD__ + ); - # Hide name from logs - $dbw->update( - 'logging', - array( self::buildSetBitDeletedField( 'log_deleted', $op, $delUser, $dbw ) ), - array( 'log_user' => $userId, 'log_type != ' . $dbw->addQuotes( 'suppress' ) ), - __METHOD__ - ); + # Hide name from logs + $dbw->update( + 'logging', + [ self::buildSetBitDeletedField( 'log_deleted', $op, $delUser, $dbw ) ], + [ 'log_user' => $userId, 'log_type != ' . $dbw->addQuotes( 'suppress' ) ], + __METHOD__ + ); + + # Hide name from RC + $dbw->update( + 'recentchanges', + [ self::buildSetBitDeletedField( 'rc_deleted', $op, $delUser, $dbw ) ], + [ 'rc_user_text' => $name ], + __METHOD__ + ); + + # Hide name from live images + $dbw->update( + 'oldimage', + [ self::buildSetBitDeletedField( 'oi_deleted', $op, $delUser, $dbw ) ], + [ 'oi_user_text' => $name ], + __METHOD__ + ); + + # Hide name from deleted images + $dbw->update( + 'filearchive', + [ self::buildSetBitDeletedField( 'fa_deleted', $op, $delUser, $dbw ) ], + [ 'fa_user_text' => $name ], + __METHOD__ + ); + } + + if ( $wgActorTableSchemaMigrationStage > MIGRATION_OLD ) { + $actorId = $dbw->selectField( 'actor', 'actor_id', [ 'actor_name' => $name ], __METHOD__ ); + if ( $actorId ) { + # Hide name from live edits + $subquery = $dbw->selectSQLText( + 'revision_actor_temp', 'revactor_rev', [ 'revactor_actor' => $actorId ], __METHOD__ + ); + $dbw->update( + 'revision', + [ self::buildSetBitDeletedField( 'rev_deleted', $op, $delUser, $dbw ) ], + [ "rev_id IN ($subquery)" ], + __METHOD__ ); + + # Hide name from deleted edits + $dbw->update( + 'archive', + [ self::buildSetBitDeletedField( 'ar_deleted', $op, $delUser, $dbw ) ], + [ 'ar_actor' => $actorId ], + __METHOD__ + ); + + # Hide name from logs + $dbw->update( + 'logging', + [ self::buildSetBitDeletedField( 'log_deleted', $op, $delUser, $dbw ) ], + [ 'log_actor' => $actorId, 'log_type != ' . $dbw->addQuotes( 'suppress' ) ], + __METHOD__ + ); + + # Hide name from RC + $dbw->update( + 'recentchanges', + [ self::buildSetBitDeletedField( 'rc_deleted', $op, $delUser, $dbw ) ], + [ 'rc_actor' => $actorId ], + __METHOD__ + ); + + # Hide name from live images + $dbw->update( + 'oldimage', + [ self::buildSetBitDeletedField( 'oi_deleted', $op, $delUser, $dbw ) ], + [ 'oi_actor' => $actorId ], + __METHOD__ + ); + + # Hide name from deleted images + $dbw->update( + 'filearchive', + [ self::buildSetBitDeletedField( 'fa_deleted', $op, $delUser, $dbw ) ], + [ 'fa_actor' => $actorId ], + __METHOD__ + ); + } + } + + # Hide log entries pointing to the user page $dbw->update( 'logging', - array( self::buildSetBitDeletedField( 'log_deleted', $op, $delAction, $dbw ) ), - array( 'log_namespace' => NS_USER, 'log_title' => $userDbKey, - 'log_type != ' . $dbw->addQuotes( 'suppress' ) ), + [ self::buildSetBitDeletedField( 'log_deleted', $op, $delAction, $dbw ) ], + [ 'log_namespace' => NS_USER, 'log_title' => $userDbKey, + 'log_type != ' . $dbw->addQuotes( 'suppress' ) ], __METHOD__ ); - # Hide name from RC - $dbw->update( - 'recentchanges', - array( self::buildSetBitDeletedField( 'rc_deleted', $op, $delUser, $dbw ) ), - array( 'rc_user_text' => $name ), - __METHOD__ - ); + # Hide RC entries pointing to the user page $dbw->update( 'recentchanges', - array( self::buildSetBitDeletedField( 'rc_deleted', $op, $delAction, $dbw ) ), - array( 'rc_namespace' => NS_USER, 'rc_title' => $userDbKey, 'rc_logid > 0' ), - __METHOD__ - ); - - # Hide name from live images - $dbw->update( - 'oldimage', - array( self::buildSetBitDeletedField( 'oi_deleted', $op, $delUser, $dbw ) ), - array( 'oi_user_text' => $name ), + [ self::buildSetBitDeletedField( 'rc_deleted', $op, $delAction, $dbw ) ], + [ 'rc_namespace' => NS_USER, 'rc_title' => $userDbKey, 'rc_logid > 0' ], __METHOD__ ); - # Hide name from deleted images - $dbw->update( - 'filearchive', - array( self::buildSetBitDeletedField( 'fa_deleted', $op, $delUser, $dbw ) ), - array( 'fa_user_text' => $name ), - __METHOD__ - ); # Done! return true; }