- /**
- ** db_prefs.php
- **
- ** This contains functions for manipulating user preferences
- ** stored in a database, accessed though the Pear DB layer.
- **
- ** To use this instead of the regular prefs.php, create a
- ** database as described below, and replace prefs.php
- ** with this file.
- **
- ** Database:
- ** ---------
- **
- ** The preferences table should have tree columns:
- ** username char \ primary
- ** prefkey char / key
- ** prefval blob
- **
- ** CREATE TABLE userprefs (user CHAR(32) NOT NULL DEFAULT '',
- ** prefkey CHAR(64) NOT NULL DEFAULT '',
- ** prefval BLOB NOT NULL DEFAULT '',
- ** primary key (user,prefkey));
- **
- ** Configuration of databasename, username and password is done
- ** by changing $DSN below.
- **
- ** $Id$
- **/
-
- require_once('DB.php');
-
- class dbPrefs {
- var $DSN = 'mysql://user@host/database';
- var $table = 'userprefs';
-
- var $dbh = NULL;
- var $error = NULL;
-
- var $default = Array('chosen_theme' => '../themes/default_theme.php',
- 'show_html_default' => '0');
-
- function dbPrefs() {
- $this->open();
- }
-
- function open() {
- if(isset($this->dbh)) return true;
- $dbh = DB::connect($this->DSN, true);
+
+/*
+ * db_prefs.php
+ *
+ * Copyright (c) 1999-2002 The SquirrelMail Project Team
+ * Licensed under the GNU GPL. For full terms see the file COPYING.
+ *
+ * This contains functions for manipulating user preferences
+ * stored in a database, accessed though the Pear DB layer.
+ *
+ * To use this instead of the regular prefs.php, create a
+ * database as described below, and replace prefs.php
+ * with this file.
+ *
+ * Database:
+ * ---------
+ *
+ * The preferences table should have three columns:
+ * user char \ primary
+ * prefkey char / key
+ * prefval blob
+ *
+ * CREATE TABLE userprefs (user CHAR(128) NOT NULL DEFAULT '',
+ * prefkey CHAR(64) NOT NULL DEFAULT '',
+ * prefval BLOB NOT NULL DEFAULT '',
+ * primary key (user,prefkey));
+ *
+ * Configuration of databasename, username and password is done
+ * by using conf.pl or the administrator plugin
+ *
+ * $Id$
+ */
+
+define('SMDB_UNKNOWN', 0);
+define('SMDB_MYSQL', 1);
+define('SMDB_PGSQL', 2);
+
+require_once('DB.php');
+require_once('../config/config.php');
+
+global $prefs_are_cached, $prefs_cache;
+
+function cachePrefValues($username) {
+ global $prefs_are_cached, $prefs_cache;
+
+ if ($prefs_are_cached) {
+ return;
+ }
+
+ session_unregister('prefs_cache');
+ session_unregister('prefs_are_cached');
+
+ $db = new dbPrefs;
+ if(isset($db->error)) {
+ printf( _("Preference database error (%s). Exiting abnormally"),
+ $db->error);
+ exit;
+ }
+
+ $db->fillPrefsCache($username);
+ if (isset($db->error)) {
+ printf( _("Preference database error (%s). Exiting abnormally"),
+ $db->error);
+ exit;
+ }
+
+ $prefs_are_cached = true;
+
+ session_register('prefs_cache');
+ session_register('prefs_are_cached');
+}
+
+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);