"fixed warning if there's no col-selection yet"

This commit is contained in:
Ralf Becker 2008-04-18 06:10:31 +00:00
parent a879dd4055
commit 92f16b2d7e

View File

@ -9,7 +9,7 @@
* @copyright (c) 2005/6 by Cornelius Weiss <egw@von-und-zu-weiss.de> * @copyright (c) 2005/6 by Cornelius Weiss <egw@von-und-zu-weiss.de>
* @package addressbook * @package addressbook
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @version $Id$ * @version $Id$
*/ */
require_once(EGW_INCLUDE_ROOT.'/addressbook/inc/class.bocontacts.inc.php'); require_once(EGW_INCLUDE_ROOT.'/addressbook/inc/class.bocontacts.inc.php');
@ -31,7 +31,7 @@ class uicontacts extends bocontacts
); );
/** /**
* use a separate private addressbook (former private flag), for contacts not shareable via regular read acl * use a separate private addressbook (former private flag), for contacts not shareable via regular read acl
* *
* @var boolean * @var boolean
*/ */
var $private_addressbook = false; var $private_addressbook = false;
@ -72,12 +72,12 @@ class uicontacts extends bocontacts
} }
$this->config =& $GLOBALS['egw_info']['server']; $this->config =& $GLOBALS['egw_info']['server'];
} }
/** /**
* List contacts of an addressbook * List contacts of an addressbook
* *
* @param array $content=null submitted content * @param array $content=null submitted content
* @param string $msg=null message to show * @param string $msg=null message to show
* @param boolean $do_email=false do an email-selection popup or the regular index-page * @param boolean $do_email=false do an email-selection popup or the regular index-page
*/ */
function index($content=null,$msg=null,$do_email=false) function index($content=null,$msg=null,$do_email=false)
@ -243,7 +243,7 @@ class uicontacts extends bocontacts
} }
$sel_options['action'] += array( $sel_options['action'] += array(
'delete' => lang('Delete'), 'delete' => lang('Delete'),
'csv' => lang('Export as CSV'), 'csv' => lang('Export as CSV'),
'vcard' => lang('Export as VCard'), // ToDo: move this to importexport framework 'vcard' => lang('Export as VCard'), // ToDo: move this to importexport framework
'merge' => lang('Merge into first or account, deletes all other!'), 'merge' => lang('Merge into first or account, deletes all other!'),
'cat_add' => lang('Add or delete Categoies'), // add a categirie to multible addresses 'cat_add' => lang('Add or delete Categoies'), // add a categirie to multible addresses
@ -272,14 +272,14 @@ class uicontacts extends bocontacts
$sel_options['action']['remove_from_list'] = lang('Remove selected contacts from distribution list'); $sel_options['action']['remove_from_list'] = lang('Remove selected contacts from distribution list');
$sel_options['action']['delete_list'] = lang('Delete selected distribution list!'); $sel_options['action']['delete_list'] = lang('Delete selected distribution list!');
} }
if ($this->prefs['document_dir']) if ($this->prefs['document_dir'])
{ {
$sel_options['action'][lang('Insert in document').':'] = $this->get_document_actions(); $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']); 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 // dont show tid-selection if we have only one content_type
if (count($this->content_types) <= 1) if (count($this->content_types) <= 1)
{ {
@ -305,26 +305,26 @@ class uicontacts extends bocontacts
foreach(explode('|||',$content['nm']['org_view']) as $part) foreach(explode('|||',$content['nm']['org_view']) as $part)
{ {
list(,$name) = explode(':',$part,2); list(,$name) = explode(':',$part,2);
if ($name) $org_name[] = $name; if ($name) $org_name[] = $name;
} }
$org_name = implode(': ',$org_name); $org_name = implode(': ',$org_name);
$sel_options['org_view'][(string) $content['nm']['org_view']] = $org_name; $sel_options['org_view'][(string) $content['nm']['org_view']] = $org_name;
} }
$content['nm']['org_view_label'] = $sel_options['org_view'][(string) $content['nm']['org_view']]; $content['nm']['org_view_label'] = $sel_options['org_view'][(string) $content['nm']['org_view']];
$this->tmpl->read(/*$do_email ? 'addressbook.email' :*/ 'addressbook.index'); $this->tmpl->read(/*$do_email ? 'addressbook.email' :*/ 'addressbook.index');
return $this->tmpl->exec($do_email ? 'addressbook.uicontacts.emailpopup' : 'addressbook.uicontacts.index', return $this->tmpl->exec($do_email ? 'addressbook.uicontacts.emailpopup' : 'addressbook.uicontacts.index',
$content,$sel_options,$readonlys,$preserv,$do_email ? 2 : 0); $content,$sel_options,$readonlys,$preserv,$do_email ? 2 : 0);
} }
/** /**
* Email address-selection popup * Email address-selection popup
* *
* @param array $content=null submitted content * @param array $content=null submitted content
* @param string $msg=null message to show * @param string $msg=null message to show
*/ */
function emailpopup($content=null,$msg=null) function emailpopup($content=null,$msg=null)
{ {
if (strpos($GLOBALS['egw_info']['flags']['java_script'],'addEmail') === false) if (strpos($GLOBALS['egw_info']['flags']['java_script'],'addEmail') === false)
{ {
if ($_GET['compat']) // 1.2 felamimail or old email if ($_GET['compat']) // 1.2 felamimail or old email
@ -342,11 +342,11 @@ class uicontacts extends bocontacts
$GLOBALS['egw_info']['flags']['java_script'].= " $GLOBALS['egw_info']['flags']['java_script'].= "
<script> <script>
window.focus(); window.focus();
function addEmail(email) function addEmail(email)
{ {
var to = 'to'; var to = 'to';
if (document.getElementById('exec[nm][to][cc]').checked == true) if (document.getElementById('exec[nm][to][cc]').checked == true)
{ {
to = 'cc'; to = 'cc';
} }
@ -364,7 +364,7 @@ class uicontacts extends bocontacts
} }
return $this->index($content,$msg,true); return $this->index($content,$msg,true);
} }
/** /**
* Show the infologs of an whole organisation * Show the infologs of an whole organisation
* *
@ -399,7 +399,7 @@ class uicontacts extends bocontacts
'action_title' => $org, 'action_title' => $org,
)); ));
} }
function ajax_add_whole_list($list, $email_type = 'email') function ajax_add_whole_list($list, $email_type = 'email')
{ {
$query = $GLOBALS['egw']->session->appsession('email','addressbook'); $query = $GLOBALS['egw']->session->appsession('email','addressbook');
@ -428,7 +428,7 @@ class uicontacts extends bocontacts
} }
return $response->getXML(); return $response->getXML();
} }
/** /**
* apply an action to multiple contacts * apply an action to multiple contacts
* *
@ -443,13 +443,13 @@ class uicontacts extends bocontacts
*/ */
function action($action,$checked,$use_all,&$success,&$failed,&$action_msg,$session_name,&$msg) function action($action,$checked,$use_all,&$success,&$failed,&$action_msg,$session_name,&$msg)
{ {
//echo "<p>uicontacts::action('$action',".print_r($checked,true).','.(int)$use_all.",...)</p>\n"; //echo "<p>uicontacts::action('$action',".print_r($checked,true).','.(int)$use_all.",...)</p>\n";
$success = $failed = 0; $success = $failed = 0;
if ($use_all || in_array($action,array('remove_from_list','delete_list'))) if ($use_all || in_array($action,array('remove_from_list','delete_list')))
{ {
// get the whole selection // get the whole selection
$query = is_array($session_name) ? $session_name : $GLOBALS['egw']->session->appsession($session_name,'addressbook'); $query = is_array($session_name) ? $session_name : $GLOBALS['egw']->session->appsession($session_name,'addressbook');
if ($use_all) if ($use_all)
{ {
@set_time_limit(0); // switch off the execution time limit, as it's for big selections to small @set_time_limit(0); // switch off the execution time limit, as it's for big selections to small
@ -474,11 +474,11 @@ class uicontacts extends bocontacts
unset($query['filter2']); unset($query['filter2']);
$this->get_rows($query,$extra,$readonlys,true); // true = only return the id's $this->get_rows($query,$extra,$readonlys,true); // true = only return the id's
if ($extra[0]) $org_contacts = array_merge($org_contacts,$extra); if ($extra[0]) $org_contacts = array_merge($org_contacts,$extra);
} }
} }
if ($org_contacts) $checked = array_unique($checked ? array_merge($checked,$org_contacts) : $org_contacts); if ($org_contacts) $checked = array_unique($checked ? array_merge($checked,$org_contacts) : $org_contacts);
//_debug_array($checked); exit; //_debug_array($checked); exit;
if (substr($action,0,8) == 'move_to_') if (substr($action,0,8) == 'move_to_')
{ {
$action = (int)substr($action,8); $action = (int)substr($action,8);
@ -494,7 +494,7 @@ class uicontacts extends bocontacts
$action = 'document'; $action = 'document';
} }
// Security: stop non-admins to export more then the configured number of contacts // Security: stop non-admins to export more then the configured number of contacts
if (in_array($action,array('csv','vcard')) && (int)$this->config['contact_export_limit'] && if (in_array($action,array('csv','vcard')) && (int)$this->config['contact_export_limit'] &&
!isset($GLOBALS['egw_info']['user']['apps']['admin']) && count($checked) > $this->config['contact_export_limit']) !isset($GLOBALS['egw_info']['user']['apps']['admin']) && count($checked) > $this->config['contact_export_limit'])
{ {
$action_msg = lang('exported'); $action_msg = lang('exported');
@ -532,8 +532,8 @@ class uicontacts extends bocontacts
ExecMethod('addressbook.vcaladdressbook.export',$checked); ExecMethod('addressbook.vcaladdressbook.export',$checked);
// does not return! // does not return!
$Ok = false; $Ok = false;
break; break;
case 'infolog': case 'infolog':
$GLOBALS['egw']->redirect_link('/index.php',array( $GLOBALS['egw']->redirect_link('/index.php',array(
'menuaction' => 'infolog.uiinfolog.index', 'menuaction' => 'infolog.uiinfolog.index',
@ -542,7 +542,7 @@ class uicontacts extends bocontacts
'action_title' => count($checked) > 1 ? lang('selected contacts') : '', 'action_title' => count($checked) > 1 ? lang('selected contacts') : '',
)); ));
break; break;
case 'merge': case 'merge':
$success = $this->merge($checked,$error_msg); $success = $this->merge($checked,$error_msg);
$failed = count($checked) - (int)$success; $failed = count($checked) - (int)$success;
@ -566,11 +566,11 @@ class uicontacts extends bocontacts
$GLOBALS['egw']->session->appsession($session_name,'addressbook',$query); $GLOBALS['egw']->session->appsession($session_name,'addressbook',$query);
} }
return false; return false;
case 'document': case 'document':
$msg = $this->download_document($checked,$document); $msg = $this->download_document($checked,$document);
return false; return false;
case 'cat_add': case 'cat_add':
foreach($checked as $id) foreach($checked as $id)
{ {
@ -582,7 +582,7 @@ class uicontacts extends bocontacts
//categarie add //categarie add
if ((!($cat_ids_new = $GLOBALS['egw']->session->appsession('cat_add','addressbook')) && !($cat_ids_new = $GLOBALS['egw']->session->appsession('cat_delete','addressbook')))) if ((!($cat_ids_new = $GLOBALS['egw']->session->appsession('cat_add','addressbook')) && !($cat_ids_new = $GLOBALS['egw']->session->appsession('cat_delete','addressbook'))))
{ {
$action_msg = lang('no categories selected'); $action_msg = lang('no categories selected');
} }
if ($GLOBALS['egw']->session->appsession('cat_add','addressbook')) if ($GLOBALS['egw']->session->appsession('cat_add','addressbook'))
{ {
@ -634,7 +634,7 @@ class uicontacts extends bocontacts
$Ok = $this->delete($id); $Ok = $this->delete($id);
} }
// delete single account --> redirect to admin // delete single account --> redirect to admin
elseif (count($checked) == 1 && $contact['account_id']) elseif (count($checked) == 1 && $contact['account_id'])
{ {
$GLOBALS['egw']->redirect_link('/index.php',array( $GLOBALS['egw']->redirect_link('/index.php',array(
'menuaction' => 'admin.uiaccounts.delete_user', 'menuaction' => 'admin.uiaccounts.delete_user',
@ -648,7 +648,7 @@ class uicontacts extends bocontacts
} }
} }
break; break;
case 'email': case 'email':
case 'email_home': case 'email_home':
$action == 'email' ? $action_fallback = 'email_home' : $action_fallback = 'email'; $action == 'email' ? $action_fallback = 'email_home' : $action_fallback = 'email';
@ -675,7 +675,7 @@ class uicontacts extends bocontacts
} }
} }
break; break;
case 'remove_from_list': case 'remove_from_list':
$action_msg = lang('removed from distribution list'); $action_msg = lang('removed from distribution list');
if (!$query['filter2']) if (!$query['filter2'])
@ -688,7 +688,7 @@ class uicontacts extends bocontacts
$Ok = $this->remove_from_list($id,$query['filter2']) !== false; $Ok = $this->remove_from_list($id,$query['filter2']) !== false;
} }
break; break;
case 'to_list': case 'to_list':
$action_msg = lang('added to distribution list'); $action_msg = lang('added to distribution list');
if (!$to_list) if (!$to_list)
@ -737,7 +737,7 @@ class uicontacts extends bocontacts
/** /**
* rows callback for index nextmatch * rows callback for index nextmatch
* *
* @internal * @internal
* @param array &$query * @param array &$query
* @param array &$rows returned rows/cups * @param array &$rows returned rows/cups
* @param array &$readonlys eg. to disable buttons based on acl * @param array &$readonlys eg. to disable buttons based on acl
@ -748,7 +748,7 @@ class uicontacts extends bocontacts
{ {
$do_email = $query['do_email']; $do_email = $query['do_email'];
// is this wanted??? // is this wanted???
if ($query['sitemgr_display']) if ($query['sitemgr_display'])
{ {
$old_state = $GLOBALS['egw']->session->appsession($query['sitemgr_display'],'addressbook'); $old_state = $GLOBALS['egw']->session->appsession($query['sitemgr_display'],'addressbook');
} else { } else {
@ -770,7 +770,7 @@ class uicontacts extends bocontacts
{ {
$query['advanced_search'] = $old_state['advanced_search']; $query['advanced_search'] = $old_state['advanced_search'];
} }
if ($do_email && $GLOBALS['egw_info']['etemplate']['loop'] && is_object($GLOBALS['egw']->js)) if ($do_email && $GLOBALS['egw_info']['etemplate']['loop'] && is_object($GLOBALS['egw']->js))
{ // remove previous addEmail() calls, otherwise they will be run again { // remove previous addEmail() calls, otherwise they will be run again
$GLOBALS['egw']->js->body['onLoad'] = preg_replace('/addEmail\([^)]+\);/','',$GLOBALS['egw']->js->body['onLoad']); $GLOBALS['egw']->js->body['onLoad'] = preg_replace('/addEmail\([^)]+\);/','',$GLOBALS['egw']->js->body['onLoad']);
} }
@ -793,7 +793,7 @@ class uicontacts extends bocontacts
{ {
$query['searchletter'] = ''; // reset lettersearch if viewing the contacts of one organisation $query['searchletter'] = ''; // reset lettersearch if viewing the contacts of one organisation
} }
if ($query['sitemgr_display']) if ($query['sitemgr_display'])
{ {
$old_state = $GLOBALS['egw']->session->appsession($query['sitemgr_display'],'addressbook',$query); $old_state = $GLOBALS['egw']->session->appsession($query['sitemgr_display'],'addressbook',$query);
} else { } else {
@ -854,7 +854,7 @@ class uicontacts extends bocontacts
} }
// enable/disable distribution lists depending on backend // enable/disable distribution lists depending on backend
$query['no_filter2'] = !$this->lists_available($query['filter']); $query['no_filter2'] = !$this->lists_available($query['filter']);
if (isset($this->org_views[(string) $query['org_view']])) // we have an org view if (isset($this->org_views[(string) $query['org_view']])) // we have an org view
{ {
unset($query['col_filter']['list']); // does not work together unset($query['col_filter']['list']); // does not work together
@ -868,7 +868,7 @@ class uicontacts extends bocontacts
$query['order'] = 'org_name'; $query['order'] = 'org_name';
} }
$rows = parent::organisations($query); $rows = parent::organisations($query);
$GLOBALS['egw_info']['flags']['params']['manual'] = array('page' => 'ManualAddressbookIndexOrga'); $GLOBALS['egw_info']['flags']['params']['manual'] = array('page' => 'ManualAddressbookIndexOrga');
} }
else // contacts view else // contacts view
@ -938,7 +938,7 @@ class uicontacts extends bocontacts
// do we need to read the custom fields, depends on the column is enabled and customfields exist // do we need to read the custom fields, depends on the column is enabled and customfields exist
$columselection = $this->prefs['nextmatch-addressbook.'.($do_email ? 'email' : 'index').'.rows']; $columselection = $this->prefs['nextmatch-addressbook.'.($do_email ? 'email' : 'index').'.rows'];
$available_distib_lists=$this->get_lists(EGW_ACL_EDIT); $available_distib_lists=$this->get_lists(EGW_ACL_EDIT);
if ($columselection) $columselection = explode(',',$columselection); $columselection = $columselection ? explode(',',$columselection) : array();
if (!$id_only && $rows) if (!$id_only && $rows)
{ {
$show_custom_fields = (!$columselection || in_array('customfields',$columselection)) && $this->customfields; $show_custom_fields = (!$columselection || in_array('customfields',$columselection)) && $this->customfields;
@ -959,7 +959,7 @@ class uicontacts extends bocontacts
$customfields = $this->read_customfields($ids,$selected_cfs); $customfields = $this->read_customfields($ids,$selected_cfs);
} }
if ($show_calendar) $calendar = $this->read_calendar($ids); if ($show_calendar) $calendar = $this->read_calendar($ids);
// distributionlist memership for the entrys // distributionlist memership for the entrys
//_debug_array($this->get_lists(EGW_ACL_EDIT)); //_debug_array($this->get_lists(EGW_ACL_EDIT));
if ($show_distributionlist && $available_distib_lists) if ($show_distributionlist && $available_distib_lists)
{ {
@ -979,13 +979,13 @@ class uicontacts extends bocontacts
return $this->total; // no need to set other fields or $readonlys return $this->total; // no need to set other fields or $readonlys
} }
$order = $query['order']; $order = $query['order'];
$readonlys = array(); $readonlys = array();
$photos = $homeaddress = false; $photos = $homeaddress = false;
foreach($rows as $n => $val) foreach($rows as $n => $val)
{ {
$row =& $rows[$n]; $row =& $rows[$n];
$given = $row['n_given'] ? $row['n_given'] : ($row['n_prefix'] ? $row['n_prefix'] : ''); $given = $row['n_given'] ? $row['n_given'] : ($row['n_prefix'] ? $row['n_prefix'] : '');
switch($order) switch($order)
@ -1012,14 +1012,14 @@ class uicontacts extends bocontacts
{ {
$row['type'] = 'home'; $row['type'] = 'home';
$row['type_label'] = lang('Organisation'); $row['type_label'] = lang('Organisation');
$readonlys["delete[$row[id]]"] = $query['filter'] && !($this->grants[(int)$query['filter']] & EGW_ACL_DELETE); $readonlys["delete[$row[id]]"] = $query['filter'] && !($this->grants[(int)$query['filter']] & EGW_ACL_DELETE);
$readonlys["infolog[$row[id]]"] = !$GLOBALS['egw_info']['user']['apps']['infolog']; $readonlys["infolog[$row[id]]"] = !$GLOBALS['egw_info']['user']['apps']['infolog'];
} }
else else
{ {
$this->type_icon($row['owner'],$row['private'],$row['tid'],$row['type'],$row['type_label']); $this->type_icon($row['owner'],$row['private'],$row['tid'],$row['type'],$row['type_label']);
static $tel2show = array('tel_work','tel_cell','tel_home'); static $tel2show = array('tel_work','tel_cell','tel_home');
foreach($tel2show as $name) foreach($tel2show as $name)
{ {
@ -1049,9 +1049,9 @@ class uicontacts extends bocontacts
} }
$readonlys["delete[$row[id]]"] = !$this->check_perms(EGW_ACL_DELETE,$row); $readonlys["delete[$row[id]]"] = !$this->check_perms(EGW_ACL_DELETE,$row);
$readonlys["edit[$row[id]]"] = !$this->check_perms(EGW_ACL_EDIT,$row); $readonlys["edit[$row[id]]"] = !$this->check_perms(EGW_ACL_EDIT,$row);
if ($row['photo']) $photos = true; if ($row['photo']) $photos = true;
if (isset($customfields[$row['id']])) if (isset($customfields[$row['id']]))
{ {
foreach($this->customfields as $name => $data) foreach($this->customfields as $name => $data)
@ -1103,13 +1103,13 @@ class uicontacts extends bocontacts
$rows['order'] = $order; $rows['order'] = $order;
$rows['call_popup'] = $this->config['call_popup']; $rows['call_popup'] = $this->config['call_popup'];
$rows['customfields'] = array_values($this->customfields); $rows['customfields'] = array_values($this->customfields);
// full app-header with all search criteria specially for the print // full app-header with all search criteria specially for the print
$GLOBALS['egw_info']['flags']['app_header'] = lang('addressbook'); $GLOBALS['egw_info']['flags']['app_header'] = lang('addressbook');
if ($query['filter'] !== '' && !isset($this->org_views[$query['org_view']])) if ($query['filter'] !== '' && !isset($this->org_views[$query['org_view']]))
{ {
$GLOBALS['egw_info']['flags']['app_header'] .= ' '.($query['filter'] == '0' ? lang('accounts') : $GLOBALS['egw_info']['flags']['app_header'] .= ' '.($query['filter'] == '0' ? lang('accounts') :
($GLOBALS['egw']->accounts->get_type($query['filter']) == 'g' ? ($GLOBALS['egw']->accounts->get_type($query['filter']) == 'g' ?
lang('Group %1',$GLOBALS['egw']->accounts->id2name($query['filter'])) : lang('Group %1',$GLOBALS['egw']->accounts->id2name($query['filter'])) :
$GLOBALS['egw']->common->grab_owner_name((int)$query['filter']). $GLOBALS['egw']->common->grab_owner_name((int)$query['filter']).
(substr($query['filter'],-1) == 'p' ? ' ('.lang('private').')' : ''))); (substr($query['filter'],-1) == 'p' ? ' ('.lang('private').')' : '')));
@ -1118,7 +1118,7 @@ class uicontacts extends bocontacts
{ {
$GLOBALS['egw_info']['flags']['app_header'] .= ': '.$query['org_view_label']; $GLOBALS['egw_info']['flags']['app_header'] .= ': '.$query['org_view_label'];
} }
if($query['advanced_search']) if($query['advanced_search'])
{ {
$GLOBALS['egw_info']['flags']['app_header'] .= ': '.lang('Advanced search'); $GLOBALS['egw_info']['flags']['app_header'] .= ': '.lang('Advanced search');
} }
@ -1142,7 +1142,7 @@ class uicontacts extends bocontacts
* Get addressbook type icon from owner, private and tid * Get addressbook type icon from owner, private and tid
* *
* @param int $owner user- or group-id or 0 for accounts * @param int $owner user- or group-id or 0 for accounts
* @param boolean $private * @param boolean $private
* @param string $tid 'n' for regular addressbook * @param string $tid 'n' for regular addressbook
* @param string &$icon icon-name * @param string &$icon icon-name
* @param string &$label translated label * @param string &$label translated label
@ -1174,7 +1174,7 @@ class uicontacts extends bocontacts
{ {
$icon = 'personal'; $icon = 'personal';
$label = $owner == $this->user ? lang('personal') : $GLOBALS['egw']->common->grab_owner_name($owner); $label = $owner == $this->user ? lang('personal') : $GLOBALS['egw']->common->grab_owner_name($owner);
} }
} }
/** /**
@ -1183,7 +1183,7 @@ class uicontacts extends bocontacts
* @param int $required=EGW_ACL_READ required rights on the addressbook * @param int $required=EGW_ACL_READ required rights on the addressbook
* @param string $extra_label first label if given (already translated) * @param string $extra_label first label if given (already translated)
* @return array with owner => label pairs * @return array with owner => label pairs
*/ */
function get_addressbooks($required=EGW_ACL_READ,$extra_label=null) function get_addressbooks($required=EGW_ACL_READ,$extra_label=null)
{ {
//echo "uicontacts::get_addressbooks($required,$include_all) grants="; _debug_array($this->grants); //echo "uicontacts::get_addressbooks($required,$include_all) grants="; _debug_array($this->grants);
@ -1220,7 +1220,7 @@ class uicontacts extends bocontacts
} }
/** /**
* Edit a contact * Edit a contact
* *
* @param array $content=null submitted content * @param array $content=null submitted content
* @param int $_GET['contact_id'] contact_id manly for popup use * @param int $_GET['contact_id'] contact_id manly for popup use
@ -1240,7 +1240,7 @@ class uicontacts extends bocontacts
case 'save': case 'save':
case 'apply': case 'apply':
if ($content['delete_photo']) $content['jpegphoto'] = null; if ($content['delete_photo']) $content['jpegphoto'] = null;
if (is_array($content['upload_photo']) && !empty($content['upload_photo']['tmp_name']) && if (is_array($content['upload_photo']) && !empty($content['upload_photo']['tmp_name']) &&
$content['upload_photo']['tmp_name'] != 'none') $content['upload_photo']['tmp_name'] != 'none')
{ {
$content['jpegphoto'] = $this->resize_photo($content['upload_photo']); $content['jpegphoto'] = $this->resize_photo($content['upload_photo']);
@ -1280,7 +1280,7 @@ class uicontacts extends bocontacts
$button = 'apply'; // to not leave the dialog $button = 'apply'; // to not leave the dialog
} }
// writing links for new entry, existing ones are handled by the widget itself // writing links for new entry, existing ones are handled by the widget itself
if ($links && $content['id']) if ($links && $content['id'])
{ {
egw_link::link('addressbook',$content['id'],$links); egw_link::link('addressbook',$content['id'],$links);
} }
@ -1303,7 +1303,7 @@ class uicontacts extends bocontacts
var referer = opener.location; var referer = opener.location;
opener.location.href = referer+(referer.search?'&':'?')+'msg=".addslashes(urlencode($content['msg']))."';</script>"; opener.location.href = referer+(referer.search?'&':'?')+'msg=".addslashes(urlencode($content['msg']))."';</script>";
break; break;
case 'delete': case 'delete':
if($this->action('delete',array($content['id']))) if($this->action('delete',array($content['id'])))
{ {
@ -1343,7 +1343,7 @@ class uicontacts extends bocontacts
} }
elseif ($GLOBALS['egw_info']['user']['preferences']['common']['country']) elseif ($GLOBALS['egw_info']['user']['preferences']['common']['country'])
{ {
$content['adr_one_countryname'] = $content['adr_one_countryname'] =
$GLOBALS['egw']->country->get_full_name($GLOBALS['egw_info']['user']['preferences']['common']['country']); $GLOBALS['egw']->country->get_full_name($GLOBALS['egw_info']['user']['preferences']['common']['country']);
} }
if (isset($_GET['owner']) && $_GET['owner'] !== '') if (isset($_GET['owner']) && $_GET['owner'] !== '')
@ -1417,7 +1417,7 @@ class uicontacts extends bocontacts
// how to display addresses // how to display addresses
$content['addr_format'] = $this->addr_format_by_country($content['adr_one_countryname']); $content['addr_format'] = $this->addr_format_by_country($content['adr_one_countryname']);
$content['addr_format2'] = $this->addr_format_by_country($content['adr_two_countryname']); $content['addr_format2'] = $this->addr_format_by_country($content['adr_two_countryname']);
$content['disable_change_org'] = $view || !$content['org_name']; $content['disable_change_org'] = $view || !$content['org_name'];
//_debug_array($content); //_debug_array($content);
$readonlys['button[delete]'] = !$content['owner'] || !$this->check_perms(EGW_ACL_DELETE,$content); $readonlys['button[delete]'] = !$content['owner'] || !$this->check_perms(EGW_ACL_DELETE,$content);
@ -1447,7 +1447,7 @@ class uicontacts extends bocontacts
$readonlys[$this->tabs]['distribution_list'] = !$content['distrib_lists'];#false; $readonlys[$this->tabs]['distribution_list'] = !$content['distrib_lists'];#false;
$readonlys['button[delete]'] = !$content['id']; $readonlys['button[delete]'] = !$content['id'];
if ($this->config['private_cf_tab']) $content['no_private_cfs'] = 0; if ($this->config['private_cf_tab']) $content['no_private_cfs'] = 0;
// for editing the own account (by a non-admin), enable only the fields allowed via the "own_account_acl" // for editing the own account (by a non-admin), enable only the fields allowed via the "own_account_acl"
if (!$content['owner'] && !$this->is_admin($content)) if (!$content['owner'] && !$this->is_admin($content))
{ {
@ -1478,7 +1478,7 @@ class uicontacts extends bocontacts
if ($content['private']) $content['owner'] .= 'p'; if ($content['private']) $content['owner'] .= 'p';
$GLOBALS['egw_info']['flags']['include_xajax'] = true; $GLOBALS['egw_info']['flags']['include_xajax'] = true;
if (!$this->tmpl->read($this->content_types[$content['tid']]['options']['template'])) if (!$this->tmpl->read($this->content_types[$content['tid']]['options']['template']))
{ {
$content['msg'] = lang('WARNING: Template "%1" not found, using default template instead.', $this->content_types[$content['tid']]['options']['template'])."\n"; $content['msg'] = lang('WARNING: Template "%1" not found, using default template instead.', $this->content_types[$content['tid']]['options']['template'])."\n";
@ -1487,7 +1487,7 @@ class uicontacts extends bocontacts
} }
return $this->tmpl->exec('addressbook.uicontacts.edit',$content,$sel_options,$readonlys,$content, 2); return $this->tmpl->exec('addressbook.uicontacts.edit',$content,$sel_options,$readonlys,$content, 2);
} }
/** /**
* Set the readonlys for non-admins editing their own account * Set the readonlys for non-admins editing their own account
* *
@ -1504,9 +1504,9 @@ class uicontacts extends bocontacts
$readonlys[$field] = true; $readonlys[$field] = true;
switch($field) switch($field)
{ {
case 'tel_work': case 'tel_work':
case 'tel_cell': case 'tel_cell':
case 'tel_home': case 'tel_home':
$readonlys[$field.'2'] = true; $readonlys[$field.'2'] = true;
break; break;
case 'n_fileas': case 'n_fileas':
@ -1532,7 +1532,7 @@ class uicontacts extends bocontacts
$readonlys['link_to'] = true; $readonlys['link_to'] = true;
} }
} }
function ajax_setFileasOptions($n_prefix,$n_given,$n_middle,$n_family,$n_suffix,$org_name) function ajax_setFileasOptions($n_prefix,$n_given,$n_middle,$n_family,$n_suffix,$org_name)
{ {
$names = array( $names = array(
@ -1548,7 +1548,7 @@ class uicontacts extends bocontacts
return $response->getXML(); return $response->getXML();
} }
/** /**
* resizes the uploaded photo to 60*80 pixel and returns it * resizes the uploaded photo to 60*80 pixel and returns it
* *
@ -1576,7 +1576,7 @@ class uicontacts extends bocontacts
if (!$upload) return null; if (!$upload) return null;
list($src_w,$src_h) = getimagesize($file['tmp_name']); list($src_w,$src_h) = getimagesize($file['tmp_name']);
// scale the image to a width of 60 and a height according to the proportion of the source image // scale the image to a width of 60 and a height according to the proportion of the source image
$photo = imagecreatetruecolor($dst_w = 60,$dst_h = round($src_h * 60 / $src_w)); $photo = imagecreatetruecolor($dst_w = 60,$dst_h = round($src_h * 60 / $src_w));
imagecopyresized($photo,$upload,0,0,0,0,$dst_w,$dst_h,$src_w,$src_h); imagecopyresized($photo,$upload,0,0,0,0,$dst_w,$dst_h,$src_w,$src_h);
@ -1589,10 +1589,10 @@ class uicontacts extends bocontacts
imagedestroy($photo); imagedestroy($photo);
imagedestroy($upload); imagedestroy($upload);
return $jpeg; return $jpeg;
} }
function view($content=null) function view($content=null)
{ {
if(is_array($content)) if(is_array($content))
@ -1630,7 +1630,7 @@ class uicontacts extends bocontacts
{ {
$readonlys[$key.'2'] = true; $readonlys[$key.'2'] = true;
$content[$key.'2'] = $content[$key]; $content[$key.'2'] = $content[$key];
} }
} }
$content['view'] = true; $content['view'] = true;
$content['link_to'] = array( $content['link_to'] = array(
@ -1648,7 +1648,7 @@ $readonlys['button[vcard]'] = true;
// how to display addresses // how to display addresses
$content['addr_format'] = $this->addr_format_by_country($content['adr_one_countryname']); $content['addr_format'] = $this->addr_format_by_country($content['adr_one_countryname']);
$content['addr_format2'] = $this->addr_format_by_country($content['adr_two_countryname']); $content['addr_format2'] = $this->addr_format_by_country($content['adr_two_countryname']);
$sel_options['fileas_type'][$content['fileas_type']] = $this->fileas($content); $sel_options['fileas_type'][$content['fileas_type']] = $this->fileas($content);
$sel_options['owner'] = $this->get_addressbooks(); $sel_options['owner'] = $this->get_addressbooks();
for($i = -23; $i<=23; $i++) $tz[$i] = ($i > 0 ? '+' : '').$i; for($i = -23; $i<=23; $i++) $tz[$i] = ($i > 0 ? '+' : '').$i;
@ -1701,7 +1701,7 @@ $readonlys['button[vcard]'] = true;
$readonlys[$this->tabs]['custom_private'] = !$this->customfields || !$this->config['private_cf_tab']; $readonlys[$this->tabs]['custom_private'] = !$this->customfields || !$this->config['private_cf_tab'];
$readonlys[$this->tabs]['distribution_list'] = !$content['distrib_lists'];#false; $readonlys[$this->tabs]['distribution_list'] = !$content['distrib_lists'];#false;
if ($this->config['private_cf_tab']) $content['no_private_cfs'] = 0; if ($this->config['private_cf_tab']) $content['no_private_cfs'] = 0;
// last and next calendar date // last and next calendar date
list(,$dates) = each($this->read_calendar(array($content['id']),false)); list(,$dates) = each($this->read_calendar(array($content['id']),false));
if(is_array($dates)) $content += $dates; if(is_array($dates)) $content += $dates;
@ -1716,7 +1716,7 @@ $readonlys['button[vcard]'] = true;
'ab_id' => $content['id'] 'ab_id' => $content['id']
)); ));
} }
/** /**
* convert email-address in compose link * convert email-address in compose link
* *
@ -1754,11 +1754,11 @@ $readonlys['button[vcard]'] = true;
{ {
if(!empty($_content)) { if(!empty($_content)) {
$response = new xajaxResponse(); $response = new xajaxResponse();
$query = $GLOBALS['egw']->session->appsession($do_email ? 'email' : 'index','addressbook'); $query = $GLOBALS['egw']->session->appsession($do_email ? 'email' : 'index','addressbook');
$query['advanced_search'] = array_intersect_key($_content,array_flip(array_merge($this->get_contact_columns(),array('operator','meth_select')))); $query['advanced_search'] = array_intersect_key($_content,array_flip(array_merge($this->get_contact_columns(),array('operator','meth_select'))));
foreach ($query['advanced_search'] as $key => $value) foreach ($query['advanced_search'] as $key => $value)
{ {
if(!$value) unset($query['advanced_search'][$key]); if(!$value) unset($query['advanced_search'][$key]);
} }
@ -1769,7 +1769,7 @@ $readonlys['button[vcard]'] = true;
// store the advanced search in the session to call it again // store the advanced search in the session to call it again
$GLOBALS['egw']->session->appsession('advanced_search','addressbook',$query['advanced_search']); $GLOBALS['egw']->session->appsession('advanced_search','addressbook',$query['advanced_search']);
$response->addScript(" $response->addScript("
var link = opener.location.href; var link = opener.location.href;
link = link.replace(/#/,''); link = link.replace(/#/,'');
@ -1779,21 +1779,21 @@ $readonlys['button[vcard]'] = true;
return $response->getXML(); return $response->getXML();
} }
else { else {
} }
$GLOBALS['egw_info']['flags']['include_xajax'] = true; $GLOBALS['egw_info']['flags']['include_xajax'] = true;
$GLOBALS['egw_info']['flags']['java_script'] .= "<script>window.focus()</script>"; $GLOBALS['egw_info']['flags']['java_script'] .= "<script>window.focus()</script>";
$GLOBALS['egw_info']['etemplate']['advanced_search'] = true; $GLOBALS['egw_info']['etemplate']['advanced_search'] = true;
// initialize etemplate arrays // initialize etemplate arrays
$sel_options = $readonlys = $preserv = array(); $sel_options = $readonlys = $preserv = array();
$content = $GLOBALS['egw']->session->appsession('advanced_search','addressbook'); $content = $GLOBALS['egw']->session->appsession('advanced_search','addressbook');
for($i = -23; $i<=23; $i++) $tz[$i] = ($i > 0 ? '+' : '').$i; for($i = -23; $i<=23; $i++) $tz[$i] = ($i > 0 ? '+' : '').$i;
$sel_options['tz'] = $tz + array('' => lang('doesn\'t matter')); $sel_options['tz'] = $tz + array('' => lang('doesn\'t matter'));
$sel_options['tid'][] = lang('all'); $sel_options['tid'][] = lang('all');
//foreach($this->content_types as $type => $data) $sel_options['tid'][$type] = $data['name']; //foreach($this->content_types as $type => $data) $sel_options['tid'][$type] = $data['name'];
// configure search options // configure search options
$sel_options['owner'] = $this->get_addressbooks(EGW_ACL_READ,lang('all')); $sel_options['owner'] = $this->get_addressbooks(EGW_ACL_READ,lang('all'));
$sel_options['operator'] = array( $sel_options['operator'] = array(
@ -1822,7 +1822,7 @@ $readonlys['button[vcard]'] = true;
$readonlys['button'] = true; $readonlys['button'] = true;
// disable not needed tabs // disable not needed tabs
$readonlys[$this->tabs]['cats'] = !($content['cat_tab'] = $this->config['cat_tab']); $readonlys[$this->tabs]['cats'] = !($content['cat_tab'] = $this->config['cat_tab']);
$readonlys[$this->tabs]['custom'] = !$this->customfields; $readonlys[$this->tabs]['custom'] = !$this->customfields;
$readonlys[$this->tabs]['custom_private'] = !$this->customfields || !$this->config['private_cf_tab']; $readonlys[$this->tabs]['custom_private'] = !$this->customfields || !$this->config['private_cf_tab'];
$readonlys[$this->tabs]['links'] = true; $readonlys[$this->tabs]['links'] = true;
$readonlys[$this->tabs]['distribution_list'] = true; $readonlys[$this->tabs]['distribution_list'] = true;
@ -1840,9 +1840,9 @@ $readonlys['button[vcard]'] = true;
function photo() function photo()
{ {
ob_start(); ob_start();
$contact_id = isset($_GET['contact_id']) ? $_GET['contact_id'] : $contact_id = isset($_GET['contact_id']) ? $_GET['contact_id'] :
(isset($_GET['account_id']) ? 'account:'.$_GET['account_id'] : 0); (isset($_GET['account_id']) ? 'account:'.$_GET['account_id'] : 0);
if (substr($contact_id,0,8) == 'account:') if (substr($contact_id,0,8) == 'account:')
{ {
$contact_id = $GLOBALS['egw']->accounts->id2name(substr($contact_id,8),'person_id'); $contact_id = $GLOBALS['egw']->accounts->id2name(substr($contact_id,8),'person_id');
@ -1859,10 +1859,10 @@ $readonlys['button[vcard]'] = true;
exit; exit;
} }
} }
/** /**
* returns link to call the given phonenumber * returns link to call the given phonenumber
* *
* replaces '%1' with the phonenumber to call, '%u' with the user's account_lid and '%t' with his work-phone-number * replaces '%1' with the phonenumber to call, '%u' with the user's account_lid and '%t' with his work-phone-number
* *
* @param string $number phone number * @param string $number phone number
@ -1888,8 +1888,8 @@ $readonlys['button[vcard]'] = true;
function js() function js()
{ {
return '<script LANGUAGE="JavaScript"> return '<script LANGUAGE="JavaScript">
function showphones(form) function showphones(form)
{ {
if (form) { if (form) {
copyvalues(form,"tel_home","tel_home2"); copyvalues(form,"tel_home","tel_home2");
@ -1898,8 +1898,8 @@ $readonlys['button[vcard]'] = true;
copyvalues(form,"tel_fax","tel_fax2"); copyvalues(form,"tel_fax","tel_fax2");
} }
} }
function hidephones(form) function hidephones(form)
{ {
if (form) { if (form) {
copyvalues(form,"tel_home2","tel_home"); copyvalues(form,"tel_home2","tel_home");
@ -1908,7 +1908,7 @@ $readonlys['button[vcard]'] = true;
copyvalues(form,"tel_fax2","tel_fax"); copyvalues(form,"tel_fax2","tel_fax");
} }
} }
function copyvalues(form,src,dst){ function copyvalues(form,src,dst){
var srcelement = getElement(form,src); //ById("exec["+src+"]"); var srcelement = getElement(form,src); //ById("exec["+src+"]");
var dstelement = getElement(form,dst); //ById("exec["+dst+"]"); var dstelement = getElement(form,dst); //ById("exec["+dst+"]");
@ -1916,7 +1916,7 @@ $readonlys['button[vcard]'] = true;
dstelement.value = srcelement.value; dstelement.value = srcelement.value;
} }
} }
function getElement(form,pattern){ function getElement(form,pattern){
for (i = 0; i < form.length; i++){ for (i = 0; i < form.length; i++){
if(form.elements[i].name){ if(form.elements[i].name){
@ -1927,7 +1927,7 @@ $readonlys['button[vcard]'] = true;
} }
} }
} }
function setName(input) function setName(input)
{ {
var prefix = document.getElementById("exec[n_prefix]").value; var prefix = document.getElementById("exec[n_prefix]").value;
@ -1936,9 +1936,9 @@ $readonlys['button[vcard]'] = true;
var family = document.getElementById("exec[n_family]").value; var family = document.getElementById("exec[n_family]").value;
var suffix = document.getElementById("exec[n_suffix]").value; var suffix = document.getElementById("exec[n_suffix]").value;
var org = document.getElementById("exec[org_name]").value; var org = document.getElementById("exec[org_name]").value;
var name = document.getElementById("exec[n_fn]"); var name = document.getElementById("exec[n_fn]");
name.value = ""; name.value = "";
if (prefix) name.value += prefix+" "; if (prefix) name.value += prefix+" ";
if (given) name.value += given+" "; if (given) name.value += given+" ";
@ -1948,10 +1948,10 @@ $readonlys['button[vcard]'] = true;
xajax_doXMLHTTP("addressbook.uicontacts.ajax_setFileasOptions",prefix,given,middle,family,suffix,org); xajax_doXMLHTTP("addressbook.uicontacts.ajax_setFileasOptions",prefix,given,middle,family,suffix,org);
} }
function add_whole_list(list) function add_whole_list(list)
{ {
if (document.getElementById("exec[nm][email_type][email_home]").checked == true) if (document.getElementById("exec[nm][email_type][email_home]").checked == true)
{ {
email_type = "email_home"; email_type = "email_home";
} }
@ -1961,7 +1961,7 @@ $readonlys['button[vcard]'] = true;
} }
xajax_doXMLHTTP("addressbook.uicontacts.ajax_add_whole_list",list,email_type); xajax_doXMLHTTP("addressbook.uicontacts.ajax_add_whole_list",list,email_type);
} }
function setOptions(options_str) function setOptions(options_str)
{ {
var options = options_str.split("\\\\b"); var options = options_str.split("\\\\b");
@ -1972,20 +1972,20 @@ $readonlys['button[vcard]'] = true;
selbox.options[i].text = options[i]; selbox.options[i].text = options[i];
} }
} }
function adb_get_selection(form) function adb_get_selection(form)
{ {
var use_all = document.getElementById("exec[use_all]"); var use_all = document.getElementById("exec[use_all]");
var action = document.getElementById("exec[action]"); var action = document.getElementById("exec[action]");
egw_openWindowCentered( egw_openWindowCentered(
"'. $GLOBALS['egw']->link('/index.php','menuaction=importexport.uiexport.export_dialog&appname=addressbook'). "'. $GLOBALS['egw']->link('/index.php','menuaction=importexport.uiexport.export_dialog&appname=addressbook').
'&selection="+( use_all.checked ? "use_all" : get_selected(form,"[rows][checked][]")), '&selection="+( use_all.checked ? "use_all" : get_selected(form,"[rows][checked][]")),
"Export",400,400); "Export",400,400);
action.value=""; action.value="";
use_all.checked = false; use_all.checked = false;
return false; return false;
} }
function add_new_list(owner) function add_new_list(owner)
{ {
var name = window.prompt("'.lang('Name for the distribution list').'"); var name = window.prompt("'.lang('Name for the distribution list').'");
@ -1999,13 +1999,13 @@ $readonlys['button[vcard]'] = true;
} }
</script>'; </script>';
} }
function migrate2ldap() function migrate2ldap()
{ {
$GLOBALS['egw_info']['flags']['app_header'] = lang('Addressbook').' - '.lang('Migration to LDAP'); $GLOBALS['egw_info']['flags']['app_header'] = lang('Addressbook').' - '.lang('Migration to LDAP');
$GLOBALS['egw']->common->egw_header(); $GLOBALS['egw']->common->egw_header();
parse_navbar(); parse_navbar();
if (!$this->is_admin()) if (!$this->is_admin())
{ {
echo '<h1>'.lang('Permission denied !!!')."</h1>\n"; echo '<h1>'.lang('Permission denied !!!')."</h1>\n";
@ -2017,7 +2017,7 @@ $readonlys['button[vcard]'] = true;
} }
$GLOBALS['egw']->common->egw_footer(); $GLOBALS['egw']->common->egw_footer();
} }
/** /**
* Download a document with inserted contact(s) * Download a document with inserted contact(s)
* *
@ -2044,7 +2044,7 @@ $readonlys['button[vcard]'] = true;
return $document_merge->download($document,$ids); return $document_merge->download($document,$ids);
} }
/** /**
* Returning document actions / files from the document_dir * Returning document actions / files from the document_dir
* *
@ -2062,7 +2062,7 @@ $readonlys['button[vcard]'] = true;
foreach($files as $file) foreach($files as $file)
{ {
// return only the mime-types we support // return only the mime-types we support
if (!($file['mime'] == 'application/rtf' || if (!($file['mime'] == 'application/rtf' ||
$file['mime'] == 'application/msword' && !strcasecmp(substr($file['name'],-4),'.rtf') || $file['mime'] == 'application/msword' && !strcasecmp(substr($file['name'],-4),'.rtf') ||
substr($file['mime'],0,5) == 'text/')) continue; substr($file['mime'],0,5) == 'text/')) continue;
// As browsers not always return the right mime_type, you could use a negative list instead // As browsers not always return the right mime_type, you could use a negative list instead
@ -2075,7 +2075,7 @@ $readonlys['button[vcard]'] = true;
} }
return $actions; return $actions;
} }
/** /**
* Read the next and last event of given contacts * Read the next and last event of given contacts
* *
@ -2086,7 +2086,7 @@ $readonlys['button[vcard]'] = true;
function read_calendar($ids,$extra_title=true) function read_calendar($ids,$extra_title=true)
{ {
if (!$GLOBALS['egw_info']['user']['apps']['calendar']) return null; if (!$GLOBALS['egw_info']['user']['apps']['calendar']) return null;
$uids = array(); $uids = array();
foreach($ids as $id) foreach($ids as $id)
{ {
@ -2101,7 +2101,7 @@ $readonlys['button[vcard]'] = true;
'enum_recuring' => true, 'enum_recuring' => true,
)); ));
if (!$events) return array(); if (!$events) return array();
//_debug_array($events); //_debug_array($events);
$calendars = array(); $calendars = array();
foreach($events as $event) foreach($events as $event)
@ -2148,7 +2148,7 @@ $readonlys['button[vcard]'] = true;
$link['title'] = date($GLOBALS['egw_info']['user']['preferences']['common']['dateformat'],$event['start']); $link['title'] = date($GLOBALS['egw_info']['user']['preferences']['common']['dateformat'],$event['start']);
} }
$calendars[$id]['next_link'] = $link; $calendars[$id]['next_link'] = $link;
} }
} }
} }
} }
@ -2166,7 +2166,7 @@ $readonlys['button[vcard]'] = true;
{ {
if (is_array($content)) if (is_array($content))
{ {
if ($content['cat_id']) //add categorie if ($content['cat_id']) //add categorie
{ {
if ($content['cat_add']) if ($content['cat_add'])
{ {
@ -2182,7 +2182,7 @@ $readonlys['button[vcard]'] = true;
echo "<html><head><script>$js window.close();</script></head><html>\n"; echo "<html><head><script>$js window.close();</script></head><html>\n";
$GLOBALS['egw']->common->egw_exit(); $GLOBALS['egw']->common->egw_exit();
} }
$content['cat_tab'] = $this->config['cat_tab']; $content['cat_tab'] = $this->config['cat_tab'];
$this->tmpl->read('addressbook.index.cat_add'); $this->tmpl->read('addressbook.index.cat_add');
return $this->tmpl->exec('addressbook.uicontacts.cat_add',$content,$sel_options,$readonlys,$content, 2); return $this->tmpl->exec('addressbook.uicontacts.cat_add',$content,$sel_options,$readonlys,$content, 2);