block; } /** * Returns true when permissions were denied because the user is blocked. * * @since 1.41 * * @return bool */ public function isBlocked(): bool { return $this->block !== null; } /** * @since 1.37 * @internal * @param Block $block */ public function setBlock( Block $block ): void { $this->block = $block; $this->setOK( false ); } /** * @return static */ public static function newEmpty() { return new static(); } /** * Returns this permission status in legacy error array format. * * @deprecated since 1.43 * @see PermissionManager::getPermissionErrors() * * @return array[] */ public function toLegacyErrorArray(): array { return $this->getStatusArray(); } /** * Call this to indicate that the user is over the rate limit for some action. * @since 1.41 * @internal * Will cause isRateLimited() to return true. */ public function setRateLimitExceeded() { $this->rateLimitExceeded = true; $this->fatal( 'actionthrottledtext' ); } /** * Whether the user is over the rate limit for some action. * @since 1.41 * @return bool True if setRateLimitExceeded() was called. */ public function isRateLimitExceeded(): bool { return $this->rateLimitExceeded; } /** * Sets the name of the permission that is being checked. * * @since 1.41 * @internal * Will cause isRateLimited() to return true. */ public function setPermission( string $permission ) { $this->permission = $permission; } /** * Returns the name of the permission that was being checked. * * @return string|null The permission, if known * @since 1.41 */ public function getPermission(): ?string { return $this->permission; } /** * Will throw an appropriate ErrorPageError if isOK() returns false. * If isOK() returns true, this method does nothing. * * This is a convenience method for use in user interaction code, * such as subclasses of SpecialPage. * * @unstable Introduced in 1.41, but unstable since the future of ErrorPageError is unclear (T281935). * * @throws ErrorPageError * @return void */ public function throwErrorPageError(): void { if ( $this->isOK() ) { return; } $block = $this->getBlock(); if ( $block ) { throw new UserBlockedError( $block ); } if ( $this->isRateLimitExceeded() ) { throw new ThrottledError(); } $messages = $this->getStatusArray( 'error' ); throw new PermissionsError( $this->permission, $messages ); } }