X-Git-Url: https://scripts.mit.edu/gitweb/autoinstallsdev/mediawiki.git/blobdiff_plain/19e297c21b10b1b8a3acad5e73fc71dcb35db44a..6932310fd58ebef145fa01eb76edf7150284d8ea:/includes/specials/SpecialPageData.php diff --git a/includes/specials/SpecialPageData.php b/includes/specials/SpecialPageData.php new file mode 100644 index 00000000..c52c426e --- /dev/null +++ b/includes/specials/SpecialPageData.php @@ -0,0 +1,86 @@ +. + * + * @license GPL-2.0+ + */ +class SpecialPageData extends SpecialPage { + + /** + * @var PageDataRequestHandler|null + */ + private $requestHandler = null; + + public function __construct() { + parent::__construct( 'PageData' ); + } + + /** + * Sets the request handler to be used by the special page. + * May be used when a particular instance of PageDataRequestHandler is already + * known, e.g. during testing. + * + * If no request handler is set using this method, a default handler is created + * on demand by initDependencies(). + * + * @param PageDataRequestHandler $requestHandler + */ + public function setRequestHandler( PageDataRequestHandler $requestHandler ) { + $this->requestHandler = $requestHandler; + } + + /** + * Initialize any un-initialized members from global context. + * In particular, this initializes $this->requestHandler + */ + protected function initDependencies() { + if ( $this->requestHandler === null ) { + $this->requestHandler = $this->newDefaultRequestHandler(); + } + } + + /** + * Creates a PageDataRequestHandler based on global defaults. + * + * @return PageDataRequestHandler + */ + private function newDefaultRequestHandler() { + return new PageDataRequestHandler(); + } + + /** + * @see SpecialWikibasePage::execute + * + * @param string|null $subPage + * + * @throws HttpError + */ + public function execute( $subPage ) { + $this->initDependencies(); + + // If there is no title, show an HTML form + // TODO: Don't do this if HTML is not acceptable according to HTTP headers. + if ( !$this->requestHandler->canHandleRequest( $subPage, $this->getRequest() ) ) { + $this->showForm(); + return; + } + + $this->requestHandler->handleRequest( $subPage, $this->getRequest(), $this->getOutput() ); + } + + /** + * Shows an informative page to the user; Called when there is no page to output. + */ + public function showForm() { + $this->getOutput()->showErrorPage( 'pagedata-title', 'pagedata-text' ); + } + + public function isListed() { + // Do not list this page in Special:SpecialPages + return false; + } + +}