4 * Helper functions for the login form that need to be shared with other special pages
5 * (such as CentralAuth's SpecialCentralLogin).
8 class LoginHelper
extends ContextSource
{
10 * Valid error and warning messages
12 * Special:Userlogin can show an error or warning message on the form when
13 * coming from another page. This is done via the ?error= or ?warning= GET
16 * This array is the list of valid message keys. Further keys can be added by the
17 * LoginFormValidErrorMessages hook. All other values will be ignored.
21 public static $validErrorMessages = [
22 'exception-nologin-text',
24 'changeemail-no-info',
26 'confirmemail_needlogin',
31 * Returns an array of all valid error messages.
34 * @see LoginHelper::$validErrorMessages
36 public static function getValidErrorMessages() {
37 static $messages = null;
39 $messages = self
::$validErrorMessages;
40 Hooks
::run( 'LoginFormValidErrorMessages', [ &$messages ] );
46 public function __construct( IContextSource
$context ) {
47 $this->setContext( $context );
51 * Show a return link or redirect to it.
52 * Extensions can change where the link should point or inject content into the page
53 * (which will change it from redirect to link mode).
55 * @param string $type One of the following:
56 * - error: display a return to link ignoring $wgRedirectOnLogin
57 * - success: display a return to link using $wgRedirectOnLogin if needed
58 * - successredirect: send an HTTP redirect using $wgRedirectOnLogin if needed
59 * @param string $returnTo
60 * @param array|string $returnToQuery
61 * @param bool $stickHTTPS Keep redirect link on HTTPS
63 public function showReturnToPage(
64 $type, $returnTo = '', $returnToQuery = '', $stickHTTPS = false
66 $config = $this->getConfig();
67 if ( $type !== 'error' && $config->get( 'RedirectOnLogin' ) !== null ) {
68 $returnTo = $config->get( 'RedirectOnLogin' );
70 } elseif ( is_string( $returnToQuery ) ) {
71 $returnToQuery = wfCgiToArray( $returnToQuery );
74 // Allow modification of redirect behavior
75 Hooks
::run( 'PostLoginRedirect', [ &$returnTo, &$returnToQuery, &$type ] );
77 $returnToTitle = Title
::newFromText( $returnTo ) ?
: Title
::newMainPage();
79 if ( $config->get( 'SecureLogin' ) && !$stickHTTPS ) {
80 $options = [ 'http' ];
82 } elseif ( $config->get( 'SecureLogin' ) ) {
83 $options = [ 'https' ];
87 $proto = PROTO_RELATIVE
;
90 if ( $type === 'successredirect' ) {
91 $redirectUrl = $returnToTitle->getFullUrlForRedirect( $returnToQuery, $proto );
92 $this->getOutput()->redirect( $redirectUrl );
94 $this->getOutput()->addReturnTo( $returnToTitle, $returnToQuery, null, $options );