mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-12-22 06:30:59 +01:00
- fixed sifaddressbook to use bocontacts
- adapted to bocontacts::save returning the id again - added comment for Lars about the id in LDAP & save
This commit is contained in:
parent
c14d006c15
commit
2b549bcfe8
@ -1,276 +1,282 @@
|
|||||||
<?php
|
<?php
|
||||||
/**************************************************************************\
|
/**
|
||||||
* eGroupWare - iCalendar Parser *
|
* Addressbook - SIF parser
|
||||||
* http://www.egroupware.org *
|
*
|
||||||
* Written by Lars Kneschke <lkneschke@egroupware.org> *
|
* @link http://www.egroupware.org
|
||||||
* -------------------------------------------- *
|
* @author Lars Kneschke <lkneschke@egroupware.org>
|
||||||
* This program is free software; you can redistribute it and/or modify it *
|
* @author Ralf Becker <RalfBecker-AT-outdoor-training.de>
|
||||||
* under the terms of the GNU General Public License as published by the *
|
* @package addressbook
|
||||||
* Free Software Foundation; either version 2 of the License. *
|
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
||||||
\**************************************************************************/
|
* @version $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
/* $Id$ */
|
require_once EGW_SERVER_ROOT.'/addressbook/inc/class.bocontacts.inc.php';
|
||||||
|
|
||||||
require_once EGW_SERVER_ROOT.'/addressbook/inc/class.boaddressbook.inc.php';
|
class sifaddressbook extends bocontacts
|
||||||
#require_once EGW_SERVER_ROOT.'/phpgwapi/inc/horde/Horde/iCalendar.php';
|
{
|
||||||
|
var $sifMapping = array(
|
||||||
|
'Anniversary' => '',
|
||||||
|
'AssistantName' => 'assistent',
|
||||||
|
'AssistantTelephoneNumber' => 'tel_assistent',
|
||||||
|
'BillingInformation' => '',
|
||||||
|
'Birthday' => 'bday',
|
||||||
|
'Body' => 'note',
|
||||||
|
'Business2TelephoneNumber' => '',
|
||||||
|
'BusinessAddressCity' => 'adr_one_locality',
|
||||||
|
'BusinessAddressCountry' => 'adr_one_countryname',
|
||||||
|
'BusinessAddressPostalCode' => 'adr_one_postalcode',
|
||||||
|
'BusinessAddressPostOfficeBox' => 'adr_one_street2',
|
||||||
|
'BusinessAddressState' => 'adr_one_region',
|
||||||
|
'BusinessAddressStreet' => 'adr_one_street',
|
||||||
|
'BusinessFaxNumber' => 'tel_fax',
|
||||||
|
'BusinessTelephoneNumber' => 'tel_work',
|
||||||
|
'CallbackTelephoneNumber' => '',
|
||||||
|
'CarTelephoneNumber' => 'tel_car',
|
||||||
|
'Categories' => 'cat_id',
|
||||||
|
'Children' => '',
|
||||||
|
'Companies' => '',
|
||||||
|
'CompanyMainTelephoneNumber' => '',
|
||||||
|
'CompanyName' => 'org_name',
|
||||||
|
'ComputerNetworkName' => '',
|
||||||
|
'Department' => 'org_unit',
|
||||||
|
'Email1Address' => 'email',
|
||||||
|
'Email1AddressType' => '',
|
||||||
|
'Email2Address' => 'email_home',
|
||||||
|
'Email2AddressType' => '',
|
||||||
|
'Email3Address' => '',
|
||||||
|
'Email3AddressType' => '',
|
||||||
|
'FileAs' => 'n_fileas',
|
||||||
|
'FirstName' => 'n_given',
|
||||||
|
'Hobby' => '',
|
||||||
|
'Home2TelephoneNumber' => '',
|
||||||
|
'HomeAddressCity' => 'adr_two_locality',
|
||||||
|
'HomeAddressCountry' => 'adr_two_countryname',
|
||||||
|
'HomeAddressPostalCode' => 'adr_two_postalcode',
|
||||||
|
'HomeAddressPostOfficeBox' => 'adr_two_street2',
|
||||||
|
'HomeAddressState' => 'adr_two_region',
|
||||||
|
'HomeAddressStreet' => 'adr_two_street',
|
||||||
|
'HomeFaxNumber' => 'tel_fax_home',
|
||||||
|
'HomeTelephoneNumber' => 'tel_home',
|
||||||
|
'Importance' => '',
|
||||||
|
'Initials' => '',
|
||||||
|
'JobTitle' => 'title',
|
||||||
|
'Language' => '',
|
||||||
|
'LastName' => 'n_family',
|
||||||
|
'ManagerName' => '',
|
||||||
|
'MiddleName' => 'n_middle',
|
||||||
|
'Mileage' => '',
|
||||||
|
'MobileTelephoneNumber' => 'tel_cell',
|
||||||
|
'NickName' => '',
|
||||||
|
'OfficeLocation' => 'room',
|
||||||
|
'OrganizationalIDNumber' => '',
|
||||||
|
'OtherAddressCity' => '',
|
||||||
|
'OtherAddressCountry' => '',
|
||||||
|
'OtherAddressPostalCode' => '',
|
||||||
|
'OtherAddressPostOfficeBox' => '',
|
||||||
|
'OtherAddressState' => '',
|
||||||
|
'OtherAddressStreet' => '',
|
||||||
|
'OtherFaxNumber' => '',
|
||||||
|
'OtherTelephoneNumber' => 'tel_other',
|
||||||
|
'PagerNumber' => 'tel_pager',
|
||||||
|
'PrimaryTelephoneNumber' => 'tel_prefer',
|
||||||
|
'Profession' => 'role',
|
||||||
|
'RadioTelephoneNumber' => '',
|
||||||
|
'Sensitivity' => 'private',
|
||||||
|
'Spouse' => '',
|
||||||
|
'Subject' => '',
|
||||||
|
'Suffix' => 'n_suffix',
|
||||||
|
'TelexNumber' => '',
|
||||||
|
'Title' => 'n_prefix',
|
||||||
|
'WebPage' => 'url',
|
||||||
|
'YomiCompanyName' => '',
|
||||||
|
'YomiFirstName' => '',
|
||||||
|
'YomiLastName' => '',
|
||||||
|
'HomeWebPage' => 'url_home',
|
||||||
|
'Folder' => '',
|
||||||
|
);
|
||||||
|
|
||||||
class sifaddressbook extends boaddressbook
|
function startElement($_parser, $_tag, $_attributes) {
|
||||||
{
|
}
|
||||||
var $sifMapping = array(
|
|
||||||
'Anniversary' => '',
|
|
||||||
'AssistantName' => 'assistent',
|
|
||||||
'AssistantTelephoneNumber' => 'tel_assistent',
|
|
||||||
'BillingInformation' => '',
|
|
||||||
'Birthday' => 'bday',
|
|
||||||
'Body' => 'note',
|
|
||||||
'Business2TelephoneNumber' => '',
|
|
||||||
'BusinessAddressCity' => 'adr_one_locality',
|
|
||||||
'BusinessAddressCountry' => 'adr_one_countryname',
|
|
||||||
'BusinessAddressPostalCode' => 'adr_one_postalcode',
|
|
||||||
'BusinessAddressPostOfficeBox' => 'adr_one_street2',
|
|
||||||
'BusinessAddressState' => 'adr_one_region',
|
|
||||||
'BusinessAddressStreet' => 'adr_one_street',
|
|
||||||
'BusinessFaxNumber' => 'tel_fax',
|
|
||||||
'BusinessTelephoneNumber' => 'tel_work',
|
|
||||||
'CallbackTelephoneNumber' => '',
|
|
||||||
'CarTelephoneNumber' => 'tel_car',
|
|
||||||
'Categories' => 'cat_id',
|
|
||||||
'Children' => '',
|
|
||||||
'Companies' => '',
|
|
||||||
'CompanyMainTelephoneNumber' => '',
|
|
||||||
'CompanyName' => 'org_name',
|
|
||||||
'ComputerNetworkName' => '',
|
|
||||||
'Department' => 'org_unit',
|
|
||||||
'Email1Address' => 'email',
|
|
||||||
'Email1AddressType' => '',
|
|
||||||
'Email2Address' => 'email_home',
|
|
||||||
'Email2AddressType' => '',
|
|
||||||
'Email3Address' => '',
|
|
||||||
'Email3AddressType' => '',
|
|
||||||
'FileAs' => 'n_fileas',
|
|
||||||
'FirstName' => 'n_given',
|
|
||||||
'Hobby' => '',
|
|
||||||
'Home2TelephoneNumber' => '',
|
|
||||||
'HomeAddressCity' => 'adr_two_locality',
|
|
||||||
'HomeAddressCountry' => 'adr_two_countryname',
|
|
||||||
'HomeAddressPostalCode' => 'adr_two_postalcode',
|
|
||||||
'HomeAddressPostOfficeBox' => 'adr_two_street2',
|
|
||||||
'HomeAddressState' => 'adr_two_region',
|
|
||||||
'HomeAddressStreet' => 'adr_two_street',
|
|
||||||
'HomeFaxNumber' => 'tel_fax_home',
|
|
||||||
'HomeTelephoneNumber' => 'tel_home',
|
|
||||||
'Importance' => '',
|
|
||||||
'Initials' => '',
|
|
||||||
'JobTitle' => 'title',
|
|
||||||
'Language' => '',
|
|
||||||
'LastName' => 'n_family',
|
|
||||||
'ManagerName' => '',
|
|
||||||
'MiddleName' => 'n_middle',
|
|
||||||
'Mileage' => '',
|
|
||||||
'MobileTelephoneNumber' => 'tel_cell',
|
|
||||||
'NickName' => '',
|
|
||||||
'OfficeLocation' => 'room',
|
|
||||||
'OrganizationalIDNumber' => '',
|
|
||||||
'OtherAddressCity' => '',
|
|
||||||
'OtherAddressCountry' => '',
|
|
||||||
'OtherAddressPostalCode' => '',
|
|
||||||
'OtherAddressPostOfficeBox' => '',
|
|
||||||
'OtherAddressState' => '',
|
|
||||||
'OtherAddressStreet' => '',
|
|
||||||
'OtherFaxNumber' => '',
|
|
||||||
'OtherTelephoneNumber' => 'tel_other',
|
|
||||||
'PagerNumber' => 'tel_pager',
|
|
||||||
'PrimaryTelephoneNumber' => '',
|
|
||||||
'Profession' => 'role',
|
|
||||||
'RadioTelephoneNumber' => '',
|
|
||||||
'Sensitivity' => 'private',
|
|
||||||
'Spouse' => '',
|
|
||||||
'Subject' => '',
|
|
||||||
'Suffix' => 'n_suffix',
|
|
||||||
'TelexNumber' => '',
|
|
||||||
'Title' => 'n_prefix',
|
|
||||||
'WebPage' => 'url',
|
|
||||||
'YomiCompanyName' => '',
|
|
||||||
'YomiFirstName' => '',
|
|
||||||
'YomiLastName' => '',
|
|
||||||
'HomeWebPage' => 'url_home',
|
|
||||||
'Folder' => '',
|
|
||||||
);
|
|
||||||
|
|
||||||
function startElement($_parser, $_tag, $_attributes) {
|
function endElement($_parser, $_tag) {
|
||||||
|
if(!empty($this->sifMapping[$_tag])) {
|
||||||
|
$this->contact[$this->sifMapping[$_tag]] = $this->sifData;
|
||||||
}
|
}
|
||||||
|
unset($this->sifData);
|
||||||
|
}
|
||||||
|
|
||||||
|
function characterData($_parser, $_data) {
|
||||||
|
$this->sifData .= $_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
function siftoegw($_sifdata) {
|
||||||
|
$sifData = base64_decode($_sifdata);
|
||||||
|
|
||||||
function endElement($_parser, $_tag) {
|
#$tmpfname = tempnam('/tmp/sync/contents','sifc_');
|
||||||
if(!empty($this->sifMapping[$_tag])) {
|
|
||||||
$this->contact[$this->sifMapping[$_tag]] = $this->sifData;
|
|
||||||
}
|
|
||||||
unset($this->sifData);
|
|
||||||
}
|
|
||||||
|
|
||||||
function characterData($_parser, $_data) {
|
|
||||||
$this->sifData .= $_data;
|
|
||||||
}
|
|
||||||
|
|
||||||
function siftoegw($_sifdata) {
|
|
||||||
$sysCharSet = $GLOBALS['egw']->translation->charset();
|
|
||||||
$sifData = base64_decode($_sifdata);
|
|
||||||
|
|
||||||
#$tmpfname = tempnam('/tmp/sync/contents','sifc_');
|
#$handle = fopen($tmpfname, "w");
|
||||||
|
#fwrite($handle, $sifdata);
|
||||||
|
#fclose($handle);
|
||||||
|
|
||||||
#$handle = fopen($tmpfname, "w");
|
$this->xml_parser = xml_parser_create('UTF-8');
|
||||||
#fwrite($handle, $sifdata);
|
xml_set_object($this->xml_parser, $this);
|
||||||
#fclose($handle);
|
xml_parser_set_option($this->xml_parser, XML_OPTION_CASE_FOLDING, false);
|
||||||
|
xml_set_element_handler($this->xml_parser, "startElement", "endElement");
|
||||||
$this->xml_parser = xml_parser_create('UTF-8');
|
xml_set_character_data_handler($this->xml_parser, "characterData");
|
||||||
xml_set_object($this->xml_parser, $this);
|
$this->strXmlData = xml_parse($this->xml_parser, $sifData);
|
||||||
xml_parser_set_option($this->xml_parser, XML_OPTION_CASE_FOLDING, false);
|
if(!$this->strXmlData) {
|
||||||
xml_set_element_handler($this->xml_parser, "startElement", "endElement");
|
error_log(sprintf("XML error: %s at line %d",
|
||||||
xml_set_character_data_handler($this->xml_parser, "characterData");
|
xml_error_string(xml_get_error_code($this->xml_parser)),
|
||||||
$this->strXmlData = xml_parse($this->xml_parser, $sifData);
|
xml_get_current_line_number($this->xml_parser)));
|
||||||
if(!$this->strXmlData) {
|
|
||||||
error_log(sprintf("XML error: %s at line %d",
|
|
||||||
xml_error_string(xml_get_error_code($this->xml_parser)),
|
|
||||||
xml_get_current_line_number($this->xml_parser)));
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach($this->contact as $key => $value) {
|
|
||||||
$value = $GLOBALS['egw']->translation->convert($value, 'utf-8', $sysCharSet);
|
|
||||||
switch($key) {
|
|
||||||
case 'cat_id':
|
|
||||||
if(!empty($value)) {
|
|
||||||
$isAdmin = $GLOBALS['egw']->acl->check('run',1,'admin');
|
|
||||||
$egwCategories =& CreateObject('phpgwapi.categories',$GLOBALS['egw_info']['user']['account_id'],'addressbook');
|
|
||||||
$categories = explode('; ',$value);
|
|
||||||
$cat_id = '';
|
|
||||||
foreach($categories as $categorieName) {
|
|
||||||
$categorieName = trim($categorieName);
|
|
||||||
if(!($cat_id = $egwCategories->name2id($categorieName)) && $isAdmin) {
|
|
||||||
$cat_id = $egwCategories->add(array('name' => $categorieName, 'descr' => $categorieName));
|
|
||||||
}
|
|
||||||
if($cat_id) {
|
|
||||||
if(!empty($finalContact[$key])) $finalContact[$key] .= ',';
|
|
||||||
$finalContact[$key] .= $cat_id;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
$finalContact[$key] = $value;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $finalContact;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Search an exactly matching entry (used for slow sync)
|
|
||||||
*
|
|
||||||
* @param string $_sifdata
|
|
||||||
* @return boolean/int/string contact-id or false, if not found
|
|
||||||
*/
|
|
||||||
function search($_sifdata)
|
|
||||||
{
|
|
||||||
if(!$contact = $this->siftoegw($_sifdata))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(($foundContacts = $this->search($contact)))
|
|
||||||
{
|
|
||||||
error_log(print_r($foundContacts,true));
|
|
||||||
return $foundContacts[0]['id'];
|
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
foreach($this->contact as $key => $value) {
|
||||||
* import a vard into addressbook
|
$value = $GLOBALS['egw']->translation->convert($value, 'utf-8');
|
||||||
*
|
switch($key) {
|
||||||
* @return int contact id
|
case 'cat_id':
|
||||||
* @param string $_vcard the vcard
|
if(!empty($value)) {
|
||||||
* @param int $_abID the internal addressbook id
|
$isAdmin = $GLOBALS['egw']->acl->check('run',1,'admin');
|
||||||
*/
|
$egwCategories =& CreateObject('phpgwapi.categories',$GLOBALS['egw_info']['user']['account_id'],'addressbook');
|
||||||
function addSIF($_sifdata, $_abID)
|
$categories = explode('; ',$value);
|
||||||
{
|
$cat_id = '';
|
||||||
#error_log('ABID: '.$_abID);
|
foreach($categories as $categorieName) {
|
||||||
#error_log(base64_decode($_sifdata));
|
$categorieName = trim($categorieName);
|
||||||
|
if(!($cat_id = $egwCategories->name2id($categorieName)) && $isAdmin) {
|
||||||
if(!$contact = $this->siftoegw($_sifdata)) {
|
$cat_id = $egwCategories->add(array('name' => $categorieName, 'descr' => $categorieName));
|
||||||
return false;
|
}
|
||||||
}
|
if($cat_id) {
|
||||||
|
if(!empty($finalContact[$key])) $finalContact[$key] .= ',';
|
||||||
if($_abID > 0) $contact['ab_id'] = $_abID;
|
$finalContact[$key] .= $cat_id;
|
||||||
|
|
||||||
return $this->save($contact);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* return a vcard
|
|
||||||
*
|
|
||||||
* @param int $_id the id of the contact
|
|
||||||
* @param int $_vcardProfile profile id for mapping from vcard values to egw addressbook
|
|
||||||
* @return string containing the vcard
|
|
||||||
*/
|
|
||||||
function getSIF($_id)
|
|
||||||
{
|
|
||||||
$fields = array_unique(array_values($this->sifMapping));
|
|
||||||
sort($fields);
|
|
||||||
|
|
||||||
if(!($entry = $this->so->read_entry($_id)))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$sifContact = '<contact>';
|
|
||||||
#error_log(print_r($entry,true));
|
|
||||||
$sysCharSet = $GLOBALS['egw']->translation->charset();
|
|
||||||
|
|
||||||
foreach($this->sifMapping as $sifField => $egwField)
|
|
||||||
{
|
|
||||||
if(empty($egwField)) continue;
|
|
||||||
|
|
||||||
#error_log("$sifField => $egwField");
|
|
||||||
#error_log('VALUE1: '.$entry[0][$egwField]);
|
|
||||||
$value = $GLOBALS['egw']->translation->convert($entry[0][$egwField], $sysCharSet, 'utf-8');
|
|
||||||
#error_log('VALUE2: '.$value);
|
|
||||||
|
|
||||||
switch($sifField)
|
|
||||||
{
|
|
||||||
// TODO handle multiple categories
|
|
||||||
case 'Categories':
|
|
||||||
if(!empty($value)) {
|
|
||||||
$egwCategories =& CreateObject('phpgwapi.categories',$GLOBALS['egw_info']['user']['account_id'],'addressbook');
|
|
||||||
$categories = explode(',',$value);
|
|
||||||
$value = '';
|
|
||||||
foreach($categories as $cat_id) {
|
|
||||||
if(($catData = $egwCategories->return_single($cat_id)))
|
|
||||||
{
|
|
||||||
if(!empty($value)) $value .= '; ';
|
|
||||||
$value .= $catData[0]['name'];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$sifContact .= "<$sifField>$value</$sifField>";
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'Sensitivity':
|
case 'private':
|
||||||
$value = 2 * $value; // eGW private is 0 (public) or 1 (private)
|
$finalContact[$key] = (int) $value > 0; // eGW private is 0 (public) or 1 (private), SIF seems to use 0 and 2
|
||||||
$sifContact .= "<$sifField>$value</$sifField>";
|
break;
|
||||||
break;
|
|
||||||
|
|
||||||
case 'Folder':
|
|
||||||
# skip currently. This is the folder where Outlook stores the contact.
|
|
||||||
#$sifContact .= "<$sifField>/</$sifField>";
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
$sifContact .= "<$sifField>$value</$sifField>";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$sifContact .= "</contact>";
|
|
||||||
|
|
||||||
return base64_encode($sifContact);
|
default:
|
||||||
|
$finalContact[$key] = $value;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
return $finalContact;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Search an exactly matching entry (used for slow sync)
|
||||||
|
*
|
||||||
|
* @param string $_sifdata
|
||||||
|
* @return boolean/int/string contact-id or false, if not found
|
||||||
|
*/
|
||||||
|
function search($_sifdata)
|
||||||
|
{
|
||||||
|
if(!$contact = $this->siftoegw($_sifdata))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(($foundContacts = bocontact::search($contact)))
|
||||||
|
{
|
||||||
|
error_log(print_r($foundContacts,true));
|
||||||
|
return $foundContacts[0]['id'];
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* import a vard into addressbook
|
||||||
|
*
|
||||||
|
* @return int contact id
|
||||||
|
* @param string $_vcard the vcard
|
||||||
|
* @param int $_abID the internal addressbook id
|
||||||
|
*/
|
||||||
|
function addSIF($_sifdata, $_abID)
|
||||||
|
{
|
||||||
|
#error_log('ABID: '.$_abID);
|
||||||
|
#error_log(base64_decode($_sifdata));
|
||||||
|
|
||||||
|
if(!$contact = $this->siftoegw($_sifdata)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ToDo Lars: This will not work on LDAP
|
||||||
|
// either we use "if ($_abID)" and false, null, 0 as $_abID for new entries (prefered, as this works in all other apps)
|
||||||
|
// or we use something like "if ($_abID && $_abID != -1)" ...
|
||||||
|
if($_abID > 0) {
|
||||||
|
// update entry
|
||||||
|
$contact['id'] = $_abID;
|
||||||
|
}
|
||||||
|
return $this->save($contact);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* return a vcard
|
||||||
|
*
|
||||||
|
* @param int $_id the id of the contact
|
||||||
|
* @param int $_vcardProfile profile id for mapping from vcard values to egw addressbook
|
||||||
|
* @return string containing the vcard
|
||||||
|
*/
|
||||||
|
function getSIF($_id)
|
||||||
|
{
|
||||||
|
$fields = array_unique(array_values($this->sifMapping));
|
||||||
|
sort($fields);
|
||||||
|
|
||||||
|
if(!($entry = $this->read($_id)))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$sifContact = '<contact>';
|
||||||
|
#error_log(print_r($entry,true));
|
||||||
|
$sysCharSet = $GLOBALS['egw']->translation->charset();
|
||||||
|
|
||||||
|
foreach($this->sifMapping as $sifField => $egwField)
|
||||||
|
{
|
||||||
|
if(empty($egwField)) continue;
|
||||||
|
|
||||||
|
#error_log("$sifField => $egwField");
|
||||||
|
#error_log('VALUE1: '.$entry[0][$egwField]);
|
||||||
|
$value = $GLOBALS['egw']->translation->convert($entry[0][$egwField], $sysCharSet, 'utf-8');
|
||||||
|
#error_log('VALUE2: '.$value);
|
||||||
|
|
||||||
|
switch($sifField)
|
||||||
|
{
|
||||||
|
// TODO handle multiple categories
|
||||||
|
case 'Categories':
|
||||||
|
if(!empty($value)) {
|
||||||
|
$egwCategories =& CreateObject('phpgwapi.categories',$GLOBALS['egw_info']['user']['account_id'],'addressbook');
|
||||||
|
$categories = explode(',',$value);
|
||||||
|
$value = '';
|
||||||
|
foreach($categories as $cat_id) {
|
||||||
|
if(($catData = $egwCategories->return_single($cat_id)))
|
||||||
|
{
|
||||||
|
if(!empty($value)) $value .= '; ';
|
||||||
|
$value .= $catData[0]['name'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$sifContact .= "<$sifField>$value</$sifField>";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'Sensitivity':
|
||||||
|
$value = 2 * $value; // eGW private is 0 (public) or 1 (private)
|
||||||
|
$sifContact .= "<$sifField>$value</$sifField>";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'Folder':
|
||||||
|
# skip currently. This is the folder where Outlook stores the contact.
|
||||||
|
#$sifContact .= "<$sifField>/</$sifField>";
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
$sifContact .= "<$sifField>$value</$sifField>";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$sifContact .= "</contact>";
|
||||||
|
|
||||||
|
return base64_encode($sifContact);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -29,16 +29,14 @@ class vcaladdressbook extends bocontacts
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ToDo Lars: This will not work on LDAP
|
||||||
|
// either we use "if ($_abID)" and false, null, 0 as $_abID for new entries (prefered, as this works in all other apps)
|
||||||
|
// or we use something like "if ($_abID && $_abID != -1)" ...
|
||||||
if($_abID > 0) {
|
if($_abID > 0) {
|
||||||
// update entry
|
// update entry
|
||||||
$contact['id'] = $_abID;
|
$contact['id'] = $_abID;
|
||||||
}
|
}
|
||||||
|
return $this->save($contact);
|
||||||
if($this->save($contact)) {
|
|
||||||
return $contact['id'];
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user