+ $groups = $this->getUserGroups( $database, $userid );
+
+ $this->showEditUserGroupsForm( $username, $groups );
+
+ if ($database == '') {
+ $this->showLogFragment( User::newFromName($username), $wgOut );
+ }
+ }
+
+ function splitUsername( $username ) {
+ $parts = explode( '@', $username );
+ if( count( $parts ) < 2 ) {
+ return array( '', $username );
+ }
+ list( $name, $database ) = $parts;
+
+ global $wgLocalDatabases;
+ return array_search( $database, $wgLocalDatabases ) !== false
+ ? array( $database, $name )
+ : new WikiError( 'Bogus database suffix "' . wfEscapeWikiText( $database ) . '"' );
+ }
+
+ /**
+ * Open a database connection to work on for the requested user.
+ * This may be a new connection to another database for remote users.
+ * @param string $database
+ * @return Database
+ */
+ function &getDB( $database ) {
+ if( $database == '' ) {
+ $db =& wfGetDB( DB_MASTER );
+ } else {
+ global $wgDBuser, $wgDBpassword;
+ $server = $this->getMaster( $database );
+ $db = new Database( $server, $wgDBuser, $wgDBpassword, $database );
+ }
+ return $db;
+ }
+
+ /**
+ * Return the master server to connect to for the requested database.
+ */
+ function getMaster( $database ) {
+ global $wgDBserver, $wgAlternateMaster;
+ if( isset( $wgAlternateMaster[$database] ) ) {
+ return $wgAlternateMaster[$database];
+ }
+ return $wgDBserver;
+ }
+
+ function getUserId( $database, $name ) {
+ if( $name === '' )
+ return 0;
+ return ( $name{0} == "#" )
+ ? IntVal( substr( $name, 1 ) )
+ : IntVal( $this->db->selectField( 'user',
+ 'user_id',
+ array( 'user_name' => $name ),
+ 'MakesysopStewardForm::getUserId' ) );
+ }
+
+ function getUserGroups( $database, $userid ) {
+ $res = $this->db->select( 'user_groups',
+ array( 'ug_group' ),
+ array( 'ug_user' => $userid ),
+ 'MakesysopStewardForm::getUserGroups' );
+ $groups = array();
+ while( $row = $this->db->fetchObject( $res ) ) {
+ $groups[] = $row->ug_group;
+ }
+ return $groups;
+ }
+
+ function addUserGroup( $database, $userid, $group ) {
+ $this->db->insert( 'user_groups',
+ array(
+ 'ug_user' => $userid,
+ 'ug_group' => $group,
+ ),
+ 'MakesysopStewardForm::addUserGroup',
+ array( 'IGNORE' ) );
+ }
+
+ function removeUserGroup( $database, $userid, $group ) {
+ $this->db->delete( 'user_groups',
+ array(
+ 'ug_user' => $userid,
+ 'ug_group' => $group,
+ ),
+ 'MakesysopStewardForm::addUserGroup' );
+ }
+
+ function touchUser( $database, $userid ) {
+ $this->db->update( 'user',
+ array( 'user_touched' => $this->db->timestamp() ),
+ array( 'user_id' => $userid ),
+ 'MakesysopStewardForm::touchUser' );
+
+ global $wgMemc;
+ if ( function_exists( 'wfForeignMemcKey' ) ) {
+ $key = wfForeignMemcKey( $database, false, 'user', 'id', $userid );
+ } else {
+ $key = "$database:user:id:$userid";
+ }
+ $wgMemc->delete( $key );