$user = $this->getUser();
$params = $this->extractRequestParams();
- if ( is_null( $params['id'] ) && is_null( $params['user'] ) ) {
- $this->dieUsageMsg( 'unblock-notarget' );
- }
- if ( !is_null( $params['id'] ) && !is_null( $params['user'] ) ) {
- $this->dieUsageMsg( 'unblock-idanduser' );
- }
+ $this->requireOnlyOneParameter( $params, 'id', 'user', 'userid' );
if ( !$user->isAllowed( 'block' ) ) {
- $this->dieUsageMsg( 'cantunblock' );
+ $this->dieWithError( 'apierror-permissiondenied-unblock', 'permissiondenied' );
}
# bug 15810: blocked admins should have limited access here
if ( $user->isBlocked() ) {
$status = SpecialBlock::checkUnblockSelf( $params['user'], $user );
if ( $status !== true ) {
- $msg = $this->parseMsg( $status );
- $this->dieUsage(
- $msg['info'],
- $msg['code'],
- 0,
- array( 'blockinfo' => ApiQueryUserInfo::getBlockInfo( $user->getBlock() ) )
+ $this->dieWithError(
+ $status,
+ null,
+ [ 'blockinfo' => ApiQueryUserInfo::getBlockInfo( $user->getBlock() ) ]
);
}
}
- $data = array(
+ // Check if user can add tags
+ if ( !is_null( $params['tags'] ) ) {
+ $ableToTag = ChangeTags::canAddTagsAccompanyingChange( $params['tags'], $user );
+ if ( !$ableToTag->isOK() ) {
+ $this->dieStatus( $ableToTag );
+ }
+ }
+
+ if ( $params['userid'] !== null ) {
+ $username = User::whoIs( $params['userid'] );
+
+ if ( $username === false ) {
+ $this->dieWithError( [ 'apierror-nosuchuserid', $params['userid'] ], 'nosuchuserid' );
+ } else {
+ $params['user'] = $username;
+ }
+ }
+
+ $data = [
'Target' => is_null( $params['id'] ) ? $params['user'] : "#{$params['id']}",
- 'Reason' => $params['reason']
- );
+ 'Reason' => $params['reason'],
+ 'Tags' => $params['tags']
+ ];
$block = Block::newFromTarget( $data['Target'] );
$retval = SpecialUnblock::processUnblock( $data, $this->getContext() );
if ( $retval !== true ) {
- $this->dieUsageMsg( $retval[0] );
+ $this->dieStatus( $this->errorArrayToStatus( $retval ) );
}
$res['id'] = $block->getId();
}
public function getAllowedParams() {
- return array(
- 'id' => array(
+ return [
+ 'id' => [
ApiBase::PARAM_TYPE => 'integer',
- ),
+ ],
'user' => null,
+ 'userid' => [
+ ApiBase::PARAM_TYPE => 'integer'
+ ],
'reason' => '',
- );
+ 'tags' => [
+ ApiBase::PARAM_TYPE => 'tags',
+ ApiBase::PARAM_ISMULTI => true,
+ ],
+ ];
}
public function needsToken() {
}
protected function getExamplesMessages() {
- return array(
+ return [
'action=unblock&id=105'
=> 'apihelp-unblock-example-id',
'action=unblock&user=Bob&reason=Sorry%20Bob'
=> 'apihelp-unblock-example-user',
- );
+ ];
}
public function getHelpUrls() {