X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fexception%2FUserNotLoggedIn.php;h=02fca3d8d043ea58da09862ad05ac32648c78cf7;hb=ac17fbac94f2ba72b3ac64fff2dd188dd76faaf3;hp=f7a56b5091f61984db2bc9bce033ac1f52c3cc35;hpb=7fe39b62c3a532f4fd1b9a570e5c012f88f75ef6;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/exception/UserNotLoggedIn.php b/includes/exception/UserNotLoggedIn.php index f7a56b5091..02fca3d8d0 100644 --- a/includes/exception/UserNotLoggedIn.php +++ b/includes/exception/UserNotLoggedIn.php @@ -19,12 +19,15 @@ */ /** - * Shows a generic "user is not logged in" error page. + * Redirect a user to the login page * * This is essentially an ErrorPageError exception which by default uses the * 'exception-nologin' as a title and 'exception-nologin-text' for the message. - * @see bug 37627 - * @since 1.20 + * + * @note In order for this exception to redirect, the error message passed to the + * constructor has to be explicitly added to LoginForm::validErrorMessages or with + * the LoginFormValidErrorMessages hook. Otherwise, the user will just be shown the message + * rather than redirected. * * @par Example: * @code @@ -43,11 +46,17 @@ * } * @endcode * + * @see bug 37627 + * @since 1.20 * @ingroup Exception */ class UserNotLoggedIn extends ErrorPageError { /** + * @note The value of the $reasonMsg parameter must be put into LoginForm::validErrorMessages or + * set with the LoginFormValidErrorMessages Hook. + * if you want the user to be automatically redirected to the login form. + * * @param string $reasonMsg A message key containing the reason for the error. * Optional, default: 'exception-nologin-text' * @param string $titleMsg A message key to set the page title. @@ -64,16 +73,30 @@ class UserNotLoggedIn extends ErrorPageError { } /** - * Redirect to Special:Userlogin + * Redirect to Special:Userlogin if the specified message is compatible. Otherwise, + * show an error page as usual. */ public function report() { + // If an unsupported message is used, don't try redirecting to Special:Userlogin, + // since the message may not be compatible. + if ( !in_array( $this->msg, LoginForm::getValidErrorMessages() ) ) { + parent::report(); + } + + // Message is valid. Redirec to Special:Userlogin + $context = RequestContext::getMain(); $output = $context->getOutput(); + $query = $context->getRequest()->getValues(); + // Title will be overridden by returnto + unset( $query['title'] ); + // Redirect to Special:Userlogin $output->redirect( SpecialPage::getTitleFor( 'Userlogin' )->getFullURL( array( // Return to this page when the user logs in - 'returnto' => $context->getTitle()->getText(), - 'returntoquery' => wfArrayToCgi( $context->getRequest()->getValues() ) + 'returnto' => $context->getTitle()->getFullText(), + 'returntoquery' => wfArrayToCgi( $query ), + 'warning' => $this->msg, ) ) ); $output->output();