+ function exists() {
+ return count($this->info);
+ }
+ function getUserId() {
+ return $this->exists()?$this->info['UserId']:'';
+ }
+ function getUsername() {
+ return $this->exists()?$this->info['Username']:'';
+ }
+ function setPassword($pwd) {
+ $arr['Password'] = base64_encode($pwd);
+ $sql = sprintf("UPDATE User %s WHERE UserId = '%s'",
+ buildSQLSet($arr), mysql_escape_string($this->getUserId()));
+ DBUpdate($sql);
+ }
+ function signup($pwd) {
+ $this->pass = $pwd;
+ $arr['Password'] = base64_encode($pwd);
+ $arr['bEnabled'] = 1;
+ $arr['dSignup'] = 'NOW()';
+ $sql = sprintf("UPDATE User %s WHERE UserId = '%s'",
+ buildSQLSet($arr), mysql_escape_string($this->getUserId()));
+ DBUpdate($sql);
+
+ $this->setUsage();
+ $this->setAccess();
+ }
+ function setUsage($yes=true) {
+ $verb = $yes?'GRANT':'REVOKE';
+ $prep = $yes?'TO':'FROM';
+ $suffix = $yes?sprintf("IDENTIFIED BY `%s`",mysql_escape_string($this->pass)):'';
+ $sql = sprintf("%s USAGE ON * . * %s '%s'@'%s' %s",
+ mysql_escape_string($verb),
+ mysql_escape_string($prep),
+ mysql_escape_string($this->getUsername()),
+ '%',
+ mysql_escape_string($suffix));
+ DBGrant($sql);
+ }
+ function setAccess($db=null,$yes=true) {
+ $verb = $yes?'GRANT':'REVOKE';
+ $prep = $yes?'TO':'FROM';
+ if (is_null($db)) {
+ $this->dblist = $this->getDBList();
+ $dbs = $this->dblist;
+ } else {
+ $dbs[] = array('Name'=>$db);
+ }
+ foreach($dbs as $db) {
+ $name = $db['Name'];
+ $sql = sprintf("%s ALL PRIVILEGES ON `%s` . * %s '%s'@'%s'",
+ mysql_escape_string($verb),
+ mysql_escape_string($name),
+ mysql_escape_string($prep),
+ $this->getUsername,
+ '%');
+ DBGrant($sql);
+ }
+ }
+ function getDBList() {
+ $sql = sprintf("SELECT *
+ FROM DBOwner
+ INNER JOIN DB ON DB.DatabaseId = DBOwner.DatabaseId
+ INNER JOIN DBQuota ON DBQuota.DatabaseId = DBOwner.DatabaseId
+ WHERE UserId = '%s'",
+ mysql_escape_string($this->getUserId()));
+ $r = fetchRows(DBSelect($sql),'DatabaseId');
+ return $r;
+ }