Merge "Define doesWrites() for SpecialPageAction"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Wed, 20 Jan 2016 00:49:38 +0000 (00:49 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Wed, 20 Jan 2016 00:49:38 +0000 (00:49 +0000)
includes/actions/SpecialPageAction.php

index 9b72163..29a494b 100644 (file)
@@ -25,7 +25,6 @@
  * @since 1.25
  */
 class SpecialPageAction extends FormlessAction {
-
        /**
         * @var array A mapping of action names to special page names.
         */
@@ -49,6 +48,7 @@ class SpecialPageAction extends FormlessAction {
                if ( isset( self::$actionToSpecialPageMapping[$actionName] ) ) {
                        return $actionName;
                }
+
                return 'nosuchaction';
        }
 
@@ -65,15 +65,33 @@ class SpecialPageAction extends FormlessAction {
        }
 
        public function show() {
-               $action = self::getName();
-               if ( $action === 'nosuchaction' ) {
-                       throw new ErrorPageError( $this->msg( 'nosuchaction' ), $this->msg( 'nosuchactiontext' ) );
+               $special = $this->getSpecialPage();
+               if ( !$special ) {
+                       throw new ErrorPageError(
+                               $this->msg( 'nosuchaction' ), $this->msg( 'nosuchactiontext' ) );
                }
 
-               // map actions to (whitelisted) special pages
-               $special = SpecialPageFactory::getPage( self::$actionToSpecialPageMapping[$action] );
                $special->setContext( $this->getContext() );
                $special->getContext()->setTitle( $special->getPageTitle() );
                $special->run( '' );
        }
+
+       public function doesWrites() {
+               $special = $this->getSpecialPage();
+
+               return $special ? $special->doesWrites() : false;
+       }
+
+       /**
+        * @return SpecialPage|null
+        */
+       protected function getSpecialPage() {
+               $action = $this->getName();
+               if ( $action === 'nosuchaction' ) {
+                       return null;
+               }
+
+               // map actions to (whitelisted) special pages
+               return SpecialPageFactory::getPage( self::$actionToSpecialPageMapping[$action] );
+       }
 }