context menu for addressbook, please note: not everything is fully functional yet

This commit is contained in:
Ralf Becker 2011-04-17 14:10:05 +00:00
parent af552dc914
commit fe5202c7a2
3 changed files with 373 additions and 150 deletions

View File

@ -127,24 +127,25 @@ class addressbook_ui extends addressbook_bo
if (isset($content['nm']['rows']['delete'])) // handle a single delete like delete with the checkboxes
{
list($id) = @each($content['nm']['rows']['delete']);
$content['action'] = 'delete';
$content['nm']['rows']['checked'] = array($id);
$content['nm']['action'] = 'delete';
$content['nm']['selected'] = array($id);
}
if (isset($content['nm']['rows']['document'])) // handle insert in default document button like an action
{
list($id) = @each($content['nm']['rows']['document']);
$content['action'] = 'document';
$content['nm']['rows']['checked'] = array($id);
$content['nm']['action'] = 'document';
$content['nm']['selected'] = array($id);
}
if ($content['action'] !== '')
if ($content['nm']['action'] !== '')
{
if (!count($content['nm']['rows']['checked']) && !$content['use_all'] && $content['action'] != 'delete_list')
if ($content['use_all']) $content['nm']['select_all'] = $content['use_all']; // legacy support
if (!count($content['nm']['selected']) && !$content['nm']['select_all'] && $content['nm']['action'] != 'delete_list')
{
$msg = lang('You need to select some contacts first');
}
else
{
if ($this->action($content['action'],$content['nm']['rows']['checked'],$content['use_all'],
if ($this->action($content['nm']['action'],$content['nm']['selected'],$content['nm']['select_all'],
$success,$failed,$action_msg,$content['do_email'] ? 'email' : 'index',$msg))
{
$msg .= lang('%1 contact(s) %2',$success,$action_msg);
@ -217,9 +218,11 @@ class addressbook_ui extends addressbook_bo
'filter2_no_lang'=> True, // I set no_lang for filter2 (=dont translate the options)
'lettersearch' => true,
'do_email' => $do_email,
'default_cols' => '!cat_id,contact_created_contact_modified,distribution_list,contact_id,owner',
'default_cols' => '!cat_id,contact_created_contact_modified,distribution_list,contact_id,owner,legacy_actions',
'filter2_onchange' => "if(this.value=='add') { add_new_list(document.getElementById(form::name('filter')).value); this.value='';} else this.form.submit();",
'manual' => $do_email ? ' ' : false, // space for the manual icon
//'actions' => $this->get_actions(), // set on each request, as it depends on some filters
'row_id' => 'id',
);
$csv_export = new addressbook_csv($this);
$content['nm']['csv_fields'] = $GLOBALS['egw_info']['user']['preferences']['addressbook']['nextmatch-export-definition'] ?
@ -276,73 +279,11 @@ class addressbook_ui extends addressbook_bo
'cc' => 'Cc',
'bcc' => 'Bcc',
);
$sel_options['action'] = array();
if ($do_email)
{
$GLOBALS['egw_info']['flags']['include_xajax'] = true;
$sel_options['action'] = array(
'email' => lang('Add %1',lang('business email')),
'email_home' => lang('Add %1',lang('home email')),
);
}
$sel_options['action'] += array(
'delete' => lang('Delete'),
);
if($content['nm']['col_filter']['tid'] == 'D' && !$GLOBALS['egw_info']['user']['apps']['admin'] && $this->config['history'] != 'userpurge')
{
// User not allowed to purge
unset($sel_options['action']['delete']);
}
//$sel_options['action'] = $this->get_legacy_actions($do_email, $content['nm']['col_filter']['tid']);
$content['nm']['actions'] = $this->get_actions($do_email, $content['nm']['col_filter']['tid']);
// check if user is an admin or the export is not generally turned off (contact_export_limit is non-numerical, eg. no)
if (isset($GLOBALS['egw_info']['user']['apps']['admin']) || !$this->config['contact_export_limit'] || (int)$this->config['contact_export_limit'])
{
if($content['nm']['col_filter']['tid'] == 'D')
{
$sel_options['action']['undelete'] = lang('Un-delete');
}
$sel_options['action'] += array(
'csv' => lang('Export as CSV'),
'vcard' => lang('Export as VCard'), // ToDo: move this to importexport framework
);
}
// if there is any export limit set, pass it on to the nextmatch, to be evaluated by the export
if (isset($this->config['contact_export_limit']) && (int)$this->config['contact_export_limit']) $content['nm']['export_limit']=$this->config['contact_export_limit'];
$sel_options['action'] += array(
'merge' => lang('Merge into first or account, deletes all other!'),
'cat_add' => lang('Add or delete Categories'), // add a categirie to multible addresses
'infolog_add' => lang('Add a new Infolog'),
);
if ($GLOBALS['egw_info']['user']['apps']['infolog'])
{
$sel_options['action']['infolog'] = lang('View linked InfoLog entries');
}
if (($move2addressbooks=$this->get_addressbooks(EGW_ACL_ADD))) // do we have addressbooks, we should
{
foreach ($move2addressbooks as $m2a_id => $m2alabel)
{
$m2a['move_to_'.$m2a_id] = $m2alabel;
}
$sel_options['action'][lang('Move to addressbook:')] = $m2a;
}
if (($add_lists = $this->get_lists(EGW_ACL_EDIT))) // do we have distribution lists?
{
$lists = array();
foreach ($add_lists as $list_id => $label)
{
$lists['to_list_'.$list_id] = $label;
}
$sel_options['action'][lang('Add to distribution list:')] = $lists;
unset($lists);
$sel_options['action']['remove_from_list'] = lang('Remove selected contacts from distribution list');
$sel_options['action']['delete_list'] = lang('Delete selected distribution list!');
}
if ($this->prefs['document_dir'])
{
$sel_options['action'][lang('Insert in document').':'] = $this->get_document_actions();
}
if (!array_key_exists('importexport',$GLOBALS['egw_info']['user']['apps'])) unset($sel_options['action']['export']);
// dont show tid-selection if we have only one content_type
// be a bit more sophisticated asbout it
@ -391,6 +332,289 @@ class addressbook_ui extends addressbook_bo
$content,$sel_options,$readonlys,$preserv,$do_email ? 2 : 0);
}
/**
* Get actions / context menu items
*
* @param boolean $do_email
*/
private function get_actions($do_email=false, $tid_filter=null)
{
$actions = array(
'view' => array(
'caption' => 'View',
'default' => true,
'allowOnMultiple' => false,
'url' => 'menuaction=addressbook.addressbook_ui.view&contact_id=$id',
'popup' => egw_link::get_registry('addressbook', 'view_popup'),
'group' => $group=1,
),
'edit' => array(
'caption' => 'Edit',
'allowOnMultiple' => false,
'url' => 'menuaction=addressbook.addressbook_ui.edit&contact_id=',
'popup' => egw_link::get_registry('addressbook', 'add_popup'),
'group' => $group,
),
'add' => array(
'caption' => 'Add',
'url' => 'menuaction=addressbook.addressbook_ui.edit',
'popup' => egw_link::get_registry('addressbook', 'add_popup'),
'group' => $group,
),
);
if ($do_email)
{
$actions += array(
'email' => array(
'caption' => lang('Add %1',lang('business email')),
'no_lang' => true,
'group' => ++$group,
),
'email_home' => array(
'caption' => lang('Add %1',lang('home email')),
'no_lang' => true,
'group' => $group,
),
);
}
++$group; // other AB related stuff group: lists, AB's, categories
// categories submenu
$actions['cat'] = array(
'caption' => 'Categories',
'group' => $group,
'children' => array(
'cat_add' => nextmatch_widget::category_action(
'addressbook',$group,'Add category', 'cat_add_'
)+array('icon' => 'foldertree_nolines_plus'),
'cat_del' => nextmatch_widget::category_action(
'addressbook',$group,'Delete category', 'cat_del_'
)+array('icon' => 'foldertree_nolines_minus'),
'cat_edit' => array(
'caption' => 'Edit categories',
'url' => 'menuaction=preferences.uicategories.index&cats_app=addressbook&cats_level=True&global_cats=True',
'icon' => 'edit',
'group' => $group,
),
),
);
if (!$GLOBALS['egw_info']['user']['apps']['preferences']) unset($actions['cats']['children']['cat_edit']);
// Submenu for all distributionlist stuff
$actions['lists'] = array(
'caption' => 'Distribution lists',
'children' => array(
'list_add' => array(
'caption' => 'Add a new list',
'icon' => 'new',
'onExecute' => 'javascript:add_new_list',
),
),
'group' => $group,
);
if (($add_lists = $this->get_lists(EGW_ACL_EDIT))) // do we have distribution lists?
{
$actions['lists']['children'] += array(
'to_list' => array(
'caption' => 'Add to distribution list',
'children' => $add_lists,
'prefix' => 'to_list_',
'icon' => 'foldertree_nolines_plus',
),
'remove_from_list' => array(
'caption' => 'Remove from distribution list',
'confirm' => 'Remove selected contacts from distribution list',
'icon' => 'foldertree_nolines_minus',
),
'delete_list' => array(
'caption' => 'Delete selected distribution list!',
'confirm' => 'Delete selected distribution list!',
'icon' => 'delete',
),
);
}
// move to AB
if (($move2addressbooks = $this->get_addressbooks(EGW_ACL_ADD))) // do we have addressbooks, we should
{
$actions['move_to'] = array(
'caption' => 'Move to addressbook',
'children' => $move2addressbooks,
'prefix' => 'move_to_',
'group' => $group,
);
}
$actions['merge'] = array(
'caption' => 'Merge contacts',
'confirm' => 'Merge into first or account, deletes all other!',
'hint' => 'Merge into first or account, deletes all other!',
'group' => $group,
);
++$group; // integration with other apps: infolog, calendar, filemanager
if ($GLOBALS['egw_info']['user']['apps']['infolog'])
{
$actions['infolog_app'] = array(
'caption' => 'InfoLog',
'icon' => 'infolog/navbar',
'group' => $group,
'children' => array(
'infolog' => array(
'caption' => lang('View linked InfoLog entries'),
'icon' => 'infolog/navbar',
),
'infolog_add' => array(
'caption' => 'Add a new Infolog',
'icon' => 'new',
),
)
);
}
if ($GLOBALS['egw_info']['user']['apps']['calendar'])
{
$actions['calendar'] = array(
'icon' => 'calendar/navbar',
'caption' => 'Add appointment',
'url' => 'menuaction=calendar.calendar_uiforms.edit&participants=c$id',
'popup' => egw_link::get_registry('calendar', 'add_popup'),
'group' => $group,
);
}
if ($GLOBALS['egw_info']['user']['apps']['filemanager'])
{
$actions['filemanager'] = array(
'icon' => 'filemanager/navbar',
'caption' => 'Filemanager',
'url' => 'menuaction=filemanager.filemanager_ui.index&path=/apps/addressbook/$id',
'group' => $group,
);
}
// check if user is an admin or the export is not generally turned off (contact_export_limit is non-numerical, eg. no)
if (isset($GLOBALS['egw_info']['user']['apps']['admin']) || !$this->config['contact_export_limit'] || (int)$this->config['contact_export_limit'])
{
$actions['export'] = array(
'caption' => 'Export',
'icon' => 'filesave',
'group' => ++$group,
'children' => array(
'csv' => 'Export as CSV',
'vcard' => 'Export as VCard',
),
);
}
if ($this->prefs['document_dir'])
{
$actions += array(
'document' => array(
'caption' => lang('Insert in %1',egw_vfs::basename($GLOBALS['egw_info']['user']['preferences']['addressbook']['default_document'])),
'enabled' => (boolean)$GLOBALS['egw_info']['user']['preferences']['addressbook']['default_document'],
'hideOnDisabled' => true,
'group' => ++$group,
),
'documents' => timesheet_merge::document_action(
$GLOBALS['egw_info']['user']['preferences']['addressbook']['document_dir'], $group
),
);
}
++$group;
if (!($tid_filter == 'D' && !$GLOBALS['egw_info']['user']['apps']['admin'] && $this->config['history'] != 'userpurge'))
{
$actions['delete'] = array(
'caption' => 'Delete',
'confirm' => 'Delete this contact',
'group' => $group,
);
}
if($tid_filter == 'D')
{
$actions['undelete'] = array(
'caption' => 'Un-delete',
'group' => $group,
);
}
//_debug_array($actions);
return $actions;
}
/**
* Get actions / context menu items
*
* @param boolean $do_email
*/
private function get_legacy_actions($do_email=false, $tid_filter=null)
{
$actions = array();
if ($do_email)
{
$GLOBALS['egw_info']['flags']['include_xajax'] = true;
$actions = array(
'email' => lang('Add %1',lang('business email')),
'email_home' => lang('Add %1',lang('home email')),
);
}
$actions += array(
'delete' => lang('Delete'),
);
if($tid_filter == 'D' && !$GLOBALS['egw_info']['user']['apps']['admin'] && $this->config['history'] != 'userpurge')
{
// User not allowed to purge
unset($actions['delete']);
}
// check if user is an admin or the export is not generally turned off (contact_export_limit is non-numerical, eg. no)
if (isset($GLOBALS['egw_info']['user']['apps']['admin']) || !$this->config['contact_export_limit'] || (int)$this->config['contact_export_limit'])
{
if($tid_filter == 'D')
{
$actions['undelete'] = lang('Un-delete');
}
$actions += array(
'csv' => lang('Export as CSV'),
'vcard' => lang('Export as VCard'), // ToDo: move this to importexport framework
);
}
$actions += array(
'merge' => lang('Merge into first or account, deletes all other!'),
'cat_add' => lang('Add or delete Categories'), // add a categirie to multible addresses
'infolog_add' => lang('Add a new Infolog'),
);
if ($GLOBALS['egw_info']['user']['apps']['infolog'])
{
$actions['infolog'] = lang('View linked InfoLog entries');
}
if (($move2addressbooks=$this->get_addressbooks(EGW_ACL_ADD))) // do we have addressbooks, we should
{
foreach ($move2addressbooks as $m2a_id => $m2alabel)
{
$m2a['move_to_'.$m2a_id] = $m2alabel;
}
$actions[lang('Move to addressbook:')] = $m2a;
}
if (($add_lists = $this->get_lists(EGW_ACL_EDIT))) // do we have distribution lists?
{
$lists = array();
foreach ($add_lists as $list_id => $label)
{
$lists['to_list_'.$list_id] = $label;
}
$actions[lang('Add to distribution list:')] = $lists;
unset($lists);
$actions['remove_from_list'] = lang('Remove selected contacts from distribution list');
$actions['delete_list'] = lang('Delete selected distribution list!');
}
if ($this->prefs['document_dir'])
{
$actions[lang('Insert in document').':'] = $this->get_document_actions();
}
if (!array_key_exists('importexport',$GLOBALS['egw_info']['user']['apps'])) unset($actions['export']);
//_debug_array($actions);
return $actions;
}
/**
* Email address-selection popup
*
@ -1083,10 +1307,8 @@ class addressbook_ui extends addressbook_bo
$readonlys = array();
$photos = $homeaddress = $roles = $notes = false;
foreach($rows as $n => $val)
foreach($rows as $n => &$row)
{
$row =& $rows[$n];
$given = $row['n_given'] ? $row['n_given'] : ($row['n_prefix'] ? $row['n_prefix'] : '');
switch($order)
@ -2059,8 +2281,9 @@ class addressbook_ui extends addressbook_bo
return false;
}
function add_new_list(owner)
function add_new_list()
{
var owner=document.getElementById("exec[nm][filter]").value;
var name = window.prompt("'.lang('Name for the distribution list').'");
if (name)
{

File diff suppressed because one or more lines are too long

View File

@ -13,7 +13,7 @@
</hbox>
<styles>.rightPadAdd { width: 30px; }</styles>
</template>
<template id="addressbook.index.rows" template="" lang="" group="0" version="1.9.003">
<template id="addressbook.index.rows" template="" lang="" group="0" version="1.9.004">
<grid width="100%">
<columns>
<column/>
@ -48,19 +48,19 @@
<nextmatch-sortheader span="all" label="own sorting" id="n_fileas"/>
</row>
<row disabled="!@order=n_given">
<nextmatch-sortheader id="n_given" label="Firstname"/>
<nextmatch-sortheader label="Firstname" id="n_given"/>
<nextmatch-sortheader label="Name" id="n_family"/>
</row>
<row disabled="!@order=n_family">
<nextmatch-sortheader label="Name" id="n_family"/>
<nextmatch-sortheader id="n_given" label="Firstname"/>
<nextmatch-sortheader label="Firstname" id="n_given"/>
</row>
<row>
<nextmatch-sortheader id="org_name" label="Organisation" span="all"/>
<nextmatch-sortheader label="Organisation" span="all" id="org_name"/>
</row>
<row disabled="!@order=/^(org_name|n_fileas|adr_one_postalcode|contact_modified|contact_created|#)/">
<nextmatch-sortheader id="n_family" label="Name"/>
<nextmatch-sortheader id="n_given" label="Firstname" class="leftPad5"/>
<nextmatch-sortheader label="Name" id="n_family"/>
<nextmatch-sortheader label="Firstname" id="n_given" class="leftPad5"/>
</row>
<row disabled="@order=n_fileas">
<nextmatch-sortheader span="all" label="own sorting" id="n_fileas"/>
@ -70,23 +70,23 @@
<nextmatch-header label="role" id="role"/>
<nextmatch-header label="Category" id="cat_id"/>
<nextmatch-header label="Photo" id="photo"/>
<nextmatch-header id="bday" label="Birthday"/>
<nextmatch-header label="Birthday" id="bday"/>
<vbox options="0,0">
<nextmatch-header label="Business address" id="business"/>
<nextmatch-customfilter id="adr_one_countrycode" options="select-country,Country,0,No country selected" class="countrySelect"/>
<nextmatch-sortheader id="adr_one_postalcode" label="zip code"/>
<nextmatch-sortheader label="zip code" id="adr_one_postalcode"/>
</vbox>
<nextmatch-header label="Home address" id="home"/>
<vbox options="0,0">
<nextmatch-header id="tel_work" label="Business phone"/>
<nextmatch-header label="Business phone" id="tel_work"/>
<nextmatch-header label="Mobile phone" id="tel_cell"/>
<nextmatch-header id="tel_home" label="Home phone"/>
<nextmatch-header label="Home phone" id="tel_home"/>
<description value="Fax"/>
</vbox>
<vbox options="0,0">
<nextmatch-header id="url" label="Url"/>
<nextmatch-header label="Url" id="url"/>
<nextmatch-header label="Business email" id="email"/>
<nextmatch-header id="email_home" label="Home email"/>
<nextmatch-header label="Home email" id="email_home"/>
</vbox>
<nextmatch-customfields id="customfields"/>
<nextmatch-header label="Note" id="note"/>
@ -98,114 +98,116 @@
<nextmatch-header label="Next date" id="calendar"/>
</vbox>
<vbox options="0,0">
<nextmatch-sortheader id="contact_created" label="Created"/>
<nextmatch-sortheader id="contact_modified" label="Last modified"/>
<nextmatch-sortheader label="Created" id="contact_created"/>
<nextmatch-sortheader label="Last modified" id="contact_modified"/>
</vbox>
<hbox align="center" class="noPrint">
<description value="Actions" align="center"/>
<button image="check" label="Check all" id="check_all" statustext="Check all" onclick="toggle_all(this.form,form::name('checked[]')); return false;" needed="1" align="right"/>
<nextmatch-header align="center" label="Actions" id="legacy_actions"/>
<button label="Check all" onclick="toggle_all(this.form,form::name('checked[]')); return false;" needed="1" align="right" id="check_all" image="check" statustext="Check all"/>
</hbox>
</row>
<row class="$row_cont[cat_id]" valign="top">
<image label="$row_cont[type_label]" src="${row}[type]" align="center" no_lang="1"/>
<vbox options="0,0" id="${row}[id]">
<description id="${row}[line1]" no_lang="1"/>
<description id="${row}[line2]" no_lang="1"/>
<description id="${row}[org_unit]" no_lang="1"/>
<description id="${row}[title]" no_lang="1"/>
<description id="${row}[first_org]" no_lang="1"/>
<image label="$row_cont[type_label]" align="center" no_lang="1" src="${row}[type]"/>
<vbox id="${row}[id]" options="0,0">
<description no_lang="1" id="${row}[line1]"/>
<description no_lang="1" id="${row}[line2]"/>
<description no_lang="1" id="${row}[org_unit]"/>
<description no_lang="1" id="${row}[title]"/>
<description no_lang="1" id="${row}[first_org]"/>
</vbox>
<description id="${row}[role]"/>
<menulist>
<menupopup type="select-cat" options="1" id="${row}[cat_id]" readonly="true"/>
<menupopup type="select-cat" readonly="true" id="${row}[cat_id]" options="1"/>
</menulist>
<image src="${row}[photo]" class="iphoto"/>
<date id="${row}[bday]" readonly="true" options="Y-m-d"/>
<date readonly="true" id="${row}[bday]" options="Y-m-d"/>
<vbox options="0,0">
<description id="${row}[adr_one_countryname]" no_lang="1"/>
<description no_lang="1" id="${row}[adr_one_countryname]"/>
<menulist>
<menupopup type="select-country" id="${row}[adr_one_countrycode]" readonly="true"/>
<menupopup type="select-country" readonly="true" id="${row}[adr_one_countrycode]"/>
</menulist>
<hbox options="0,0" orient="0">
<hbox orient="0" options="0,0">
<description no_lang="1" id="${row}[adr_one_locality]"/>
<description class="leftPad5" no_lang="1" id="${row}[adr_one_region]"/>
<description id="${row}[adr_one_postalcode]" class="leftPad5" value=" " no_lang="1"/>
<description no_lang="1" id="${row}[adr_one_region]" class="leftPad5"/>
<description no_lang="1" id="${row}[adr_one_postalcode]" value=" " class="leftPad5"/>
</hbox>
<description no_lang="1" id="${row}[adr_one_street]"/>
<description id="${row}[adr_one_street2]" no_lang="1"/>
<description no_lang="1" id="${row}[adr_one_street2]"/>
</vbox>
<vbox options="0,0">
<description id="${row}[adr_two_countryname]" no_lang="1"/>
<description no_lang="1" id="${row}[adr_two_countryname]"/>
<menulist>
<menupopup type="select-country" id="${row}[adr_two_countrycode]" readonly="true"/>
<menupopup type="select-country" readonly="true" id="${row}[adr_two_countrycode]"/>
</menulist>
<hbox options="0,0">
<description no_lang="1" id="${row}[adr_two_locality]"/>
<description no_lang="1" id="${row}[adr_two_region]" class="leftPad5"/>
<description id="${row}[adr_two_postalcode]" class="leftPad5" value=" " no_lang="1"/>
<description no_lang="1" id="${row}[adr_two_postalcode]" value=" " class="leftPad5"/>
</hbox>
<description no_lang="1" id="${row}[adr_two_street]"/>
<description id="${row}[adr_two_street2]" no_lang="1"/>
<description no_lang="1" id="${row}[adr_two_street2]"/>
</vbox>
<vbox options="0,0">
<url-phone id="${row}[tel_work]" class="telNumbers" readonly="true"/>
<url-phone id="${row}[tel_cell]" class="telNumbers" readonly="true"/>
<url-phone id="${row}[tel_home]" class="telNumbers" readonly="true"/>
<url-phone id="${row}[tel_fax]" readonly="true"/>
<description id="${row}[tel_prefered]" no_lang="1" options=",$row_cont[tel_prefered_link],,,calling,$cont[call_popup]"/>
<url-phone readonly="true" id="${row}[tel_work]" class="telNumbers"/>
<url-phone readonly="true" id="${row}[tel_cell]" class="telNumbers"/>
<url-phone readonly="true" id="${row}[tel_home]" class="telNumbers"/>
<url-phone readonly="true" id="${row}[tel_fax]"/>
<description no_lang="1" id="${row}[tel_prefered]" options=",$row_cont[tel_prefered_link],,,calling,$cont[call_popup]"/>
</vbox>
<vbox options="0,0">
<url class="fixedHeight" id="${row}[url]" readonly="true"/>
<url-email class="fixedHeight" id="${row}[email]" readonly="true"/>
<url-email class="fixedHeight" id="${row}[email_home]" readonly="true"/>
<url readonly="true" id="${row}[url]" class="fixedHeight"/>
<url-email readonly="true" id="${row}[email]" class="fixedHeight"/>
<url-email readonly="true" id="${row}[email_home]" class="fixedHeight"/>
</vbox>
<customfields-list rows="1" cols="1" id="$row" class="customfields"/>
<textbox multiline="true" no_lang="1" id="${row}[note]" readonly="true"/>
<textbox multiline="true" no_lang="1" readonly="true" id="${row}[note]"/>
<description id="${row}[distrib_lists]"/>
<menulist>
<menupopup id="${row}[owner]" readonly="true"/>
<menupopup readonly="true" id="${row}[owner]"/>
</menulist>
<description class="contactid" id="${row}[id]"/>
<description id="${row}[id]" class="contactid"/>
<vbox options="0,0">
<link id="${row}[last_link]"/>
<link id="${row}[next_link]"/>
</vbox>
<vbox options="0,0">
<date-time id="${row}[created]" readonly="true" class="noWrap"/>
<date-time readonly="true" id="${row}[created]" class="noWrap"/>
<menulist>
<menupopup type="select-account" id="${row}[creator]" readonly="true"/>
<menupopup type="select-account" readonly="true" id="${row}[creator]"/>
</menulist>
<date-time id="${row}[modified]" readonly="true" class="noBreak"/>
<date-time readonly="true" id="${row}[modified]" class="noBreak"/>
<menulist>
<menupopup type="select-account" id="${row}[modifier]" readonly="true"/>
<menupopup type="select-account" readonly="true" id="${row}[modifier]"/>
</menulist>
</vbox>
<vbox options="0,0" class="noPrint">
<hbox options="0">
<image options="addressbook.addressbook_ui.view&amp;contact_id=$row_cont[id]" label="View" src="view"/>
<button image="edit" label="Edit" onclick="window.open(egw::link('/index.php','menuaction=addressbook.addressbook_ui.edit&amp;contact_id=$row_cont[id]'),'_blank','dependent=yes,width=870,height=460,scrollbars=yes,status=yes'); return false;" id="edit[$row_cont[id]]"/>
<button id="delete[$row_cont[id]]" image="delete" label="Delete" statustext="Delete this contact" onclick="return confirm('Delete this contact');"/>
<checkbox id="checked[]" options="$row_cont[id]" statustext="Select multiple contacts for a further action" align="right"/>
<vbox class="noPrint" options="0,0">
<hbox>
<image label="View" options="addressbook.addressbook_ui.view&amp;contact_id=$row_cont[id]" src="view"/>
<button label="Edit" onclick="window.open(egw::link('/index.php','menuaction=addressbook.addressbook_ui.edit&amp;contact_id=$row_cont[id]'),'_blank','dependent=yes,width=870,height=460,scrollbars=yes,status=yes'); return false;" id="edit[$row_cont[id]]" image="edit"/>
<button label="Delete" onclick="return confirm('Delete this contact');" id="delete[$row_cont[id]]" image="delete" statustext="Delete this contact"/>
<checkbox align="right" id="checked[]" options="$row_cont[id]" statustext="Select multiple contacts for a further action"/>
</hbox>
<hbox options="0">
<button id="document[$row_cont[id]]" image="etemplate/merge" label="Insert in document" class="image16"/>
<image src="filemanager/navbar" options="/index.php?menuaction=filemanager.filemanager_ui.index&amp;path=/apps/addressbook/$row_cont[id]" class="image16" label="Filemanager"/>
<button image="calendar/navbar" label="Add appointment" onclick="window.open(egw::link('/index.php','menuaction=calendar.calendar_uiforms.edit&amp;participants=c$row_cont[id]'),'_blank','dependent=yes,width=750,height=410,scrollbars=yes,status=yes'); return false;" id="calendar" class="image16"/>
<hbox>
<button label="Insert in document" id="document[$row_cont[id]]" image="etemplate/merge" class="image16"/>
<image label="Filemanager" options="/index.php?menuaction=filemanager.filemanager_ui.index&amp;path=/apps/addressbook/$row_cont[id]" src="filemanager/navbar" class="image16"/>
<button label="Add appointment" onclick="window.open(egw::link('/index.php','menuaction=calendar.calendar_uiforms.edit&amp;participants=c$row_cont[id]'),'_blank','dependent=yes,width=750,height=410,scrollbars=yes,status=yes'); return false;" id="calendar" image="calendar/navbar" class="image16"/>
</hbox>
</vbox>
</row>
</rows>
</grid>
</template>
<template id="addressbook.index" template="" lang="" group="0" version="1.7.001">
<template id="addressbook.index" template="" lang="" group="0" version="1.9.001">
<grid width="100%">
<columns>
<column/>
<column/>
<column/>
</columns>
<rows>
<row disabled="!@msg">
<description span="all" class="redItalic" align="center" id="msg" no_lang="1"/>
<description span="all" class="redItalic" align="center" no_lang="1" id="msg"/>
<description/>
<description/>
</row>
<row disabled="1">
@ -213,16 +215,14 @@
<template align="right" id="addressbook.index.right_add"/>
</row>
<row>
<nextmatch options="addressbook.index.rows" id="nm" span="all"/>
<nextmatch span="all" id="nm" options="addressbook.index.rows"/>
</row>
<row class="noPrint">
<button id="add" label="Add" statustext="Add a new contact" onclick="window.open(egw::link('/index.php','menuaction=addressbook.addressbook_ui.edit'),'_blank','dependent=yes,width=850,height=440,scrollbars=yes,status=yes'); return false;"/>
<hbox align="right">
<checkbox id="use_all" label="whole query" onchange="if (this.checked==true &amp;&amp; !confirm('Apply the action on the whole query, NOT only the shown contacts!!!')) this.checked=false;" statustext="Apply the action on the whole query, NOT only the shown contacts!!!"/>
<menulist>
<menupopup onchange="do_action(this);" options="Select an action or addressbook to move to..." no_lang="1" id="action" statustext="Select an action or addressbook to move to"/>
</menulist>
<button image="arrow_ltr" label="Check all" id="check_all" statustext="Check all" onclick="toggle_all(this.form,form::name('nm[rows][checked][]')); return false;" needed="1" class="checkAllArrow"/>
<row class="noPrint" disabled="!@nm[selectcols]=/legacy_actions/">
<button label="Add" onclick="window.open(egw::link('/index.php','menuaction=addressbook.addressbook_ui.edit'),'_blank','dependent=yes,width=850,height=440,scrollbars=yes,status=yes'); return false;" id="add" statustext="Add a new contact"/>
<hbox align="right" span="all">
<checkbox label="whole query" onchange="if (this.checked==true &amp;&amp; !confirm('Apply the action on the whole query, NOT only the shown contacts!!!')) this.checked=false;" id="use_all" statustext="Apply the action on the whole query, NOT only the shown contacts!!!"/>
<button no_lang="1" id="action" statustext="Select an action or addressbook to move to" label="Select an action or addressbook to move to..." onclick="if (!egw_objectManager.executeActionImplementation(this, 'popup')) alert(egw::lang('You need to select some contacts first')); return false;;"/>
<button label="Check all" onclick="toggle_all(this.form,form::name('nm[rows][checked][]')); return false;" needed="1" id="check_all" image="arrow_ltr" statustext="Check all" class="checkAllArrow"/>
</hbox>
</row>
</rows>