Fix loading of plugin configs: user prefs will always survive (#1486368)

release-0.6
thomascube 15 years ago
parent 030db5b6c0
commit b545d3e838

@ -1,6 +1,7 @@
CHANGELOG RoundCube Webmail CHANGELOG RoundCube Webmail
=========================== ===========================
- Fix merging of configuration parameters: user prefs always survive (#1486368)
- Fix quota indicator value after folder purge/expunge (#1486488) - Fix quota indicator value after folder purge/expunge (#1486488)
- Fix external mailto links support for use as protocol handler (#1486037) - Fix external mailto links support for use as protocol handler (#1486037)
- Fix attachment excessive memory use, support messages of any size (#1484660) - Fix attachment excessive memory use, support messages of any size (#1484660)

@ -178,7 +178,7 @@ class rcmail
$GLOBALS['USER'] = $this->user; $GLOBALS['USER'] = $this->user;
// overwrite config with user preferences // overwrite config with user preferences
$this->config->merge((array)$this->user->get_prefs()); $this->config->set_user_prefs((array)$this->user->get_prefs());
} }
$_SESSION['language'] = $this->user->language = $this->language_prop($this->config->get('language', $_SESSION['language'])); $_SESSION['language'] = $this->user->language = $this->language_prop($this->config->get('language', $_SESSION['language']));

@ -28,6 +28,7 @@ class rcube_config
{ {
private $prop = array(); private $prop = array();
private $errors = array(); private $errors = array();
private $userprefs = array();
/** /**
@ -132,12 +133,12 @@ class rcube_config
* @param string Full path to the config file to be loaded * @param string Full path to the config file to be loaded
* @return booelan True on success, false on failure * @return booelan True on success, false on failure
*/ */
public function load_from_file($fpath, $merge = true) public function load_from_file($fpath)
{ {
if (is_file($fpath) && is_readable($fpath)) { if (is_file($fpath) && is_readable($fpath)) {
include($fpath); include($fpath);
if (is_array($rcmail_config)) { if (is_array($rcmail_config)) {
$this->prop = $merge ? array_merge($this->prop, $rcmail_config) : $this->prop + $rcmail_config; $this->prop = array_merge($this->prop, $rcmail_config, $this->userprefs);
return true; return true;
} }
} }
@ -178,6 +179,19 @@ class rcube_config
*/ */
public function merge($prefs) public function merge($prefs)
{ {
$this->prop = array_merge($this->prop, $prefs, $this->userprefs);
}
/**
* Merge the given prefs over the current config
* and make sure that they survive further merging.
*
* @param array Hash array with user prefs
*/
public function set_user_prefs($prefs)
{
$this->userprefs = $prefs;
$this->prop = array_merge($this->prop, $prefs); $this->prop = array_merge($this->prop, $prefs);
} }

@ -59,7 +59,7 @@ abstract class rcube_plugin
{ {
$fpath = $this->home.'/'.$fname; $fpath = $this->home.'/'.$fname;
$rcmail = rcmail::get_instance(); $rcmail = rcmail::get_instance();
if (is_file($fpath) && !$rcmail->config->load_from_file($fpath, false)) { if (is_file($fpath) && !$rcmail->config->load_from_file($fpath)) {
raise_error(array('code' => 527, 'type' => 'php', raise_error(array('code' => 527, 'type' => 'php',
'file' => __FILE__, 'line' => __LINE__, 'file' => __FILE__, 'line' => __LINE__,
'message' => "Failed to load config from $fpath"), true, false); 'message' => "Failed to load config from $fpath"), true, false);

@ -123,7 +123,7 @@ class rcube_user
$this->language = $_SESSION['language']; $this->language = $_SESSION['language'];
if ($this->db->affected_rows()) { if ($this->db->affected_rows()) {
$config->merge($a_user_prefs); $config->set_user_prefs($a_user_prefs);
return true; return true;
} }

Loading…
Cancel
Save