converted addressbook to use new api

This commit is contained in:
Ralf Becker 2016-04-29 10:41:53 +00:00
parent b86a5d469c
commit 248fde6fef
21 changed files with 447 additions and 389 deletions

View File

@ -14,6 +14,7 @@
*/ */
use EGroupware\Api; use EGroupware\Api;
use EGroupware\Api\Acl;
/** /**
* Business object for addressbook * Business object for addressbook
@ -126,7 +127,7 @@ class addressbook_bo extends Api\Contacts
$result = self::get_pgp_keyserver($missing, $result); $result = self::get_pgp_keyserver($missing, $result);
} }
//error_log(__METHOD__."(".array2string($recipients).") returning ".array2string($result)); //error_log(__METHOD__."(".array2string($recipients).") returning ".array2string($result));
egw_json_response::get()->data($result); Api\Json\Response::get()->data($result);
} }
/** /**
@ -191,7 +192,7 @@ class addressbook_bo extends Api\Contacts
{ {
$contact['pubkey'] = preg_replace(self::$pgp_key_regexp, $key, $contact['pubkey']); $contact['pubkey'] = preg_replace(self::$pgp_key_regexp, $key, $contact['pubkey']);
} }
if ($this->check_perms(EGW_ACL_EDIT, $contact) && $this->save($contact)) if ($this->check_perms(Acl::EDIT, $contact) && $this->save($contact))
{ {
++$updated; ++$updated;
} }
@ -209,7 +210,7 @@ class addressbook_bo extends Api\Contacts
$message .= "\n".lang('%1 key(s) added to public keyserver "%2".', $message .= "\n".lang('%1 key(s) added to public keyserver "%2".',
self::set_pgp_keyserver($keys), PARSE_URL(self::KEYSERVER_ADD, PHP_URL_HOST)); self::set_pgp_keyserver($keys), PARSE_URL(self::KEYSERVER_ADD, PHP_URL_HOST));
egw_json_response::get()->data($message); Api\Json\Response::get()->data($message);
} }
/** /**

View File

@ -11,6 +11,8 @@
*/ */
use EGroupware\Api; use EGroupware\Api;
use EGroupware\Api\Link;
use EGroupware\Api\Vfs;
/** /**
* SiteMgr contact form for the addressbook * SiteMgr contact form for the addressbook
@ -92,9 +94,9 @@ class addressbook_contactform
// the anonymous user to have run rights for addressbook AND // the anonymous user to have run rights for addressbook AND
// edit rights for the addressbook used to store the new entry, // edit rights for the addressbook used to store the new entry,
// which is clearly not wanted securitywise // which is clearly not wanted securitywise
Api\Vfs::$is_root = true; Vfs::$is_root = true;
egw_link::link('addressbook',$id,egw_link::VFS_APPNAME,$value,$name); Link::link('addressbook',$id,Link::VFS_APPNAME,$value,$name);
Api\Vfs::$is_root = false; Vfs::$is_root = false;
} }
} }

View File

@ -10,26 +10,15 @@
* @version $Id: class.addressbook_display.inc.php 24099 2008-02-18 16:29:06Z stefanbecker $ * @version $Id: class.addressbook_display.inc.php 24099 2008-02-18 16:29:06Z stefanbecker $
*/ */
use EGroupware\Api;
/** /**
* SiteMgr Display form for the addressbook * SiteMgr Display form for the addressbook
* *
*/ */
class addressbook_display extends addressbook_ui class addressbook_display extends addressbook_ui
{ {
/** function get_rows(&$query,&$rows,&$readonlys)
* Shows the Addressbook Entry and stores the submitted data
*
* @param array $content=null submitted eTemplate content
* @param int $addressbook=null int owner-id of addressbook to save contacts too
* @param array $fields=null field-names to show
* @param string $msg=null message to show after submitting the form
* @param string $email=null comma-separated email addresses
* @param string $tpl_name=null custom etemplate to use
* @param string $subject=null subject for email
* @return string html content
*/
//
function get_rows(&$query,&$rows,&$readonlys,$id_only=false)
{ {
$query['sitemgr_display'] = ($readonlys['sitemgr_display'] ?$readonlys['sitemgr_display']:'addressbook.display'); $query['sitemgr_display'] = ($readonlys['sitemgr_display'] ?$readonlys['sitemgr_display']:'addressbook.display');
$total = parent::get_rows($query,$rows,$readonlys); $total = parent::get_rows($query,$rows,$readonlys);
@ -44,6 +33,18 @@ function get_rows(&$query,&$rows,&$readonlys,$id_only=false)
} }
/**
* Shows the Addressbook Entry and stores the submitted data
*
* @param array $content =null submitted eTemplate content
* @param int $addressbook =null int owner-id of addressbook to save contacts too
* @param array $fields =null field-names to show
* @param string $msg =null message to show after submitting the form
* @param string $email =null comma-separated email addresses
* @param string $tpl_name =null custom etemplate to use
* @param string $subject =null subject for email
* @return string html content
*/
function display($content=null,$addressbook=null,$fields=null,$msg=null,$email=null,$tpl_name=null,$subject=null) function display($content=null,$addressbook=null,$fields=null,$msg=null,$email=null,$tpl_name=null,$subject=null)
{ {
$tpl_name=($tpl_name ? $tpl_name : 'addressbook.display'); $tpl_name=($tpl_name ? $tpl_name : 'addressbook.display');
@ -52,7 +53,7 @@ function get_rows(&$query,&$rows,&$readonlys,$id_only=false)
$content = array( $content = array(
'msg' => $msg ? $msg : $_GET['msg'], 'msg' => $msg ? $msg : $_GET['msg'],
); );
$content['nm1'] = $GLOBALS['egw']->session->appsession(($tpl_name ? $tpl_name : 'index'),'addressbook'); $content['nm1'] = Api\Cache::getSession('addressbook', ($tpl_name ? $tpl_name : 'index'));
$readonlys['sitemgr_display']=$tpl_name; $readonlys['sitemgr_display']=$tpl_name;
if (!is_array($content['nm1'])) if (!is_array($content['nm1']))
{ {

View File

@ -11,6 +11,9 @@
* @version $Id$ * @version $Id$
*/ */
use EGroupware\Api;
use EGroupware\Api\Framework;
/** /**
* class addressbook_egw_record * class addressbook_egw_record
* compability layer for iface_egw_record needed for importexport * compability layer for iface_egw_record needed for importexport
@ -44,7 +47,7 @@ class addressbook_egw_record implements importexport_iface_egw_record
*/ */
public function __construct( $_identifier='' ){ public function __construct( $_identifier='' ){
$this->identifier = $_identifier; $this->identifier = $_identifier;
$this->bocontacts = new addressbook_bo(); $this->bocontacts = new Api\Contacts();
if($_identifier) { if($_identifier) {
$this->contact = $this->bocontacts->read($this->identifier); $this->contact = $this->bocontacts->read($this->identifier);
} }
@ -123,7 +126,7 @@ class addressbook_egw_record implements importexport_iface_egw_record
$ui->type_icon($this->owner, $this->private, $this->tid, $icon, $label); $ui->type_icon($this->owner, $this->private, $this->tid, $icon, $label);
// Specific photo // Specific photo
return $this->jpegphoto ? egw_framework::link('/index.php',$ui->photo_src($this->identifier,$this->jpegphoto)):$icon; return $this->jpegphoto ? Framework::link('/index.php',$ui->photo_src($this->identifier,$this->jpegphoto)):$icon;
} }
/** /**
* saves record into backend * saves record into backend
@ -171,5 +174,4 @@ class addressbook_egw_record implements importexport_iface_egw_record
public function __destruct() { public function __destruct() {
unset ($this->bocontacts); unset ($this->bocontacts);
} }
}
} // end of egw_addressbook_record

View File

@ -1,6 +1,6 @@
<?php <?php
/** /**
* eGroupWare * EGroupware - 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
* @package addressbook * @package addressbook
@ -11,12 +11,14 @@
* @version $Id$ * @version $Id$
*/ */
use EGroupware\Api;
use EGroupware\Api\Acl;
/** /**
* export plugin of addressbook * export plugin of addressbook
*/ */
class addressbook_export_contacts_csv implements importexport_iface_export_plugin { class addressbook_export_contacts_csv implements importexport_iface_export_plugin
{
/** /**
* Constants used for exploding categories & multi-selectboxes into seperate fields * Constants used for exploding categories & multi-selectboxes into seperate fields
*/ */
@ -44,8 +46,8 @@ class addressbook_export_contacts_csv implements importexport_iface_export_plugi
$selection = array(); $selection = array();
// Addressbook defines its own export imits // Addressbook defines its own export imits
$limit_exception = bo_merge::is_export_limit_excepted(); $limit_exception = Api\Storage\Merge::is_export_limit_excepted();
$export_limit = bo_merge::getExportLimit($app='addressbook'); $export_limit = Api\Storage\Merge::getExportLimit($app='addressbook');
if (!$limit_exception) $export_object->export_limit = $export_limit; // we may not need that after all if (!$limit_exception) $export_object->export_limit = $export_limit; // we may not need that after all
if($export_limit == 'no' && !$limit_exception) { if($export_limit == 'no' && !$limit_exception) {
return; return;
@ -57,11 +59,12 @@ class addressbook_export_contacts_csv implements importexport_iface_export_plugi
if ($options['selection'] == 'search') { if ($options['selection'] == 'search') {
// uicontacts selection with checkbox 'use_all' // uicontacts selection with checkbox 'use_all'
$query = $GLOBALS['egw']->session->appsession('index','addressbook'); $query = Api\Cache::getSession('addressbook', 'index');
$query['num_rows'] = -1; // all $query['num_rows'] = -1; // all
$query['csv_export'] = true; // so get_rows method _can_ produce different content or not store state in the session $query['csv_export'] = true; // so get_rows method _can_ produce different content or not store state in the session
$query['order'] = 'contact_id'; $query['order'] = 'contact_id';
if(!array_key_exists('filter',$query)) $query['filter'] = $GLOBALS['egw_info']['user']['account_id']; if(!array_key_exists('filter',$query)) $query['filter'] = $GLOBALS['egw_info']['user']['account_id'];
$readonlys = null;
$this->ui->get_rows($query,$selection,$readonlys, true); // only return the ids $this->ui->get_rows($query,$selection,$readonlys, true); // only return the ids
} }
elseif ( $options['selection'] == 'all' ) { elseif ( $options['selection'] == 'all' ) {
@ -73,9 +76,7 @@ class addressbook_export_contacts_csv implements importexport_iface_export_plugi
} }
elseif ($options['selection'] == 'filter') elseif ($options['selection'] == 'filter')
{ {
$fields = importexport_helper_functions::get_filter_fields($_definition->application, $this);
$filter = $_definition->filter; $filter = $_definition->filter;
$known_fields = $this->ui->get_fields('supported');
$query = array(); $query = array();
// Handle ranges // Handle ranges
@ -125,14 +126,14 @@ class addressbook_export_contacts_csv implements importexport_iface_export_plugi
} }
$GLOBALS['egw_info']['flags']['currentapp'] = $old_app; $GLOBALS['egw_info']['flags']['currentapp'] = $old_app;
if(bo_merge::hasExportLimit($export_limit) && !$limit_exception) { if(Api\Storage\Merge::hasExportLimit($export_limit) && !$limit_exception) {
$selection = array_slice($selection, 0, $export_limit); $selection = array_slice($selection, 0, $export_limit);
} }
if($options['explode_multiselects']) { if($options['explode_multiselects']) {
$customfields = config::get_customfields('addressbook'); $customfields = Api\Storage\Customfields::get('addressbook');
$additional_fields = array(); $additional_fields = array();
$cat_obj = new categories('', 'addressbook'); $cat_obj = new Api\Categories('', 'addressbook');
foreach($options['explode_multiselects'] as $field => $explode) { foreach($options['explode_multiselects'] as $field => $explode) {
switch($explode['explode']) { switch($explode['explode']) {
case self::MAIN_CATS: case self::MAIN_CATS:
@ -241,7 +242,7 @@ class addressbook_export_contacts_csv implements importexport_iface_export_plugi
} }
$export_object->set_mapping($options['mapping']); $export_object->set_mapping($options['mapping']);
// Add in last/next event, if needed // Add in last/next event, if needed
if($options['mapping']['last_date'] || $options['mapping']['next_date']) if($options['mapping']['last_date'] || $options['mapping']['next_date'])
{ {
@ -439,7 +440,7 @@ class addressbook_export_contacts_csv implements importexport_iface_export_plugi
'type' => 'select', 'type' => 'select',
'rows' => 5, 'rows' => 5,
'tags' => true, 'tags' => true,
'values' => $this->ui->get_addressbooks(EGW_ACL_READ) 'values' => $this->ui->get_addressbooks(Acl::READ)
); );
} }
} }

View File

@ -1,6 +1,6 @@
<?php <?php
/** /**
* vCard export plugin for importexport framework * EGroupware addressbook: vCard export plugin for importexport framework
* *
* @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
* @package addressbook * @package addressbook
@ -11,6 +11,8 @@
* @version $Id$ * @version $Id$
*/ */
use EGroupware\Api;
/** /**
* export addressbook contacts as vcard * export addressbook contacts as vcard
*/ */
@ -29,9 +31,8 @@ class addressbook_export_vcard implements importexport_iface_export_plugin {
$this->selection = array(); $this->selection = array();
// Addressbook defines its own export imits // Addressbook defines its own export imits
$limit_exception = bo_merge::is_export_limit_excepted(); $limit_exception = Api\Storage\Merge::is_export_limit_excepted();
$export_limit = bo_merge::getExportLimit($app='addressbook'); $export_limit = Api\Storage\Merge::getExportLimit($app='addressbook');
if (!$limit_exception) $export_object->export_limit = $export_limit; // we may not need that after all
if($export_limit == 'no' && !$limit_exception) { if($export_limit == 'no' && !$limit_exception) {
return; return;
} }
@ -42,10 +43,11 @@ class addressbook_export_vcard implements importexport_iface_export_plugin {
if ($options['selection'] == 'search') { if ($options['selection'] == 'search') {
// uicontacts selection with checkbox 'use_all' // uicontacts selection with checkbox 'use_all'
$query = $GLOBALS['egw']->session->appsession('index','addressbook'); $query = Api\Cache::getSession('addressbook', 'index');
$query['num_rows'] = -1; // all $query['num_rows'] = -1; // all
$query['csv_export'] = true; // so get_rows method _can_ produce different content or not store state in the session $query['csv_export'] = true; // so get_rows method _can_ produce different content or not store state in the session
if(!array_key_exists('filter',$query)) $query['filter'] = $GLOBALS['egw_info']['user']['account_id']; if(!array_key_exists('filter',$query)) $query['filter'] = $GLOBALS['egw_info']['user']['account_id'];
$readonlys = null;
$this->uicontacts->get_rows($query,$this->selection,$readonlys, true); // only return the ids $this->uicontacts->get_rows($query,$this->selection,$readonlys, true); // only return the ids
} }
elseif ( $options['selection'] == 'all' ) { elseif ( $options['selection'] == 'all' ) {
@ -59,7 +61,7 @@ class addressbook_export_vcard implements importexport_iface_export_plugin {
} }
$GLOBALS['egw_info']['flags']['currentapp'] = $old_app; $GLOBALS['egw_info']['flags']['currentapp'] = $old_app;
if(bo_merge::hasExportLimit($export_limit) && !$limit_exception) { if(Api\Storage\Merge::hasExportLimit($export_limit) && !$limit_exception) {
$this->selection = array_slice($this->selection, 0, $export_limit); $this->selection = array_slice($this->selection, 0, $export_limit);
} }
@ -69,7 +71,7 @@ class addressbook_export_vcard implements importexport_iface_export_plugin {
$_contact = $_contact[$_contact['id'] ? 'id' : 'contact_id']; $_contact = $_contact[$_contact['id'] ? 'id' : 'contact_id'];
} }
} }
// vCard opens & closes the resource itself, but this doesn't seem to matter // vCard opens & closes the resource itself, but this doesn't seem to matter
$meta = stream_get_meta_data($_stream); $meta = stream_get_meta_data($_stream);

View File

@ -12,6 +12,7 @@
*/ */
use EGroupware\Api; use EGroupware\Api;
use EGroupware\Api\Acl;
/** /**
* CalDAV/CardDAV/GroupDAV access: Addressbook handler * CalDAV/CardDAV/GroupDAV access: Addressbook handler
@ -237,7 +238,7 @@ class addressbook_groupdav extends Api\CalDAV\Handler
unset($requested_multiget_ids[$k]); unset($requested_multiget_ids[$k]);
} }
// sync-collection report: deleted entry need to be reported without properties // sync-collection report: deleted entry need to be reported without properties
if ($contact['tid'] == addressbook_bo::DELETED_TYPE) if ($contact['tid'] == Api\Contacts::DELETED_TYPE)
{ {
$files[] = array('path' => $path.urldecode($this->get_path($contact))); $files[] = array('path' => $path.urldecode($this->get_path($contact)));
continue; continue;
@ -311,7 +312,7 @@ class addressbook_groupdav extends Api\CalDAV\Handler
} }
$props = array( $props = array(
'getcontenttype' => Api\CalDAV::mkprop('getcontenttype', 'text/vcard'), 'getcontenttype' => Api\CalDAV::mkprop('getcontenttype', 'text/vcard'),
'getlastmodified' => egw_time::to($list['list_modified'],'ts'), 'getlastmodified' => Api\DateTime::to($list['list_modified'],'ts'),
'displayname' => $list['list_name'], 'displayname' => $list['list_name'],
'getetag' => '"'.$etag.'"', 'getetag' => '"'.$etag.'"',
); );
@ -415,7 +416,7 @@ class addressbook_groupdav extends Api\CalDAV\Handler
{ {
case 'i;unicode-casemap': case 'i;unicode-casemap':
default: default:
$comp = ' '.$GLOBALS['egw']->db->capabilities[egw_db::CAPABILITY_CASE_INSENSITIV_LIKE].' '; $comp = ' '.$GLOBALS['egw']->db->capabilities[Api\Db::CAPABILITY_CASE_INSENSITIV_LIKE].' ';
break; break;
} }
$column = $this->filter_prop2cal[strtoupper($prop_filter)]; $column = $this->filter_prop2cal[strtoupper($prop_filter)];
@ -618,7 +619,7 @@ class addressbook_groupdav extends Api\CalDAV\Handler
$is_group = $contact['##X-ADDRESSBOOKSERVER-KIND'] == 'group'; $is_group = $contact['##X-ADDRESSBOOKSERVER-KIND'] == 'group';
if ($oldContact && $is_group !== isset($oldContact['list_id'])) if ($oldContact && $is_group !== isset($oldContact['list_id']))
{ {
throw new egw_exception_assertion_failed(__METHOD__."(,'$id',$user,'$prefix') can contact into group or visa-versa!"); throw new Api\Exception\AssertionFailed(__METHOD__."(,'$id',$user,'$prefix') can contact into group or visa-versa!");
} }
if (!$is_group && is_array($contact['cat_id'])) if (!$is_group && is_array($contact['cat_id']))
@ -651,7 +652,7 @@ class addressbook_groupdav extends Api\CalDAV\Handler
{ {
$contact['owner'] = $user; $contact['owner'] = $user;
} }
// check if default addressbook is synced and not accounts, if not use (always synced) personal addressbook // check if default addressbook is synced and not Api\Accounts, if not use (always synced) personal addressbook
elseif(!$this->bo->default_addressbook || !in_array($this->bo->default_addressbook,$this->home_set_pref)) elseif(!$this->bo->default_addressbook || !in_array($this->bo->default_addressbook,$this->home_set_pref))
{ {
$contact['owner'] = $GLOBALS['egw_info']['user']['account_id']; $contact['owner'] = $GLOBALS['egw_info']['user']['account_id'];
@ -663,7 +664,7 @@ class addressbook_groupdav extends Api\CalDAV\Handler
} }
// check if user has add rights for addressbook // check if user has add rights for addressbook
// done here again, as _common_get_put_delete knows nothing about default addressbooks... // done here again, as _common_get_put_delete knows nothing about default addressbooks...
if (!($this->bo->grants[$contact['owner']] & EGW_ACL_ADD)) if (!($this->bo->grants[$contact['owner']] & Acl::ADD))
{ {
if ($this->debug) error_log(__METHOD__."(,'$id', $user, '$prefix') returning '403 Forbidden'"); if ($this->debug) error_log(__METHOD__."(,'$id', $user, '$prefix') returning '403 Forbidden'");
return '403 Forbidden'; return '403 Forbidden';
@ -689,7 +690,7 @@ class addressbook_groupdav extends Api\CalDAV\Handler
{ {
if (($contact = $this->bo->read_list($save_ok))) if (($contact = $this->bo->read_list($save_ok)))
{ {
$contact = egw_db::strip_array_keys($contact, 'list_'); $contact = Api\Db::strip_array_keys($contact, 'list_');
} }
} }
else else
@ -835,7 +836,7 @@ class addressbook_groupdav extends Api\CalDAV\Handler
* </D:supported-report-set> * </D:supported-report-set>
* @link http://www.mail-archive.com/calendarserver-users@lists.macosforge.org/msg01156.html * @link http://www.mail-archive.com/calendarserver-users@lists.macosforge.org/msg01156.html
* *
* @param array $props =array() regular props by the groupdav handler * @param array $props =array() regular props by the Api\CalDAV handler
* @param string $displayname * @param string $displayname
* @param string $base_uri =null base url of handler * @param string $base_uri =null base url of handler
* @param int $user =null account_id of owner of collection * @param int $user =null account_id of owner of collection
@ -1021,7 +1022,7 @@ class addressbook_groupdav extends Api\CalDAV\Handler
/** /**
* Check if user has the neccessary rights on a contact * Check if user has the neccessary rights on a contact
* *
* @param int $acl EGW_ACL_READ, EGW_ACL_EDIT or EGW_ACL_DELETE * @param int $acl Acl::READ, Acl::EDIT or Acl::DELETE
* @param array|int $contact contact-array or id * @param array|int $contact contact-array or id
* @return boolean null if entry does not exist, false if no access, true if access permitted * @return boolean null if entry does not exist, false if no access, true if access permitted
*/ */
@ -1073,7 +1074,7 @@ class addressbook_groupdav extends Api\CalDAV\Handler
$this->home_set_pref[$key] = $id; $this->home_set_pref[$key] = $id;
} }
} }
foreach(array_keys($this->bo->get_addressbooks(EGW_ACL_READ)) as $id) foreach(array_keys($this->bo->get_addressbooks(Acl::READ)) as $id)
{ {
if (($id || !$GLOBALS['egw_info']['user']['preferences']['addressbook']['hide_accounts']) && if (($id || !$GLOBALS['egw_info']['user']['preferences']['addressbook']['hide_accounts']) &&
$GLOBALS['egw_info']['user']['account_id'] != $id && // no current user and no accounts, if disabled in ab prefs $GLOBALS['egw_info']['user']['account_id'] != $id && // no current user and no accounts, if disabled in ab prefs
@ -1125,8 +1126,8 @@ class addressbook_groupdav extends Api\CalDAV\Handler
if (!isset($hook_data['setup']) && in_array($hook_data['type'], array('user', 'group'))) if (!isset($hook_data['setup']) && in_array($hook_data['type'], array('user', 'group')))
{ {
$user = $hook_data['account_id']; $user = $hook_data['account_id'];
$addressbook_bo = new addressbook_bo(); $addressbook_bo = new Api\Contacts();
$addressbooks += $addressbook_bo->get_addressbooks(EGW_ACL_READ, null, $user); $addressbooks += $addressbook_bo->get_addressbooks(Acl::READ, null, $user);
if ($user > 0) unset($addressbooks[$user]); // allways synced if ($user > 0) unset($addressbooks[$user]); // allways synced
unset($addressbooks[$user.'p']);// ignore (optional) private addressbook for now unset($addressbooks[$user.'p']);// ignore (optional) private addressbook for now
} }

View File

@ -1,6 +1,6 @@
<?php <?php
/** /**
* Addressbook - admin, preferences and sidebox-menus and other hooks * EGroupware Addressbook - admin, preferences and sidebox-menus and other hooks
* *
* @link http://www.egroupware.org * @link http://www.egroupware.org
* @package addressbook * @package addressbook
@ -11,6 +11,10 @@
*/ */
use EGroupware\Api; use EGroupware\Api;
use EGroupware\Api\Link;
use EGroupware\Api\Framework;
use EGroupware\Api\Egw;
use EGroupware\Api\Acl;
/** /**
* Class containing admin, preferences and sidebox-menus and other hooks * Class containing admin, preferences and sidebox-menus and other hooks
@ -43,21 +47,21 @@ class addressbook_hooks
)); ));
} }
// Magic etemplate2 favorites menu (from nextmatch widget) // Magic etemplate2 favorites menu (from nextmatch widget)
display_sidebox($appname, lang('Favorites'), egw_framework::favorite_list('addressbook')); display_sidebox($appname, lang('Favorites'), Framework\Favorites::list_favorites('addressbook'));
$file = array( $file = array(
'Addressbook list' => egw::link('/index.php',array( 'Addressbook list' => Egw::link('/index.php',array(
'menuaction' => 'addressbook.addressbook_ui.index', 'menuaction' => 'addressbook.addressbook_ui.index',
'ajax' => 'true')), 'ajax' => 'true')),
array( array(
'text' => lang('Add %1',lang(egw_link::get_registry($appname, 'entry'))), 'text' => lang('Add %1',lang(Link::get_registry($appname, 'entry'))),
'no_lang' => true, 'no_lang' => true,
'link' => "javascript:egw.open('','$appname','add')" 'link' => "javascript:egw.open('','$appname','add')"
), ),
'Advanced search' => "javascript:egw_openWindowCentered2('". 'Advanced search' => "javascript:egw_openWindowCentered2('".
egw::link('/index.php',array('menuaction' => 'addressbook.addressbook_ui.search'),false). Egw::link('/index.php',array('menuaction' => 'addressbook.addressbook_ui.search'),false).
"','_blank',870,480,'yes')", "','_blank',870,480,'yes')",
'Placeholders' => egw::link('/index.php','menuaction=api.EGroupware\\Api\\Contacts\\Merge.show_replacements') 'Placeholders' => Egw::link('/index.php','menuaction=api.EGroupware\\Api\\Contacts\\Merge.show_replacements')
); );
display_sidebox($appname,lang('Addressbook menu'),$file); display_sidebox($appname,lang('Addressbook menu'),$file);
} }
@ -65,11 +69,11 @@ class addressbook_hooks
if ($GLOBALS['egw_info']['user']['apps']['admin'] && $location != 'preferences') if ($GLOBALS['egw_info']['user']['apps']['admin'] && $location != 'preferences')
{ {
$file = Array( $file = Array(
'Site configuration' => egw::link('/index.php',array( 'Site configuration' => Egw::link('/index.php',array(
'menuaction' => 'admin.uiconfig.index', 'menuaction' => 'admin.uiconfig.index',
'appname' => $appname, 'appname' => $appname,
)), )),
'Global Categories' => egw::link('/index.php',array( 'Global Categories' => Egw::link('/index.php',array(
'menuaction' => 'admin.admin_categories.index', 'menuaction' => 'admin.admin_categories.index',
'appname' => $appname, 'appname' => $appname,
'global_cats'=> True, 'global_cats'=> True,
@ -78,7 +82,7 @@ class addressbook_hooks
// custom fields are not availible in LDAP // custom fields are not availible in LDAP
if ($GLOBALS['egw_info']['server']['contact_repository'] != 'ldap') if ($GLOBALS['egw_info']['server']['contact_repository'] != 'ldap')
{ {
$file['Custom fields'] = egw::link('/index.php',array( $file['Custom fields'] = Egw::link('/index.php',array(
'menuaction' => 'admin.customfields.index', 'menuaction' => 'admin.customfields.index',
'appname' => $appname, 'appname' => $appname,
'use_private'=> 1, 'use_private'=> 1,
@ -97,7 +101,7 @@ class addressbook_hooks
} }
/** /**
* populates $settings for the preferences * populates $settings for the Api\Preferences
* *
* @param array|string $hook_data * @param array|string $hook_data
* @return array * @return array
@ -118,7 +122,7 @@ class addressbook_hooks
'label' => 'Default addressbook for adding contacts', 'label' => 'Default addressbook for adding contacts',
'name' => 'add_default', 'name' => 'add_default',
'help' => 'Which addressbook should be selected when adding a contact AND you have no add rights to the current addressbook.', 'help' => 'Which addressbook should be selected when adding a contact AND you have no add rights to the current addressbook.',
'values' => !$hook_data['setup'] ? ExecMethod('addressbook.addressbook_ui.get_addressbooks',EGW_ACL_ADD) : array(), 'values' => !$hook_data['setup'] ? ExecMethod('addressbook.addressbook_ui.get_addressbooks',Acl::ADD) : array(),
'xmlrpc' => True, 'xmlrpc' => True,
'admin' => False, 'admin' => False,
); );
@ -159,7 +163,7 @@ class addressbook_hooks
'type' => 'select', 'type' => 'select',
'label' => 'Add a customfield to link title', 'label' => 'Add a customfield to link title',
'name' => 'link_title_cf', 'name' => 'link_title_cf',
'values' => addressbook_bo::cf_options(), 'values' => Api\Contacts::cf_options(),
'help' => 'Add customfield to links of addressbook, which displays in other applications. The default value is none customfield.', 'help' => 'Add customfield to links of addressbook, which displays in other applications. The default value is none customfield.',
'xmlrpc' => True, 'xmlrpc' => True,
'admin' => false, 'admin' => false,
@ -223,7 +227,7 @@ class addressbook_hooks
'name' => 'default_document', 'name' => 'default_document',
'help' => lang('If you specify a document (full vfs path) here, %1 displays an extra document icon for each entry. That icon allows to download the specified document with the data inserted.', lang('addressbook')).' '. 'help' => lang('If you specify a document (full vfs path) here, %1 displays an extra document icon for each entry. That icon allows to download the specified document with the data inserted.', lang('addressbook')).' '.
lang('The document can contain placeholder like {{%1}}, to be replaced with the data.','n_fn').' '. lang('The document can contain placeholder like {{%1}}, to be replaced with the data.','n_fn').' '.
lang('The following document-types are supported:'). implode(',',bo_merge::get_file_extensions()), lang('The following document-types are supported:'). implode(',',Api\Storage\Merge::get_file_extensions()),
'run_lang' => false, 'run_lang' => false,
'xmlrpc' => True, 'xmlrpc' => True,
'admin' => False, 'admin' => False,
@ -235,7 +239,7 @@ class addressbook_hooks
'name' => 'document_dir', 'name' => 'document_dir',
'help' => lang('If you specify a directory (full vfs path) here, %1 displays an action for each document. That action allows to download the specified document with the data inserted.',lang('addressbook')).' '. 'help' => lang('If you specify a directory (full vfs path) here, %1 displays an action for each document. That action allows to download the specified document with the data inserted.',lang('addressbook')).' '.
lang('The document can contain placeholder like {{%1}}, to be replaced with the data.','n_fn').' '. lang('The document can contain placeholder like {{%1}}, to be replaced with the data.','n_fn').' '.
lang('The following document-types are supported:'). implode(',',bo_merge::get_file_extensions()), lang('The following document-types are supported:'). implode(',',Api\Storage\Merge::get_file_extensions()),
'run_lang' => false, 'run_lang' => false,
'xmlrpc' => True, 'xmlrpc' => True,
'admin' => False, 'admin' => False,
@ -301,7 +305,7 @@ class addressbook_hooks
'type' => 'select', 'type' => 'select',
'label' => 'Charset for the vCard import and export', 'label' => 'Charset for the vCard import and export',
'name' => 'vcard_charset', 'name' => 'vcard_charset',
'values' => translation::get_installed_charsets(), 'values' => Api\Translation::get_installed_charsets(),
'help' => 'Which charset should be used for the vCard import and export.', 'help' => 'Which charset should be used for the vCard import and export.',
'xmlrpc' => True, 'xmlrpc' => True,
'admin' => false, 'admin' => false,
@ -425,18 +429,18 @@ class addressbook_hooks
/** /**
* ACL rights and labels used * ACL rights and labels used
* *
* @param string|array string with location or array with parameters incl. "location", specially "owner" for selected acl owner * @param string|array string with location or array with parameters incl. "location", specially "owner" for selected Acl owner
* @return array acl::(READ|ADD|EDIT|DELETE|PRIVAT|CUSTOM(1|2|3)) => $label pairs * @return array Acl::(READ|ADD|EDIT|DELETE|PRIVAT|CUSTOM(1|2|3)) => $label pairs
*/ */
public static function acl_rights($params) public static function acl_rights($params)
{ {
unset($params); // not used, but required by function signature unset($params); // not used, but required by function signature
return array( return array(
acl::READ => 'read', Acl::READ => 'read',
acl::EDIT => 'edit', Acl::EDIT => 'edit',
acl::ADD => 'add', Acl::ADD => 'add',
acl::DELETE => 'delete', Acl::DELETE => 'delete',
); );
} }

View File

@ -98,7 +98,7 @@ class addressbook_import_contacts_csv extends importexport_basic_import_csv {
$this->errors[$import_csv->get_current_position()] = lang( $this->errors[$import_csv->get_current_position()] = lang(
'Unable to convert "%1" to account ID. Using plugin setting (%2) for owner.', 'Unable to convert "%1" to account ID. Using plugin setting (%2) for owner.',
$record->owner, $record->owner,
common::grab_owner_name($this->user) Api\Accounts::username($this->user)
); );
$record->owner = $this->user; $record->owner = $this->user;
} else { } else {
@ -113,8 +113,8 @@ class addressbook_import_contacts_csv extends importexport_basic_import_csv {
if(!array_key_exists($record->owner, $this->bocontacts->get_addressbooks())) if(!array_key_exists($record->owner, $this->bocontacts->get_addressbooks()))
{ {
$this->errors[$import_csv->get_current_position()] = lang("Unable to import into %1, using %2", $this->errors[$import_csv->get_current_position()] = lang("Unable to import into %1, using %2",
common::grab_owner_name($record->owner), Api\Accounts::username($record->owner),
common::grab_owner_name($this->user) Api\Accounts::username($this->user)
); );
$record->owner = $this->user; $record->owner = $this->user;
} }
@ -165,7 +165,7 @@ class addressbook_import_contacts_csv extends importexport_basic_import_csv {
// Format birthday as backend requires - converter should give timestamp // Format birthday as backend requires - converter should give timestamp
if($record->bday && is_numeric($record->bday)) if($record->bday && is_numeric($record->bday))
{ {
$time = new egw_time($record->bday); $time = new Api\DateTime($record->bday);
$record->bday = $time->format('Y-m-d'); $record->bday = $time->format('Y-m-d');
} }
@ -323,7 +323,7 @@ class addressbook_import_contacts_csv extends importexport_basic_import_csv {
return $result; return $result;
} }
default: default:
throw new egw_exception('Unsupported action: '. $_action); throw new Api\Exception('Unsupported action: '. $_action);
} }
} }
@ -415,4 +415,4 @@ class addressbook_import_contacts_csv extends importexport_basic_import_csv {
public function get_results() { public function get_results() {
return $this->results; return $this->results;
} }
} // end of iface_export_plugin }

View File

@ -157,6 +157,7 @@ class addressbook_import_vcard implements importexport_iface_import_plugin {
*/ */
public function _vcard($_vcard, $owner) public function _vcard($_vcard, $owner)
{ {
// ToDo: Nathan: $_definition is not defined
$charset = $_definition->plugin_options['charset']; $charset = $_definition->plugin_options['charset'];
if($charset == 'user') $charset = $GLOBALS['egw_info']['user']['preferences']['addressbook']['vcard_charset']; if($charset == 'user') $charset = $GLOBALS['egw_info']['user']['preferences']['addressbook']['vcard_charset'];
$record = $this->bocontacts->vcardtoegw($_vcard,$charset); $record = $this->bocontacts->vcardtoegw($_vcard,$charset);
@ -202,8 +203,12 @@ class addressbook_import_vcard implements importexport_iface_import_plugin {
// Only update if there are changes // Only update if there are changes
$old = $this->bocontacts->read($_data['id']); $old = $this->bocontacts->read($_data['id']);
// if we get countrycodes as countryname, try to translate them -> the rest should be handled by bo classes. // if we get countrycodes as countryname, try to translate them -> the rest should be handled by bo classes.
foreach(array('adr_one_', 'adr_two_') as $c_prefix) { foreach(array('adr_one_', 'adr_two_') as $c_prefix)
if (strlen(trim($_data[$c_prefix.'countryname']))==2) $_data[$c_prefix.'countryname'] = $GLOBALS['egw']->country->get_full_name(trim($_data[$c_prefix.'countryname']),$translated=true); {
if (strlen(trim($_data[$c_prefix.'countryname']))==2)
{
$_data[$c_prefix.'countryname'] = Api\Country::get_full_name(trim($_data[$c_prefix.'countryname']), true);
}
} }
// Don't change a user account into a contact // Don't change a user account into a contact
if($old['owner'] == 0) { if($old['owner'] == 0) {
@ -270,13 +275,13 @@ class addressbook_import_vcard implements importexport_iface_import_plugin {
$record_class = get_class($this->preview_records[0]); $record_class = get_class($this->preview_records[0]);
foreach($this->preview_records as $i => $record) foreach($this->preview_records as $record)
{ {
// Convert to human-friendly // Convert to human-friendly
importexport_export_csv::convert($record,$record_class::$types,$_definition->application); importexport_export_csv::convert($record,$record_class::$types,$_definition->application);
$record = $record->get_record_array(); $record = $record->get_record_array();
$row = array(); $row = array();
foreach($labels as $field => $label) foreach(array_keys($labels) as $field)
{ {
$row[$field] = $record[$field]; $row[$field] = $record[$field];
@ -380,4 +385,4 @@ class addressbook_import_vcard implements importexport_iface_import_plugin {
public function get_results() { public function get_results() {
return $this->results; return $this->results;
} }
} // end of iface_export_plugin }

File diff suppressed because it is too large Load Diff

View File

@ -13,11 +13,12 @@
*/ */
use EGroupware\Api; use EGroupware\Api;
use EGroupware\Api\Link;
/** /**
* Addressbook - vCard parser * Addressbook - vCard parser
*/ */
class addressbook_vcal extends addressbook_bo class addressbook_vcal extends Api\Contacts
{ {
/** /**
* product manufacturer from setSupportedFields (lowercase!) * product manufacturer from setSupportedFields (lowercase!)
@ -32,11 +33,11 @@ class addressbook_vcal extends addressbook_bo
*/ */
var $productName; var $productName;
/** /**
* supported fields for vCard file and groupdav import/export * supported fields for vCard file and CardDAV import/export
* *
* @var array * @var array
*/ */
var $databaseFields = array( // all entries e.g. for groupdav var $databaseFields = array( // all entries e.g. for CardDAV
'ADR;WORK' => array('','adr_one_street2','adr_one_street','adr_one_locality','adr_one_region', 'ADR;WORK' => array('','adr_one_street2','adr_one_street','adr_one_locality','adr_one_region',
'adr_one_postalcode','adr_one_countryname'), 'adr_one_postalcode','adr_one_countryname'),
'ADR;HOME' => array('','adr_two_street2','adr_two_street','adr_two_locality','adr_two_region', 'ADR;HOME' => array('','adr_two_street2','adr_two_street','adr_two_locality','adr_two_region',
@ -205,7 +206,7 @@ class addressbook_vcal extends addressbook_bo
$vCard->setAttribute('PRODID','-//EGroupware//NONSGML EGroupware Addressbook '.$GLOBALS['egw_info']['apps']['phpgwapi']['version'].'//'. $vCard->setAttribute('PRODID','-//EGroupware//NONSGML EGroupware Addressbook '.$GLOBALS['egw_info']['apps']['phpgwapi']['version'].'//'.
strtoupper($GLOBALS['egw_info']['user']['preferences']['common']['lang'])); strtoupper($GLOBALS['egw_info']['user']['preferences']['common']['lang']));
$sysCharSet = translation::charset(); $sysCharSet = Api\Translation::charset();
// KAddressbook and Funambol4BlackBerry always requires non-ascii chars to be qprint encoded. // KAddressbook and Funambol4BlackBerry always requires non-ascii chars to be qprint encoded.
if ($this->productName == 'kde' || if ($this->productName == 'kde' ||
@ -280,7 +281,7 @@ class addressbook_vcal extends addressbook_bo
switch ($databaseField) switch ($databaseField)
{ {
case 'modified': case 'modified':
$value = gmdate("Y-m-d\TH:i:s\Z",egw_time::user2server($value)); $value = gmdate("Y-m-d\TH:i:s\Z",Api\DateTime::user2server($value));
$hasdata++; $hasdata++;
break; break;
@ -332,7 +333,7 @@ class addressbook_vcal extends addressbook_bo
case 'cat_id': case 'cat_id':
if (!empty($value) && ($values = /*str_replace(',','\\,',*/$this->get_categories($value)))//) if (!empty($value) && ($values = /*str_replace(',','\\,',*/$this->get_categories($value)))//)
{ {
$values = (array) translation::convert($values, $sysCharSet, $_charset); $values = (array) Api\Translation::convert($values, $sysCharSet, $_charset);
$value = implode(',', $values); // just for the CHARSET recognition $value = implode(',', $values); // just for the CHARSET recognition
if (($size > 0) && strlen($value) > $size) if (($size > 0) && strlen($value) > $size)
{ {
@ -428,7 +429,7 @@ class addressbook_vcal extends addressbook_bo
|| in_array($vcardField,array('FN','ORG','N')) || in_array($vcardField,array('FN','ORG','N'))
|| ($size >= 0 && !$noTruncate)) || ($size >= 0 && !$noTruncate))
{ {
$value = translation::convert(trim($value), $sysCharSet, $_charset); $value = Api\Translation::convert(trim($value), $sysCharSet, $_charset);
$values[] = $value; $values[] = $value;
if (preg_match('/[^\x20-\x7F]/', $value)) if (preg_match('/[^\x20-\x7F]/', $value))
{ {
@ -1030,8 +1031,8 @@ class addressbook_vcal extends addressbook_bo
{ {
if (!$file) if (!$file)
{ {
$filename = count($ids) == 1 ? egw_link::title('addressbook',$ids[0]): 'egw_addressbook_'.date('Y-m-d'); $filename = count($ids) == 1 ? Link::title('addressbook',$ids[0]): 'egw_addressbook_'.date('Y-m-d');
html::content_header(($filename ? $filename : 'addressbook').'.vcf','text/x-vcard'); Api\Header\Content::type(($filename ? $filename : 'addressbook').'.vcf','text/x-vcard');
} }
if (!($fp = fopen($file ? $file : 'php://output','w'))) if (!($fp = fopen($file ? $file : 'php://output','w')))
{ {
@ -1053,7 +1054,7 @@ class addressbook_vcal extends addressbook_bo
if (!$file) if (!$file)
{ {
common::egw_exit(); exit();
} }
return true; return true;
} }
@ -1079,7 +1080,7 @@ class addressbook_vcal extends addressbook_bo
{ {
$vCard->setAttribute('X-ADDRESSBOOKSERVER-MEMBER','urn:uuid:'.$uid); $vCard->setAttribute('X-ADDRESSBOOKSERVER-MEMBER','urn:uuid:'.$uid);
} }
$vCard->setAttribute('REV',egw_time::to($list['list_modified'],'Y-m-d\TH:i:s\Z')); $vCard->setAttribute('REV',Api\DateTime::to($list['list_modified'],'Y-m-d\TH:i:s\Z'));
$vCard->setAttribute('UID',$list['list_uid']); $vCard->setAttribute('UID',$list['list_uid']);
return $vCard->exportvCalendar(); return $vCard->exportvCalendar();

View File

@ -1,14 +1,16 @@
<?php <?php
/** /**
* eGroupWare - Wizard for Adressbook CSV export * EGroupware - Wizard for Adressbook CSV export
* *
* @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
* @package addressbook * @package addressbook
* @link http://www.egroupware.org * @link http://www.egroupware.org
* @author Nathan Gray * @author Nathan Gray
* @version $Id: $ * @version $Id$
*/ */
use EGroupware\Api;
class addressbook_wizard_export_contacts_csv extends importexport_wizard_basic_export_csv class addressbook_wizard_export_contacts_csv extends importexport_wizard_basic_export_csv
{ {
public function __construct() { public function __construct() {
@ -18,7 +20,7 @@ class addressbook_wizard_export_contacts_csv extends importexport_wizard_basic_e
$this->step_templates['wizard_step50'] = 'addressbook.export_explode_fields'; $this->step_templates['wizard_step50'] = 'addressbook.export_explode_fields';
// Field mapping // Field mapping
$bocontacts = new addressbook_bo(); $bocontacts = new Api\Contacts();
$this->export_fields = $bocontacts->contact_fields; $this->export_fields = $bocontacts->contact_fields;
foreach($bocontacts->customfields as $name => $data) { foreach($bocontacts->customfields as $name => $data) {
$this->export_fields['#'.$name] = $data['label']; $this->export_fields['#'.$name] = $data['label'];
@ -51,7 +53,7 @@ class addressbook_wizard_export_contacts_csv extends importexport_wizard_basic_e
} }
/** /**
* Choose how to export multi-selects (includes categories) * Choose how to export multi-selects (includes Api\Categories)
*/ */
function wizard_step50(&$content, &$sel_options, &$readonlys, &$preserv) function wizard_step50(&$content, &$sel_options, &$readonlys, &$preserv)
{ {
@ -87,7 +89,7 @@ class addressbook_wizard_export_contacts_csv extends importexport_wizard_basic_e
$content['step'] = 'wizard_step50'; $content['step'] = 'wizard_step50';
unset ($preserv['button']); unset ($preserv['button']);
$field_list = $this->get_field_list($content); $field_list = $this->get_field_list($content);
$settings = $content['explode_multiselects'] ? $content['explode_multiselects'] : $content['plugin_options']['explode_multiselects']; $settings = $content['explode_multiselects'] ? $content['explode_multiselects'] : $content['plugin_options']['explode_multiselects'];
// Skip this step if no fields applicable // Skip this step if no fields applicable
@ -97,7 +99,7 @@ class addressbook_wizard_export_contacts_csv extends importexport_wizard_basic_e
$cat_options = array( $cat_options = array(
addressbook_export_contacts_csv::NO_EXPLODE => lang('All in one field'), addressbook_export_contacts_csv::NO_EXPLODE => lang('All in one field'),
addressbook_export_contacts_csv::MAIN_CATS => lang('Main categories in their own field'), addressbook_export_contacts_csv::MAIN_CATS => lang('Main Api\Categories in their own field'),
addressbook_export_contacts_csv::EACH_CAT => lang('Each category in its own field'), addressbook_export_contacts_csv::EACH_CAT => lang('Each category in its own field'),
); );
$multi_options = array( $multi_options = array(
@ -132,16 +134,16 @@ class addressbook_wizard_export_contacts_csv extends importexport_wizard_basic_e
*/ */
protected function get_field_list($content) { protected function get_field_list($content) {
$field_list = array(); $field_list = array();
// Category gets special handling // Category gets special handling
if(in_array('cat_id', array_keys($content['mapping']))) { if(in_array('cat_id', array_keys($content['mapping']))) {
$field_list['cat_id'] = $this->export_fields['cat_id']; $field_list['cat_id'] = $this->export_fields['cat_id'];
} }
// Add any multi-select custom fields // Add any multi-select custom fields
$custom = config::get_customfields('addressbook'); $custom = Api\Storage\Customfields::get('addressbook');
foreach($custom as $name => $c_field) { foreach($custom as $name => $c_field) {
if($c_field['type'] = 'select' && $c_field['rows'] > 1 && in_array('#'.$name, array_keys($content['mapping']))) { if($c_field['type'] == 'select' && $c_field['rows'] > 1 && in_array('#'.$name, array_keys($content['mapping']))) {
$field_list['#'.$name] = $c_field['label']; $field_list['#'.$name] = $c_field['label'];
} }
} }

View File

@ -9,6 +9,8 @@
* @author Nathan Gray * @author Nathan Gray
*/ */
use EGroupware\Api;
/** /**
* We need to allow choosing of charset, so we'll just use the standard one from CSV * We need to allow choosing of charset, so we'll just use the standard one from CSV
*/ */
@ -22,7 +24,6 @@ class addressbook_wizard_export_vcard
$this->step_templates = array( $this->step_templates = array(
'wizard_step40' => 'addressbook.importexport_wizard_vcard_charset' 'wizard_step40' => 'addressbook.importexport_wizard_vcard_charset'
); );
} }
/** /**
@ -59,14 +60,14 @@ class addressbook_wizard_export_vcard
if(!$content['charset'] && $content['plugin_options']['charset']) { if(!$content['charset'] && $content['plugin_options']['charset']) {
$content['charset'] = $content['plugin_options']['charset'] ? $content['plugin_options']['charset'] : 'user'; $content['charset'] = $content['plugin_options']['charset'] ? $content['plugin_options']['charset'] : 'user';
} }
$sel_options['charset'] = $GLOBALS['egw']->translation->get_installed_charsets()+ $sel_options['charset'] = Api\Translation::get_installed_charsets()+
array( array(
'user' => lang('User preference'), 'user' => lang('User preference'),
); );
$preserv = $content; $preserv = $content;
// Add in extra allowed charsets // Add in extra allowed charsets
$config = config::read('importexport'); $config = Api\Config::read('importexport');
$extra_charsets = array_intersect(explode(',',$config['import_charsets']), mb_list_encodings()); $extra_charsets = array_intersect(explode(',',$config['import_charsets']), mb_list_encodings());
if($extra_charsets) if($extra_charsets)
{ {

View File

@ -9,6 +9,9 @@
* @version $Id: $ * @version $Id: $
*/ */
use EGroupware\Api;
use EGroupware\Api\Acl;
class addressbook_wizard_import_contacts_csv extends importexport_wizard_basic_import_csv class addressbook_wizard_import_contacts_csv extends importexport_wizard_basic_import_csv
{ {
@ -25,16 +28,16 @@ class addressbook_wizard_import_contacts_csv extends importexport_wizard_basic_i
); );
// Field mapping // Field mapping
$bocontacts = new addressbook_bo(); $bocontacts = new Api\Contacts();
$this->mapping_fields = $bocontacts->contact_fields; $this->mapping_fields = $bocontacts->contact_fields;
$categories = new categories('','addressbook'); $categories = new Api\Categories('','addressbook');
$cat_list = array(); $cat_list = array();
foreach((array)$categories->return_sorted_array(0,False,'','','',true,0,true) as $cat) foreach((array)$categories->return_sorted_array(0,False,'','','',true,0,true) as $cat)
{ {
$s = str_repeat('&nbsp;',$cat['level']) . stripslashes($cat['name']); $s = str_repeat('&nbsp;',$cat['level']) . stripslashes($cat['name']);
if (categories::is_global($cat)) if (Api\Categories::is_global($cat))
{ {
$s .= ' &#9830;'; $s .= ' &#9830;';
} }
@ -51,7 +54,7 @@ class addressbook_wizard_import_contacts_csv extends importexport_wizard_basic_i
$this->mapping_fields['#'.$name] = $data['label']; $this->mapping_fields['#'.$name] = $data['label'];
} }
unset($this->mapping_fields['jpegphoto']); // can't cvs import that unset($this->mapping_fields['jpegphoto']); // can't cvs import that
// Add in special handled fields // Add in special handled fields
$this->mapping_fields[lang('Special')] = addressbook_import_contacts_csv::$special_fields; $this->mapping_fields[lang('Special')] = addressbook_import_contacts_csv::$special_fields;
@ -77,10 +80,10 @@ class addressbook_wizard_import_contacts_csv extends importexport_wizard_basic_i
} }
$result = parent::wizard_step50($content, $sel_options, $readonlys, $preserv); $result = parent::wizard_step50($content, $sel_options, $readonlys, $preserv);
$content['msg'] .= "\n*" . lang('Contact ID cannot be changed by import'); $content['msg'] .= "\n*" . lang('Contact ID cannot be changed by import');
return $result; return $result;
} }
function wizard_step60(&$content, &$sel_options, &$readonlys, &$preserv) function wizard_step60(&$content, &$sel_options, &$readonlys, &$preserv)
{ {
if($this->debug) error_log('addressbook.importexport.addressbook_csv_import::wizard_step60->$content '.print_r($content,true)); if($this->debug) error_log('addressbook.importexport.addressbook_csv_import::wizard_step60->$content '.print_r($content,true));
@ -115,8 +118,8 @@ class addressbook_wizard_import_contacts_csv extends importexport_wizard_basic_i
$content['change_owner'] = $content['plugin_options']['change_owner']; $content['change_owner'] = $content['plugin_options']['change_owner'];
} }
$bocontacts = new addressbook_bo(); $bocontacts = new Api\Contacts();
$sel_options['contact_owner'] = array('personal' => lang("Importer's personal")) + $bocontacts->get_addressbooks(EGW_ACL_ADD); $sel_options['contact_owner'] = array('personal' => lang("Importer's personal")) + $bocontacts->get_addressbooks(Acl::ADD);
if(!in_array('owner', $content['field_mapping'])) { if(!in_array('owner', $content['field_mapping'])) {
$content['no_owner_map'] = true; $content['no_owner_map'] = true;
} }
@ -125,6 +128,5 @@ class addressbook_wizard_import_contacts_csv extends importexport_wizard_basic_i
unset ($preserv['button']); unset ($preserv['button']);
return 'addressbook.importexport_wizard_chooseowner'; return 'addressbook.importexport_wizard_chooseowner';
} }
} }
} }

View File

@ -10,27 +10,27 @@
* @version $Id$ * @version $Id$
*/ */
use EGroupware\Api;
use EGroupware\Api\Acl;
class addressbook_wizard_import_vcard extends addressbook_import_vcard class addressbook_wizard_import_vcard extends addressbook_import_vcard
{ {
/** /**
* constructor * constructor
*/ */
function __construct() function __construct()
{ {
$this->steps = array( $this->steps = array(
'wizard_step40' => lang('Choose charset'), 'wizard_step40' => lang('Choose charset'),
'wizard_step60' => lang('Choose owner of imported data'), 'wizard_step60' => lang('Choose owner of imported data'),
); );
} }
function wizard_step40(&$content, &$sel_options, &$readonlys, &$preserv) function wizard_step40(&$content, &$sel_options, &$readonlys, &$preserv)
{ {
if($this->debug) error_log(get_class($this) . '::wizard_step40->$content '.print_r($content,true)); if($this->debug) error_log(get_class($this) . '::wizard_step40->$content '.print_r($content,true));
// return from step40 // return from step40
if ($content['step'] == 'wizard_step40') if ($content['step'] == 'wizard_step40')
{ {
switch (array_search('pressed', $content['button'])) switch (array_search('pressed', $content['button']))
{ {
@ -50,20 +50,20 @@ class addressbook_wizard_import_vcard extends addressbook_import_vcard
$content['msg'] = $this->steps['wizard_step40']; $content['msg'] = $this->steps['wizard_step40'];
$content['step'] = 'wizard_step40'; $content['step'] = 'wizard_step40';
if(!$content['charset'] && $content['plugin_options']['charset']) { if(!$content['charset'] && $content['plugin_options']['charset']) {
$content['charset'] = $content['plugin_options']['charset']; $content['charset'] = $content['plugin_options']['charset'];
} }
$sel_options['charset'] = $GLOBALS['egw']->translation->get_installed_charsets()+ $sel_options['charset'] = Api\Translation::get_installed_charsets()+
array( array(
'user' => lang('User preference'), 'user' => lang('User preference'),
); );
// Add in extra allowed charsets // Add in extra allowed charsets
$config = config::read('importexport'); $config = Api\Config::read('importexport');
$extra_charsets = array_intersect(explode(',',$config['import_charsets']), mb_list_encodings()); $extra_charsets = array_intersect(explode(',',$config['import_charsets']), mb_list_encodings());
if($extra_charsets) if($extra_charsets)
{ {
$sel_options['charset'] += array(lang('Extra encodings') => array_combine($extra_charsets,$extra_charsets)); $sel_options['charset'] += array(lang('Extra encodings') => array_combine($extra_charsets,$extra_charsets));
} }
$preserv = $content; $preserv = $content;
unset ($preserv['button']); unset ($preserv['button']);
@ -102,13 +102,12 @@ class addressbook_wizard_import_vcard extends addressbook_import_vcard
$content['change_owner'] = $content['plugin_options']['change_owner']; $content['change_owner'] = $content['plugin_options']['change_owner'];
} }
$bocontacts = new addressbook_bo(); $bocontacts = new Api\Contacts();
$sel_options['contact_owner'] = array('personal' => lang("Importer's personal")) + $bocontacts->get_addressbooks(EGW_ACL_ADD); $sel_options['contact_owner'] = array('personal' => lang("Importer's personal")) + $bocontacts->get_addressbooks(Acl::ADD);
$preserv = $content; $preserv = $content;
unset ($preserv['button']); unset ($preserv['button']);
return 'addressbook.importexport_wizard_vcard_chooseowner'; return 'addressbook.importexport_wizard_vcard_chooseowner';
} }
} }
} }

View File

@ -12,6 +12,9 @@
* @version $Id$ * @version $Id$
*/ */
use EGroupware\Api;
use EGroupware\Api\Acl;
/** /**
* Addressbook activesync plugin * Addressbook activesync plugin
*/ */
@ -25,7 +28,7 @@ class addressbook_zpush implements activesync_plugin_write, activesync_plugin_se
/** /**
* Instance of addressbook_bo * Instance of addressbook_bo
* *
* @var addressbook_bo * @var Api\Contacts
*/ */
private $addressbook; private $addressbook;
@ -134,11 +137,11 @@ class addressbook_zpush implements activesync_plugin_write, activesync_plugin_se
} }
else else
{ {
translation::add_app('addressbook'); // we need the addressbook translations Api\Translation::add_app('addressbook'); // we need the addressbook translations
if (!isset($this->addressbook)) $this->addressbook = new addressbook_bo(); if (!isset($this->addressbook)) $this->addressbook = new Api\Contacts();
// error_log(print_r($this->addressbook->get_addressbooks(EGW_ACL_READ),true)); // error_log(print_r($this->addressbook->get_addressbooks(Acl::READ),true));
$pref = $GLOBALS['egw_info']['user']['preferences']['activesync']['addressbook-abs']; $pref = $GLOBALS['egw_info']['user']['preferences']['activesync']['addressbook-abs'];
$pref_abs = (string)$pref !== '' ? explode(',',$pref) : array(); $pref_abs = (string)$pref !== '' ? explode(',',$pref) : array();
@ -172,7 +175,7 @@ class addressbook_zpush implements activesync_plugin_write, activesync_plugin_se
*/ */
public function GetFolderList() public function GetFolderList()
{ {
// error_log(print_r($this->addressbook->get_addressbooks(EGW_ACL_READ),true)); // error_log(print_r($this->addressbook->get_addressbooks(Acl::READ),true));
$folderlist = array(); $folderlist = array();
foreach ($this->get_addressbooks() as $account => $label) foreach ($this->get_addressbooks() as $account => $label)
{ {
@ -278,7 +281,7 @@ class addressbook_zpush implements activesync_plugin_write, activesync_plugin_se
function GetMessageList($id, $cutoffdate=NULL) function GetMessageList($id, $cutoffdate=NULL)
{ {
unset($cutoffdate); // not used, but required by function signature unset($cutoffdate); // not used, but required by function signature
if (!isset($this->addressbook)) $this->addressbook = new addressbook_bo(); if (!isset($this->addressbook)) $this->addressbook = new Api\Contacts();
$type = $user = null; $type = $user = null;
$this->backend->splitID($id,$type,$user); $this->backend->splitID($id,$type,$user);
@ -329,7 +332,7 @@ class addressbook_zpush implements activesync_plugin_write, activesync_plugin_se
*/ */
public function GetMessage($folderid, $id, $contentparameters) public function GetMessage($folderid, $id, $contentparameters)
{ {
if (!isset($this->addressbook)) $this->addressbook = new addressbook_bo(); if (!isset($this->addressbook)) $this->addressbook = new Api\Contacts();
//$truncsize = Utils::GetTruncSize($contentparameters->GetTruncation()); //$truncsize = Utils::GetTruncSize($contentparameters->GetTruncation());
//$mimesupport = $contentparameters->GetMimeSupport(); //$mimesupport = $contentparameters->GetMimeSupport();
@ -386,7 +389,7 @@ class addressbook_zpush implements activesync_plugin_write, activesync_plugin_se
$message->$key = array(); $message->$key = array();
foreach($contact[$attr] ? explode(',',$contact[$attr]) : array() as $cat_id) foreach($contact[$attr] ? explode(',',$contact[$attr]) : array() as $cat_id)
{ {
$message->categories[] = categories::id2name($cat_id); $message->categories[] = Api\Categories::id2name($cat_id);
} }
// for all addressbooks in one, add addressbook name itself as category // for all addressbooks in one, add addressbook name itself as category
if ($GLOBALS['egw_info']['user']['preferences']['activesync']['addressbook-all-in-one']) if ($GLOBALS['egw_info']['user']['preferences']['activesync']['addressbook-all-in-one'])
@ -437,7 +440,7 @@ class addressbook_zpush implements activesync_plugin_write, activesync_plugin_se
public function StatMessage($folderid, $contact) public function StatMessage($folderid, $contact)
{ {
unset($folderid); // not used (contact_id is global), but required by function signaure unset($folderid); // not used (contact_id is global), but required by function signaure
if (!isset($this->addressbook)) $this->addressbook = new addressbook_bo(); if (!isset($this->addressbook)) $this->addressbook = new Api\Contacts();
if (!is_array($contact)) $contact = $this->addressbook->read($contact); if (!is_array($contact)) $contact = $this->addressbook->read($contact);
@ -511,7 +514,7 @@ class addressbook_zpush implements activesync_plugin_write, activesync_plugin_se
public function ChangeMessage($folderid, $id, $message, $contentParameters) public function ChangeMessage($folderid, $id, $message, $contentParameters)
{ {
unset($contentParameters); // not used, but required by function signature unset($contentParameters); // not used, but required by function signature
if (!isset($this->addressbook)) $this->addressbook = new addressbook_bo(); if (!isset($this->addressbook)) $this->addressbook = new Api\Contacts();
$type = $account = null; $type = $account = null;
$this->backend->splitID($folderid, $type, $account); $this->backend->splitID($folderid, $type, $account);
@ -528,13 +531,13 @@ class addressbook_zpush implements activesync_plugin_write, activesync_plugin_se
debugLog(__METHOD__." Folder wrong or contact not existing"); debugLog(__METHOD__." Folder wrong or contact not existing");
return false; return false;
} }
if ($account == 0) // as a precausion, we currently do NOT allow to change accounts if ($account == 0) // as a precausion, we currently do NOT allow to change Api\Accounts
{ {
debugLog(__METHOD__." Changing of accounts denied!"); debugLog(__METHOD__." Changing of Api\Accounts denied!");
return false; //no changing of accounts return false; //no changing of Api\Accounts
} }
$contact = array(); $contact = array();
if (empty($id) && ($this->addressbook->grants[$account] & EGW_ACL_EDIT) || ($contact = $this->addressbook->read($id)) && $this->addressbook->check_perms(EGW_ACL_EDIT, $contact)) if (empty($id) && ($this->addressbook->grants[$account] & Acl::EDIT) || ($contact = $this->addressbook->read($id)) && $this->addressbook->check_perms(Acl::EDIT, $contact))
{ {
// remove all fields supported by AS, leaving all unsupported fields unchanged // remove all fields supported by AS, leaving all unsupported fields unchanged
$contact = array_diff_key($contact, array_flip(self::$mapping)); $contact = array_diff_key($contact, array_flip(self::$mapping));
@ -601,7 +604,7 @@ class addressbook_zpush implements activesync_plugin_write, activesync_plugin_se
} }
} }
// for all-in-one addressbook, account is meaningless and wrong! // for all-in-one addressbook, account is meaningless and wrong!
// addressbook_bo::save() keeps the owner or sets an appropriate one if none given // Api\Contacts::save() keeps the owner or sets an appropriate one if none given
if (!isset($contact['private'])) $contact['private'] = (int)$is_private; if (!isset($contact['private'])) $contact['private'] = (int)$is_private;
if (!$GLOBALS['egw_info']['user']['preferences']['activesync']['addressbook-all-in-one']) if (!$GLOBALS['egw_info']['user']['preferences']['activesync']['addressbook-all-in-one'])
{ {
@ -670,7 +673,8 @@ class addressbook_zpush implements activesync_plugin_write, activesync_plugin_se
*/ */
public function DeleteMessage($folderid, $id, $contentParameters) public function DeleteMessage($folderid, $id, $contentParameters)
{ {
if (!isset($this->addressbook)) $this->addressbook = new addressbook_bo(); unset($contentParameters); // not used, but required by function signature
if (!isset($this->addressbook)) $this->addressbook = new Api\Contacts();
$ret = $this->addressbook->delete($id); $ret = $this->addressbook->delete($id);
debugLog(__METHOD__."('$folderid', $id) delete($id) returned ".array2string($ret)); debugLog(__METHOD__."('$folderid', $id) delete($id) returned ".array2string($ret));
@ -732,7 +736,7 @@ class addressbook_zpush implements activesync_plugin_write, activesync_plugin_se
if ($type != 'addressbook') return false; if ($type != 'addressbook') return false;
if (!isset($this->addressbook)) $this->addressbook = new addressbook_bo(); if (!isset($this->addressbook)) $this->addressbook = new Api\Contacts();
// handle all-in-one addressbook // handle all-in-one addressbook
if ($GLOBALS['egw_info']['user']['preferences']['activesync']['addressbook-all-in-one'] && if ($GLOBALS['egw_info']['user']['preferences']['activesync']['addressbook-all-in-one'] &&
@ -783,7 +787,7 @@ class addressbook_zpush implements activesync_plugin_write, activesync_plugin_se
*/ */
function getSearchResultsGAL($searchquery) function getSearchResultsGAL($searchquery)
{ {
if (!isset($this->addressbook)) $this->addressbook = new addressbook_bo(); if (!isset($this->addressbook)) $this->addressbook = new Api\Contacts();
//error_log(__METHOD__.'('.array2string($searchquery).')'); //error_log(__METHOD__.'('.array2string($searchquery).')');
// only return items in given range, eg. "0-50" // only return items in given range, eg. "0-50"
@ -841,8 +845,8 @@ class addressbook_zpush implements activesync_plugin_write, activesync_plugin_se
if (!isset($hook_data['setup']) && in_array($hook_data['type'], array('user', 'group'))) if (!isset($hook_data['setup']) && in_array($hook_data['type'], array('user', 'group')))
{ {
$user = $hook_data['account_id']; $user = $hook_data['account_id'];
$addressbook_bo = new addressbook_bo(); $addressbook_bo = new Api\Contacts();
$addressbooks = $addressbook_bo->get_addressbooks(EGW_ACL_READ, null, $user); $addressbooks = $addressbook_bo->get_addressbooks(Acl::READ, null, $user);
if ($user > 0) if ($user > 0)
{ {
unset($addressbooks[$user]); // personal addressbook is allways synced unset($addressbooks[$user]); // personal addressbook is allways synced

View File

@ -8,6 +8,8 @@
* @version $Id$ * @version $Id$
*/ */
use EGroupware\Api;
$GLOBALS['egw_info'] = array( $GLOBALS['egw_info'] = array(
'flags' => array( 'flags' => array(
'currentapp' => 'addressbook', 'currentapp' => 'addressbook',
@ -17,10 +19,10 @@ $GLOBALS['egw_info'] = array(
include('../header.inc.php'); include('../header.inc.php');
// check if we have an advanced search and reset it in case // check if we have an advanced search and reset it in case
$old_state = $GLOBALS['egw']->session->appsession('index','addressbook'); $old_state = Api\Cache::getSession('addressbook', 'index');
if ($old_state['advanced_search']) if ($old_state['advanced_search'])
{ {
unset($old_state['advanced_search']); unset($old_state['advanced_search']);
$GLOBALS['egw']->session->appsession('index','addressbook',$old_state); Api\Cache::setSession('addressbook', 'index', $old_state);
} }
$GLOBALS['egw']->redirect_link('/index.php','menuaction=addressbook.addressbook_ui.index'); Api\Egw::redirect_link('/index.php','menuaction=addressbook.addressbook_ui.index');

View File

@ -10,7 +10,7 @@
/* Basic information about this app */ /* Basic information about this app */
$setup_info['addressbook']['name'] = 'addressbook'; $setup_info['addressbook']['name'] = 'addressbook';
$setup_info['addressbook']['title'] = 'Addressbook'; $setup_info['addressbook']['title'] = 'Addressbook';
$setup_info['addressbook']['version'] = '14.1'; $setup_info['addressbook']['version'] = '16.1';
$setup_info['addressbook']['app_order'] = 4; $setup_info['addressbook']['app_order'] = 4;
$setup_info['addressbook']['enable'] = 1; $setup_info['addressbook']['enable'] = 1;
$setup_info['addressbook']['index'] = 'addressbook.addressbook_ui.index&ajax=true'; $setup_info['addressbook']['index'] = 'addressbook.addressbook_ui.index&ajax=true';
@ -51,12 +51,8 @@ $setup_info['addressbook']['hooks']['groupdav_root_props'] = 'addressbook_groupd
/* Dependencies for this app to work */ /* Dependencies for this app to work */
$setup_info['addressbook']['depends'][] = array( $setup_info['addressbook']['depends'][] = array(
'appname' => 'phpgwapi', 'appname' => 'api',
'versions' => Array('14.1') 'versions' => Array('16.1')
);
$setup_info['addressbook']['depends'][] = array(
'appname' => 'etemplate',
'versions' => Array('14.1')
); );
// installation checks for addresbook // installation checks for addresbook

View File

@ -10,6 +10,9 @@
* @version $Id$ * @version $Id$
*/ */
use EGroupware\Api;
use EGroupware\Api\Acl;
/** /**
* SiteMgr contact form for the addressbook * SiteMgr contact form for the addressbook
* *
@ -38,7 +41,7 @@ class module_addressbook_contactform extends sitemgr_module
*/ */
function get_user_interface() function get_user_interface()
{ {
$GLOBALS['egw']->translation->add_app('addressbook'); Api\Translation::add_app('addressbook');
$uicontacts = new addressbook_ui(); $uicontacts = new addressbook_ui();
@ -76,7 +79,7 @@ class module_addressbook_contactform extends sitemgr_module
'label' => lang('Addressbook the contact should be saved to').' ('.lang('The anonymous user needs add rights for it!').')', 'label' => lang('Addressbook the contact should be saved to').' ('.lang('The anonymous user needs add rights for it!').')',
'options' => array( 'options' => array(
'' => lang('None'), '' => lang('None'),
)+$uicontacts->get_addressbooks(EGW_ACL_ADD) // add to not show the accounts! )+$uicontacts->get_addressbooks(Acl::ADD) // add to not show the accounts!
), ),
'arg4' => array( 'arg4' => array(
'type' => 'textfield', 'type' => 'textfield',

View File

@ -1,5 +1,5 @@
<?php <?php
/** /***
* Addressbook - Sitemgr contact form * Addressbook - Sitemgr contact form
* *
* @link http://www.egroupware.org * @link http://www.egroupware.org
@ -10,6 +10,9 @@
* @version $Id: class.module_addressbook_display.inc.php 24028 2008-02-18 09:04:36Z stefanbecker $ * @version $Id: class.module_addressbook_display.inc.php 24028 2008-02-18 09:04:36Z stefanbecker $
*/ */
use EGroupware\Api;
use EGroupware\Api\Acl;
/** /**
* SiteMgr contact form for the addressbook * SiteMgr contact form for the addressbook
*/ */
@ -36,7 +39,7 @@ class module_addressbook_display extends sitemgr_module
*/ */
function get_user_interface() function get_user_interface()
{ {
$GLOBALS['egw']->translation->add_app('addressbook'); Api\Translation::add_app('addressbook');
$uicontacts = new addressbook_ui(); $uicontacts = new addressbook_ui();
@ -68,7 +71,7 @@ class module_addressbook_display extends sitemgr_module
'label' => lang('Addressbook the contact should be shown').' ('.lang('The anonymous user needs read it!').')', 'label' => lang('Addressbook the contact should be shown').' ('.lang('The anonymous user needs read it!').')',
'options' => array( 'options' => array(
'' => lang('All'), '' => lang('All'),
)+$uicontacts->get_addressbooks(EGW_ACL_ADD) // add to not show the accounts! )+$uicontacts->get_addressbooks(Acl::ADD) // add to not show the accounts!
), ),
'arg2' => array( 'arg2' => array(
'type' => 'select', 'type' => 'select',