X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/mediawiki.git/blobdiff_plain/87219ebd28426c6d21cb545233ee52f5f7af7dfd..refs/tags/mediawiki-1.17.0:/includes/UserRightsProxy.php diff --git a/includes/UserRightsProxy.php b/includes/UserRightsProxy.php index 0d6b8151..6c2a5f12 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,10 +106,11 @@ 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 ) { - global $wgLocalDatabases, $wgDBname; + public static function getDB( $database, $ignoreInvalidDB = false ) { + global $wgDBname; if( self::validDatabase( $database ) ) { if( $database == $wgDBname ) { // Hmm... this shouldn't happen though. :) @@ -152,7 +157,7 @@ class UserRightsProxy { array( 'ug_user' => $this->id ), __METHOD__ ); $groups = array(); - while( $row = $this->db->fetchObject( $res ) ) { + foreach ( $res as $row ) { $groups[] = $row->ug_group; } return $groups; @@ -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() @@ -193,11 +221,7 @@ class UserRightsProxy { __METHOD__ ); global $wgMemc; - if ( function_exists( 'wfForeignMemcKey' ) ) { - $key = wfForeignMemcKey( $this->database, false, 'user', 'id', $this->id ); - } else { - $key = "$this->database:user:id:" . $this->id; - } + $key = wfForeignMemcKey( $this->database, false, 'user', 'id', $this->id ); $wgMemc->delete( $key ); } }