mAllowedRedirectParams = []; } /** * @param string|null $subpage * @return Title|bool */ public function getRedirect( $subpage ) { $parts = explode( '/', $subpage ); // Try to parse the values given, generating somewhat pretty URLs if possible if ( count( $parts ) === 1 && $parts[0] !== '' ) { $this->mAddedRedirectParams['diff'] = $parts[0]; } elseif ( count( $parts ) === 2 ) { $this->mAddedRedirectParams['oldid'] = $parts[0]; $this->mAddedRedirectParams['diff'] = $parts[1]; } else { return false; } return true; } protected function showNoRedirectPage() { $this->addHelpLink( 'Help:Diff' ); $this->setHeaders(); $this->outputHeader(); $this->showForm(); } private function showForm() { $form = HTMLForm::factory( 'ooui', [ 'oldid' => [ 'name' => 'oldid', 'type' => 'int', 'label-message' => 'diff-form-oldid', ], 'diff' => [ 'name' => 'diff', 'class' => HTMLTextField::class, 'label-message' => 'diff-form-revid', ], ], $this->getContext(), 'diff-form' ); $form->setSubmitTextMsg( 'diff-form-submit' ); $form->setSubmitCallback( [ $this, 'onFormSubmit' ] ); $form->show(); } public function onFormSubmit( $formData ) { $params = []; if ( $formData['oldid'] ) { $params[] = $formData['oldid']; } if ( $formData['diff'] ) { $params[] = $formData['diff']; } $title = $this->getPageTitle( $params ? implode( '/', $params ) : null ); $url = $title->getFullUrlForRedirect(); $this->getOutput()->redirect( $url ); } public function getDescription() { // 'diff' message is in lowercase, using own message return $this->msg( 'diff-form' )->text(); } public function getName() { return 'diff-form'; } public function isListed() { return true; } protected function getGroupName() { return 'redirects'; } }