German localisation updates, patch by ray.
[lhc/web/wiklou.git] / includes / User.php
index 43b552c..9cbad66 100644 (file)
@@ -8,7 +8,7 @@
 define( 'USER_TOKEN_LENGTH', 32 );
 
 # Serialized record version
-define( 'MW_USER_VERSION', 5 );
+define( 'MW_USER_VERSION', 6 );
 
 # Some punctuation to prevent editing from broken text-mangling proxies.
 define( 'EDIT_TOKEN_SUFFIX', '+\\' );
@@ -2000,24 +2000,63 @@ class User {
                        }
                }
        }
+       
+       protected function setCookie( $name, $value, $exp=0 ) {
+               global $wgCookiePrefix,$wgCookieDomain,$wgCookieSecure,$wgCookieExpiration, $wgCookieHttpOnly;
+               if( $exp == 0 ) {
+                       $exp = time() + $wgCookieExpiration;
+               }
+               $httpOnlySafe = wfHttpOnlySafe();
+               wfDebugLog( 'cookie',
+                       'setcookie: "' . implode( '", "',
+                               array(
+                                       $wgCookiePrefix . $name,
+                                       $value,
+                                       $exp,
+                                       '/',
+                                       $wgCookieDomain,
+                                       $wgCookieSecure,
+                                       $httpOnlySafe && $wgCookieHttpOnly ) ) . '"' );
+               if( $httpOnlySafe && isset( $wgCookieHttpOnly ) ) {
+                       setcookie( $wgCookiePrefix . $name,
+                               $value,
+                               $exp,
+                               '/',
+                               $wgCookieDomain,
+                               $wgCookieSecure,
+                               $wgCookieHttpOnly );
+               } else {
+                       // setcookie() fails on PHP 5.1 if you give it future-compat paramters.
+                       // stab stab!
+                       setcookie( $wgCookiePrefix . $name,
+                               $value,
+                               $exp,
+                               '/',
+                               $wgCookieDomain,
+                               $wgCookieSecure );
+               }
+       }
+       
+       protected function clearCookie( $name ) {
+               $this->setCookie( $name, '', time() - 86400 );
+       }
 
        function setCookies() {
-               global $wgCookieExpiration, $wgCookiePath, $wgCookieDomain, $wgCookieSecure, $wgCookiePrefix, $wgCookieHttpOnly;;
                $this->load();
                if ( 0 == $this->mId ) return;
-               $exp = time() + $wgCookieExpiration;
-
+               
                $_SESSION['wsUserID'] = $this->mId;
-               setcookie( $wgCookiePrefix.'UserID', $this->mId, $exp, $wgCookiePath, $wgCookieDomain, $wgCookieSecure, $wgCookieHttpOnly );
+               
+               $this->setCookie( 'UserID', $this->mId );
+               $this->setCookie( 'UserName', $this->getName() );
 
                $_SESSION['wsUserName'] = $this->getName();
-               setcookie( $wgCookiePrefix.'UserName', $this->getName(), $exp, $wgCookiePath, $wgCookieDomain, $wgCookieSecure, $wgCookieHttpOnly );
 
                $_SESSION['wsToken'] = $this->mToken;
                if ( 1 == $this->getOption( 'rememberpassword' ) ) {
-                       setcookie( $wgCookiePrefix.'Token', $this->mToken, $exp, $wgCookiePath, $wgCookieDomain, $wgCookieSecure, $wgCookieHttpOnly );
+                       $this->setCookie( 'Token', $this->mToken );
                } else {
-                       setcookie( $wgCookiePrefix.'Token', '', time() - 3600 );
+                       $this->clearCookie( 'Token' );
                }
        }
 
@@ -2036,16 +2075,15 @@ class User {
         * Clears the cookies and session, resets the instance cache
         */
        function doLogout() {
-               global $wgCookiePath, $wgCookieDomain, $wgCookieSecure, $wgCookiePrefix;
                $this->clearInstanceCache( 'defaults' );
 
                $_SESSION['wsUserID'] = 0;
 
-               setcookie( $wgCookiePrefix.'UserID', '', time() - 3600, $wgCookiePath, $wgCookieDomain, $wgCookieSecure );
-               setcookie( $wgCookiePrefix.'Token', '', time() - 3600, $wgCookiePath, $wgCookieDomain, $wgCookieSecure );
+               $this->clearCookie( 'UserID' );
+               $this->clearCookie( 'Token' );
 
                # Remember when user logged out, to prevent seeing cached pages
-               setcookie( $wgCookiePrefix.'LoggedOut', wfTimestampNow(), time() + 86400, $wgCookiePath, $wgCookieDomain, $wgCookieSecure );
+               $this->setCookie( 'LoggedOut', wfTimestampNow(), time() + 86400 );
        }
 
        /**
@@ -2432,8 +2470,8 @@ class User {
         * Generate a new e-mail confirmation token and send a confirmation/invalidation
         * mail to the user's given address.
         *
-        * Call saveSettings() after calling this function to commit the confirmation
-        * token to the database.
+        * Calls saveSettings() internally; as it has side effects, not committing changes
+        * would be pretty silly.
         *
         * @return mixed True on success, a WikiError object on failure.
         */
@@ -2443,6 +2481,8 @@ class User {
                $token = $this->confirmationToken( $expiration );
                $url = $this->confirmationTokenUrl( $token );
                $invalidateURL = $this->invalidationTokenUrl( $token );
+               $this->saveSettings();
+               
                return $this->sendMail( wfMsg( 'confirmemail_subject' ),
                        wfMsg( 'confirmemail_body',
                                wfGetIP(),
@@ -2794,4 +2834,14 @@ class User {
                // edit count in user cache too
                $this->invalidateCache();
        }
+       
+       static function getRightDescription( $right ) {
+               global $wgMessageCache;
+               $wgMessageCache->loadAllMessages();
+               $key = "right-$right";
+               $name = wfMsg( $key );
+               return $name == '' || wfEmptyMsg( $key, $name )
+                       ? $right
+                       : $name;
+       }
 }