Merge "Some improvements to Special:MergeHistory"
[lhc/web/wiklou.git] / includes / api / ApiQueryUsers.php
index d98cc39..d0d0f08 100644 (file)
@@ -33,7 +33,24 @@ class ApiQueryUsers extends ApiQueryBase {
 
        private $tokenFunctions, $prop;
 
-       public function __construct( $query, $moduleName ) {
+       /**
+        * Properties whose contents does not depend on who is looking at them. If the usprops field
+        * contains anything not listed here, the cache mode will never be public for logged-in users.
+        * @var array
+        */
+       protected static $publicProps = array(
+               // everything except 'blockinfo' which might show hidden records if the user
+               // making the request has the appropriate permissions
+               'groups',
+               'implicitgroups',
+               'rights',
+               'editcount',
+               'registration',
+               'emailable',
+               'gender',
+       );
+
+       public function __construct( ApiQuery $query, $moduleName ) {
                parent::__construct( $query, $moduleName, 'us' );
        }
 
@@ -41,7 +58,7 @@ class ApiQueryUsers extends ApiQueryBase {
         * Get an array mapping token names to their handler functions.
         * The prototype for a token function is func($user)
         * it should return a token or false (permission denied)
-        * @return Array tokenname => function
+        * @return array Array of tokenname => function
         */
        protected function getTokenFunctions() {
                // Don't call the hooks twice
@@ -63,8 +80,8 @@ class ApiQueryUsers extends ApiQueryBase {
        }
 
        /**
-        * @param $user User
-        * @return String
+        * @param User $user
+        * @return string
         */
        public static function getUserrightsToken( $user ) {
                global $wgUser;
@@ -261,7 +278,7 @@ class ApiQueryUsers extends ApiQueryBase {
         * Gets all the groups that a user is automatically a member of (implicit groups)
         *
         * @deprecated since 1.20; call User::getAutomaticGroups() directly.
-        * @param $user User
+        * @param User $user
         * @return array
         */
        public static function getAutoGroups( $user ) {
@@ -271,7 +288,13 @@ class ApiQueryUsers extends ApiQueryBase {
        }
 
        public function getCacheMode( $params ) {
-               return isset( $params['token'] ) ? 'private' : 'anon-public-user-private';
+               if ( isset( $params['token'] ) ) {
+                       return 'private';
+               } elseif ( array_diff( (array)$params['prop'], static::$publicProps ) ) {
+                       return 'anon-public-user-private';
+               } else {
+                       return 'public';
+               }
        }
 
        public function getAllowedParams() {