action = $action; $this->msgPrefix = $msgPrefix; } /** * @inheritDoc */ public function getRedirect( $subpage ) { if ( $subpage === null || $subpage === '' ) { return false; } $this->mAddedRedirectParams['title'] = $subpage; $this->mAddedRedirectParams['action'] = $this->action; return true; } /** * @stable to override */ protected function showNoRedirectPage() { $this->setHeaders(); $this->outputHeader(); $this->showForm(); } private function showForm() { // Dynamic messages used: // 'special' . $this->msgPrefix . '-page' // 'special' . $this->msgPrefix . '-submit' // Each special page that extends this should include those as comments for grep $form = HTMLForm::factory( 'ooui', [ 'page' => [ 'type' => 'text', 'name' => 'page', 'label-message' => 'special' . $this->msgPrefix . '-page', 'required' => true, ], ], $this->getContext(), $this->msgPrefix ); $form->setSubmitTextMsg( 'special' . $this->msgPrefix . '-submit' ); $form->setSubmitCallback( [ $this, 'onFormSubmit' ] ); $form->show(); } /** * @stable to override * * @param array $formData * * @return Status|null */ public function onFormSubmit( $formData ) { $title = $formData['page']; try { $page = Title::newFromTextThrow( $title ); } catch ( MalformedTitleException $e ) { return Status::newFatal( $e->getMessageObject() ); } $query = [ 'action' => $this->action ]; $url = $page->getFullUrlForRedirect( $query ); $this->getOutput()->redirect( $url ); } /** * @stable to override * @return bool */ public function isListed() { return true; } /** * @stable to override * @return string */ protected function getGroupName() { return 'redirects'; } }