[ Index ] |
PHP Cross Reference of MediaWiki-1.24.0 |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * Implements Special:Unblock 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 SpecialPage 22 */ 23 24 /** 25 * A special page for unblocking users 26 * 27 * @ingroup SpecialPage 28 */ 29 class SpecialUnblock extends SpecialPage { 30 31 protected $target; 32 protected $type; 33 protected $block; 34 35 public function __construct() { 36 parent::__construct( 'Unblock', 'block' ); 37 } 38 39 public function execute( $par ) { 40 $this->checkPermissions(); 41 $this->checkReadOnly(); 42 43 list( $this->target, $this->type ) = SpecialBlock::getTargetAndType( $par, $this->getRequest() ); 44 $this->block = Block::newFromTarget( $this->target ); 45 if ( $this->target instanceof User ) { 46 # Set the 'relevant user' in the skin, so it displays links like Contributions, 47 # User logs, UserRights, etc. 48 $this->getSkin()->setRelevantUser( $this->target ); 49 } 50 51 $this->setHeaders(); 52 $this->outputHeader(); 53 54 $out = $this->getOutput(); 55 $out->setPageTitle( $this->msg( 'unblockip' ) ); 56 $out->addModules( 'mediawiki.special' ); 57 58 $form = new HTMLForm( $this->getFields(), $this->getContext() ); 59 $form->setWrapperLegendMsg( 'unblockip' ); 60 $form->setSubmitCallback( array( __CLASS__, 'processUIUnblock' ) ); 61 $form->setSubmitTextMsg( 'ipusubmit' ); 62 $form->addPreText( $this->msg( 'unblockiptext' )->parseAsBlock() ); 63 64 if ( $form->show() ) { 65 switch ( $this->type ) { 66 case Block::TYPE_IP: 67 $out->addWikiMsg( 'unblocked-ip', wfEscapeWikiText( $this->target ) ); 68 break; 69 case Block::TYPE_USER: 70 $out->addWikiMsg( 'unblocked', wfEscapeWikiText( $this->target ) ); 71 break; 72 case Block::TYPE_RANGE: 73 $out->addWikiMsg( 'unblocked-range', wfEscapeWikiText( $this->target ) ); 74 break; 75 case Block::TYPE_ID: 76 case Block::TYPE_AUTO: 77 $out->addWikiMsg( 'unblocked-id', wfEscapeWikiText( $this->target ) ); 78 break; 79 } 80 } 81 } 82 83 protected function getFields() { 84 $fields = array( 85 'Target' => array( 86 'type' => 'text', 87 'label-message' => 'ipaddressorusername', 88 'autofocus' => true, 89 'size' => '45', 90 'required' => true, 91 ), 92 'Name' => array( 93 'type' => 'info', 94 'label-message' => 'ipaddressorusername', 95 ), 96 'Reason' => array( 97 'type' => 'text', 98 'label-message' => 'ipbreason', 99 ) 100 ); 101 102 if ( $this->block instanceof Block ) { 103 list( $target, $type ) = $this->block->getTargetAndType(); 104 105 # Autoblocks are logged as "autoblock #123 because the IP was recently used by 106 # User:Foo, and we've just got any block, auto or not, that applies to a target 107 # the user has specified. Someone could be fishing to connect IPs to autoblocks, 108 # so don't show any distinction between unblocked IPs and autoblocked IPs 109 if ( $type == Block::TYPE_AUTO && $this->type == Block::TYPE_IP ) { 110 $fields['Target']['default'] = $this->target; 111 unset( $fields['Name'] ); 112 } else { 113 $fields['Target']['default'] = $target; 114 $fields['Target']['type'] = 'hidden'; 115 switch ( $type ) { 116 case Block::TYPE_IP: 117 $fields['Name']['default'] = Linker::linkKnown( 118 SpecialPage::getTitleFor( 'Contributions', $target->getName() ), 119 $target->getName() 120 ); 121 $fields['Name']['raw'] = true; 122 break; 123 case Block::TYPE_USER: 124 $fields['Name']['default'] = Linker::link( 125 $target->getUserPage(), 126 $target->getName() 127 ); 128 $fields['Name']['raw'] = true; 129 break; 130 131 case Block::TYPE_RANGE: 132 $fields['Name']['default'] = $target; 133 break; 134 135 case Block::TYPE_AUTO: 136 $fields['Name']['default'] = $this->block->getRedactedName(); 137 $fields['Name']['raw'] = true; 138 # Don't expose the real target of the autoblock 139 $fields['Target']['default'] = "#{$this->target}"; 140 break; 141 } 142 // target is hidden, so the reason is the first element 143 $fields['Target']['autofocus'] = false; 144 $fields['Reason']['autofocus'] = true; 145 } 146 } else { 147 $fields['Target']['default'] = $this->target; 148 unset( $fields['Name'] ); 149 } 150 151 return $fields; 152 } 153 154 /** 155 * Submit callback for an HTMLForm object 156 * @param array $data 157 * @param HTMLForm $form 158 * @return array|bool Array(message key, parameters) 159 */ 160 public static function processUIUnblock( array $data, HTMLForm $form ) { 161 return self::processUnblock( $data, $form->getContext() ); 162 } 163 164 /** 165 * Process the form 166 * 167 * @param array $data 168 * @param IContextSource $context 169 * @throws ErrorPageError 170 * @return array|bool Array(message key, parameters) on failure, True on success 171 */ 172 public static function processUnblock( array $data, IContextSource $context ) { 173 $performer = $context->getUser(); 174 $target = $data['Target']; 175 $block = Block::newFromTarget( $data['Target'] ); 176 177 if ( !$block instanceof Block ) { 178 return array( array( 'ipb_cant_unblock', $target ) ); 179 } 180 181 # bug 15810: blocked admins should have limited access here. This 182 # won't allow sysops to remove autoblocks on themselves, but they 183 # should have ipblock-exempt anyway 184 $status = SpecialBlock::checkUnblockSelf( $target, $performer ); 185 if ( $status !== true ) { 186 throw new ErrorPageError( 'badaccess', $status ); 187 } 188 189 # If the specified IP is a single address, and the block is a range block, don't 190 # unblock the whole range. 191 list( $target, $type ) = SpecialBlock::getTargetAndType( $target ); 192 if ( $block->getType() == Block::TYPE_RANGE && $type == Block::TYPE_IP ) { 193 $range = $block->getTarget(); 194 195 return array( array( 'ipb_blocked_as_range', $target, $range ) ); 196 } 197 198 # If the name was hidden and the blocking user cannot hide 199 # names, then don't allow any block removals... 200 if ( !$performer->isAllowed( 'hideuser' ) && $block->mHideName ) { 201 return array( 'unblock-hideuser' ); 202 } 203 204 # Delete block 205 if ( !$block->delete() ) { 206 return array( 'ipb_cant_unblock', htmlspecialchars( $block->getTarget() ) ); 207 } 208 209 # Unset _deleted fields as needed 210 if ( $block->mHideName ) { 211 # Something is deeply FUBAR if this is not a User object, but who knows? 212 $id = $block->getTarget() instanceof User 213 ? $block->getTarget()->getID() 214 : User::idFromName( $block->getTarget() ); 215 216 RevisionDeleteUser::unsuppressUserName( $block->getTarget(), $id ); 217 } 218 219 # Redact the name (IP address) for autoblocks 220 if ( $block->getType() == Block::TYPE_AUTO ) { 221 $page = Title::makeTitle( NS_USER, '#' . $block->getId() ); 222 } else { 223 $page = $block->getTarget() instanceof User 224 ? $block->getTarget()->getUserpage() 225 : Title::makeTitle( NS_USER, $block->getTarget() ); 226 } 227 228 # Make log entry 229 $log = new LogPage( 'block' ); 230 $log->addEntry( 'unblock', $page, $data['Reason'], array(), $performer ); 231 232 return true; 233 } 234 235 protected function getGroupName() { 236 return 'users'; 237 } 238 }
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 |