+ $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;
+
+ sqsession_register($prefs_cache, 'prefs_cache');
+ sqsession_register($prefs_are_cached, 'prefs_are_cached');
+}
+
+/**
+ * Class used to handle connections to prefs database and operations with preferences
+ *
+ * @package squirrelmail
+ * @subpackage prefs
+ * @since 1.1.3
+ *
+ */
+class dbPrefs {
+ /**
+ * Table used to store preferences
+ * @var string
+ */
+ var $table = 'userprefs';
+
+ /**
+ * Field used to store owner of preference
+ * @var string
+ */
+ var $user_field = 'user';
+
+ /**
+ * Field used to store preference name
+ * @var string
+ */
+ var $key_field = 'prefkey';
+
+ /**
+ * Field used to store preference value
+ * @var string
+ */
+ var $val_field = 'prefval';
+
+ /**
+ * Database connection object
+ * @var object
+ */
+ var $dbh = NULL;
+
+ /**
+ * Error messages
+ * @var string
+ */
+ var $error = NULL;
+
+ /**
+ * Database type (SMDB_* constants)
+ * Is used in setKey().
+ * @var integer
+ */
+ var $db_type = SMDB_UNKNOWN;
+
+ /**
+ * Default preferences
+ * @var array
+ */
+ var $default = Array('theme_default' => 0,
+ 'show_html_default' => '0');
+
+ /**
+ * Preference owner field size
+ * @var integer
+ * @since 1.5.1
+ */
+ var $user_size = 128;
+
+ /**
+ * Preference key field size
+ * @var integer
+ * @since 1.5.1
+ */
+ var $key_size = 64;
+
+ /**
+ * Preference value field size
+ * @var integer
+ * @since 1.5.1
+ */
+ var $val_size = 65536;
+
+
+
+ /**
+ * initialize the default preferences array.
+ *
+ */
+ function dbPrefs() {
+ // Try and read the default preferences file.
+ $default_pref = SM_PATH . 'config/default_pref';
+ if (@file_exists($default_pref)) {
+ if ($file = @fopen($default_pref, 'r')) {
+ while (!feof($file)) {
+ $pref = fgets($file, 1024);
+ $i = strpos($pref, '=');
+ if ($i > 0) {
+ $this->default[trim(substr($pref, 0, $i))] = trim(substr($pref, $i + 1));
+ }
+ }
+ fclose($file);
+ }
+ }
+ }
+
+ /**
+ * initialize DB connection object
+ *
+ * @return boolean true, if object is initialized
+ *
+ */
+ function open() {
+ global $prefs_dsn, $prefs_table;
+ global $prefs_user_field, $prefs_key_field, $prefs_val_field;
+ global $prefs_user_size, $prefs_key_size, $prefs_val_size;
+
+ /* test if Pear DB class is available and freak out if it is not */
+ if (! class_exists('DB')) {
+ // same error also in abook_database.php
+ $this->error = _("Could not include PEAR database functions required for the database backend.") . "\n";
+ $this->error .= sprintf(_("Is PEAR installed, and is the include path set correctly to find %s?"),
+ 'DB.php') . "\n";
+ $this->error .= _("Please contact your system administrator and report this error.");
+ return false;
+ }