merging latest master
[lhc/web/wiklou.git] / includes / specials / SpecialUserlogin.php
index 613e3b9..19af852 100644 (file)
@@ -93,8 +93,6 @@ class LoginForm extends SpecialPage {
                $this->mRetype = $request->getText( 'wpRetype' );
                $this->mDomain = $request->getText( 'wpDomain' );
                $this->mReason = $request->getText( 'wpReason' );
-               $this->mReturnTo = $request->getVal( 'returnto' );
-               $this->mReturnToQuery = $request->getVal( 'returntoquery' );
                $this->mCookieCheck = $request->getVal( 'wpCookieCheck' );
                $this->mPosted = $request->wasPosted();
                $this->mCreateaccount = $request->getCheck( 'wpCreateaccount' );
@@ -111,6 +109,9 @@ class LoginForm extends SpecialPage {
                if ( $wgRedirectOnLogin ) {
                        $this->mReturnTo = $wgRedirectOnLogin;
                        $this->mReturnToQuery = '';
+               } else {
+                       $this->mReturnTo = $request->getVal( 'returnto', '' );
+                       $this->mReturnToQuery = $request->getVal( 'returntoquery', '' );
                }
 
                if( $wgEnableEmail ) {
@@ -331,6 +332,12 @@ class LoginForm extends SpecialPage {
                        return false;
                }
 
+               # Include checks that will include GlobalBlocking (Bug 38333)
+               $permErrors = $this->getTitle()->getUserPermissionsErrors( 'createaccount', $currentUser, true );
+               if ( count( $permErrors ) ) {
+                               throw new PermissionsError( 'createaccount', $permErrors );
+               }
+
                $ip = $this->getRequest()->getIP();
                if ( $currentUser->isDnsBlacklisted( $ip, true /* check $wgProxyWhitelist */ ) ) {
                        $this->mainLoginForm( $this->msg( 'sorbs_create_account_reason' )->text() . ' ' . $this->msg( 'parentheses', $ip )->escaped() );
@@ -910,7 +917,7 @@ class LoginForm extends SpecialPage {
 
                $out->addHTML( $injected_html );
 
-               if ( !empty( $this->mReturnTo ) ) {
+               if ( $this->mReturnTo !== '' ) {
                        $out->returnToMain( null, $this->mReturnTo, $this->mReturnToQuery );
                } else {
                        $out->returnToMain( null );
@@ -998,9 +1005,9 @@ class LoginForm extends SpecialPage {
                        $linkmsg = 'nologin';
                }
 
-               if ( !empty( $this->mReturnTo ) ) {
+               if ( $this->mReturnTo !== '' ) {
                        $returnto = '&returnto=' . wfUrlencode( $this->mReturnTo );
-                       if ( !empty( $this->mReturnToQuery ) ) {
+                       if ( $this->mReturnToQuery !== '' ) {
                                $returnto .= '&returntoquery=' .
                                        wfUrlencode( $this->mReturnToQuery );
                        }
@@ -1190,8 +1197,9 @@ class LoginForm extends SpecialPage {
        function cookieRedirectCheck( $type ) {
                $titleObj = SpecialPage::getTitleFor( 'Userlogin' );
                $query = array( 'wpCookieCheck' => $type );
-               if ( $this->mReturnTo ) {
+               if ( $this->mReturnTo !== '' ) {
                        $query['returnto'] = $this->mReturnTo;
+                       $query['returntoquery'] = $this->mReturnToQuery;
                }
                $check = $titleObj->getFullURL( $query );
 
@@ -1261,18 +1269,24 @@ class LoginForm extends SpecialPage {
                        // no link for currently used language
                        return htmlspecialchars( $text );
                }
-               $attr = array( 'uselang' => $lang );
+               $query = array( 'uselang' => $lang );
                if( $this->mType == 'signup' ) {
-                       $attr['type'] = 'signup';
+                       $query['type'] = 'signup';
                }
-               if( $this->mReturnTo ) {
-                       $attr['returnto'] = $this->mReturnTo;
+               if( $this->mReturnTo !== '' ) {
+                       $query['returnto'] = $this->mReturnTo;
+                       $query['returntoquery'] = $this->mReturnToQuery;
                }
+
+               $attr = array();
+               $targetLanguage = Language::factory( $lang );
+               $attr['lang'] = $attr['hreflang'] = $targetLanguage->getHtmlCode();
+
                return Linker::linkKnown(
                        $this->getTitle(),
                        htmlspecialchars( $text ),
-                       array(),
-                       $attr
+                       $attr,
+                       $query
                );
        }
 }