X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FAction.php;h=fd4a0a6e2349fbec7d57201badfa0589bb919d59;hb=fd03a2922af901d5c12e1039aed84647efd757f6;hp=e836098870a2ebe0c65d3ba30fd2128cb604046f;hpb=f7ae0b261dc4f22b381c505d7d7aa8c380655ccf;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/Action.php b/includes/Action.php index e836098870..fd4a0a6e23 100644 --- a/includes/Action.php +++ b/includes/Action.php @@ -23,7 +23,7 @@ * * @file */ -abstract class Action { +abstract class Action extends ContextSource { /** * Page on which we're performing the action @@ -32,8 +32,8 @@ abstract class Action { protected $page; /** - * RequestContext if specified; otherwise we'll use the Context from the Page - * @var RequestContext + * IContextSource if specified; otherwise we'll use the Context from the Page + * @var IContextSource */ protected $context; @@ -95,70 +95,6 @@ abstract class Action { return self::getClass( $name, array() ) !== null; } - /** - * Get the RequestContext in use here - * @return RequestContext - */ - protected final function getContext() { - if ( $this->context instanceof RequestContext ) { - return $this->context; - } - return $this->page->getContext(); - } - - /** - * Get the WebRequest being used for this instance - * - * @return WebRequest - */ - protected final function getRequest() { - return $this->getContext()->getRequest(); - } - - /** - * Get the OutputPage being used for this instance - * - * @return OutputPage - */ - protected final function getOutput() { - return $this->getContext()->getOutput(); - } - - /** - * Shortcut to get the User being used for this instance - * - * @return User - */ - protected final function getUser() { - return $this->getContext()->getUser(); - } - - /** - * Shortcut to get the Skin being used for this instance - * - * @return Skin - */ - protected final function getSkin() { - return $this->getContext()->getSkin(); - } - - /** - * Shortcut to get the user Language being used for this instance - * - * @return Skin - */ - protected final function getLang() { - return $this->getContext()->getLang(); - } - - /** - * Shortcut to get the Title object from the page - * @return Title - */ - protected final function getTitle() { - return $this->page->getTitle(); - } - /** * Protected constructor: use Action::factory( $action, $page ) to actually build * these things in the real world @@ -189,18 +125,25 @@ abstract class Action { * @throws ErrorPageError */ protected function checkCanExecute( User $user ) { - if ( $this->requiresWrite() && wfReadOnly() ) { - throw new ReadOnlyError(); - } - - if ( $this->getRestriction() !== null && !$user->isAllowed( $this->getRestriction() ) ) { - throw new PermissionsError( $this->getRestriction() ); + $right = $this->getRestriction(); + if ( $right !== null ) { + $errors = $this->getTitle()->getUserPermissionsErrors( $right, $user ); + if ( count( $errors ) ) { + throw new PermissionsError( $right, $errors ); + } } if ( $this->requiresUnblock() && $user->isBlocked() ) { $block = $user->mBlock; throw new UserBlockedError( $block ); } + + // This should be checked at the end so that the user won't think the + // error is only temporary when he also don't have the rights to execute + // this action + if ( $this->requiresWrite() && wfReadOnly() ) { + throw new ReadOnlyError(); + } } /** @@ -279,6 +222,10 @@ abstract class FormAction extends Action { * @return String HTML which will be sent to $form->addPreText() */ protected function preText() { return ''; } + + /** + * @return string + */ protected function postText() { return ''; } /**