summaryrefslogtreecommitdiff
path: root/program
diff options
context:
space:
mode:
Diffstat (limited to 'program')
-rw-r--r--program/include/rcube_user.php26
1 files changed, 17 insertions, 9 deletions
diff --git a/program/include/rcube_user.php b/program/include/rcube_user.php
index e4152e65e..0c044cadf 100644
--- a/program/include/rcube_user.php
+++ b/program/include/rcube_user.php
@@ -5,7 +5,7 @@
| program/include/rcube_user.inc |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
| PURPOSE: |
@@ -98,31 +98,39 @@ class rcube_user
/**
* Write the given user prefs to the user's record
*
- * @param mixed User prefs to save
+ * @param array User prefs to save
* @return boolean True on success, False on failure
*/
function save_prefs($a_user_prefs)
{
if (!$this->ID)
return false;
+
+ $config = rcmail::get_instance()->config;
+ $old_prefs = (array)$this->get_prefs();
// merge (partial) prefs array with existing settings
- $a_user_prefs += (array)$this->get_prefs();
- unset($a_user_prefs['language']);
-
+ $save_prefs = $a_user_prefs + $old_prefs;
+ unset($save_prefs['language']);
+
+ // don't save prefs with default values if they haven't been changed yet
+ foreach ($a_user_prefs as $key => $value) {
+ if (!isset($old_prefs[$key]) && ($value == $config->get($key)))
+ unset($save_prefs[$key]);
+ }
+
$this->db->query(
"UPDATE ".get_table_name('users')."
SET preferences=?,
language=?
WHERE user_id=?",
- serialize($a_user_prefs),
+ serialize($save_prefs),
$_SESSION['language'],
$this->ID);
$this->language = $_SESSION['language'];
- if ($this->db->affected_rows())
- {
- rcmail::get_instance()->config->merge($a_user_prefs);
+ if ($this->db->affected_rows()) {
+ $config->merge($a_user_prefs);
return true;
}