Allow logged-in users to view and use the login form again
authorBartosz Dziewoński <matma.rex@gmail.com>
Fri, 19 Sep 2014 15:10:40 +0000 (17:10 +0200)
committerBartosz Dziewoński <matma.rex@gmail.com>
Mon, 22 Sep 2014 14:02:00 +0000 (14:02 +0000)
The fix for bug 15484 (d0439af8) has introduced the behavior of
automatically redirecting users who view the login form when already
logged in to the requested 'returnto' location. If it was not given,
users were redirected to main page instead.

However, that has annoyed people who often switch between several
accounts and have grown accustomed to the old behavior of being able
to log in while logged in. Given that there are no conflicts between
these two features, let's just restore the old behavior when
Special:UserLogin is visited directly (no 'returnto' location given).

This reverts 5dfc57eb which removed then-dead code for showing login
form to logged-in users and tweaks an if() condition.

Bug: 70855
Change-Id: I7e40c13a6ca566b4d66d943c006af9edb6941ee9

includes/specials/SpecialUserlogin.php
includes/templates/Userlogin.php
languages/i18n/en.json
resources/src/mediawiki.special/mediawiki.special.userlogin.login.css

index 845413e..6de7c90 100644 (file)
@@ -238,11 +238,19 @@ class LoginForm extends SpecialPage {
                }
                $this->setHeaders();
 
-               // In the case where the user is already logged in, do not show the login page.
-               // The use case scenario for this is when a user opens a large number of tabs, is
-               // redirected to the login page on all of them, and then logs in on one, expecting
-               // all the others to work properly.
-               if ( $this->mType !== 'signup' && !$this->mPosted && $this->getUser()->isLoggedIn() ) {
+               // In the case where the user is already logged in, and was redirected to the login form from a
+               // page that requires login, do not show the login page. The use case scenario for this is when
+               // a user opens a large number of tabs, is redirected to the login page on all of them, and then
+               // logs in on one, expecting all the others to work properly.
+               //
+               // However, do show the form if it was visited intentionally (no 'returnto' is present). People
+               // who often switch between several accounts have grown accustomed to this behavior.
+               if (
+                       $this->mType !== 'signup' &&
+                       !$this->mPosted &&
+                       $this->getUser()->isLoggedIn() &&
+                       ( $this->mReturnTo !== '' || $this->mReturnToQuery !== '' )
+               ) {
                        $this->successfulLogin();
                }
 
@@ -1392,6 +1400,7 @@ class LoginForm extends SpecialPage {
                $template->set( 'cansecurelogin', ( $wgSecureLogin === true ) );
                $template->set( 'stickhttps', (int)$this->mStickHTTPS );
                $template->set( 'loggedin', $user->isLoggedIn() );
+               $template->set( 'loggedinuser', $user->getName() );
 
                if ( $this->mType == 'signup' ) {
                        if ( !self::getCreateaccountToken() ) {
index ad01905..8bba426 100644 (file)
@@ -37,6 +37,11 @@ class UserloginTemplate extends BaseTemplate {
        <?php } ?>
        <div id="userloginForm">
                <form name="userlogin" class="mw-ui-vform" method="post" action="<?php $this->text( 'action' ); ?>">
+                       <?php if ( $this->data['loggedin'] ) { ?>
+                               <div class="warningbox">
+                                       <?php echo $this->getMsg( 'userlogin-loggedin' )->params( $this->data['loggedinuser'] )->parse(); ?>
+                               </div>
+                       <?php } ?>
                        <section class="mw-form-header">
                                <?php $this->html( 'header' ); /* extensions such as ConfirmEdit add form HTML here */ ?>
                        </section>
@@ -166,9 +171,15 @@ class UserloginTemplate extends BaseTemplate {
                        </div>
 
                        <?php if ( $this->haveData( 'createOrLoginHref' ) ) { ?>
-                               <div id="mw-createaccount-cta">
-                                       <?php $this->msg( 'userlogin-noaccount' ); ?><a href="<?php $this->text( 'createOrLoginHref' ); ?>" id="mw-createaccount-join" tabindex="7"  class="mw-ui-button mw-ui-progressive"><?php $this->msg( 'userlogin-joinproject' ); ?></a>
-                               </div>
+                               <?php if ( $this->data['loggedin'] ) { ?>
+                                       <div id="mw-createaccount-another">
+                                               <a href="<?php $this->text( 'createOrLoginHref' ); ?>" id="mw-createaccount-join" tabindex="7"  class="mw-ui-button"><?php $this->msg( 'userlogin-createanother' ); ?></a>
+                                       </div>
+                               <?php } else { ?>
+                                       <div id="mw-createaccount-cta">
+                                               <?php $this->msg( 'userlogin-noaccount' ); ?><a href="<?php $this->text( 'createOrLoginHref' ); ?>" id="mw-createaccount-join" tabindex="7"  class="mw-ui-button mw-ui-progressive"><?php $this->msg( 'userlogin-joinproject' ); ?></a>
+                                       </div>
+                               <?php } ?>
                        <?php } ?>
                        <?php if ( $this->haveData( 'uselang' ) ) { ?><input type="hidden" name="uselang" value="<?php $this->text( 'uselang' ); ?>" /><?php } ?>
                        <?php if ( $this->haveData( 'token' ) ) { ?><input type="hidden" name="wpLoginToken" value="<?php $this->text( 'token' ); ?>" /><?php } ?>
index d7ae546..ab50fa8 100644 (file)
        "userlogin-resetpassword-link": "Forgot your password?",
        "helplogin-url": "https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Logging_in",
        "userlogin-helplink2": "Help with logging in",
+       "userlogin-loggedin": "You are already logged in as {{GENDER:$1|$1}}.\nUse the form below to log in as another user.",
+       "userlogin-createanother": "Create another account",
        "createacct-emailrequired": "Email address",
        "createacct-emailoptional": "Email address (optional)",
        "createacct-email-ph": "Enter your email address",
index ee6a57c..64471b2 100644 (file)
@@ -6,6 +6,10 @@
        background: url(images/glyph-people-large.png) no-repeat 50%;
        margin: 0 auto;
        padding-top: 4em;
+}
+
+#mw-createaccount-cta,
+#mw-createaccount-another {
        font-size: 0.9em;
        font-weight: normal;
        text-align: center;