Define doesWrites() for SpecialPageAction
authorAaron Schulz <aschulz@wikimedia.org>
Fri, 15 Jan 2016 20:34:56 +0000 (12:34 -0800)
committerAaron Schulz <aschulz@wikimedia.org>
Fri, 15 Jan 2016 20:34:56 +0000 (12:34 -0800)
Bug: T123589
Change-Id: Iede48dea7e3f83f0eb6f21f5cc20b92ff54972a9

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] );
+       }
 }