Allow user, language and IP to be passed to UserBlockedError

Accept these objects as params to the UserBlockedError constructor,
since they are used to make the block error message. Pass them from
SpecialPages, Actions and EditPage.

If a caller does not pass all of these params, get them from the
global context as before.

Bug: T234406
Change-Id: Ie8ef047d2710c523b67bfc54fa2ad70fc47c5236
This commit is contained in:
Thalia 2019-09-21 16:05:57 +01:00
parent 644e0727d8
commit 538d333167
8 changed files with 65 additions and 15 deletions

View file

@ -1727,7 +1727,12 @@ class EditPage {
return false;
case self::AS_BLOCKED_PAGE_FOR_USER:
throw new UserBlockedError( $this->context->getUser()->getBlock() );
throw new UserBlockedError(
$this->context->getUser()->getBlock(),
$this->context->getUser(),
$this->context->getLanguage(),
$request->getIP()
);
case self::AS_IMAGE_REDIRECT_ANON:
case self::AS_IMAGE_REDIRECT_LOGGED:

View file

@ -318,7 +318,12 @@ abstract class Action implements MessageLocalizer {
if ( $this->requiresUnblock() && $user->isBlockedFrom( $this->getTitle() ) ) {
$block = $user->getBlock();
if ( $block ) {
throw new UserBlockedError( $block );
throw new UserBlockedError(
$block,
$user,
$this->getLanguage(),
$this->getRequest()->getIP()
);
}
throw new PermissionsError( $this->getName(), [ 'badaccess-group0' ] );

View file

@ -30,15 +30,25 @@ use MediaWiki\MediaWikiServices;
class UserBlockedError extends ErrorPageError {
/**
* @param AbstractBlock $block
* @param User|null $user
* @param Language|null $language
* @param string|null $ip
*/
public function __construct( AbstractBlock $block ) {
// @todo FIXME: Implement a more proper way to get context here
// such as passing the user, language and IP from the caller.
$context = RequestContext::getMain();
$user = $context->getUser();
$language = $context->getLanguage();
$ip = $context->getRequest()->getIp();
public function __construct(
AbstractBlock $block,
User $user = null,
Language $language = null,
$ip = null
) {
if ( $user === null || $language === null || $ip === null ) {
// If any of these are not passed in, use the global context
$context = RequestContext::getMain();
$user = $context->getUser();
$language = $context->getLanguage();
$ip = $context->getRequest()->getIp();
}
// @todo This should be passed in via the constructor
$message = MediaWikiServices::getInstance()->getBlockErrorFormatter()
->getMessage( $block, $user, $language, $ip );
parent::__construct( 'blockedtitle', $message );

View file

@ -209,7 +209,12 @@ abstract class FormSpecialPage extends SpecialPage {
if ( $this->requiresUnblock() ) {
$block = $user->getBlock();
if ( $block && $block->isSitewide() ) {
throw new UserBlockedError( $block );
throw new UserBlockedError(
$block,
$user,
$this->getLanguage(),
$this->getRequest()->getIP()
);
}
}

View file

@ -140,7 +140,12 @@ class SpecialEditTags extends UnlistedSpecialPage {
// Check blocks
if ( $this->permissionManager->isBlockedFrom( $user, $this->targetObj ) ) {
throw new UserBlockedError( $user->getBlock() );
throw new UserBlockedError(
$user->getBlock(),
$user,
$this->getLanguage(),
$request->getIP()
);
}
// Give a link to the logs/hist for this page

View file

@ -186,7 +186,12 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
// Check blocks
if ( $this->permissionManager->isBlockedFrom( $user, $this->targetObj ) ) {
throw new UserBlockedError( $user->getBlock() );
throw new UserBlockedError(
$user->getBlock(),
$user,
$this->getLanguage(),
$request->getIP()
);
}
$this->typeLabels = self::UI_LABELS[$this->typeName];

View file

@ -177,12 +177,22 @@ class SpecialUpload extends SpecialPage {
# Check blocks
if ( $user->isBlockedFromUpload() ) {
throw new UserBlockedError( $user->getBlock() );
throw new UserBlockedError(
$user->getBlock(),
$user,
$this->getLanguage(),
$this->getRequest()->getIP()
);
}
// Global blocks
if ( $user->isBlockedGlobally() ) {
throw new UserBlockedError( $user->getGlobalBlock() );
throw new UserBlockedError(
$user->getGlobalBlock(),
$user,
$this->getLanguage(),
$this->getRequest()->getIP()
);
}
# Check whether we actually want to allow changing stuff

View file

@ -169,7 +169,12 @@ class UserrightsPage extends SpecialPage {
) {
$block = $user->getBlock();
if ( $block && $block->isSitewide() ) {
throw new UserBlockedError( $block );
throw new UserBlockedError(
$block,
$user,
$this->getLanguage(),
$request->getIP()
);
}
}