class SpecialDiff extends RedirectSpecialPage {
public function __construct() {
parent::__construct( 'Diff' );
- $this->mAllowedRedirectParams = array();
+ $this->mAllowedRedirectParams = [];
}
/**
$this->mAddedRedirectParams['oldid'] = $parts[0];
$this->mAddedRedirectParams['diff'] = $parts[1];
} else {
- // Wrong number of parameters, bail out
- $this->getOutput()->addHelpLink( 'Help:Diff' );
- throw new ErrorPageError( 'nopagetitle', 'nopagetext' );
+ 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',
+ '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';
+ }
}