[ Index ] |
PHP Cross Reference of MediaWiki-1.24.0 |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * Backend functions for suppressing and unsuppressing all references to a given user. 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation; either version 2 of the License, or 8 * (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License along 16 * with this program; if not, write to the Free Software Foundation, Inc., 17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 18 * http://www.gnu.org/copyleft/gpl.html 19 * 20 * @file 21 * @ingroup RevisionDelete 22 */ 23 24 /** 25 * Backend functions for suppressing and unsuppressing all references to a given user, 26 * used when blocking with HideUser enabled. This was spun out of SpecialBlockip.php 27 * in 1.18; at some point it needs to be rewritten to either use RevisionDelete abstraction, 28 * or at least schema abstraction. 29 * 30 * @ingroup RevisionDelete 31 */ 32 class RevisionDeleteUser { 33 34 /** 35 * Update *_deleted bitfields in various tables to hide or unhide usernames 36 * @param string $name Username 37 * @param int $userId User id 38 * @param string $op Operator '|' or '&' 39 * @param null|DatabaseBase $dbw If you happen to have one lying around 40 * @return bool 41 */ 42 private static function setUsernameBitfields( $name, $userId, $op, $dbw ) { 43 if ( !$userId || ( $op !== '|' && $op !== '&' ) ) { 44 return false; // sanity check 45 } 46 if ( !$dbw instanceof DatabaseBase ) { 47 $dbw = wfGetDB( DB_MASTER ); 48 } 49 50 # To suppress, we OR the current bitfields with Revision::DELETED_USER 51 # to put a 1 in the username *_deleted bit. To unsuppress we AND the 52 # current bitfields with the inverse of Revision::DELETED_USER. The 53 # username bit is made to 0 (x & 0 = 0), while others are unchanged (x & 1 = x). 54 # The same goes for the sysop-restricted *_deleted bit. 55 $delUser = Revision::DELETED_USER | Revision::DELETED_RESTRICTED; 56 $delAction = LogPage::DELETED_ACTION | Revision::DELETED_RESTRICTED; 57 if ( $op == '&' ) { 58 $delUser = $dbw->bitNot( $delUser ); 59 $delAction = $dbw->bitNot( $delAction ); 60 } 61 62 # Normalize user name 63 $userTitle = Title::makeTitleSafe( NS_USER, $name ); 64 $userDbKey = $userTitle->getDBkey(); 65 66 # Hide name from live edits 67 $dbw->update( 68 'revision', 69 array( self::buildSetBitDeletedField( 'rev_deleted', $op, $delUser, $dbw ) ), 70 array( 'rev_user' => $userId ), 71 __METHOD__ ); 72 73 # Hide name from deleted edits 74 $dbw->update( 75 'archive', 76 array( self::buildSetBitDeletedField( 'ar_deleted', $op, $delUser, $dbw ) ), 77 array( 'ar_user_text' => $name ), 78 __METHOD__ 79 ); 80 81 # Hide name from logs 82 $dbw->update( 83 'logging', 84 array( self::buildSetBitDeletedField( 'log_deleted', $op, $delUser, $dbw ) ), 85 array( 'log_user' => $userId, 'log_type != ' . $dbw->addQuotes( 'suppress' ) ), 86 __METHOD__ 87 ); 88 $dbw->update( 89 'logging', 90 array( self::buildSetBitDeletedField( 'log_deleted', $op, $delAction, $dbw ) ), 91 array( 'log_namespace' => NS_USER, 'log_title' => $userDbKey, 92 'log_type != ' . $dbw->addQuotes( 'suppress' ) ), 93 __METHOD__ 94 ); 95 96 # Hide name from RC 97 $dbw->update( 98 'recentchanges', 99 array( self::buildSetBitDeletedField( 'rc_deleted', $op, $delUser, $dbw ) ), 100 array( 'rc_user_text' => $name ), 101 __METHOD__ 102 ); 103 $dbw->update( 104 'recentchanges', 105 array( self::buildSetBitDeletedField( 'rc_deleted', $op, $delAction, $dbw ) ), 106 array( 'rc_namespace' => NS_USER, 'rc_title' => $userDbKey, 'rc_logid > 0' ), 107 __METHOD__ 108 ); 109 110 # Hide name from live images 111 $dbw->update( 112 'oldimage', 113 array( self::buildSetBitDeletedField( 'oi_deleted', $op, $delUser, $dbw ) ), 114 array( 'oi_user_text' => $name ), 115 __METHOD__ 116 ); 117 118 # Hide name from deleted images 119 $dbw->update( 120 'filearchive', 121 array( self::buildSetBitDeletedField( 'fa_deleted', $op, $delUser, $dbw ) ), 122 array( 'fa_user_text' => $name ), 123 __METHOD__ 124 ); 125 # Done! 126 return true; 127 } 128 129 private static function buildSetBitDeletedField( $field, $op, $value, $dbw ) { 130 return $field . ' = ' . ( $op === '&' 131 ? $dbw->bitAnd( $field, $value ) 132 : $dbw->bitOr( $field, $value ) ); 133 } 134 135 public static function suppressUserName( $name, $userId, $dbw = null ) { 136 return self::setUsernameBitfields( $name, $userId, '|', $dbw ); 137 } 138 139 public static function unsuppressUserName( $name, $userId, $dbw = null ) { 140 return self::setUsernameBitfields( $name, $userId, '&', $dbw ); 141 } 142 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Fri Nov 28 14:03:12 2014 | Cross-referenced by PHPXref 0.7.1 |