username = $username; $this->load(); if ($this->fix()) $this->load(); } } function load() { $rs = mysql_db_query(MANAGEDB, sprintf(SQLSELECT1WHERE, MANAGEOWNERTABLE, 'name="'.mysql_escape_string($this->username).'"')); //or exit(mysql_error()); while($r = mysql_fetch_assoc($rs)) { $this->r_owner = $r; } mysql_free_result($rs); $dbs = array(); $rs = mysql_db_query(MANAGEDB, sprintf(SQLSELECTWHERE, MANAGEDBTABLE, 'owner="'.mysql_escape_string($this->username).'" ORDER BY name')) or exit(mysql_error()); while($r = mysql_fetch_assoc($rs)) { $t = $r; $t['registered'] = 1; $t['granted'] = 0; $dbs[$r['name']] = $t; } mysql_free_result($rs); $rs = mysql_db_query('mysql', sprintf(SQLSELECTWHERE, MANAGEDBTABLE, 'User="'.mysql_escape_string($this->username).'" ORDER BY Db')); while($r = mysql_fetch_assoc($rs)) { if (!isset($dbs[$r['Db']])) { $dbs[$r['Db']] = array(); $dbs[$r['Db']]['registered'] = 0; } $dbs[$r['Db']]['granted'] = 1; $dbs[$r['Db']]['name'] = $r['Db']; } mysql_free_result($rs); foreach($dbs as $d1=>$d2) { $size = getDBSize($d1); if (is_null($size)) { $dbs[$d1]['sizeNow'] = 0; $dbs[$d1]['exists'] = 0; } else { $dbs[$d1]['sizeNow'] = $size; $this->sizeNow += $size; $dbs[$d1]['exists'] = 1; } } $this->dbs = $dbs; } function isInit() { return !is_null($this->r_owner); } function grantDB($dbname) { mysql_query('GRANT ALL PRIVILEGES ON ' .'`'.mysql_escape_string($dbname).'` . * ' .'TO \''.mysql_escape_string($this->username).'\'@\'%\'') or exit(mysql_error()); $this->flushPriv(); } function flushPriv() { mysql_query('FLUSH PRIVILEGES') or exit(mysql_error()); } function revokeDB($dbname) { mysql_db_query('mysql', 'DELETE FROM `db` WHERE ' .'User = \''.mysql_escape_string($this->username).'\' ' .'AND Db = \''.mysql_escape_string($dbname).'\'') or exit(mysql_error()); $this->flushPriv(); } function setPassword($password) { mysql_query('SET PASSWORD FOR '. '\''.mysql_escape_string($this->username).'\'@\'%\'='. 'PASSWORD(\''.mysql_escape_string($password).'\')') or exit(mysql_error()); } function init($password, $maxDBs = DEFAULT_MAX_DBS, $maxSize = DEFAULT_MAX_SIZE) { mysql_query('GRANT USAGE ON * . * TO '. '\''.mysql_escape_string($this->username).'\'@\'%\' '. 'IDENTIFIED BY \''.mysql_escape_string($password).'\'') or exit(mysql_error()); $this->flushPriv(); mysql_db_query(MANAGEDB, sprintf(SQLINSERT, MANAGEOWNERTABLE, sprintf("'%s','%s','%s',NOW(),NOW()", mysql_escape_string($this->username), $maxDBs, $maxSize))) or exit(mysql_error()); } function uninit() { mysql_db_query('mysql', 'DELETE FROM `user` WHERE ' .'User = \''.mysql_escape_string($this->username).'\'') or exit(mysql_error()); mysql_db_query('mysql', 'DELETE FROM `db` WHERE ' .'User = \''.mysql_escape_string($this->username).'\'') or exit(mysql_error()); mysql_db_query('mysql', 'DELETE FROM `tables_priv` WHERE ' .'User = \''.mysql_escape_string($this->username).'\'') or exit(mysql_error()); mysql_db_query('mysql', 'DELETE FROM `columns_priv` WHERE ' .'User = \''.mysql_escape_string($this->username).'\'') or exit(mysql_error()); mysql_query('FLUSH PRIVILEGES') or exit(mysql_error()); mysql_db_query(MANAGEDB, sprintf(SQLDELETE, MANAGEDBTABLE, 'owner=\''.mysql_escape_string($this->username).'\'')) or exit(mysql_error()); foreach($this->dbs as $db) $this->dropDB($db['name']); mysql_db_query(MANAGEDB, sprintf(SQLDELETE1, MANAGEOWNERTABLE, 'name=\''.mysql_escape_string($this->username).'\'')) or exit(mysql_error()); } function registerDB($name, $maxSize = DEFAULT_MAX_DB_SIZE) { mysql_db_query(MANAGEDB, sprintf(SQLINSERT, MANAGEDBTABLE, sprintf("'%s','%s','%s','',NOW(),NOW()", mysql_escape_string($name), mysql_escape_string($this->username), $maxSize))) or exit(mysql_error()); } function unregisterDB($name) { mysql_db_query(MANAGEDB, sprintf(SQLDELETE1, MANAGEDBTABLE, 'name="'.mysql_escape_string($name).'"')) or exit(mysql_error()); } function createDB($name) { @mysql_create_db($name); } function dropDB($name) { @mysql_drop_db($name); } function addDB($name) { if (!$this->isExists($name)) $this->createDB($name); if (!$this->isRegistered($name)) $this->registerDB($name); if (!$this->isGranted($name)) $this->grantDB($name); } function delDB($name) { $this->revokeDB($name); $this->unregisterDB($name); $this->dropDB($name); } function getNumDBs() { return count($this->dbs); } function getTotalSize() { return $this->sizeNow; } function isRegistered($name) { if (isset($this->dbs[$name])) return $this->dbs[$name]['registered']; else return false; } function isExists($name) { if (isset($this->dbs[$name])) return $this->dbs[$name]['exists']; else return false; } function isGranted($name) { if (isset($this->dbs[$name])) return $this->dbs[$name]['granted']; else return false; } function printOwnerHeader() { echo ''; echo '

'; echo '

databases:

'; echo '

storage:

'; echo '

modified:

'; // echo '

created:

'; echo ''; } function printOwner() { $obj_owner = $this->r_owner; echo ''; $this->printOwnerHeader(); echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; // echo ''; echo ''; echo '

status:

',$this->getNumDBs(),'

',sprintSize($this->getTotalSize()),'

limits:

',$obj_owner['maxDB'],'

',sprintSize($obj_owner['maxSize']),'

',sprintTS($obj_owner['modified']),'

',sprintTS($obj_owner['created']),'

'; } function printOwnerDBs($showOwner = false) { $rows = $this->dbs; echo ''; echo '

name:

'; echo '

owner:

'; echo '

last size:

'; echo '

size:

'; echo '

modified:

'; // echo '

created:

'; echo ''; foreach($rows as $name=>$r) { echo ''; echo '

',$name,'

'; echo '

',$r['owner'],'

'; /* echo '

',sprintSize($r['sizeMax']),'

';*/ echo '

',sprintSize($r['sizeLast']),'

'; echo '

',sprintSize($r['sizeNow']),'

'; echo '

',sprintTS($r['modified']),'

'; // echo '

',sprintTS($r['created']),'

'; echo '
'; echo ''; echo '
'; echo '
'; echo ''; echo '
'; echo '
'; echo ''; flush(); } } function fix() { $fixed = false; foreach($this->dbs as $db) { if (!$db['registered']) { echo '

',TEXT_FIXREG,$db['name'],'

'; flush(); $this->registerDB($db['name']); $fixed = true; } } return $fixed; } function getNumMaxDBs() { return $this->r_owner['maxDB']; } } class DBAdmin { function mysqlDBList() { $rs = mysql_query('SHOW DATABASES'); $dbs = array(); while($r = mysql_fetch_row($rs)) { $dbs[$r[0]] = array(); $dbs[$r[0]]['registered'] = 0; $dbs[$r[0]]['granted'] = 0; $dbs[$r[0]]['exists'] = 1; $dbs[$r[0]]['owner'] = ''; $dbs[$r[0]]['sizeLast'] = 0; $dbs[$r[0]]['sizeNow'] = ''; $dbs[$r[0]]['modified'] = ''; $dbs[$r[0]]['created'] = ''; } return $dbs; } function fullDBList() { //$dbs = array(); $dbs = $this->mysqlDBList(); $rs = mysql_db_query(MANAGEDB, sprintf(SQLSELECT, MANAGEDBTABLE)) or exit(mysql_error()); while($r = mysql_fetch_assoc($rs)) { $t = $r; $t['registered'] = 1; $t['granted'] = 0; $dbs[$r['name']] = $t; } mysql_free_result($rs); $rs = mysql_db_query('mysql', sprintf(SQLSELECT, MANAGEDBTABLE)); while($r = mysql_fetch_assoc($rs)) { if (!isset($dbs[$r['Db']])) { $dbs[$r['Db']] = array(); $dbs[$r['Db']]['registered'] = 0; } $dbs[$r['Db']]['granted'] = 1; $dbs[$r['Db']]['name'] = $r['Db']; } mysql_free_result($rs); foreach($dbs as $d1=>$d2) { $size = getDBSize($d1); if (is_null($size)) { $dbs[$d1]['sizeNow'] = 0; $dbs[$d1]['exists'] = 0; } else { $dbs[$d1]['sizeNow'] = $size; //$this->sizeNow += $size; $dbs[$d1]['exists'] = 1; } } return $dbs; } function printDBs($rows) { if (ob_get_contents()) ob_end_flush(); echo ''; echo '

name:

'; echo '

owner:

'; echo '

last size:

'; echo '

size:

'; echo '

modified:

'; echo '

created:

'; echo ''; foreach($rows as $name=>$r) { echo ''; echo '

',$name,'

'; // echo '

',$r['owner'],'

'; echo '

',$r['owner'],'

'; /* echo '

',sprintSize($r['sizeMax']),'

';*/ echo '

',sprintSize($r['sizeLast']),'

'; echo '

',sprintSize($r['sizeNow']),'

'; echo '

',sprintTS($r['modified']),'

'; echo '

',sprintTS($r['created']),'

'; echo '
';
			echo $r['exists']?'E':'';
			echo $r['granted']?'G':'';
			echo $r['registered']?'R':'';
			echo '
'; echo '
'; echo ''; echo '
'; echo '
'; echo ''; echo '
'; echo '
'; echo ''; flush(); } } }