X-Git-Url: https://scripts.mit.edu/gitweb/autoinstallsdev/mediawiki.git/blobdiff_plain/19e297c21b10b1b8a3acad5e73fc71dcb35db44a..6932310fd58ebef145fa01eb76edf7150284d8ea:/includes/api/ApiUnblock.php diff --git a/includes/api/ApiUnblock.php b/includes/api/ApiUnblock.php index 45d951e6..887edaae 100644 --- a/includes/api/ApiUnblock.php +++ b/includes/api/ApiUnblock.php @@ -1,10 +1,10 @@ .@home.nl + * Copyright © 2007 Roan Kattouw ".@gmail.com" * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -24,11 +24,6 @@ * @file */ -if ( !defined( 'MEDIAWIKI' ) ) { - // Eclipse helper - will be ignored in production - require_once( "ApiBase.php" ); -} - /** * API module that facilitates the unblocking of users. Requires API write mode * to be enabled. @@ -37,52 +32,64 @@ if ( !defined( 'MEDIAWIKI' ) ) { */ class ApiUnblock extends ApiBase { - public function __construct( $main, $action ) { - parent::__construct( $main, $action ); - } - /** * Unblocks the specified user or provides the reason the unblock failed. */ public function execute() { - global $wgUser; + $user = $this->getUser(); $params = $this->extractRequestParams(); - if ( $params['gettoken'] ) { - $res['unblocktoken'] = $wgUser->editToken(); - $this->getResult()->addValue( null, $this->getModuleName(), $res ); - return; - } + $this->requireOnlyOneParameter( $params, 'id', 'user', 'userid' ); - if ( is_null( $params['id'] ) && is_null( $params['user'] ) ) { - $this->dieUsageMsg( array( 'unblock-notarget' ) ); + if ( !$user->isAllowed( 'block' ) ) { + $this->dieWithError( 'apierror-permissiondenied-unblock', 'permissiondenied' ); } - if ( !is_null( $params['id'] ) && !is_null( $params['user'] ) ) { - $this->dieUsageMsg( array( 'unblock-idanduser' ) ); + # T17810: blocked admins should have limited access here + if ( $user->isBlocked() ) { + $status = SpecialBlock::checkUnblockSelf( $params['user'], $user ); + if ( $status !== true ) { + $this->dieWithError( + $status, + null, + [ 'blockinfo' => ApiQueryUserInfo::getBlockInfo( $user->getBlock() ) ] + ); + } } - if ( !$wgUser->isAllowed( 'block' ) ) { - $this->dieUsageMsg( array( 'cantunblock' ) ); + // Check if user can add tags + if ( !is_null( $params['tags'] ) ) { + $ableToTag = ChangeTags::canAddTagsAccompanyingChange( $params['tags'], $user ); + if ( !$ableToTag->isOK() ) { + $this->dieStatus( $ableToTag ); + } } - # bug 15810: blocked admins should have limited access here - if ( $wgUser->isBlocked() ) { - $status = IPBlockForm::checkUnblockSelf( $params['user'] ); - if ( $status !== true ) { - $this->dieUsageMsg( array( $status ) ); + + if ( $params['userid'] !== null ) { + $username = User::whoIs( $params['userid'] ); + + if ( $username === false ) { + $this->dieWithError( [ 'apierror-nosuchuserid', $params['userid'] ], 'nosuchuserid' ); + } else { + $params['user'] = $username; } } - $id = $params['id']; - $user = $params['user']; - $reason = ( is_null( $params['reason'] ) ? '' : $params['reason'] ); - $retval = IPUnblockForm::doUnblock( $id, $user, $reason, $range ); - if ( $retval ) { - $this->dieUsageMsg( $retval ); + $data = [ + 'Target' => is_null( $params['id'] ) ? $params['user'] : "#{$params['id']}", + 'Reason' => $params['reason'], + 'Tags' => $params['tags'] + ]; + $block = Block::newFromTarget( $data['Target'] ); + $retval = SpecialUnblock::processUnblock( $data, $this->getContext() ); + if ( $retval !== true ) { + $this->dieStatus( $this->errorArrayToStatus( $retval ) ); } - $res['id'] = intval( $id ); - $res['user'] = $user; - $res['reason'] = $reason; + $res['id'] = $block->getId(); + $target = $block->getType() == Block::TYPE_AUTO ? '' : $block->getTarget(); + $res['user'] = $target instanceof User ? $target->getName() : $target; + $res['userid'] = $target instanceof User ? $target->getId() : 0; + $res['reason'] = $params['reason']; $this->getResult()->addValue( null, $this->getModuleName(), $res ); } @@ -95,56 +102,36 @@ class ApiUnblock extends ApiBase { } public function getAllowedParams() { - return array( - 'id' => null, + return [ + 'id' => [ + ApiBase::PARAM_TYPE => 'integer', + ], 'user' => null, - 'token' => null, - 'gettoken' => false, - 'reason' => null, - ); - } - - public function getParamDescription() { - $p = $this->getModulePrefix(); - return array( - 'id' => "ID of the block you want to unblock (obtained through list=blocks). Cannot be used together with {$p}user", - 'user' => "Username, IP address or IP range you want to unblock. Cannot be used together with {$p}id", - 'token' => "An unblock token previously obtained through the gettoken parameter or {$p}prop=info", - 'gettoken' => 'If set, an unblock token will be returned, and no other action will be taken', - 'reason' => 'Reason for unblock (optional)', - ); - } - - public function getDescription() { - return 'Unblock a user'; - } - - public function getPossibleErrors() { - return array_merge( parent::getPossibleErrors(), array( - array( 'unblock-notarget' ), - array( 'unblock-idanduser' ), - array( 'cantunblock' ), - array( 'ipbblocked' ), - array( 'ipbnounblockself' ), - ) ); + 'userid' => [ + ApiBase::PARAM_TYPE => 'integer' + ], + 'reason' => '', + 'tags' => [ + ApiBase::PARAM_TYPE => 'tags', + ApiBase::PARAM_ISMULTI => true, + ], + ]; } public function needsToken() { - return true; - } - - public function getTokenSalt() { - return ''; + return 'csrf'; } - protected function getExamples() { - return array( - 'api.php?action=unblock&id=105', - 'api.php?action=unblock&user=Bob&reason=Sorry%20Bob' - ); + protected function getExamplesMessages() { + return [ + 'action=unblock&id=105' + => 'apihelp-unblock-example-id', + 'action=unblock&user=Bob&reason=Sorry%20Bob' + => 'apihelp-unblock-example-user', + ]; } - public function getVersion() { - return __CLASS__ . ': $Id$'; + public function getHelpUrls() { + return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Block'; } }