X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fspecials%2FSpecialDiff.php;h=b27a8b4dfdb3bd0bfbac2551689fac197e098f80;hb=12a75b2f2600073d86cdeaf194e6b4c5c659b53f;hp=9804e777b17f2a119a3d7d0a327b99325b9ef08b;hpb=2f885ee6b797e5a176ce7b270b674a04b5945b06;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/specials/SpecialDiff.php b/includes/specials/SpecialDiff.php index 9804e777b1..b27a8b4dfd 100644 --- a/includes/specials/SpecialDiff.php +++ b/includes/specials/SpecialDiff.php @@ -56,11 +56,64 @@ class SpecialDiff extends RedirectSpecialPage { $this->mAddedRedirectParams['oldid'] = $parts[0]; $this->mAddedRedirectParams['diff'] = $parts[1]; } else { - // Wrong number of parameters, bail out - $this->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::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'; + } }