From 0c08b0477864d4fa65a6fd9c8eb20f45e996f38d Mon Sep 17 00:00:00 2001 From: Aleksander Machniak <alec@alec.pl> Date: Thu, 21 May 2015 04:19:46 -0400 Subject: [PATCH] Fix issues when using moduserprefs.sh without --user argument (#1490399) --- program/lib/Roundcube/rcube_user.php | 27 ++++++++++++++++++--------- 1 files changed, 18 insertions(+), 9 deletions(-) diff --git a/program/lib/Roundcube/rcube_user.php b/program/lib/Roundcube/rcube_user.php index 8ed34fc..81e8892 100644 --- a/program/lib/Roundcube/rcube_user.php +++ b/program/lib/Roundcube/rcube_user.php @@ -169,9 +169,11 @@ * Write the given user prefs to the user's record * * @param array $a_user_prefs User prefs to save + * @param bool $no_session Simplified language/preferences handling + * * @return boolean True on success, False on failure */ - function save_prefs($a_user_prefs) + function save_prefs($a_user_prefs, $no_session = false) { if (!$this->ID) return false; @@ -198,32 +200,39 @@ } $save_prefs = serialize($save_prefs); + if (!$no_session) { + $this->language = $_SESSION['language']; + } $this->db->query( "UPDATE ".$this->db->table_name('users', true). " SET `preferences` = ?, `language` = ?". " WHERE `user_id` = ?", $save_prefs, - $_SESSION['language'], + $this->language, $this->ID); - - $this->language = $_SESSION['language']; // Update success if ($this->db->affected_rows() !== false) { - $config->set_user_prefs($a_user_prefs); $this->data['preferences'] = $save_prefs; - if (isset($_SESSION['preferences'])) { - $this->rc->session->remove('preferences'); - $this->rc->session->remove('preferences_time'); + if (!$no_session) { + $config->set_user_prefs($a_user_prefs); + + if (isset($_SESSION['preferences'])) { + $this->rc->session->remove('preferences'); + $this->rc->session->remove('preferences_time'); + } } + return true; } // Update error, but we are using replication (we have read-only DB connection) // and we are storing session not in the SQL database // we can store preferences in session and try to write later (see get_prefs()) - else if ($this->db->is_replicated() && $config->get('session_storage', 'db') != 'db') { + else if (!$no_session && $this->db->is_replicated() + && $config->get('session_storage', 'db') != 'db' + ) { $_SESSION['preferences'] = $save_prefs; $_SESSION['preferences_time'] = time(); $config->set_user_prefs($a_user_prefs); -- Gitblit v1.9.1