From d22d90be43bf67df22bdebd6eb0af7bcb64ca3d5 Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Tue, 9 Oct 2007 09:38:46 +0000 Subject: [PATCH] new multiselection type for the preferences --- preferences/inc/class.bosettings.inc.php | 6 ++- preferences/inc/class.uisettings.inc.php | 55 ++++++++++++++++-------- 2 files changed, 43 insertions(+), 18 deletions(-) diff --git a/preferences/inc/class.bosettings.inc.php b/preferences/inc/class.bosettings.inc.php index 766aeefedc..a32d028b25 100644 --- a/preferences/inc/class.bosettings.inc.php +++ b/preferences/inc/class.bosettings.inc.php @@ -170,7 +170,11 @@ { if(isset($value) && $value != '' && $value != '**NULL**') { - if(is_array($value)) + if(is_array($value) && !isset($value['pw'])) + { + $value = implode(',',$value); // multiselect + } + elseif(is_array($value)) { $value = $value['pw']; if(empty($value)) diff --git a/preferences/inc/class.uisettings.inc.php b/preferences/inc/class.uisettings.inc.php index c6846caefd..cf9e428677 100755 --- a/preferences/inc/class.uisettings.inc.php +++ b/preferences/inc/class.uisettings.inc.php @@ -250,13 +250,15 @@ ); break; case 'select': + case 'multiselect': $this->create_select_box( $valarray['label'], $valarray['name'], $valarray['values'], $valarray['help'], $valarray['default'], - $valarray['run_lang'] + $valarray['run_lang'], + $valarray['type'] == 'multiselect' ); break; case 'check': @@ -499,7 +501,7 @@ $this->t->fp('rows',$this->process_help($help) ? 'help_row' : 'row',True); } - function create_select_box($label,$name,$values,$help='',$default='',$run_lang=True) + function create_select_box($label,$name,$values,$help='',$default='',$run_lang=True,$multiple=false) { $_appname = $this->check_app(); if($this->is_forced_value($_appname,$name)) @@ -511,26 +513,45 @@ { $default = $this->bo->prefs[$name]; } + //echo "

uisettings::create_select_box('$label','$name',".print_r($values,true).",,'$default',$run_lang,$multiple)

\n"; - switch($GLOBALS['type']) + require_once(EGW_API_INC.'/class.html.inc.php'); + $html = html::singleton(); + + if (!$multiple) { - case 'user': - $s = ''; - break; - case 'default': - $s = ''; - break; - case 'forced': - $s = ''; - break; + switch($GLOBALS['type']) + { + case 'user': + $extra = array('' => lang('Use default')); + break; + case 'default': + $extra = array('' => lang('No default')); + break; + case 'forced': + $extra = array('**NULL**' => lang('Users choice')); + break; + } + if ($extra) $values = array_merge($extra,$values); + + $select = $html->select($GLOBALS['type'].'['.$name.']',$default,$values,true); } - $s .= $this->create_option_string($default,$values); - if($GLOBALS['type'] == 'user') + else { - $def_text = $GLOBALS['egw']->preferences->default[$_appname][$name]; - $def_text = $def_text != '' ? ' '.lang('default').': '.$values[$def_text].'' : ''; + if (!is_array($default)) $default = explode(',',$default); + $select = $html->input_hidden($GLOBALS['type'].'['.$name.']','',false); // causes bosettings not to ignore unsetting all + $select .= $html->checkbox_multiselect($GLOBALS['type'].'['.$name.']',$default,$values,true,'',5); } - $this->t->set_var('row_value',"$def_text"); + if($GLOBALS['type'] == 'user' && $GLOBALS['egw']->preferences->default[$_appname][$name]) + { + $defs = array(); + foreach(explode(',',$GLOBALS['egw']->preferences->default[$_appname][$name]) as $def) + { + if ($values[$def]) $defs[] = $values[$def]; + } + $def_text = ' '.lang('default').': '.implode(', ',$defs).''; + } + $this->t->set_var('row_value',$select.$def_text); $this->t->set_var('row_name',$run_lang !== -1 ? lang($label) : $label); $GLOBALS['egw']->nextmatchs->template_alternate_row_color($this->t);