X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FAction.php;h=22879410a53fc9529dce7a9ce6988b762984b078;hb=a469cf2c95e72e657d579324f28300dba502e451;hp=b165721e69b53ee4b99dd2bc7172c28f607fb4e5;hpb=391736c0812b301beefe05f96c4c937996b7ba40;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/Action.php b/includes/Action.php index b165721e69..22879410a5 100644 --- a/includes/Action.php +++ b/includes/Action.php @@ -99,7 +99,7 @@ abstract class Action { * Get the IContextSource in use here * @return IContextSource */ - protected final function getContext() { + public final function getContext() { if ( $this->context instanceof IContextSource ) { return $this->context; } @@ -111,7 +111,7 @@ abstract class Action { * * @return WebRequest */ - protected final function getRequest() { + public final function getRequest() { return $this->getContext()->getRequest(); } @@ -120,7 +120,7 @@ abstract class Action { * * @return OutputPage */ - protected final function getOutput() { + public final function getOutput() { return $this->getContext()->getOutput(); } @@ -129,7 +129,7 @@ abstract class Action { * * @return User */ - protected final function getUser() { + public final function getUser() { return $this->getContext()->getUser(); } @@ -138,7 +138,7 @@ abstract class Action { * * @return Skin */ - protected final function getSkin() { + public final function getSkin() { return $this->getContext()->getSkin(); } @@ -147,7 +147,7 @@ abstract class Action { * * @return Skin */ - protected final function getLang() { + public final function getLang() { return $this->getContext()->getLang(); } @@ -155,10 +155,21 @@ abstract class Action { * Shortcut to get the Title object from the page * @return Title */ - protected final function getTitle() { + public final function getTitle() { return $this->page->getTitle(); } + /** + * Get a Message object with context set + * Parameters are the same as wfMessage() + * + * @return Message object + */ + public final function msg() { + $params = func_get_args(); + return call_user_func_array( array( $this->getContext(), 'msg' ), $params ); + } + /** * Protected constructor: use Action::factory( $action, $page ) to actually build * these things in the real world @@ -189,18 +200,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 +297,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 ''; } /**