From 0e41ab8932306486a23110ff8e707955894080e2 Mon Sep 17 00:00:00 2001 From: Roan Kattouw Date: Sat, 7 Aug 2010 16:08:22 +0000 Subject: [PATCH] Hack up UserRightsProxy to support setting preferences of remote users, needed for a feature in PrefSwitch I'm about to commit. The way this hacks around UserRightsProxy's 'helpful' behavior of refusing to work with wikis not in $wgLoclDatabases is kinda ugly (I'm open to alternative suggestions), but then this entire class is an ugly hack and should be replaced by something more sane (even brion, its author, agrees with this :P) --- includes/UserRightsProxy.php | 46 +++++++++++++++++++++++++++++------- 1 file changed, 37 insertions(+), 9 deletions(-) diff --git a/includes/UserRightsProxy.php b/includes/UserRightsProxy.php index ee7e1951ef..0642bb16c8 100644 --- a/includes/UserRightsProxy.php +++ b/includes/UserRightsProxy.php @@ -21,6 +21,7 @@ class UserRightsProxy { $this->database = $database; $this->name = $name; $this->id = intval( $id ); + $this->newOptions = array(); } /** @@ -48,10 +49,11 @@ class UserRightsProxy { * * @param $database String: database name * @param $id Integer: user ID + * @param $ignoreInvalidDB Boolean: if true, don't check if $database is in $wgLocalDatabases * @return String: user name or false if the user doesn't exist */ - public static function whoIs( $database, $id ) { - $user = self::newFromId( $database, $id ); + public static function whoIs( $database, $id, $ignoreInvalidDB = false ) { + $user = self::newFromId( $database, $id, $ignoreInvalidDB ); if( $user ) { return $user->name; } else { @@ -64,10 +66,11 @@ class UserRightsProxy { * * @param $database String: database name * @param $id Integer: user ID + * @param $ignoreInvalidDB Boolean: if true, don't check if $database is in $wgLocalDatabases * @return UserRightsProxy or null if doesn't exist */ - public static function newFromId( $database, $id ) { - return self::newFromLookup( $database, 'user_id', intval( $id ) ); + public static function newFromId( $database, $id, $ignoreInvalidDB = false ) { + return self::newFromLookup( $database, 'user_id', intval( $id ), $ignoreInvalidDB ); } /** @@ -75,14 +78,15 @@ class UserRightsProxy { * * @param $database String: database name * @param $name String: user name + * @param $ignoreInvalidDB Boolean: if true, don't check if $database is in $wgLocalDatabases * @return UserRightsProxy or null if doesn't exist */ - public static function newFromName( $database, $name ) { - return self::newFromLookup( $database, 'user_name', $name ); + public static function newFromName( $database, $name, $ignoreInvalidDB = false ) { + return self::newFromLookup( $database, 'user_name', $name, $ignoreInvalidDB ); } - private static function newFromLookup( $database, $field, $value ) { - $db = self::getDB( $database ); + private static function newFromLookup( $database, $field, $value, $ignoreInvalidDB = false ) { + $db = self::getDB( $database, $ignoreInvalidDB ); if( $db ) { $row = $db->selectRow( 'user', array( 'user_id', 'user_name' ), @@ -102,9 +106,10 @@ class UserRightsProxy { * This may be a new connection to another database for remote users. * * @param $database String + * @param $ignoreInvalidDB Boolean: if true, don't check if $database is in $wgLocalDatabases * @return DatabaseBase or null if invalid selection */ - public static function getDB( $database ) { + public static function getDB( $database, $ignoreInvalidDB = false ) { global $wgDBname; if( self::validDatabase( $database ) ) { if( $database == $wgDBname ) { @@ -182,6 +187,29 @@ class UserRightsProxy { ), __METHOD__ ); } + + /** + * Replaces User::setOption() + */ + public function setOption( $option, $value ) { + $this->newOptions[$option] = $value; + } + + public function saveSettings() { + $rows = array(); + foreach ( $this->newOptions as $option => $value ) { + $rows[] = array( + 'up_user' => $this->id, + 'up_property' => $option, + 'up_value' => $value, + ); + } + $this->db->replace( 'user_properties', + array( array( 'up_user', 'up_property' ) ), + $rows, __METHOD__ + ); + $this->invalidateCache(); + } /** * Replaces User::touchUser() -- 2.20.1