save lang and collation_connection to user preferences

This commit is contained in:
Crack
2010-07-19 23:57:12 +02:00
parent 8c28b69aba
commit c67340d023
3 changed files with 72 additions and 26 deletions

View File

@@ -420,9 +420,11 @@ class PMA_Config
* must be called after control connection has been estabilished * must be called after control connection has been estabilished
* *
* @uses $GLOBALS['cfg'] * @uses $GLOBALS['cfg']
* @uses $_SESSION['cache']['config_mtime'] * @uses $GLOBALS['collation_connection']
* @uses $_SESSION['cache']['userprefs'] * @uses $GLOBALS['lang']
* @uses $_SESSION['cache']['userprefs_mtime'] * @uses $_SESSION['cache']['server_$server']['config_mtime']
* @uses $_SESSION['cache']['server_$server']['userprefs']
* @uses $_SESSION['cache']['server_$server']['userprefs_mtime']
* @uses $_SESSION['PMA_Theme_Manager'] * @uses $_SESSION['PMA_Theme_Manager']
* @uses PMA_apply_userprefs() * @uses PMA_apply_userprefs()
* @uses PMA_array_merge_recursive() * @uses PMA_array_merge_recursive()
@@ -472,14 +474,11 @@ class PMA_Config
// changes are made only in index.php so everything is set when // changes are made only in index.php so everything is set when
// in frames // in frames
// load/save theme // save theme
// theme cookie exists only if we are using non-default theme
$tmanager = $_SESSION['PMA_Theme_Manager']; $tmanager = $_SESSION['PMA_Theme_Manager'];
// save new theme
if ($tmanager->getThemeCookie() || isset($_REQUEST['set_theme'])) { if ($tmanager->getThemeCookie() || isset($_REQUEST['set_theme'])) {
if (!isset($config_data['ThemeDefault']) if ((!isset($config_data['ThemeDefault']) && $tmanager->theme->getId() != 'original')
|| $config_data['ThemeDefault'] != $tmanager->theme->getId()) { || isset($config_data['ThemeDefault']) && $config_data['ThemeDefault'] != $tmanager->theme->getId()) {
// new theme was set in common.inc.php // new theme was set in common.inc.php
$this->setUserValue(null, 'ThemeDefault', $tmanager->theme->getId(), 'original'); $this->setUserValue(null, 'ThemeDefault', $tmanager->theme->getId(), 'original');
} }
@@ -492,9 +491,37 @@ class PMA_Config
} }
} }
// save new font size // save font size
if (!isset($config_data['fontsize']) || $org_fontsize != $config_data['fontsize']) { if ((!isset($config_data['fontsize']) && $org_fontsize != '82%')
$this->setUserValue('pma_fontsize', 'fontsize', $org_fontsize, '82%'); || isset($config_data['fontsize']) && $org_fontsize != $config_data['fontsize']) {
$this->setUserValue(null, 'fontsize', $org_fontsize, '82%');
}
// save language
if (isset($_COOKIE['pma_lang']) || isset($_POST['lang'])) {
if ((!isset($config_data['lang']) && $GLOBALS['lang'] != 'en')
|| isset($config_data['lang']) && $GLOBALS['lang'] != $config_data['lang']) {
$this->setUserValue(null, 'lang', $GLOBALS['lang'], 'en');
}
} else {
// read language from settings
if (isset($config_data['lang']) && PMA_langSet($config_data['lang'])) {
$this->setCookie('pma_lang', $GLOBALS['lang']);
}
}
// save connection collation
if (isset($_COOKIE['pma_collation_connection']) || isset($_POST['collation_connection'])) {
if ((!isset($config_data['collation_connection']) && $GLOBALS['collation_connection'] != 'utf8_general_ci')
|| isset($config_data['collation_connection']) && $GLOBALS['collation_connection'] != $config_data['collation_connection']) {
$this->setUserValue(null, 'collation_connection', $GLOBALS['collation_connection'], 'utf8_general_ci');
}
} else {
// read collation from settings
if (isset($config_data['collation_connection'])) {
$GLOBALS['collation_connection'] = $config_data['collation_connection'];
$this->setCookie('pma_collation_connection', $GLOBALS['collation_connection']);
}
} }
} }

View File

@@ -135,8 +135,11 @@ function PMA_apply_userprefs(array $config_data)
$cfg = array(); $cfg = array();
$blacklist = array_flip($GLOBALS['cfg']['UserprefsDisallow']); $blacklist = array_flip($GLOBALS['cfg']['UserprefsDisallow']);
$whitelist = array_flip(PMA_read_userprefs_fieldnames()); $whitelist = array_flip(PMA_read_userprefs_fieldnames());
// whitelist some additional fields which are custom handled
$whitelist['ThemeDefault'] = true; $whitelist['ThemeDefault'] = true;
$whitelist['fontsize'] = true; $whitelist['fontsize'] = true;
$whitelist['lang'] = true;
$whitelist['collation_connection'] = true;
foreach ($config_data as $path => $value) { foreach ($config_data as $path => $value) {
if (!isset($whitelist[$path]) || isset($blacklist[$path])) { if (!isset($whitelist[$path]) || isset($blacklist[$path])) {
continue; continue;
@@ -210,19 +213,21 @@ function PMA_persist_option($path, $value, $default_value)
*/ */
function PMA_userprefs_redirect(array $forms, array $old_settings, $file_name, $params = null) function PMA_userprefs_redirect(array $forms, array $old_settings, $file_name, $params = null)
{ {
// compute differences and check whether left frame should be refreshed $reload_left_frame = isset($params['reload_left_frame']) && $params['reload_left_frame'];
$old_settings = isset($old_settings['config_data']) if (!$reload_left_frame) {
? $old_settings['config_data'] // compute differences and check whether left frame should be refreshed
: array(); $old_settings = isset($old_settings['config_data'])
$new_settings = ConfigFile::getInstance()->getConfigArray(); ? $old_settings['config_data']
$diff_keys = array_keys(array_diff_assoc($old_settings, $new_settings) : array();
+ array_diff_assoc($new_settings, $old_settings)); $new_settings = ConfigFile::getInstance()->getConfigArray();
$check_keys = array('NaturalOrder', 'MainPageIconic', 'DefaultTabDatabase'); $diff_keys = array_keys(array_diff_assoc($old_settings, $new_settings)
$check_keys = array_merge($check_keys, $forms['Left_frame']['Left_frame'], + array_diff_assoc($new_settings, $old_settings));
$forms['Left_frame']['Left_databases']); $check_keys = array('NaturalOrder', 'MainPageIconic', 'DefaultTabDatabase');
$diff = array_intersect($check_keys, $diff_keys); $check_keys = array_merge($check_keys, $forms['Left_frame']['Left_frame'],
$reload_left_frame = !empty($diff) $forms['Left_frame']['Left_databases']);
|| (isset($params['reload_left_frame']) && $params['reload_left_frame']); $diff = array_intersect($check_keys, $diff_keys);
$reload_left_frame = !empty($diff);
}
// redirect // redirect
$url_params = array( $url_params = array(

View File

@@ -133,15 +133,27 @@ if (isset($_POST['submit_export']) && filter_input(INPUT_POST, 'export_type') ==
// check for ThemeDefault and fontsize // check for ThemeDefault and fontsize
$params = array(); $params = array();
if (isset($config['ThemeDefault']) if (isset($config['ThemeDefault'])
&& $_SESSION['PMA_Theme_Manager']->theme->getId() != $config['ThemeDefault']
&& $_SESSION['PMA_Theme_Manager']->checkTheme($config['ThemeDefault'])) { && $_SESSION['PMA_Theme_Manager']->checkTheme($config['ThemeDefault'])) {
$_SESSION['PMA_Theme_Manager']->setActiveTheme($config['ThemeDefault']); $_SESSION['PMA_Theme_Manager']->setActiveTheme($config['ThemeDefault']);
$_SESSION['PMA_Theme_Manager']->setThemeCookie(); $_SESSION['PMA_Theme_Manager']->setThemeCookie();
$params['reload_left_frame'] = true; $params['reload_left_frame'] = true;
} }
if (isset($config['fontsize'])) { if (isset($config['fontsize'])
&& $config['fontsize'] != $GLOBALS['PMA_Config']->get('fontsize')) {
$params['set_fontsize'] = $config['fontsize']; $params['set_fontsize'] = $config['fontsize'];
$params['reload_left_frame'] = true; $params['reload_left_frame'] = true;
} }
if (isset($config['lang'])
&& $config['lang'] != $GLOBALS['lang']) {
$params['lang'] = $config['lang'];
$params['reload_left_frame'] = true;
}
if (isset($config['collation_connection'])
&& $config['collation_connection'] != $GLOBALS['collation_connection']) {
$params['collation_connection'] = $config['collation_connection'];
$params['reload_left_frame'] = true;
}
// save settings // save settings
$old_settings = PMA_load_userprefs(); $old_settings = PMA_load_userprefs();
@@ -182,6 +194,8 @@ if (isset($_POST['submit_export']) && filter_input(INPUT_POST, 'export_type') ==
$GLOBALS['PMA_Config']->removeCookie('pma_fontsize'); $GLOBALS['PMA_Config']->removeCookie('pma_fontsize');
$params['reload_left_frame'] = true; $params['reload_left_frame'] = true;
} }
$GLOBALS['PMA_Config']->removeCookie('pma_collaction_connection');
$GLOBALS['PMA_Config']->removeCookie('pma_lang');
PMA_userprefs_redirect($forms, $old_settings, 'prefs_manage.php', $params); PMA_userprefs_redirect($forms, $old_settings, 'prefs_manage.php', $params);
exit; exit;
} else { } else {