Commenting and doc fixes around the spam regexes
[lhc/web/wiklou.git] / includes / User.php
index 30e618a..72f66f0 100644 (file)
@@ -1240,7 +1240,10 @@ class User {
 
                $defOpt = $wgDefaultUserOptions;
                // Default language setting
-               $defOpt['language'] = $defOpt['variant'] = $wgContLang->getCode();
+               $defOpt['language'] = $wgContLang->getCode();
+               foreach ( LanguageConverter::$languagesWithVariants as $langCode ) {
+                       $defOpt[$langCode == $wgContLang->getCode() ? 'variant' : "variant-$langCode"] = $langCode;
+               }
                foreach ( SearchEngine::searchableNamespaces() as $nsnum => $nsname ) {
                        $defOpt['searchNs' . $nsnum] = !empty( $wgNamespacesToBeSearchedDefault[$nsnum] );
                }
@@ -1828,8 +1831,14 @@ class User {
        }
 
        /**
-        * Return the revision and link for the oldest new talk page message for
-        * this user.
+        * Return the data needed to construct links for new talk page message
+        * alerts. If there are new messages, this will return an associative array
+        * with the following data:
+        *     wiki: The database name of the wiki
+        *     link: Root-relative link to the user's talk page
+        *     rev: The last talk page revision that the user has seen or null. This
+        *         is useful for building diff links.
+        * If there are no new messages, it returns an empty array.
         * @note This function was designed to accomodate multiple talk pages, but
         * currently only returns a single link and revision.
         * @return Array
@@ -1853,8 +1862,9 @@ class User {
        }
 
        /**
-        * Get the revision ID for the oldest new talk page message for this user
-        * @return int|null Revision id or null if there are no new messages
+        * Get the revision ID for the last talk page revision viewed by the talk
+        * page owner.
+        * @return int|null Revision ID or null
         */
        public function getNewMessageRevisionId() {
                $newMessageRevisionId = null;
@@ -2292,7 +2302,7 @@ class User {
                # set it, and then it was disabled removing their ability to change it).  But
                # we don't want to erase the preferences in the database in case the preference
                # is re-enabled again.  So don't touch $mOptions, just override the returned value
-               if ( in_array( $oname, $wgHiddenPrefs ) && !$ignoreHidden ) {
+               if ( !$ignoreHidden && in_array( $oname, $wgHiddenPrefs ) ) {
                        return self::getDefaultOption( $oname );
                }
 
@@ -2340,7 +2350,7 @@ class User {
        }
 
        /**
-        * Get the user's current setting for a given option, as a boolean value.
+        * Get the user's current setting for a given option, as an integer value.
         *
         * @param string $oname The option to check
         * @param int $defaultOverride A default value returned if the option does not exist
@@ -2372,6 +2382,49 @@ class User {
                $this->mOptions[$oname] = $val;
        }
 
+       /**
+        * Get a token stored in the preferences (like the watchlist one),
+        * resetting it if it's empty (and saving changes).
+        *
+        * @param string $oname The option name to retrieve the token from
+        * @return string|bool User's current value for the option, or false if this option is disabled.
+        * @see resetTokenFromOption()
+        * @see getOption()
+        */
+       public function getTokenFromOption( $oname ) {
+               global $wgHiddenPrefs;
+               if ( in_array( $oname, $wgHiddenPrefs ) ) {
+                       return false;
+               }
+
+               $token = $this->getOption( $oname );
+               if ( !$token ) {
+                       $token = $this->resetTokenFromOption( $oname );
+                       $this->saveSettings();
+               }
+               return $token;
+       }
+
+       /**
+        * Reset a token stored in the preferences (like the watchlist one).
+        * *Does not* save user's preferences (similarly to setOption()).
+        *
+        * @param string $oname The option name to reset the token in
+        * @return string|bool New token value, or false if this option is disabled.
+        * @see getTokenFromOption()
+        * @see setOption()
+        */
+       public function resetTokenFromOption( $oname ) {
+               global $wgHiddenPrefs;
+               if ( in_array( $oname, $wgHiddenPrefs ) ) {
+                       return false;
+               }
+
+               $token = MWCryptRand::generateHex( 40 );
+               $this->setOption( $oname, $token );
+               return $token;
+       }
+
        /**
         * Return a list of the types of user options currently returned by
         * User::getOptionKinds().
@@ -3063,7 +3116,9 @@ class User {
         *  null (default): Use the default ($wgCookieSecure) to set the secure attribute
         */
        protected function setCookie( $name, $value, $exp = 0, $secure = null ) {
-               $this->getRequest()->response()->setcookie( $name, $value, $exp, null, null, $secure );
+               $this->getRequest()->response()->setcookie( $name, $value, $exp, array(
+                       'secure' => $secure,
+               ) );
        }
 
        /**
@@ -3684,6 +3739,8 @@ class User {
                } elseif ( $type === true ) {
                        $message = 'confirmemail_body_changed';
                } else {
+                       // Give grep a chance to find the usages:
+                       // confirmemail_body_changed, confirmemail_body_set
                        $message = 'confirmemail_body_' . $type;
                }