2006-04-23 16:40:31 +02:00
< ? php
2006-06-13 23:53:00 +02:00
/**
2008-04-25 20:59:00 +02:00
* Addressbook - admin , preferences and sidebox - menus and other hooks
2006-06-13 23:53:00 +02:00
*
* @ link http :// www . egroupware . org
* @ package addressbook
* @ author Ralf Becker < RalfBecker @ outdoor - training . de >
2008-04-25 20:59:00 +02:00
* @ copyright ( c ) 2006 - 8 by Ralf Becker < RalfBecker @ outdoor - training . de >
2006-06-13 23:53:00 +02:00
* @ license http :// opensource . org / licenses / gpl - license . php GPL - GNU General Public License
2008-04-25 20:59:00 +02:00
* @ version $Id $
2006-06-13 23:53:00 +02:00
*/
2006-04-23 16:40:31 +02:00
/**
2008-04-25 20:59:00 +02:00
* Class containing admin , preferences and sidebox - menus and other hooks
2006-04-23 16:40:31 +02:00
*/
2008-04-25 20:59:00 +02:00
class addressbook_hooks
2006-04-23 16:40:31 +02:00
{
/**
* hooks to build projectmanager ' s sidebox - menu plus the admin and preferences sections
*
* @ param string / array $args hook args
*/
2008-04-25 20:59:00 +02:00
static function all_hooks ( $args )
2006-04-23 16:40:31 +02:00
{
$appname = 'addressbook' ;
$location = is_array ( $args ) ? $args [ 'location' ] : $args ;
//echo "<p>contacts_admin_prefs::all_hooks(".print_r($args,True).") appname='$appname', location='$location'</p>\n";
if ( $location == 'sidebox_menu' )
{
$file = array (
array (
2008-05-10 14:02:49 +02:00
'text' => '<a class="textSidebox" href="' . $GLOBALS [ 'egw' ] -> link ( '/index.php' , array ( 'menuaction' => 'addressbook.addressbook_ui.edit' )) .
2008-04-25 20:59:00 +02:00
' " onclick= " window . open ( this . href , \ ' _blank\ ' , \ ' dependent = yes , width = 850 , height = 440 , scrollbars = yes , status = yes\ ' );
2006-04-23 16:40:31 +02:00
return false ; " >'.lang('Add').'</a>',
'no_lang' => true ,
'link' => false
),
2006-10-24 21:20:37 +02:00
array (
2006-10-21 22:17:49 +02:00
'text' => '<a class="textSidebox" href="' . $GLOBALS [ 'egw' ] -> link ( '/index.php' , array (
2008-05-10 14:02:49 +02:00
'menuaction' => 'addressbook.addressbook_ui.search' ,)) .
2008-04-25 20:59:00 +02:00
' " onclick= " window . open ( this . href , \ ' advanced_search\ ' , \ ' dependent = yes , width = 850 , height = 480 , scrollbars = yes , status = yes\ ' );
2006-10-21 22:17:49 +02:00
return false ; " >'.lang('Advanced search').'</a>',
'no_lang' => true ,
'link' => false
2006-10-24 21:20:37 +02:00
),
2006-04-26 23:23:38 +02:00
'CSV-Import' => $GLOBALS [ 'egw' ] -> link ( '/addressbook/csv_import.php' )
2006-04-23 16:40:31 +02:00
);
display_sidebox ( $appname , lang ( 'Addressbook menu' ), $file );
}
if ( $GLOBALS [ 'egw_info' ][ 'user' ][ 'apps' ][ 'preferences' ] && $location != 'admin' )
{
$file = array (
'Preferences' => $GLOBALS [ 'egw' ] -> link ( '/index.php' , 'menuaction=preferences.uisettings.index&appname=' . $appname ),
'Grant Access' => $GLOBALS [ 'egw' ] -> link ( '/index.php' , 'menuaction=preferences.uiaclprefs.index&acl_app=' . $appname ),
'Edit Categories' => $GLOBALS [ 'egw' ] -> link ( '/index.php' , 'menuaction=preferences.uicategories.index&cats_app=' . $appname . '&cats_level=True&global_cats=True' )
);
2008-04-25 20:59:00 +02:00
if ( $GLOBALS [ 'egw_info' ][ 'server' ][ 'contact_repository' ] == 'ldap' || $GLOBALS [ 'egw_info' ][ 'server' ][ 'deny_user_grants_access' ])
2006-04-23 16:40:31 +02:00
{
unset ( $file [ 'Grant Access' ]);
}
if ( $location == 'preferences' )
{
display_section ( $appname , $file );
}
else
{
display_sidebox ( $appname , lang ( 'Preferences' ), $file );
}
}
if ( $GLOBALS [ 'egw_info' ][ 'user' ][ 'apps' ][ 'admin' ] && $location != 'preferences' )
{
$file = Array (
'Site configuration' => $GLOBALS [ 'egw' ] -> link ( '/index.php' , array (
'menuaction' => 'admin.uiconfig.index' ,
'appname' => $appname ,
)),
'Global Categories' => $GLOBALS [ 'egw' ] -> link ( '/index.php' , array (
'menuaction' => 'admin.uicategories.index' ,
'appname' => $appname ,
2006-06-17 20:50:07 +02:00
'global_cats' => True ,
2006-04-23 16:40:31 +02:00
)),
);
2006-06-17 20:50:07 +02:00
// custom fields are not availible in LDAP
if ( $GLOBALS [ 'egw_info' ][ 'server' ][ 'contact_repository' ] != 'ldap' )
{
$file [ 'Custom fields' ] = $GLOBALS [ 'egw' ] -> link ( '/index.php' , array (
'menuaction' => 'admin.customfields.edit' ,
'appname' => $appname ,
2008-01-19 06:41:04 +01:00
'use_private' => 1 ,
2006-06-17 20:50:07 +02:00
));
}
2006-04-23 16:40:31 +02:00
if ( $location == 'admin' )
{
display_section ( $appname , $file );
}
else
{
display_sidebox ( $appname , lang ( 'Admin' ), $file );
}
}
}
2008-04-25 20:59:00 +02:00
2006-04-23 16:40:31 +02:00
/**
* populates $GLOBALS [ 'settings' ] for the preferences
*/
2008-04-25 20:59:00 +02:00
static function settings ()
2006-04-23 16:40:31 +02:00
{
2006-10-07 11:17:30 +02:00
$GLOBALS [ 'settings' ][ 'add_default' ] = array (
'type' => 'select' ,
'label' => 'Default addressbook for adding contacts' ,
'name' => 'add_default' ,
'help' => 'Which addressbook should be selected when adding a contact AND you have no add rights to the current addressbook.' ,
2008-05-10 14:02:49 +02:00
'values' => ExecMethod ( 'addressbook.addressbook_ui.get_addressbooks' , EGW_ACL_ADD ),
2006-10-07 11:17:30 +02:00
'xmlrpc' => True ,
'admin' => False ,
);
2006-04-23 16:40:31 +02:00
$GLOBALS [ 'settings' ][ 'mainscreen_showbirthdays' ] = array (
2006-06-11 19:26:54 +02:00
'type' => 'select' ,
2006-04-23 16:40:31 +02:00
'label' => 'Show birthday reminders on main screen' ,
'name' => 'mainscreen_showbirthdays' ,
2006-06-11 19:26:54 +02:00
'help' => 'Displays a remider for birthdays on the startpage (page you get when you enter eGroupWare or click on the homepage icon).' ,
'values' => array (
0 => lang ( 'No' ),
1 => lang ( 'Yes, for today and tomorrow' ),
3 => lang ( 'Yes, for the next three days' ),
7 => lang ( 'Yes, for the next week' ),
14 => lang ( 'Yes, for the next two weeks' ),
),
2006-04-23 16:40:31 +02:00
'xmlrpc' => True ,
'admin' => False ,
);
2007-03-07 13:31:48 +01:00
$GLOBALS [ 'settings' ][ 'no_auto_hide' ] = array (
'type' => 'check' ,
'label' => 'Don\'t hide empty columns' ,
'name' => 'no_auto_hide' ,
'help' => 'Should the columns photo and home address always be displayed, even if they are empty.' ,
'xmlrpc' => True ,
'admin' => false ,
2006-04-23 16:40:31 +02:00
);
2006-04-26 23:23:38 +02:00
// CSV Export
$GLOBALS [ 'settings' ][ 'csv_fields' ] = array (
'type' => 'select' ,
'label' => 'Fields for the CSV export' ,
'name' => 'csv_fields' ,
'values' => array (
2007-05-21 11:08:03 +02:00
'all' => lang ( 'All' ),
2006-04-26 23:23:38 +02:00
'business' => lang ( 'Business address' ),
'home' => lang ( 'Home address' ),
2008-04-25 20:59:00 +02:00
),
2006-04-26 23:23:38 +02:00
'help' => 'Which fields should be exported. All means every field stored in the addressbook incl. the custom fields. The business or home address only contains name, company and the selected address.' ,
'xmlrpc' => True ,
'admin' => false ,
);
$GLOBALS [ 'settings' ][ 'csv_charset' ] = array (
'type' => 'select' ,
'label' => 'Charset for the CSV export' ,
'name' => 'csv_charset' ,
2008-04-25 20:59:00 +02:00
'values' => $GLOBALS [ 'egw' ] -> translation -> get_installed_charsets () + array ( 'utf-8' => 'utf-8 (Unicode)' ),
2006-04-26 23:23:38 +02:00
'help' => 'Which charset should be used for the CSV export. The system default is the charset of this eGroupWare installation.' ,
'xmlrpc' => True ,
'admin' => false ,
);
2008-04-25 20:59:00 +02:00
if ( $GLOBALS [ 'egw_info' ][ 'server' ][ 'contact_repository' ] != 'ldap' )
2006-04-23 16:40:31 +02:00
{
$GLOBALS [ 'settings' ][ 'private_addressbook' ] = array (
'type' => 'check' ,
'label' => 'Enable an extra private addressbook' ,
'name' => 'private_addressbook' ,
'help' => 'Do you want a private addressbook, which can not be viewed by users, you grant access to your personal addressbook?' ,
'xmlrpc' => True ,
'admin' => False ,
);
}
2006-10-19 10:50:25 +02:00
$GLOBALS [ 'settings' ][ 'link_title' ] = array (
'type' => 'select' ,
'label' => 'Link title for contacts show' ,
'name' => 'link_title' ,
'values' => array (
'n_fileas' => lang ( 'own sorting' ) . ' (' . lang ( 'default' ) . ': ' . lang ( 'Company' ) . ': ' . lang ( 'lastname' ) . ', ' . lang ( 'firstname' ) . ')' ,
'org_name: n_family, n_given' => lang ( 'Company' ) . ': ' . lang ( 'lastname' ) . ', ' . lang ( 'firstname' ),
'org_name, org_unit: n_family, n_given' => lang ( 'Company' ) . ', ' . lang ( 'Department' ) . ': ' . lang ( 'lastname' ) . ', ' . lang ( 'firstname' ),
'org_name, adr_one_locality: n_family, n_given' => lang ( 'Company' ) . ', ' . lang ( 'City' ) . ': ' . lang ( 'lastname' ) . ', ' . lang ( 'firstname' ),
'org_name, org_unit, adr_one_locality: n_family, n_given' => lang ( 'Company' ) . ', ' . lang ( 'Department' ) . ', ' . lang ( 'City' ) . ': ' . lang ( 'lastname' ) . ', ' . lang ( 'firstname' ),
2008-04-25 20:59:00 +02:00
),
2006-10-19 10:50:25 +02:00
'help' => 'What should links to the addressbook display in other applications. Empty values will be left out. You need to log in anew, if you change this setting!' ,
'xmlrpc' => True ,
'admin' => false ,
);
2007-05-03 10:17:31 +02:00
$GLOBALS [ 'settings' ][ 'addr_format' ] = array (
'type' => 'select' ,
'label' => 'Default address format' ,
'name' => 'addr_format' ,
'values' => array (
'postcode_city' => lang ( 'zip code' ) . ' ' . lang ( 'City' ),
'city_state_postcode' => lang ( 'City' ) . ' ' . lang ( 'State' ) . ' ' . lang ( 'zip code' ),
2008-04-25 20:59:00 +02:00
),
2007-05-03 10:17:31 +02:00
'help' => 'Which address format should the addressbook use for countries it does not know the address format. If the address format of a country is known, it uses it independent of this setting.' ,
'xmlrpc' => True ,
'admin' => false ,
);
2008-10-10 13:25:35 +02:00
$GLOBALS [ 'settings' ][ 'fileas_default' ] = array (
'type' => 'select' ,
'label' => 'Default file as format' ,
'name' => 'fileas_default' ,
'values' => ExecMethod ( 'addressbook.addressbook_bo.fileas_options' ),
'help' => 'Default format for fileas, eg. for new entries.' ,
'xmlrpc' => True ,
'admin' => false ,
);
2007-04-15 15:06:21 +02:00
$GLOBALS [ 'settings' ][ 'hide_accounts' ] = array (
'type' => 'check' ,
'label' => 'Hide accounts from addressbook' ,
'name' => 'hide_accounts' ,
2007-04-30 17:18:29 +02:00
'help' => 'Hides accounts completly from the adressbook.' ,
2007-04-15 15:06:21 +02:00
'xmlrpc' => True ,
'admin' => false ,
);
2007-11-06 16:45:40 +01:00
$GLOBALS [ 'settings' ][ 'distributionListPreferredMail' ] = array (
'type' => 'select' ,
'label' => 'Preferred email address to use in distribution lists' ,
'name' => 'distributionListPreferredMail' ,
'values' => array (
'email' => lang ( " Work email if given, else home email " ),
'email_home' => lang ( " Home email if given, else work email " ),
),
'help' => 'Defines which email address (business or home) to use as the preferred one for distribution lists in mail.' ,
'xmlrpc' => True ,
'admin' => False
);
2007-06-17 15:55:43 +02:00
if ( $GLOBALS [ 'egw_info' ][ 'user' ][ 'apps' ][ 'filemanager' ])
{
$link = $GLOBALS [ 'egw' ] -> link ( '/index.php' , 'menuaction=addressbook.addressbook_merge.show_replacements' );
2007-04-15 15:06:21 +02:00
2007-06-17 15:55:43 +02:00
$GLOBALS [ 'settings' ][ 'default_document' ] = array (
'type' => 'input' ,
'size' => 60 ,
'label' => 'Default document to insert contacts' ,
'name' => 'default_document' ,
'help' => lang ( 'If you specify a document (full vfs path) here, addressbook displays an extra document icon for each address. That icon allows to download the specified document with the contact data inserted.' ) . ' ' .
lang ( 'The document can contain placeholder like $$n_fn$$, to be replaced with the contact data (%1full list of placeholder names%2).' , '<a href="' . $link . '" target="_blank">' , '</a>' ) . ' ' .
2008-04-25 20:59:00 +02:00
lang ( 'At the moment the following document-types are supported:' ) . '*.rtf, *.txt' ,
2007-10-19 11:47:06 +02:00
'run_lang' => false ,
2007-06-17 15:55:43 +02:00
'xmlrpc' => True ,
'admin' => False ,
);
$GLOBALS [ 'settings' ][ 'document_dir' ] = array (
'type' => 'input' ,
'size' => 60 ,
'label' => 'Directory with documents to insert contacts' ,
'name' => 'document_dir' ,
'help' => lang ( 'If you specify a directory (full vfs path) here, addressbook displays an action for each document. That action allows to download the specified document with the contact data inserted.' ) . ' ' .
lang ( 'The document can contain placeholder like $$n_fn$$, to be replaced with the contact data (%1full list of placeholder names%2).' , '<a href="' . $link . '" target="_blank">' , '</a>' ) . ' ' .
2008-04-25 20:59:00 +02:00
lang ( 'At the moment the following document-types are supported:' ) . '*.rtf, *.txt' ,
2007-10-19 11:47:06 +02:00
'run_lang' => false ,
2007-06-17 15:55:43 +02:00
'xmlrpc' => True ,
'admin' => False ,
2008-04-25 20:59:00 +02:00
);
2007-06-17 15:55:43 +02:00
}
2006-04-23 16:40:31 +02:00
return true ; // otherwise prefs say it cant find the file ;-)
}
/**
* add an Addressbook tab to Admin >> Edit user
*/
2008-04-25 20:59:00 +02:00
static function edit_user ()
2006-04-23 16:40:31 +02:00
{
global $menuData ;
$menuData [] = array (
'description' => 'Addressbook' ,
'url' => '/index.php' ,
2008-05-10 14:02:49 +02:00
'extradata' => 'menuaction=addressbook.addressbook_ui.edit' ,
2006-04-23 16:40:31 +02:00
'options' => " onclick= \" window.open(this,'_blank','dependent=yes,width=850,height=440,scrollbars=yes,status=yes'); return false; \" " .
' title="' . htmlspecialchars ( lang ( 'Edit extra account-data in the addressbook' )) . '"' ,
);
}
2008-04-25 20:59:00 +02:00
/**
* Hook called by link - class to include calendar in the appregistry of the linkage
*
* @ param array / string $location location and other parameters ( not used )
* @ return array with method - names
*/
static function search_link ( $location )
{
return array (
2008-05-10 14:02:49 +02:00
'query' => 'addressbook.addressbook_bo.link_query' ,
'title' => 'addressbook.addressbook_bo.link_title' ,
'titles' => 'addressbook.addressbook_bo.link_titles' ,
2008-04-25 20:59:00 +02:00
'view' => array (
2008-05-10 14:02:49 +02:00
'menuaction' => 'addressbook.addressbook_ui.view'
2008-04-25 20:59:00 +02:00
),
'view_id' => 'contact_id' ,
'add' => array (
2008-05-10 14:02:49 +02:00
'menuaction' => 'addressbook.addressbook_ui.edit'
2008-04-25 20:59:00 +02:00
),
'add_app' => 'link_app' ,
'add_id' => 'link_id' ,
'add_popup' => '850x440' ,
2008-10-07 11:05:48 +02:00
'file_access' => 'addressbook.addressbook_bo.file_access' ,
2008-04-25 20:59:00 +02:00
);
}
/**
* Register contacts as calendar resources ( items which can be sheduled by the calendar )
*
* @ param array $args hook - params ( not used )
* @ return array
*/
static function calendar_resources ( $args )
{
return array (
'type' => 'c' , // one char type-identifiy for this resources
2008-05-10 14:02:49 +02:00
'info' => 'addressbook.addressbook_bo.calendar_info' , // info method, returns array with id, type & name for a given id
2008-04-25 20:59:00 +02:00
);
}
2008-06-27 12:04:05 +02:00
/**
* Register addressbook for group - acl
*
* @ param array $args hook - params ( not used )
* @ return boolean | string true = standard group acl link , of string with link
*/
static function group_acl ( $args )
{
2008-06-30 18:46:01 +02:00
// addressbook uses group-acl, only if contacts-backend is NOT LDAP, as the ACL can not be modified there
return $GLOBALS [ 'egw_info' ][ 'server' ][ 'contact_repository' ] != 'ldap' ;
2008-06-27 12:04:05 +02:00
}
2006-04-23 16:40:31 +02:00
}