Fix userrights-interwiki when the 'user' table is shared
authorUltrasonicNXT <adamr_carter@btinternet.com>
Wed, 5 Feb 2014 21:03:15 +0000 (21:03 +0000)
committerLegoktm <legoktm.wikipedia@gmail.com>
Sun, 10 Aug 2014 12:01:25 +0000 (12:01 +0000)
At present, this function selects the user table from the same DB as the
user_groups, however, in wikifarms this is not often the case, as the user
table is often shared, but the user_groups table not. Adding a check in
here, and passing the shared table, if needed, ONLY to the user query,
should fix.

Change-Id: Ib85630067c402b8e4f50ff11a33fe7f0eadd4f16

includes/UserRightsProxy.php

index e3655ce..53c69d8 100644 (file)
@@ -113,12 +113,23 @@ class UserRightsProxy {
         * @return null|UserRightsProxy
         */
        private static function newFromLookup( $database, $field, $value, $ignoreInvalidDB = false ) {
+               global $wgSharedDB, $wgSharedTables;
+               // If the user table is shared, perform the user query on it, but don't pass it to the UserRightsProxy,
+               // as user rights are normally not shared.
+               if ( $wgSharedDB && in_array( 'user', $wgSharedTables ) ) {
+                       $userdb = self::getDB( $wgSharedDB, $ignoreInvalidDB );
+               } else {
+                       $userdb = self::getDB( $database, $ignoreInvalidDB );
+               }
+
                $db = self::getDB( $database, $ignoreInvalidDB );
-               if ( $db ) {
-                       $row = $db->selectRow( 'user',
+
+               if ( $db && $userdb ) {
+                       $row = $userdb->selectRow( 'user',
                                array( 'user_id', 'user_name' ),
                                array( $field => $value ),
                                __METHOD__ );
+
                        if ( $row !== false ) {
                                return new UserRightsProxy( $db, $database,
                                        $row->user_name,