X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=blobdiff_plain;f=includes%2Fapi%2FApiBase.php;h=4898385cfc12e7db63294d9f558f274db99d25fb;hp=21e20c27f96f394e90427c137e40dc47c5e41ad5;hb=4691389fa46f79cbeaf2daffda407cf7daa66fd4;hpb=1404a1f6bf6065035e74c287951b1c2126f11e55 diff --git a/includes/api/ApiBase.php b/includes/api/ApiBase.php index 21e20c27f9..4898385cfc 100644 --- a/includes/api/ApiBase.php +++ b/includes/api/ApiBase.php @@ -271,6 +271,14 @@ abstract class ApiBase extends ContextSource { /** @var int[][][] Cache for self::filterIDs() */ private static $filterIDsCache = []; + /** $var array Map of web UI block messages to corresponding API messages and codes */ + private static $blockMsgMap = [ + 'blockedtext' => [ 'apierror-blocked', 'blocked' ], + 'blockedtext-partial' => [ 'apierror-blocked', 'blocked' ], + 'autoblockedtext' => [ 'apierror-autoblocked', 'autoblocked' ], + 'systemblockedtext' => [ 'apierror-systemblocked', 'blocked' ], + ]; + /** @var ApiMain */ private $mMainModule; /** @var string */ @@ -1274,7 +1282,7 @@ abstract class ApiBase extends ContextSource { } } } else { - $value = intval( $value ); + $value = (int)$value; if ( !is_null( $min ) || !is_null( $max ) ) { $this->validateLimit( $paramName, $value, $min, $max, null, $enforceLimits ); } @@ -1303,7 +1311,7 @@ abstract class ApiBase extends ContextSource { : $paramSettings[self::PARAM_MAX]; $this->getResult()->addParsedLimit( $this->getModuleName(), $value ); } else { - $value = intval( $value ); + $value = (int)$value; $this->validateLimit( $paramName, $value, @@ -1797,28 +1805,9 @@ abstract class ApiBase extends ContextSource { $status = Status::newGood(); foreach ( $errors as $error ) { - if ( is_array( $error ) && $error[0] === 'blockedtext' && $user->getBlock() ) { - $status->fatal( ApiMessage::create( - 'apierror-blocked', - 'blocked', - [ 'blockinfo' => ApiQueryUserInfo::getBlockInfo( $user->getBlock() ) ] - ) ); - } elseif ( is_array( $error ) && $error[0] === 'blockedtext-partial' && $user->getBlock() ) { - $status->fatal( ApiMessage::create( - 'apierror-blocked-partial', - 'blocked', - [ 'blockinfo' => ApiQueryUserInfo::getBlockInfo( $user->getBlock() ) ] - ) ); - } elseif ( is_array( $error ) && $error[0] === 'autoblockedtext' && $user->getBlock() ) { - $status->fatal( ApiMessage::create( - 'apierror-autoblocked', - 'autoblocked', - [ 'blockinfo' => ApiQueryUserInfo::getBlockInfo( $user->getBlock() ) ] - ) ); - } elseif ( is_array( $error ) && $error[0] === 'systemblockedtext' && $user->getBlock() ) { - $status->fatal( ApiMessage::create( - 'apierror-systemblocked', - 'blocked', + if ( is_array( $error ) && isset( self::$blockMsgMap[$error[0]] ) && $user->getBlock() ) { + list( $msg, $code ) = self::$blockMsgMap[$error[0]]; + $status->fatal( ApiMessage::create( $msg, $code, [ 'blockinfo' => ApiQueryUserInfo::getBlockInfo( $user->getBlock() ) ] ) ); } else { @@ -1828,6 +1817,26 @@ abstract class ApiBase extends ContextSource { return $status; } + /** + * Add block info to block messages in a Status + * @since 1.33 + * @param StatusValue $status + * @param User|null $user + */ + public function addBlockInfoToStatus( StatusValue $status, User $user = null ) { + if ( $user === null ) { + $user = $this->getUser(); + } + + foreach ( self::$blockMsgMap as $msg => list( $apiMsg, $code ) ) { + if ( $status->hasMessage( $msg ) && $user->getBlock() ) { + $status->replaceMessage( $msg, ApiMessage::create( $apiMsg, $code, + [ 'blockinfo' => ApiQueryUserInfo::getBlockInfo( $user->getBlock() ) ] + ) ); + } + } + } + /** * Call wfTransactionalTimeLimit() if this request was POSTed * @since 1.26 @@ -2065,6 +2074,7 @@ abstract class ApiBase extends ContextSource { $status = $newStatus; } + $this->addBlockInfoToStatus( $status ); throw new ApiUsageException( $this, $status ); } @@ -2102,15 +2112,21 @@ abstract class ApiBase extends ContextSource { /** * Helper function for permission-denied errors * @since 1.29 + * @since 1.33 Changed the third parameter from $user to $options. * @param Title $title * @param string|string[] $actions - * @param User|null $user + * @param array $options Additional options + * - user: (User) User to use rather than $this->getUser() + * - autoblock: (bool, default false) Whether to spread autoblocks + * For compatibility, passing a User object is treated as the value for the 'user' option. * @throws ApiUsageException if the user doesn't have all of the rights. */ - public function checkTitleUserPermissions( Title $title, $actions, $user = null ) { - if ( !$user ) { - $user = $this->getUser(); + public function checkTitleUserPermissions( Title $title, $actions, $options = [] ) { + if ( !is_array( $options ) ) { + wfDeprecated( '$user as the third parameter to ' . __METHOD__, '1.33' ); + $options = [ 'user' => $options ]; } + $user = $options['user'] ?? $this->getUser(); $errors = []; foreach ( (array)$actions as $action ) { @@ -2123,6 +2139,10 @@ abstract class ApiBase extends ContextSource { $this->trackBlockNotices( $errors ); } + if ( !empty( $options['autoblock'] ) ) { + $user->spreadAnyEditBlock(); + } + $this->dieStatus( $this->errorArrayToStatus( $errors, $user ) ); } }