* Database:
* ---------
*
- * The preferences table should have tree columns:
- * username char \ primary
+ * The preferences table should have three columns:
+ * user char \ primary
* prefkey char / key
* prefval blob
*
* $Id$
*/
+define('SMDB_UNKNOWN', 0);
+define('SMDB_MYSQL', 1);
+define('SMDB_PGSQL', 2);
+
require_once('DB.php');
require_once('../config/config.php');
class dbPrefs {
var $table = 'userprefs';
+ var $user_field = 'user';
+ var $key_field = 'prefkey';
+ var $val_field = 'prefval';
var $dbh = NULL;
var $error = NULL;
+ var $db_type = SMDB_UNKNOWN;
var $default = Array('chosen_theme' => '../themes/default_theme.php',
'show_html_default' => '0');
function open() {
global $prefs_dsn, $prefs_table;
+ global $prefs_user_field, $prefs_key_field, $prefs_val_field;
if(isset($this->dbh)) {
return true;
}
+ if (preg_match('/^mysql/', $prefs_dsn)) {
+ $this->db_type = SMDB_MYSQL;
+ } elseif (preg_match('/^pgsql/', $prefs_dsn)) {
+ $this->db_type = SMDB_PGSQL;
+ }
+
if (!empty($prefs_table)) {
$this->table = $prefs_table;
}
+ if (!empty($prefs_user_field)) {
+ $this->user_field = $prefs_user_field;
+ }
+ if (!empty($prefs_key_field)) {
+ $this->key_field = $prefs_key_field;
+ }
+ if (!empty($prefs_val_field)) {
+ $this->val_field = $prefs_val_field;
+ }
$dbh = DB::connect($prefs_dsn, true);
if(DB::isError($dbh) || DB::isWarning($dbh)) {
if (!$this->open()) {
return false;
}
- $query = sprintf("DELETE FROM %s WHERE user='%s' AND prefkey='%s'",
+ $query = sprintf("DELETE FROM %s WHERE %s='%s' AND %s='%s'",
$this->table,
+ $this->user_field,
$this->dbh->quoteString($user),
+ $this->key_field,
$this->dbh->quoteString($key));
$res = $this->dbh->simpleQuery($query);
if (!$this->open()) {
return false;
}
- $query = sprintf("REPLACE INTO %s (user,prefkey,prefval) ".
- "VALUES('%s','%s','%s')",
- $this->table,
- $this->dbh->quoteString($user),
- $this->dbh->quoteString($key),
- $this->dbh->quoteString($value));
-
- $res = $this->dbh->simpleQuery($query);
- if(DB::isError($res)) {
- $this->failQuery($res);
+ if ($this->db_type == SMDB_MYSQL) {
+ $query = sprintf("REPLACE INTO %s (%s, %s, %s) ".
+ "VALUES('%s','%s','%s')",
+ $this->table,
+ $this->user_field,
+ $this->key_field,
+ $this->val_field,
+ $this->dbh->quoteString($user),
+ $this->dbh->quoteString($key),
+ $this->dbh->quoteString($value));
+
+ $res = $this->dbh->simpleQuery($query);
+ if(DB::isError($res)) {
+ $this->failQuery($res);
+ }
+ } elseif ($this->db_type == SMDB_PGSQL) {
+ $this->dbh->simpleQuery("BEGIN TRANSACTION");
+ $query = sprintf("DELETE FROM %s WHERE %s='%s' AND %s='%s'",
+ $this->table,
+ $this->user_field,
+ $this->dbh->quoteString($user),
+ $this->key_field,
+ $this->dbh->quoteString($key));
+ $res = $this->dbh->simpleQuery($query);
+ if (DB::isError($res)) {
+ $this->dbh->simpleQuery("ROLLBACK TRANSACTION");
+ $this->failQuery($res);
+ }
+ $query = sprintf("INSERT INTO %s (%s, %s, %s) VALUES ('%s', '%s', '%s')",
+ $this->table,
+ $this->user_field,
+ $this->key_field,
+ $this->val_field,
+ $this->dbh->quoteString($user),
+ $this->dbh->quoteString($key),
+ $this->dbh->quoteString($value));
+ $res = $this->dbh->simpleQuery($query);
+ if (DB::isError($res)) {
+ $this->dbh->simpleQuery("ROLLBACK TRANSACTION");
+ $this->failQuery($res);
+ }
+ $this->dbh->simpleQuery("COMMIT TRANSACTION");
+ } else {
+ $query = sprintf("DELETE FROM %s WHERE %s='%s' AND %s='%s'",
+ $this->table,
+ $this->user_field,
+ $this->dbh->quoteString($user),
+ $this->key_field,
+ $this->dbh->quoteString($key));
+ $res = $this->dbh->simpleQuery($query);
+ if (DB::isError($res)) {
+ $this->failQuery($res);
+ }
+ $query = sprintf("INSERT INTO %s (%s, %s, %s) VALUES ('%s', '%s', '%s')",
+ $this->table,
+ $this->user_field,
+ $this->key_field,
+ $this->val_field,
+ $this->dbh->quoteString($user),
+ $this->dbh->quoteString($key),
+ $this->dbh->quoteString($value));
+ $res = $this->dbh->simpleQuery($query);
+ if (DB::isError($res)) {
+ $this->failQuery($res);
+ }
}
return true;
}
$prefs_cache = array();
- $query = sprintf("SELECT prefkey, prefval FROM %s ".
- "WHERE user = '%s'",
+ $query = sprintf("SELECT %s as prefkey, %s as prefval FROM %s ".
+ "WHERE %s = '%s'",
+ $this->key_field,
+ $this->val_field,
$this->table,
+ $this->user_field,
$this->dbh->quoteString($user));
$res = $this->dbh->query($query);
if (DB::isError($res)) {
if (!$this->open()) {
return;
}
- $query = sprintf("SELECT * FROM %s WHERE user='%s' ".
- "AND prefkey LIKE 'highlight%%' ORDER BY prefkey",
+ $query = sprintf("SELECT %s, %s as prefkey, %s as prefval FROM %s WHERE %s='%s' ".
+ "AND %s LIKE 'highlight%%' ORDER BY %s",
+ $this->user_field,
+ $this->key_field,
+ $this->val_field,
$this->table,
- $this->dbh->quoteString($user));
+ $this->user_field,
+ $this->dbh->quoteString($user),
+ $this->key_field,
+ $this->key_field);
$res = $this->dbh->query($query);
if(DB::isError($res)) {
$hilinum++;
if($oldkey != $newkey) {
- $query = sprintf("UPDATE %s SET prefkey='%s' ".
- "WHERE user ='%s' AND prefkey='%s'",
+ $query = sprintf("UPDATE %s SET %s='%s' ".
+ "WHERE %s ='%s' AND %s='%s'",
$this->table,
+ $this->key_field,
$this->dbh->quoteString($newkey),
+ $this->user_field,
$this->dbh->quoteString($user),
+ $this->key_field,
$this->dbh->quoteString($oldkey));
$res = $this->dbh->simpleQuery($query);
/* Writes the Signature */
function setSig($data_dir, $username, $number, $string) {
- $db = new dbPrefs;
- if(isset($db->error)) {
- $db->failQuery();
- }
-
if ($number == "g") {
$key = '___signature___';
} else {
$key = sprintf('___sig%s___', $number);
}
- $db->setKey($username, $key, $string);
+ setPref($data_dir, $username, $key, $string);
return;
}
/* Gets the signature */
function getSig($data_dir, $username, $number) {
- $db = new dbPrefs;
- if(isset($db->error)) {
- $db->failQuery();
- }
-
if ($number == "g") {
$key = '___signature___';
} else {
$key = sprintf('___sig%d___', $number);
}
- return $db->getKey($username, $key);
+ return getPref($data_dir, $username, $key);
}
?>