implemented a one-click (tm) change between single and multiple account-selection for the calendar

This commit is contained in:
Ralf Becker 2004-08-29 20:32:56 +00:00
parent 9fd05b8872
commit c69e9cd32e
3 changed files with 108 additions and 57 deletions

View File

@ -390,10 +390,8 @@ class uical
{ {
$grants[] = $grant['grantor']; $grants[] = $grant['grantor'];
} }
if ($this->multiple) $file[] = array(
{ 'text' => "
$file[] = array(
'text' => "
<script type=\"text/javascript\"> <script type=\"text/javascript\">
function load_cal(url,id) { function load_cal(url,id) {
selectBox = document.getElementById(id); selectBox = document.getElementById(id);
@ -409,32 +407,16 @@ function load_cal(url,id) {
} }
</script> </script>
". ".
$this->accountsel->selection('owner','uical_select_owner',$this->owner,'calendar+',3,False, $this->accountsel->selection('owner','uical_select_owner',$this->owner,'calendar+',$this->multiple ? 3 : 1,False,
' style="width: 85%;" title="'.lang('select a %1',lang('user')).'"','',$grants). ' style="width: '.($this->multiple && $this->common_prefs['account_selection']=='selectbox' ? 100 : 85).'%;"'.
$this->html->submit_button('go','>>',"load_cal('".$GLOBALS['phpgw']->link('/index.php',array( ' title="'.lang('select a %1',lang('user')).'" onchange="load_cal(\''.
'menuaction' => $_GET['menuaction'], $GLOBALS['phpgw']->link('/index.php',array(
'date' => $this->date, 'menuaction' => $_GET['menuaction'],
))."','uical_select_owner'); return false;",True,' title="'.lang('Go!').'"'), 'date' => $this->date,
'no_lang' => True, )).'\',\'uical_select_owner\');"','',$grants),
'link' => False 'no_lang' => True,
); 'link' => False
);
}
else
{
$file[] = array(
'text' => $this->accountsel->selection('owner','uical_select_owner',$this->owner,'calendar+',0,False,
' style="width: 85%;" title="'.lang('select a %1',lang('user')).'"',
"location=location+(location.search.length ? '&' : '?')+'owner='+this.value;",$grants).
$this->html->a_href($this->html->image('phpgwapi','users',lang('show the calendar of multiple users')),array(
'menuaction' => $_GET['menuaction'],
'multiple' => 1,
'date' => $this->date,
)),
'no_lang' => True,
'link' => False
);
}
} }
// Import & Export // Import & Export
@ -447,7 +429,7 @@ function load_cal(url,id) {
.divSidebox .divSidebox
{ {
width: '.($this->html->user_agent=='msie'?'180px':'auto').'; width: '.($this->html->user_agent=='msie'?'180px':'auto').';
max-width: 180px; /*max-width: 180px;*/
} }
</style>'."\n"; </style>'."\n";
$menu_title = $GLOBALS['phpgw_info']['apps'][$appname]['title'] . ' '. lang('Menu'); $menu_title = $GLOBALS['phpgw_info']['apps'][$appname]['title'] . ' '. lang('Menu');

View File

@ -65,7 +65,7 @@
* Or a string which gets added as first Option with value=0, eg. lang('all') * Or a string which gets added as first Option with value=0, eg. lang('all')
* @return the necessary html * @return the necessary html
*/ */
function selection($name,$element_id,$selected,$use='accounts',$lines=1,$not=False,$options='',$onchange='',$select=False) function selection($name,$element_id,$selected,$use='accounts',$lines=0,$not=False,$options='',$onchange='',$select=False)
{ {
//echo "<p>uiaccountsel::selection('$name',".print_r($selected,True).",'$use',$lines,$not,'$options','$onchange',".print_r($select,True).")</p>\n"; //echo "<p>uiaccountsel::selection('$name',".print_r($selected,True).",'$use',$lines,$not,'$options','$onchange',".print_r($select,True).")</p>\n";
if (!is_array($selected)) if (!is_array($selected))
@ -175,16 +175,22 @@
'app' => $app, 'app' => $app,
'use' => $use, 'use' => $use,
'element_id' => $element_id, 'element_id' => $element_id,
'single' => !$lines, // single selection, closes after the first selection 'multiple' => $lines, // single selection (multiple=0), closes after the first selection
)); ));
$popup_options = 'width=600,height=400,toolbar=no,scrollbars=yes,resizable=yes'; $popup_options = 'width=600,height=400,toolbar=no,scrollbars=yes,resizable=yes';
$app = $GLOBALS['phpgw_info']['flags']['currentapp']; $app = $GLOBALS['phpgw_info']['flags']['currentapp'];
$single = (int) !$lines; if ($lines <= 1 && $use != 'groups' && $use != 'owngroups')
if (!$lines && $use != 'groups' && $use != 'owngroups')
{ {
$options .= ' onchange="if (this.value==\'popup\') '."window.open('$link','uiaccountsel','$popup_options');". if (!$lines)
($onchange ? " else { $onchange }" : '' ).'" onclick="if (this.value==\'popup\') '."window.open('$link','uiaccountsel','$popup_options');\""; {
$select['popup'] = lang('Search').' ...'; $options .= ' onchange="if (this.value==\'popup\') '."window.open('$link','uiaccountsel','$popup_options');".
($onchange ? " else { $onchange }" : '' ).'" onclick="if (this.value==\'popup\') '."window.open('$link','uiaccountsel','$popup_options');\"";
$select['popup'] = lang('Search').' ...';
}
elseif ($onchange)
{
$options .= ' onchange="if (this.value[0]!=\',\') { '.$onchange.' }"';
}
$need_js_popup = True; $need_js_popup = True;
} }
elseif ($onchange) elseif ($onchange)
@ -196,19 +202,23 @@
$select = array($extra_label) + $select; $select = array($extra_label) + $select;
} }
//echo "<p>html::select('$name',".print_r($selected,True).",".print_r($select,True).",True,'$options')</p>\n"; //echo "<p>html::select('$name',".print_r($selected,True).",".print_r($select,True).",True,'$options')</p>\n";
$html = $this->html->select($name,$selected,$select,True,$options.' id="'.$element_id.'"',$lines); $html = $this->html->select($name,$selected,$select,True,$options.' id="'.$element_id.'"',$lines > 1 ? $lines : 0);
if ($lines > 1 && ($this->account_selection == 'popup' || $this->account_selection == 'primary_group')) if ($lines > 0 && ($this->account_selection == 'popup' || $this->account_selection == 'primary_group'))
{ {
$html .= '<a href="'.$link.'" target="uiaccountsel" onclick="'."window.open(this,this.target,'$popup_options'); return false;".'">'. $html .= '<a href="'.$link.'" target="uiaccountsel" onclick="'."window.open(this,this.target,'$popup_options'); return false;".'">'.
$this->html->image('phpgwapi','users',lang('search or select accounts')).'</a>'; $this->html->image('phpgwapi','users',$lines > 1 ? lang('search or select accounts') : lang('search or select multiple accounts')).'</a>';
$need_js_popup = True; $need_js_popup = True;
} }
if ($lines == 1 && $this->account_selection == 'selectbox')
{
$html .= '<a href="#" onclick="'."if (selectBox = document.getElementById('$element_id')) { selectBox.size=3; selectBox.multiple=true; } return false;".'">'.
$this->html->image('phpgwapi','users',lang('select multiple accounts')).'</a>';
}
if($need_js_popup && !$GLOBALS['phpgw_info']['flags']['uiaccountsel']['addOption_installed']) if($need_js_popup && !$GLOBALS['phpgw_info']['flags']['uiaccountsel']['addOption_installed'])
{ {
$html .= '<script language="JavaScript"> $html .= '<script language="JavaScript">
function addOption(id,label,value) function addOption(id,label,value,do_onchange)
{ {
selectBox = document.getElementById(id); selectBox = document.getElementById(id);
for (i=0; i < selectBox.length; i++) { for (i=0; i < selectBox.length; i++) {
@ -217,11 +227,19 @@
selectBox.options[i].selected = true; selectBox.options[i].selected = true;
break; break;
} }
'.// check existing entries for an entry starting with a comma, marking a not yet finished multiple selection
' else if (value.slice(0,1) == "," && selectBox.options[i].value.slice(0,1) == ",") {
selectBox.options[i].value = value;
selectBox.options[i].text = "'.lang('multiple').'";
selectBox.options[i].title = label;
selectBox.options[i].selected = true;
break;
}
} }
if (i >= selectBox.length) { if (i >= selectBox.length) {
selectBox.options[selectBox.length] = new Option(label,value,false,true); selectBox.options[selectBox.length] = new Option(label,value,false,true);
} }
if (selectBox.onchange) selectBox.onchange(); if (selectBox.onchange && do_onchange) selectBox.onchange();
} }
</script>'; </script>';
$GLOBALS['phpgw_info']['flags']['uiaccountsel']['addOption_installed'] = True; $GLOBALS['phpgw_info']['flags']['uiaccountsel']['addOption_installed'] = True;
@ -237,7 +255,7 @@
$use = get_var('use',array('POST','GET')); $use = get_var('use',array('POST','GET'));
$group_id = get_var('group_id',array('POST','GET'),$GLOBALS['phpgw']->accounts->data['account_primary_group']); $group_id = get_var('group_id',array('POST','GET'),$GLOBALS['phpgw']->accounts->data['account_primary_group']);
$element_id = get_var('element_id',array('POST','GET')); $element_id = get_var('element_id',array('POST','GET'));
$single = get_var('single',array('POST','GET')); $multiple = get_var('multiple',array('POST','GET'));
$query = get_var('query',array('POST','GET')); $query = get_var('query',array('POST','GET'));
$query_type = get_var('query_type',array('POST','GET')); $query_type = get_var('query_type',array('POST','GET'));
@ -246,7 +264,7 @@
$order = get_var('order',array('POST','GET'),'account_lid'); $order = get_var('order',array('POST','GET'),'account_lid');
$sort = get_var('sort',array('POST','GET'),'ASC'); $sort = get_var('sort',array('POST','GET'),'ASC');
//echo "<p>uiaccountsel::popup(): app='$app', use='$use', single='$single', group_id='$group_id', element_id='$element_id', start='$start', order='$order', sort='$sort'</p>\n"; //echo "<p>uiaccountsel::popup(): app='$app', use='$use', multiple='$multiple', group_id='$group_id', element_id='$element_id', start='$start', order='$order', sort='$sort'</p>\n";
$this->nextmatchs = CreateObject('phpgwapi.nextmatchs'); $this->nextmatchs = CreateObject('phpgwapi.nextmatchs');
@ -291,7 +309,7 @@
$GLOBALS['phpgw']->template->fp('iother','other_intro',True); $GLOBALS['phpgw']->template->fp('iother','other_intro',True);
} }
if (!$single) if ($multiple >= 1)
{ {
if (!is_object($GLOBALS['phpgw']->js)) if (!is_object($GLOBALS['phpgw']->js))
{ {
@ -312,7 +330,7 @@
'use' => $use, 'use' => $use,
'group_id' => $group_id, 'group_id' => $group_id,
'element_id' => $element_id, 'element_id' => $element_id,
'single' => $single, 'multiple' => $multiple,
'query_type' => $query_type, 'query_type' => $query_type,
'query' => $query, 'query' => $query,
); );
@ -343,8 +361,8 @@
$link_data['group_id'] = $group['account_id']; $link_data['group_id'] = $group['account_id'];
$GLOBALS['phpgw']->template->set_var('onclick',"addOption('$element_id','". $GLOBALS['phpgw']->template->set_var('onclick',"addOption('$element_id','".
$GLOBALS['phpgw']->common->grab_owner_name($group['account_id'])."','$group[account_id]')". $GLOBALS['phpgw']->common->grab_owner_name($group['account_id'])."','$group[account_id]',".(int)($multiple==1).")".
($single ? '; window.close()' : '')); (!$multiple ? '; window.close()' : ''));
if (!$app || in_array($group['account_id'],$app_groups)) if (!$app || in_array($group['account_id'],$app_groups))
{ {
@ -409,8 +427,8 @@
'firstname' => $user['account_firstname'] ? $user['account_firstname'] : '&nbsp;', 'firstname' => $user['account_firstname'] ? $user['account_firstname'] : '&nbsp;',
'lastname' => $user['account_lastname'] ? $user['account_lastname'] : '&nbsp;', 'lastname' => $user['account_lastname'] ? $user['account_lastname'] : '&nbsp;',
'onclick' => "addOption('$element_id','". 'onclick' => "addOption('$element_id','".
$GLOBALS['phpgw']->common->grab_owner_name($user['account_id'])."','$user[account_id]')". $GLOBALS['phpgw']->common->grab_owner_name($user['account_id'])."','$user[account_id]',".(int)($multiple==1).")".
($single ? '; window.close()' : ''), (!$multiple ? '; window.close()' : ''),
)); ));
$GLOBALS['phpgw']->template->fp('list','accounts_list',True); $GLOBALS['phpgw']->template->fp('list','accounts_list',True);
} }
@ -443,9 +461,20 @@
$GLOBALS['phpgw']->template->set_var(array( $GLOBALS['phpgw']->template->set_var(array(
'lang_selection' => lang('selection'), 'lang_selection' => lang('selection'),
'lang_close' => lang('close'), 'lang_close' => lang('close'),
'close_action' => 'window.close();',
)); ));
if (!$single) if ($multiple >= 1)
{
$GLOBALS['phpgw']->template->set_var(array(
'lang_close' => lang('submit'),
'lang_multiple' => lang('multiple'),
'close_action' => "oneLineSubmit('$element_id');",
));
}
if ($multiple)
{ {
$GLOBALS['phpgw']->template->set_var(array( $GLOBALS['phpgw']->template->set_var(array(
'selection' => $this->html->select('selected',False,array(),True,' id="uiaccountsel_popup_selection" style="width: 100%;"',13), 'selection' => $this->html->select('selected',False,array(),True,' id="uiaccountsel_popup_selection" style="width: 100%;"',13),

View File

@ -3,10 +3,26 @@
<script LANGUAGE="JavaScript"> <script LANGUAGE="JavaScript">
window.focus(); window.focus();
function addOption(id,label,value) function addOption(id,label,value,multiple)
{ {
opener.addOption(id,label,value); openerSelectBox = opener.document.getElementById(id);
if (multiple && openerSelectBox) {
select = '';
for(i=0; i < openerSelectBox.length; i++) {
with (openerSelectBox.options[i]) {
if (selected || openerSelectBox.selectedIndex == i) {
select += (value.slice(0,1)==',' ? '' : ',')+value;
}
}
}
select += (select ? ',' : '')+value;
opener.addOption(id,label,value,0);
opener.addOption(id,'{lang_multiple}',select,0);
}
else {
opener.addOption(id,label,value,!multiple && openerSelectBox && openerSelectBox.selectedIndex < 0);
}
selectBox = document.getElementById('uiaccountsel_popup_selection'); selectBox = document.getElementById('uiaccountsel_popup_selection');
if (selectBox) { if (selectBox) {
for (i=0; i < selectBox.length; i++) { for (i=0; i < selectBox.length; i++) {
@ -44,12 +60,36 @@
selectBox = document.getElementById('uiaccountsel_popup_selection'); selectBox = document.getElementById('uiaccountsel_popup_selection');
for (i=0; i < openerSelectBox.length; i++) { for (i=0; i < openerSelectBox.length; i++) {
with (openerSelectBox.options[i]) { with (openerSelectBox.options[i]) {
if (selected) { if (selected && value.slice(0,1) != ',') {
selectBox.options[selectBox.length] = new Option(text,value); selectBox.options[selectBox.length] = new Option(text,value);
} }
} }
} }
} }
function oneLineSubmit(id)
{
openerSelectBox = opener.document.getElementById(id);
if (openerSelectBox) {
if (openerSelectBox.selectedIndex >= 0) {
selected = openerSelectBox.options[openerSelectBox.selectedIndex].value;
if (selected.slice(0,1) == ',') selected = selected.slice(1);
opener.addOption(id,'{lang_multiple}',selected,1);
}
else {
for (i=0; i < openerSelectBox.length; i++) {
with (openerSelectBox.options[i]) {
if (selected) {
opener.addOption(id,text,value,1);
break;
}
}
}
}
}
window.close();
}
</script> </script>
<style type="text/css"> <style type="text/css">
@ -196,7 +236,7 @@
</tr> </tr>
<tr> <tr>
<td align="center" colspan="2"> <td align="center" colspan="2">
<input type="button" name="close" value="{lang_close}" onClick="window.close()"> <input type="button" name="close" value="{lang_close}" onClick="{close_action}">
</td> </td>
</tr> </tr>
</table> </table>