'Revisiondelete', 'editchangetags' => 'EditTags', ]; public function getName() { $request = $this->getRequest(); $actionName = $request->getVal( 'action', 'view' ); // TODO: Shouldn't need to copy-paste this code from Action::getActionName! if ( $actionName === 'historysubmit' ) { if ( $request->getBool( 'revisiondelete' ) ) { $actionName = 'revisiondelete'; } elseif ( $request->getBool( 'editchangetags' ) ) { $actionName = 'editchangetags'; } } if ( isset( self::$actionToSpecialPageMapping[$actionName] ) ) { return $actionName; } return 'nosuchaction'; } public function requiresUnblock() { return false; } public function getDescription() { return ''; } public function onView() { return ''; } public function show() { $special = $this->getSpecialPage(); if ( !$special ) { throw new ErrorPageError( $this->msg( 'nosuchaction' ), $this->msg( 'nosuchactiontext' ) ); } $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] ); } }