* Preferences: show verification errors on entering preferences too, not only when attempting to save

This commit is contained in:
Ralf Becker 2012-06-14 10:07:30 +00:00
parent 0446c2e0ea
commit 6919d8a9d3
2 changed files with 32 additions and 12 deletions

View File

@ -169,7 +169,7 @@
} }
if($this->debug) if($this->debug)
{ {
echo 'Preferences array:' . "\n"; echo 'Preferences array: ' . $app . "\n";
_debug_array($this->prefs); _debug_array($this->prefs);
} }
/* Ensure that a struct will be returned via xml-rpc (this might change) */ /* Ensure that a struct will be returned via xml-rpc (this might change) */
@ -187,7 +187,18 @@
{ {
} }
function process_array(&$repository,$array,$notifies,$type,$prefix='') /**
* Verify and save preferences
*
* @param array &$repository
* @param array $array
* @param array $notifies
* @param string $type
* @param boolean $only_verify=false
* @param string $prefix='' deprecated
* @return string with verification error or null on success
*/
function process_array(&$repository, $array, $notifies, $type, $only_verify=false, $prefix='')
{ {
//_debug_array($repository); //_debug_array($repository);
$appname = $this->check_app(); $appname = $this->check_app();
@ -207,7 +218,7 @@
//_debug_array($array);exit; //_debug_array($array);exit;
while(is_array($array) && list($var,$value) = each($array)) while(is_array($array) && list($var,$value) = each($array))
{ {
if(isset($value) && $value != '' && $value != '**NULL**') if(isset($value) && $value !== '' && $value !== '**NULL**')
{ {
if (get_magic_quotes_gpc()) if (get_magic_quotes_gpc())
{ {
@ -263,16 +274,16 @@
$prefs[$var] = $GLOBALS['egw']->preferences->lang_notify($prefs[$var],$notifies[$var],True); $prefs[$var] = $GLOBALS['egw']->preferences->lang_notify($prefs[$var],$notifies[$var],True);
} }
// need to call preferences::add, to also set affective prefs! // need to call preferences::add, to also set affective prefs!
$GLOBALS['egw']->preferences->add($appname, $var, $prefs[$var], $type); if (!$only_verify) $GLOBALS['egw']->preferences->add($appname, $var, $prefs[$var], $type);
} }
else else
{ {
unset($prefs[$var]); unset($prefs[$var]);
// need to call preferences::delete, to also set affective prefs! // need to call preferences::delete, to also set affective prefs!
$GLOBALS['egw']->preferences->delete($appname, $var, $type); if (!$only_verify) $GLOBALS['egw']->preferences->delete($appname, $var, $type);
} }
} }
//echo "prefix='$prefix', prefs=<pre>"; print_r($repository[$_appname]); echo "</pre>\n"; //echo "prefix='$prefix', prefs=<pre>"; print_r($repository[$appname]); echo "</pre>\n";
// the following hook can be used to verify the prefs // the following hook can be used to verify the prefs
// if you return something else than False, it is treated as an error-msg and // if you return something else than False, it is treated as an error-msg and
@ -290,15 +301,15 @@
return $error; return $error;
} }
$GLOBALS['egw']->preferences->save_repository(True,$type); if (!$only_verify) $GLOBALS['egw']->preferences->save_repository(True,$type);
// certain common prefs (language, template, ...) require the session to be re-created // certain common prefs (language, template, ...) require the session to be re-created
if ($appname == 'common') if ($appname == 'common' && !$only_verify)
{ {
egw::invalidate_session_cache(); egw::invalidate_session_cache();
} }
return $this->prefs; return null;
} }
function check_app() function check_app()

View File

@ -170,8 +170,6 @@ class uisettings
$error = $this->bo->process_array($GLOBALS['egw']->preferences->forced, $forced,$this->bo->session_data['notifies'],$GLOBALS['type']); $error = $this->bo->process_array($GLOBALS['egw']->preferences->forced, $forced,$this->bo->session_data['notifies'],$GLOBALS['type']);
} }
if (is_array($error)) $error = false; // process_array returns the prefs-array on success
if($GLOBALS['type'] == 'user' && $_GET['appname'] == 'preferences' && $user['show_help'] != '') if($GLOBALS['type'] == 'user' && $_GET['appname'] == 'preferences' && $user['show_help'] != '')
{ {
$this->show_help = $user['show_help']; // use it, if admin changes his help-prefs $this->show_help = $user['show_help']; // use it, if admin changes his help-prefs
@ -191,7 +189,6 @@ class uisettings
$GLOBALS['egw']->redirect_link($pref_link,$link_params); $GLOBALS['egw']->redirect_link($pref_link,$link_params);
} }
$this->t->set_var('messages',$error);
$this->t->set_var('action_url',$GLOBALS['egw']->link($pref_link,$link_params)); $this->t->set_var('action_url',$GLOBALS['egw']->link($pref_link,$link_params));
$this->t->set_var('th_bg', $GLOBALS['egw_info']['theme']['th_bg']); $this->t->set_var('th_bg', $GLOBALS['egw_info']['theme']['th_bg']);
$this->t->set_var('th_text',$GLOBALS['egw_info']['theme']['th_text']); $this->t->set_var('th_text',$GLOBALS['egw_info']['theme']['th_text']);
@ -207,6 +204,18 @@ class uisettings
throw new egw_exception_wrong_parameter("Could not find settings for application: ".$_GET['appname']); throw new egw_exception_wrong_parameter("Could not find settings for application: ".$_GET['appname']);
} }
// display verifcation errors also on entering preferences, not only after saving
if (!isset($_POST['save']) || !isset($_POST['apply']))
{
if (!$this->is_admin() || !in_array($GLOBALS['type'], array('user', 'default', 'forced')))
{
$GLOBALS['type'] = 'user';
}
$ignore = array();
$error = $this->bo->process_array($ignore, $this->bo->prefs, array(), $GLOBALS['type'], true);
}
$this->t->set_var('messages',$error);
foreach($this->bo->settings as $key => $valarray) foreach($this->bo->settings as $key => $valarray)
{ {
if(!$this->is_admin()) if(!$this->is_admin())