2005-07-20 14:14:39 +02:00
|
|
|
<?php
|
2006-07-09 01:02:30 +02:00
|
|
|
/**
|
|
|
|
* Addressbook - vCard / iCal parser
|
|
|
|
*
|
|
|
|
* @link http://www.egroupware.org
|
|
|
|
* @author Lars Kneschke <lkneschke@egroupware.org>
|
|
|
|
* @author Ralf Becker <RalfBecker-AT-outdoor-training.de>
|
2009-07-15 21:44:09 +02:00
|
|
|
* @author Joerg Lehrke <jlehrke@noc.de>
|
2006-07-09 01:02:30 +02:00
|
|
|
* @package addressbook
|
2008-05-10 14:02:49 +02:00
|
|
|
* @subpackage export
|
2006-07-09 01:02:30 +02:00
|
|
|
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
2008-04-16 06:37:05 +02:00
|
|
|
* @version $Id$
|
2006-07-09 01:02:30 +02:00
|
|
|
*/
|
|
|
|
|
2009-07-15 21:44:09 +02:00
|
|
|
require_once EGW_SERVER_ROOT.'/phpgwapi/inc/horde/lib/core.php';
|
|
|
|
require_once(EGW_SERVER_ROOT.'/phpgwapi/inc/horde/Horde/SyncML/State.php');
|
2006-07-09 01:02:30 +02:00
|
|
|
|
2008-05-10 14:02:49 +02:00
|
|
|
/**
|
|
|
|
* Addressbook - vCard parser
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
class addressbook_vcal extends addressbook_bo
|
2006-07-09 01:02:30 +02:00
|
|
|
{
|
2008-05-10 14:02:49 +02:00
|
|
|
/**
|
|
|
|
* product manufacturer from setSupportedFields (lowercase!)
|
|
|
|
*
|
|
|
|
* @var string
|
|
|
|
*/
|
2009-07-15 21:44:09 +02:00
|
|
|
var $productManufacturer = 'file';
|
2008-05-10 14:02:49 +02:00
|
|
|
/**
|
|
|
|
* product name from setSupportedFields (lowercase!)
|
|
|
|
*
|
|
|
|
* @var string
|
|
|
|
*/
|
|
|
|
var $productName;
|
2009-07-15 21:44:09 +02:00
|
|
|
/**
|
|
|
|
* VCard version
|
|
|
|
*
|
|
|
|
* @var string
|
|
|
|
*/
|
|
|
|
var $version;
|
|
|
|
/**
|
|
|
|
* Client CTCap Properties
|
|
|
|
*
|
|
|
|
* @var array
|
|
|
|
*/
|
|
|
|
var $clientProperties;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Constructor
|
|
|
|
*
|
|
|
|
* @param string $contact_app the current application
|
|
|
|
* @param string $_contentType the content type (version)
|
|
|
|
* @param array $_clientProperties client properties
|
|
|
|
*/
|
|
|
|
function __construct($contact_app='addressbook', $_contentType='text/x-vcard', &$_clientProperties = array())
|
|
|
|
{
|
|
|
|
parent::__construct($contact_app);
|
|
|
|
#Horde::logMessage("vCalAddressbook Constructor for $_contentType", __FILE__, __LINE__, PEAR_LOG_DEBUG);
|
|
|
|
switch($_contentType)
|
|
|
|
{
|
|
|
|
case 'text/vcard':
|
|
|
|
$this->version = '3.0';
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
$this->version = '2.1';
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
$this->clientProperties = $_clientProperties;
|
|
|
|
}
|
2008-04-16 06:37:05 +02:00
|
|
|
|
2006-07-09 01:02:30 +02:00
|
|
|
/**
|
|
|
|
* import a vard into addressbook
|
2008-04-16 06:37:05 +02:00
|
|
|
*
|
2006-07-09 01:02:30 +02:00
|
|
|
* @param string $_vcard the vcard
|
2006-07-10 01:35:16 +02:00
|
|
|
* @param int/string $_abID=null the internal addressbook id or !$_abID for a new enty
|
2009-07-15 21:44:09 +02:00
|
|
|
* @param boolean $merge=false merge data with existing entry
|
2006-07-09 01:02:30 +02:00
|
|
|
* @return int contact id
|
|
|
|
*/
|
2009-07-15 21:44:09 +02:00
|
|
|
function addVCard($_vcard, $_abID=null, $merge=false)
|
2005-07-20 14:14:39 +02:00
|
|
|
{
|
2009-07-15 21:44:09 +02:00
|
|
|
if(!$contact = $this->vcardtoegw($_vcard))
|
|
|
|
{
|
2006-07-09 01:02:30 +02:00
|
|
|
return false;
|
|
|
|
}
|
2008-04-16 06:37:05 +02:00
|
|
|
|
2009-07-15 21:44:09 +02:00
|
|
|
if($_abID)
|
|
|
|
{
|
|
|
|
if ($merge)
|
|
|
|
{
|
|
|
|
$old_contact = $this->read($_abID);
|
|
|
|
if ($old_contact)
|
|
|
|
{
|
|
|
|
foreach ($contact as $key => $value)
|
|
|
|
{
|
|
|
|
if (!empty($old_contact[$key]))
|
|
|
|
{
|
|
|
|
$contact[$key] = $old_contact[$key];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2006-07-09 01:02:30 +02:00
|
|
|
// update entry
|
2006-07-09 15:29:19 +02:00
|
|
|
$contact['id'] = $_abID;
|
2005-07-20 14:14:39 +02:00
|
|
|
}
|
2006-07-10 00:59:22 +02:00
|
|
|
return $this->save($contact);
|
2006-07-09 01:02:30 +02:00
|
|
|
}
|
2005-07-20 14:14:39 +02:00
|
|
|
|
2006-07-09 01:02:30 +02:00
|
|
|
/**
|
|
|
|
* return a vcard
|
|
|
|
*
|
|
|
|
* @param int/string $_id the id of the contact
|
2009-07-15 21:44:09 +02:00
|
|
|
* @param string $_charset='UTF-8' encoding of the vcard, default UTF-8
|
2008-06-07 20:00:29 +02:00
|
|
|
* @param boolean $extra_charset_attribute=true GroupDAV/CalDAV dont need the charset attribute and some clients have problems with it
|
2006-07-09 01:02:30 +02:00
|
|
|
* @return string containing the vcard
|
|
|
|
*/
|
2009-07-15 21:44:09 +02:00
|
|
|
function getVCard($_id,$_charset='UTF-8',$extra_charset_attribute=true)
|
2006-07-09 01:02:30 +02:00
|
|
|
{
|
|
|
|
require_once(EGW_SERVER_ROOT.'/phpgwapi/inc/horde/Horde/iCalendar/vcard.php');
|
2005-07-20 14:14:39 +02:00
|
|
|
|
2009-07-15 21:44:09 +02:00
|
|
|
#Horde::logMessage("vCalAddressbook clientProperties:\n" . print_r($this->clientProperties, true), __FILE__, __LINE__, PEAR_LOG_DEBUG);
|
|
|
|
|
|
|
|
$vCard = new Horde_iCalendar_vcard($this->version);
|
2009-06-29 21:03:43 +02:00
|
|
|
|
2009-07-15 21:44:09 +02:00
|
|
|
if (!is_array($this->supportedFields))
|
|
|
|
{
|
2006-07-09 01:02:30 +02:00
|
|
|
$this->setSupportedFields();
|
|
|
|
}
|
|
|
|
$sysCharSet = $GLOBALS['egw']->translation->charset();
|
2009-07-15 21:44:09 +02:00
|
|
|
|
|
|
|
if (!($entry = $this->read($_id)))
|
|
|
|
{
|
2006-07-09 01:02:30 +02:00
|
|
|
return false;
|
|
|
|
}
|
2009-06-29 21:03:43 +02:00
|
|
|
|
SyncML patches from patrick.bihan-faou-AT-mindstep.com (without
logout+mbstring stuff), small modification to use the already exiting
methodes to generate full name and fileas)
The code is commited to trunk only at the moment to allow testing of it.
If everything goes well, we intend to commit it to 1.4 branch too.
Here's the original description of the patch by Patrick:
- handles the default config for current versions of funambol (i.e. the
scard/stask/snote/scal locations)
- tries to be a bit smarter on how the data content should be encoded
based on what the client specified (sif+base64/vcard, / fragmented or
not, etc.)
- workaround a bug in some versions of funambol, where funambol does not
specify the proper sif type for the type of requested data
- imported patch #117 from egw's tracker
- make sure that the logs generated by the horde code go to stderr so
they can be view in the webserver's logs
- as much as possible reduce code duplication. For example, the
categories are handled in the parent classes for both the SIF avn VCAL
formats for each type of data (addressbook,infolog,calendar).
- make sure the code can handle more than one categories in each
direction
- treat the 'sony ericsson' vendor string just like 'sonyericsson', the
newer phones apparently have a space in the vendor string... (this
touches some files in the icalsrv as well)
- handle notes: these should now work with everything (funambol or
other)
- remove more code duplication: the syncml "api" for the various data
types (calendar, contacts, infolog) is now common for both the vcard and
sif data formats (cf the files that need to be removed)
- handle the "privat" filter in infolog like the "private" filter (some
part of the code use the name without the trailing e)
- imported patch # 267 from egw's tracker
2007-09-29 12:29:48 +02:00
|
|
|
$this->fixup_contact($entry);
|
2009-06-29 21:03:43 +02:00
|
|
|
|
2009-07-15 21:44:09 +02:00
|
|
|
foreach ($this->supportedFields as $vcardField => $databaseFields)
|
SyncML patches from patrick.bihan-faou-AT-mindstep.com (without
logout+mbstring stuff), small modification to use the already exiting
methodes to generate full name and fileas)
The code is commited to trunk only at the moment to allow testing of it.
If everything goes well, we intend to commit it to 1.4 branch too.
Here's the original description of the patch by Patrick:
- handles the default config for current versions of funambol (i.e. the
scard/stask/snote/scal locations)
- tries to be a bit smarter on how the data content should be encoded
based on what the client specified (sif+base64/vcard, / fragmented or
not, etc.)
- workaround a bug in some versions of funambol, where funambol does not
specify the proper sif type for the type of requested data
- imported patch #117 from egw's tracker
- make sure that the logs generated by the horde code go to stderr so
they can be view in the webserver's logs
- as much as possible reduce code duplication. For example, the
categories are handled in the parent classes for both the SIF avn VCAL
formats for each type of data (addressbook,infolog,calendar).
- make sure the code can handle more than one categories in each
direction
- treat the 'sony ericsson' vendor string just like 'sonyericsson', the
newer phones apparently have a space in the vendor string... (this
touches some files in the icalsrv as well)
- handle notes: these should now work with everything (funambol or
other)
- remove more code duplication: the syncml "api" for the various data
types (calendar, contacts, infolog) is now common for both the vcard and
sif data formats (cf the files that need to be removed)
- handle the "privat" filter in infolog like the "private" filter (some
part of the code use the name without the trailing e)
- imported patch # 267 from egw's tracker
2007-09-29 12:29:48 +02:00
|
|
|
{
|
|
|
|
$values = array();
|
2006-07-09 01:02:30 +02:00
|
|
|
$options = array();
|
SyncML patches from patrick.bihan-faou-AT-mindstep.com (without
logout+mbstring stuff), small modification to use the already exiting
methodes to generate full name and fileas)
The code is commited to trunk only at the moment to allow testing of it.
If everything goes well, we intend to commit it to 1.4 branch too.
Here's the original description of the patch by Patrick:
- handles the default config for current versions of funambol (i.e. the
scard/stask/snote/scal locations)
- tries to be a bit smarter on how the data content should be encoded
based on what the client specified (sif+base64/vcard, / fragmented or
not, etc.)
- workaround a bug in some versions of funambol, where funambol does not
specify the proper sif type for the type of requested data
- imported patch #117 from egw's tracker
- make sure that the logs generated by the horde code go to stderr so
they can be view in the webserver's logs
- as much as possible reduce code duplication. For example, the
categories are handled in the parent classes for both the SIF avn VCAL
formats for each type of data (addressbook,infolog,calendar).
- make sure the code can handle more than one categories in each
direction
- treat the 'sony ericsson' vendor string just like 'sonyericsson', the
newer phones apparently have a space in the vendor string... (this
touches some files in the icalsrv as well)
- handle notes: these should now work with everything (funambol or
other)
- remove more code duplication: the syncml "api" for the various data
types (calendar, contacts, infolog) is now common for both the vcard and
sif data formats (cf the files that need to be removed)
- handle the "privat" filter in infolog like the "private" filter (some
part of the code use the name without the trailing e)
- imported patch # 267 from egw's tracker
2007-09-29 12:29:48 +02:00
|
|
|
$hasdata = 0;
|
2009-07-15 21:44:09 +02:00
|
|
|
// seperate fields from their options/attributes
|
|
|
|
$vcardFields = explode(';', $vcardField);
|
|
|
|
$vcardField = $vcardFields[0];
|
|
|
|
$i = 1;
|
|
|
|
while (isset($vcardFields[$i]))
|
|
|
|
{
|
|
|
|
list($oname, $oval) = explode('=', $vcardFields[$i]);
|
|
|
|
if (!$oval && ($this->version == '3.0'))
|
|
|
|
{
|
|
|
|
// declare OPTION as TYPE=OPTION
|
|
|
|
$options['TYPE'][] = $oname ;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
$options[$oname] = $oval;
|
|
|
|
}
|
|
|
|
$i++;
|
|
|
|
}
|
|
|
|
if (is_array($options['TYPE']))
|
|
|
|
{
|
|
|
|
$oval = implode(",", $options['TYPE']);
|
|
|
|
unset($options['TYPE']);
|
|
|
|
$options['TYPE'] = $oval;
|
|
|
|
}
|
|
|
|
if (isset($this->clientProperties[$vcardField]['Size']))
|
|
|
|
{
|
|
|
|
$size = $this->clientProperties[$vcardField]['Size'];
|
|
|
|
$noTruncate = $this->clientProperties[$vcardField]['NoTruncate'];
|
|
|
|
//Horde::logMessage("vCalAddressbook $vcardField Size: $size, NoTruncate: " .
|
|
|
|
// ($noTruncate ? 'TRUE' : 'FALSE'), __FILE__, __LINE__, PEAR_LOG_DEBUG);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
$size = -1;
|
|
|
|
$noTruncate = false;
|
|
|
|
}
|
|
|
|
foreach ($databaseFields as $databaseField)
|
SyncML patches from patrick.bihan-faou-AT-mindstep.com (without
logout+mbstring stuff), small modification to use the already exiting
methodes to generate full name and fileas)
The code is commited to trunk only at the moment to allow testing of it.
If everything goes well, we intend to commit it to 1.4 branch too.
Here's the original description of the patch by Patrick:
- handles the default config for current versions of funambol (i.e. the
scard/stask/snote/scal locations)
- tries to be a bit smarter on how the data content should be encoded
based on what the client specified (sif+base64/vcard, / fragmented or
not, etc.)
- workaround a bug in some versions of funambol, where funambol does not
specify the proper sif type for the type of requested data
- imported patch #117 from egw's tracker
- make sure that the logs generated by the horde code go to stderr so
they can be view in the webserver's logs
- as much as possible reduce code duplication. For example, the
categories are handled in the parent classes for both the SIF avn VCAL
formats for each type of data (addressbook,infolog,calendar).
- make sure the code can handle more than one categories in each
direction
- treat the 'sony ericsson' vendor string just like 'sonyericsson', the
newer phones apparently have a space in the vendor string... (this
touches some files in the icalsrv as well)
- handle notes: these should now work with everything (funambol or
other)
- remove more code duplication: the syncml "api" for the various data
types (calendar, contacts, infolog) is now common for both the vcard and
sif data formats (cf the files that need to be removed)
- handle the "privat" filter in infolog like the "private" filter (some
part of the code use the name without the trailing e)
- imported patch # 267 from egw's tracker
2007-09-29 12:29:48 +02:00
|
|
|
{
|
|
|
|
$value = "";
|
|
|
|
|
|
|
|
if (!empty($databaseField))
|
|
|
|
{
|
|
|
|
$value = trim($entry[$databaseField]);
|
2006-05-17 05:36:48 +02:00
|
|
|
}
|
SyncML patches from patrick.bihan-faou-AT-mindstep.com (without
logout+mbstring stuff), small modification to use the already exiting
methodes to generate full name and fileas)
The code is commited to trunk only at the moment to allow testing of it.
If everything goes well, we intend to commit it to 1.4 branch too.
Here's the original description of the patch by Patrick:
- handles the default config for current versions of funambol (i.e. the
scard/stask/snote/scal locations)
- tries to be a bit smarter on how the data content should be encoded
based on what the client specified (sif+base64/vcard, / fragmented or
not, etc.)
- workaround a bug in some versions of funambol, where funambol does not
specify the proper sif type for the type of requested data
- imported patch #117 from egw's tracker
- make sure that the logs generated by the horde code go to stderr so
they can be view in the webserver's logs
- as much as possible reduce code duplication. For example, the
categories are handled in the parent classes for both the SIF avn VCAL
formats for each type of data (addressbook,infolog,calendar).
- make sure the code can handle more than one categories in each
direction
- treat the 'sony ericsson' vendor string just like 'sonyericsson', the
newer phones apparently have a space in the vendor string... (this
touches some files in the icalsrv as well)
- handle notes: these should now work with everything (funambol or
other)
- remove more code duplication: the syncml "api" for the various data
types (calendar, contacts, infolog) is now common for both the vcard and
sif data formats (cf the files that need to be removed)
- handle the "privat" filter in infolog like the "private" filter (some
part of the code use the name without the trailing e)
- imported patch # 267 from egw's tracker
2007-09-29 12:29:48 +02:00
|
|
|
|
|
|
|
switch($databaseField)
|
|
|
|
{
|
|
|
|
case 'private':
|
|
|
|
$value = $value ? 'PRIVATE' : 'PUBLIC';
|
|
|
|
$hasdata++;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 'bday':
|
|
|
|
if (!empty($value))
|
|
|
|
{
|
2009-07-15 21:44:09 +02:00
|
|
|
if ($size == 8)
|
|
|
|
{
|
|
|
|
$value = str_replace('-','',$value);
|
|
|
|
}
|
|
|
|
elseif (isset($options['TYPE']) && (
|
|
|
|
$options['TYPE'] == 'BASIC'))
|
|
|
|
{
|
|
|
|
unset($options['TYPE']);
|
|
|
|
// used by old SyncML implementations
|
|
|
|
$value = str_replace('-','',$value).'T000000Z';
|
|
|
|
}
|
SyncML patches from patrick.bihan-faou-AT-mindstep.com (without
logout+mbstring stuff), small modification to use the already exiting
methodes to generate full name and fileas)
The code is commited to trunk only at the moment to allow testing of it.
If everything goes well, we intend to commit it to 1.4 branch too.
Here's the original description of the patch by Patrick:
- handles the default config for current versions of funambol (i.e. the
scard/stask/snote/scal locations)
- tries to be a bit smarter on how the data content should be encoded
based on what the client specified (sif+base64/vcard, / fragmented or
not, etc.)
- workaround a bug in some versions of funambol, where funambol does not
specify the proper sif type for the type of requested data
- imported patch #117 from egw's tracker
- make sure that the logs generated by the horde code go to stderr so
they can be view in the webserver's logs
- as much as possible reduce code duplication. For example, the
categories are handled in the parent classes for both the SIF avn VCAL
formats for each type of data (addressbook,infolog,calendar).
- make sure the code can handle more than one categories in each
direction
- treat the 'sony ericsson' vendor string just like 'sonyericsson', the
newer phones apparently have a space in the vendor string... (this
touches some files in the icalsrv as well)
- handle notes: these should now work with everything (funambol or
other)
- remove more code duplication: the syncml "api" for the various data
types (calendar, contacts, infolog) is now common for both the vcard and
sif data formats (cf the files that need to be removed)
- handle the "privat" filter in infolog like the "private" filter (some
part of the code use the name without the trailing e)
- imported patch # 267 from egw's tracker
2007-09-29 12:29:48 +02:00
|
|
|
$hasdata++;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 'jpegphoto':
|
2009-07-15 21:44:09 +02:00
|
|
|
if (!empty($value) &&
|
|
|
|
(($size < 0) || (strlen($value) < $size)))
|
SyncML patches from patrick.bihan-faou-AT-mindstep.com (without
logout+mbstring stuff), small modification to use the already exiting
methodes to generate full name and fileas)
The code is commited to trunk only at the moment to allow testing of it.
If everything goes well, we intend to commit it to 1.4 branch too.
Here's the original description of the patch by Patrick:
- handles the default config for current versions of funambol (i.e. the
scard/stask/snote/scal locations)
- tries to be a bit smarter on how the data content should be encoded
based on what the client specified (sif+base64/vcard, / fragmented or
not, etc.)
- workaround a bug in some versions of funambol, where funambol does not
specify the proper sif type for the type of requested data
- imported patch #117 from egw's tracker
- make sure that the logs generated by the horde code go to stderr so
they can be view in the webserver's logs
- as much as possible reduce code duplication. For example, the
categories are handled in the parent classes for both the SIF avn VCAL
formats for each type of data (addressbook,infolog,calendar).
- make sure the code can handle more than one categories in each
direction
- treat the 'sony ericsson' vendor string just like 'sonyericsson', the
newer phones apparently have a space in the vendor string... (this
touches some files in the icalsrv as well)
- handle notes: these should now work with everything (funambol or
other)
- remove more code duplication: the syncml "api" for the various data
types (calendar, contacts, infolog) is now common for both the vcard and
sif data formats (cf the files that need to be removed)
- handle the "privat" filter in infolog like the "private" filter (some
part of the code use the name without the trailing e)
- imported patch # 267 from egw's tracker
2007-09-29 12:29:48 +02:00
|
|
|
{
|
2009-07-15 21:44:09 +02:00
|
|
|
if (!isset($options['TYPE']))
|
|
|
|
{
|
|
|
|
$options['TYPE'] = 'JPEG';
|
|
|
|
}
|
|
|
|
if (!isset($options['ENCODING']))
|
|
|
|
{
|
|
|
|
$options['ENCODING'] = 'BASE64';
|
|
|
|
}
|
|
|
|
$hasdata++;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
$value = '';
|
SyncML patches from patrick.bihan-faou-AT-mindstep.com (without
logout+mbstring stuff), small modification to use the already exiting
methodes to generate full name and fileas)
The code is commited to trunk only at the moment to allow testing of it.
If everything goes well, we intend to commit it to 1.4 branch too.
Here's the original description of the patch by Patrick:
- handles the default config for current versions of funambol (i.e. the
scard/stask/snote/scal locations)
- tries to be a bit smarter on how the data content should be encoded
based on what the client specified (sif+base64/vcard, / fragmented or
not, etc.)
- workaround a bug in some versions of funambol, where funambol does not
specify the proper sif type for the type of requested data
- imported patch #117 from egw's tracker
- make sure that the logs generated by the horde code go to stderr so
they can be view in the webserver's logs
- as much as possible reduce code duplication. For example, the
categories are handled in the parent classes for both the SIF avn VCAL
formats for each type of data (addressbook,infolog,calendar).
- make sure the code can handle more than one categories in each
direction
- treat the 'sony ericsson' vendor string just like 'sonyericsson', the
newer phones apparently have a space in the vendor string... (this
touches some files in the icalsrv as well)
- handle notes: these should now work with everything (funambol or
other)
- remove more code duplication: the syncml "api" for the various data
types (calendar, contacts, infolog) is now common for both the vcard and
sif data formats (cf the files that need to be removed)
- handle the "privat" filter in infolog like the "private" filter (some
part of the code use the name without the trailing e)
- imported patch # 267 from egw's tracker
2007-09-29 12:29:48 +02:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 'cat_id':
|
2009-07-16 18:05:40 +02:00
|
|
|
if (!empty($value) && ($values = $this->get_categories($value)))
|
SyncML patches from patrick.bihan-faou-AT-mindstep.com (without
logout+mbstring stuff), small modification to use the already exiting
methodes to generate full name and fileas)
The code is commited to trunk only at the moment to allow testing of it.
If everything goes well, we intend to commit it to 1.4 branch too.
Here's the original description of the patch by Patrick:
- handles the default config for current versions of funambol (i.e. the
scard/stask/snote/scal locations)
- tries to be a bit smarter on how the data content should be encoded
based on what the client specified (sif+base64/vcard, / fragmented or
not, etc.)
- workaround a bug in some versions of funambol, where funambol does not
specify the proper sif type for the type of requested data
- imported patch #117 from egw's tracker
- make sure that the logs generated by the horde code go to stderr so
they can be view in the webserver's logs
- as much as possible reduce code duplication. For example, the
categories are handled in the parent classes for both the SIF avn VCAL
formats for each type of data (addressbook,infolog,calendar).
- make sure the code can handle more than one categories in each
direction
- treat the 'sony ericsson' vendor string just like 'sonyericsson', the
newer phones apparently have a space in the vendor string... (this
touches some files in the icalsrv as well)
- handle notes: these should now work with everything (funambol or
other)
- remove more code duplication: the syncml "api" for the various data
types (calendar, contacts, infolog) is now common for both the vcard and
sif data formats (cf the files that need to be removed)
- handle the "privat" filter in infolog like the "private" filter (some
part of the code use the name without the trailing e)
- imported patch # 267 from egw's tracker
2007-09-29 12:29:48 +02:00
|
|
|
{
|
2009-07-15 21:44:09 +02:00
|
|
|
$values = (array) $GLOBALS['egw']->translation->convert($values, $sysCharSet, $_charset);
|
|
|
|
$value = implode(',', $values); // just for the CHARSET recognition
|
|
|
|
if(($extra_charset_attribute || $this->productName == 'kde')
|
|
|
|
&& preg_match('/([\177-\377])/',$value))
|
|
|
|
{
|
|
|
|
$options['CHARSET'] = $_charset;
|
|
|
|
// KAddressbook requires non-ascii chars to be qprint encoded, other clients eg. nokia phones have trouble with that
|
|
|
|
if ($this->productName == 'kde')
|
|
|
|
{
|
|
|
|
$options['ENCODING'] = 'QUOTED-PRINTABLE';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
$hasdata++;
|
SyncML patches from patrick.bihan-faou-AT-mindstep.com (without
logout+mbstring stuff), small modification to use the already exiting
methodes to generate full name and fileas)
The code is commited to trunk only at the moment to allow testing of it.
If everything goes well, we intend to commit it to 1.4 branch too.
Here's the original description of the patch by Patrick:
- handles the default config for current versions of funambol (i.e. the
scard/stask/snote/scal locations)
- tries to be a bit smarter on how the data content should be encoded
based on what the client specified (sif+base64/vcard, / fragmented or
not, etc.)
- workaround a bug in some versions of funambol, where funambol does not
specify the proper sif type for the type of requested data
- imported patch #117 from egw's tracker
- make sure that the logs generated by the horde code go to stderr so
they can be view in the webserver's logs
- as much as possible reduce code duplication. For example, the
categories are handled in the parent classes for both the SIF avn VCAL
formats for each type of data (addressbook,infolog,calendar).
- make sure the code can handle more than one categories in each
direction
- treat the 'sony ericsson' vendor string just like 'sonyericsson', the
newer phones apparently have a space in the vendor string... (this
touches some files in the icalsrv as well)
- handle notes: these should now work with everything (funambol or
other)
- remove more code duplication: the syncml "api" for the various data
types (calendar, contacts, infolog) is now common for both the vcard and
sif data formats (cf the files that need to be removed)
- handle the "privat" filter in infolog like the "private" filter (some
part of the code use the name without the trailing e)
- imported patch # 267 from egw's tracker
2007-09-29 12:29:48 +02:00
|
|
|
}
|
2009-07-15 21:44:09 +02:00
|
|
|
break;
|
|
|
|
|
SyncML patches from patrick.bihan-faou-AT-mindstep.com (without
logout+mbstring stuff), small modification to use the already exiting
methodes to generate full name and fileas)
The code is commited to trunk only at the moment to allow testing of it.
If everything goes well, we intend to commit it to 1.4 branch too.
Here's the original description of the patch by Patrick:
- handles the default config for current versions of funambol (i.e. the
scard/stask/snote/scal locations)
- tries to be a bit smarter on how the data content should be encoded
based on what the client specified (sif+base64/vcard, / fragmented or
not, etc.)
- workaround a bug in some versions of funambol, where funambol does not
specify the proper sif type for the type of requested data
- imported patch #117 from egw's tracker
- make sure that the logs generated by the horde code go to stderr so
they can be view in the webserver's logs
- as much as possible reduce code duplication. For example, the
categories are handled in the parent classes for both the SIF avn VCAL
formats for each type of data (addressbook,infolog,calendar).
- make sure the code can handle more than one categories in each
direction
- treat the 'sony ericsson' vendor string just like 'sonyericsson', the
newer phones apparently have a space in the vendor string... (this
touches some files in the icalsrv as well)
- handle notes: these should now work with everything (funambol or
other)
- remove more code duplication: the syncml "api" for the various data
types (calendar, contacts, infolog) is now common for both the vcard and
sif data formats (cf the files that need to be removed)
- handle the "privat" filter in infolog like the "private" filter (some
part of the code use the name without the trailing e)
- imported patch # 267 from egw's tracker
2007-09-29 12:29:48 +02:00
|
|
|
default:
|
2009-07-15 21:44:09 +02:00
|
|
|
if (($size > 0) && strlen(implode(',', $values) . $value) > $size)
|
SyncML patches from patrick.bihan-faou-AT-mindstep.com (without
logout+mbstring stuff), small modification to use the already exiting
methodes to generate full name and fileas)
The code is commited to trunk only at the moment to allow testing of it.
If everything goes well, we intend to commit it to 1.4 branch too.
Here's the original description of the patch by Patrick:
- handles the default config for current versions of funambol (i.e. the
scard/stask/snote/scal locations)
- tries to be a bit smarter on how the data content should be encoded
based on what the client specified (sif+base64/vcard, / fragmented or
not, etc.)
- workaround a bug in some versions of funambol, where funambol does not
specify the proper sif type for the type of requested data
- imported patch #117 from egw's tracker
- make sure that the logs generated by the horde code go to stderr so
they can be view in the webserver's logs
- as much as possible reduce code duplication. For example, the
categories are handled in the parent classes for both the SIF avn VCAL
formats for each type of data (addressbook,infolog,calendar).
- make sure the code can handle more than one categories in each
direction
- treat the 'sony ericsson' vendor string just like 'sonyericsson', the
newer phones apparently have a space in the vendor string... (this
touches some files in the icalsrv as well)
- handle notes: these should now work with everything (funambol or
other)
- remove more code duplication: the syncml "api" for the various data
types (calendar, contacts, infolog) is now common for both the vcard and
sif data formats (cf the files that need to be removed)
- handle the "privat" filter in infolog like the "private" filter (some
part of the code use the name without the trailing e)
- imported patch # 267 from egw's tracker
2007-09-29 12:29:48 +02:00
|
|
|
{
|
2009-07-15 21:44:09 +02:00
|
|
|
if ($noTruncate)
|
|
|
|
{
|
|
|
|
Horde::logMessage("vCalAddressbook $vcardField omitted due to maximum size $size",
|
|
|
|
__FILE__, __LINE__, PEAR_LOG_WARNING);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
// truncate the value to size
|
|
|
|
$cursize = strlen(implode('', $values));
|
|
|
|
$left = $size - $cursize - count($databaseFields) + 1;
|
|
|
|
if ($left > 0)
|
|
|
|
{
|
|
|
|
$value = substr($value, 0, $left);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
$value = '';
|
|
|
|
}
|
|
|
|
Horde::logMessage("vCalAddressbook $vcardField truncated to maximum size $size",
|
|
|
|
__FILE__, __LINE__, PEAR_LOG_INFO);
|
|
|
|
}
|
|
|
|
if (!empty($value) // required field
|
|
|
|
|| in_array($vcardField,array('FN','ORG','N'))
|
|
|
|
|| ($size >= 0 && !$noTruncate))
|
|
|
|
{
|
|
|
|
$value = $GLOBALS['egw']->translation->convert(trim($value), $sysCharSet, $_charset);
|
|
|
|
$values[] = $value;
|
|
|
|
if(($extra_charset_attribute || $this->productName == 'kde')
|
|
|
|
&& preg_match('/([\177-\377])/',$value))
|
2008-04-16 18:05:48 +02:00
|
|
|
{
|
2008-04-22 10:55:18 +02:00
|
|
|
$options['CHARSET'] = $_charset;
|
2008-05-10 14:02:49 +02:00
|
|
|
// KAddressbook requires non-ascii chars to be qprint encoded, other clients eg. nokia phones have trouble with that
|
2008-11-03 10:36:20 +01:00
|
|
|
if ($this->productName == 'kde')
|
2008-05-10 14:02:49 +02:00
|
|
|
{
|
|
|
|
$options['ENCODING'] = 'QUOTED-PRINTABLE';
|
|
|
|
}
|
2008-04-16 18:05:48 +02:00
|
|
|
}
|
2009-04-02 14:31:44 +02:00
|
|
|
// protect the CardDAV
|
2009-07-15 21:44:09 +02:00
|
|
|
elseif (($extra_charset_attribute && preg_match('/([\000-\012\015\016\020-\037\075])/',$value)))
|
SyncML patches from patrick.bihan-faou-AT-mindstep.com (without
logout+mbstring stuff), small modification to use the already exiting
methodes to generate full name and fileas)
The code is commited to trunk only at the moment to allow testing of it.
If everything goes well, we intend to commit it to 1.4 branch too.
Here's the original description of the patch by Patrick:
- handles the default config for current versions of funambol (i.e. the
scard/stask/snote/scal locations)
- tries to be a bit smarter on how the data content should be encoded
based on what the client specified (sif+base64/vcard, / fragmented or
not, etc.)
- workaround a bug in some versions of funambol, where funambol does not
specify the proper sif type for the type of requested data
- imported patch #117 from egw's tracker
- make sure that the logs generated by the horde code go to stderr so
they can be view in the webserver's logs
- as much as possible reduce code duplication. For example, the
categories are handled in the parent classes for both the SIF avn VCAL
formats for each type of data (addressbook,infolog,calendar).
- make sure the code can handle more than one categories in each
direction
- treat the 'sony ericsson' vendor string just like 'sonyericsson', the
newer phones apparently have a space in the vendor string... (this
touches some files in the icalsrv as well)
- handle notes: these should now work with everything (funambol or
other)
- remove more code duplication: the syncml "api" for the various data
types (calendar, contacts, infolog) is now common for both the vcard and
sif data formats (cf the files that need to be removed)
- handle the "privat" filter in infolog like the "private" filter (some
part of the code use the name without the trailing e)
- imported patch # 267 from egw's tracker
2007-09-29 12:29:48 +02:00
|
|
|
{
|
|
|
|
$options['ENCODING'] = 'QUOTED-PRINTABLE';
|
|
|
|
}
|
2009-07-15 21:44:09 +02:00
|
|
|
if ($vcardField == 'TEL' && $entry['tel_prefer'] &&
|
|
|
|
($databaseField == $entry['tel_prefer']))
|
|
|
|
{
|
|
|
|
if ($options['TYPE'])
|
|
|
|
{
|
|
|
|
$options['TYPE'] .= ',';
|
|
|
|
}
|
|
|
|
$options['TYPE'] .= 'PREF';
|
|
|
|
}
|
SyncML patches from patrick.bihan-faou-AT-mindstep.com (without
logout+mbstring stuff), small modification to use the already exiting
methodes to generate full name and fileas)
The code is commited to trunk only at the moment to allow testing of it.
If everything goes well, we intend to commit it to 1.4 branch too.
Here's the original description of the patch by Patrick:
- handles the default config for current versions of funambol (i.e. the
scard/stask/snote/scal locations)
- tries to be a bit smarter on how the data content should be encoded
based on what the client specified (sif+base64/vcard, / fragmented or
not, etc.)
- workaround a bug in some versions of funambol, where funambol does not
specify the proper sif type for the type of requested data
- imported patch #117 from egw's tracker
- make sure that the logs generated by the horde code go to stderr so
they can be view in the webserver's logs
- as much as possible reduce code duplication. For example, the
categories are handled in the parent classes for both the SIF avn VCAL
formats for each type of data (addressbook,infolog,calendar).
- make sure the code can handle more than one categories in each
direction
- treat the 'sony ericsson' vendor string just like 'sonyericsson', the
newer phones apparently have a space in the vendor string... (this
touches some files in the icalsrv as well)
- handle notes: these should now work with everything (funambol or
other)
- remove more code duplication: the syncml "api" for the various data
types (calendar, contacts, infolog) is now common for both the vcard and
sif data formats (cf the files that need to be removed)
- handle the "privat" filter in infolog like the "private" filter (some
part of the code use the name without the trailing e)
- imported patch # 267 from egw's tracker
2007-09-29 12:29:48 +02:00
|
|
|
$hasdata++;
|
|
|
|
}
|
2009-07-15 21:44:09 +02:00
|
|
|
else
|
|
|
|
{
|
|
|
|
$values[] = '';
|
|
|
|
}
|
SyncML patches from patrick.bihan-faou-AT-mindstep.com (without
logout+mbstring stuff), small modification to use the already exiting
methodes to generate full name and fileas)
The code is commited to trunk only at the moment to allow testing of it.
If everything goes well, we intend to commit it to 1.4 branch too.
Here's the original description of the patch by Patrick:
- handles the default config for current versions of funambol (i.e. the
scard/stask/snote/scal locations)
- tries to be a bit smarter on how the data content should be encoded
based on what the client specified (sif+base64/vcard, / fragmented or
not, etc.)
- workaround a bug in some versions of funambol, where funambol does not
specify the proper sif type for the type of requested data
- imported patch #117 from egw's tracker
- make sure that the logs generated by the horde code go to stderr so
they can be view in the webserver's logs
- as much as possible reduce code duplication. For example, the
categories are handled in the parent classes for both the SIF avn VCAL
formats for each type of data (addressbook,infolog,calendar).
- make sure the code can handle more than one categories in each
direction
- treat the 'sony ericsson' vendor string just like 'sonyericsson', the
newer phones apparently have a space in the vendor string... (this
touches some files in the icalsrv as well)
- handle notes: these should now work with everything (funambol or
other)
- remove more code duplication: the syncml "api" for the various data
types (calendar, contacts, infolog) is now common for both the vcard and
sif data formats (cf the files that need to be removed)
- handle the "privat" filter in infolog like the "private" filter (some
part of the code use the name without the trailing e)
- imported patch # 267 from egw's tracker
2007-09-29 12:29:48 +02:00
|
|
|
break;
|
|
|
|
}
|
2006-03-21 14:19:38 +01:00
|
|
|
}
|
SyncML patches from patrick.bihan-faou-AT-mindstep.com (without
logout+mbstring stuff), small modification to use the already exiting
methodes to generate full name and fileas)
The code is commited to trunk only at the moment to allow testing of it.
If everything goes well, we intend to commit it to 1.4 branch too.
Here's the original description of the patch by Patrick:
- handles the default config for current versions of funambol (i.e. the
scard/stask/snote/scal locations)
- tries to be a bit smarter on how the data content should be encoded
based on what the client specified (sif+base64/vcard, / fragmented or
not, etc.)
- workaround a bug in some versions of funambol, where funambol does not
specify the proper sif type for the type of requested data
- imported patch #117 from egw's tracker
- make sure that the logs generated by the horde code go to stderr so
they can be view in the webserver's logs
- as much as possible reduce code duplication. For example, the
categories are handled in the parent classes for both the SIF avn VCAL
formats for each type of data (addressbook,infolog,calendar).
- make sure the code can handle more than one categories in each
direction
- treat the 'sony ericsson' vendor string just like 'sonyericsson', the
newer phones apparently have a space in the vendor string... (this
touches some files in the icalsrv as well)
- handle notes: these should now work with everything (funambol or
other)
- remove more code duplication: the syncml "api" for the various data
types (calendar, contacts, infolog) is now common for both the vcard and
sif data formats (cf the files that need to be removed)
- handle the "privat" filter in infolog like the "private" filter (some
part of the code use the name without the trailing e)
- imported patch # 267 from egw's tracker
2007-09-29 12:29:48 +02:00
|
|
|
|
2008-06-07 20:00:29 +02:00
|
|
|
if ($hasdata <= 0)
|
SyncML patches from patrick.bihan-faou-AT-mindstep.com (without
logout+mbstring stuff), small modification to use the already exiting
methodes to generate full name and fileas)
The code is commited to trunk only at the moment to allow testing of it.
If everything goes well, we intend to commit it to 1.4 branch too.
Here's the original description of the patch by Patrick:
- handles the default config for current versions of funambol (i.e. the
scard/stask/snote/scal locations)
- tries to be a bit smarter on how the data content should be encoded
based on what the client specified (sif+base64/vcard, / fragmented or
not, etc.)
- workaround a bug in some versions of funambol, where funambol does not
specify the proper sif type for the type of requested data
- imported patch #117 from egw's tracker
- make sure that the logs generated by the horde code go to stderr so
they can be view in the webserver's logs
- as much as possible reduce code duplication. For example, the
categories are handled in the parent classes for both the SIF avn VCAL
formats for each type of data (addressbook,infolog,calendar).
- make sure the code can handle more than one categories in each
direction
- treat the 'sony ericsson' vendor string just like 'sonyericsson', the
newer phones apparently have a space in the vendor string... (this
touches some files in the icalsrv as well)
- handle notes: these should now work with everything (funambol or
other)
- remove more code duplication: the syncml "api" for the various data
types (calendar, contacts, infolog) is now common for both the vcard and
sif data formats (cf the files that need to be removed)
- handle the "privat" filter in infolog like the "private" filter (some
part of the code use the name without the trailing e)
- imported patch # 267 from egw's tracker
2007-09-29 12:29:48 +02:00
|
|
|
{
|
2007-10-31 22:17:40 +01:00
|
|
|
// don't add the entry if there is no data for this field,
|
|
|
|
// except it's a mendatory field
|
SyncML patches from patrick.bihan-faou-AT-mindstep.com (without
logout+mbstring stuff), small modification to use the already exiting
methodes to generate full name and fileas)
The code is commited to trunk only at the moment to allow testing of it.
If everything goes well, we intend to commit it to 1.4 branch too.
Here's the original description of the patch by Patrick:
- handles the default config for current versions of funambol (i.e. the
scard/stask/snote/scal locations)
- tries to be a bit smarter on how the data content should be encoded
based on what the client specified (sif+base64/vcard, / fragmented or
not, etc.)
- workaround a bug in some versions of funambol, where funambol does not
specify the proper sif type for the type of requested data
- imported patch #117 from egw's tracker
- make sure that the logs generated by the horde code go to stderr so
they can be view in the webserver's logs
- as much as possible reduce code duplication. For example, the
categories are handled in the parent classes for both the SIF avn VCAL
formats for each type of data (addressbook,infolog,calendar).
- make sure the code can handle more than one categories in each
direction
- treat the 'sony ericsson' vendor string just like 'sonyericsson', the
newer phones apparently have a space in the vendor string... (this
touches some files in the icalsrv as well)
- handle notes: these should now work with everything (funambol or
other)
- remove more code duplication: the syncml "api" for the various data
types (calendar, contacts, infolog) is now common for both the vcard and
sif data formats (cf the files that need to be removed)
- handle the "privat" filter in infolog like the "private" filter (some
part of the code use the name without the trailing e)
- imported patch # 267 from egw's tracker
2007-09-29 12:29:48 +02:00
|
|
|
continue;
|
2006-03-21 14:19:38 +01:00
|
|
|
}
|
SyncML patches from patrick.bihan-faou-AT-mindstep.com (without
logout+mbstring stuff), small modification to use the already exiting
methodes to generate full name and fileas)
The code is commited to trunk only at the moment to allow testing of it.
If everything goes well, we intend to commit it to 1.4 branch too.
Here's the original description of the patch by Patrick:
- handles the default config for current versions of funambol (i.e. the
scard/stask/snote/scal locations)
- tries to be a bit smarter on how the data content should be encoded
based on what the client specified (sif+base64/vcard, / fragmented or
not, etc.)
- workaround a bug in some versions of funambol, where funambol does not
specify the proper sif type for the type of requested data
- imported patch #117 from egw's tracker
- make sure that the logs generated by the horde code go to stderr so
they can be view in the webserver's logs
- as much as possible reduce code duplication. For example, the
categories are handled in the parent classes for both the SIF avn VCAL
formats for each type of data (addressbook,infolog,calendar).
- make sure the code can handle more than one categories in each
direction
- treat the 'sony ericsson' vendor string just like 'sonyericsson', the
newer phones apparently have a space in the vendor string... (this
touches some files in the icalsrv as well)
- handle notes: these should now work with everything (funambol or
other)
- remove more code duplication: the syncml "api" for the various data
types (calendar, contacts, infolog) is now common for both the vcard and
sif data formats (cf the files that need to be removed)
- handle the "privat" filter in infolog like the "private" filter (some
part of the code use the name without the trailing e)
- imported patch # 267 from egw's tracker
2007-09-29 12:29:48 +02:00
|
|
|
|
2009-07-15 21:44:09 +02:00
|
|
|
$vCard->setAttribute($vcardField, $value, $options, true, $values);
|
|
|
|
//$vCard->setParameter($vcardField, $options);
|
2006-07-09 01:02:30 +02:00
|
|
|
}
|
2009-07-15 21:44:09 +02:00
|
|
|
|
2006-07-09 01:02:30 +02:00
|
|
|
$result = $vCard->exportvCalendar();
|
2009-07-15 21:44:09 +02:00
|
|
|
|
|
|
|
Horde::logMessage("vCalAddressbook getVCard:\n" . print_r($result, true), __FILE__, __LINE__, PEAR_LOG_DEBUG);
|
|
|
|
|
2006-07-09 01:02:30 +02:00
|
|
|
return $result;
|
|
|
|
}
|
2006-03-21 14:19:38 +01:00
|
|
|
|
2009-07-15 21:44:09 +02:00
|
|
|
function search($_vcard, $contentID=null, $relax=false)
|
2006-07-09 01:02:30 +02:00
|
|
|
{
|
2009-07-15 21:44:09 +02:00
|
|
|
$result = false;
|
2008-04-16 06:37:05 +02:00
|
|
|
|
2009-07-15 21:44:09 +02:00
|
|
|
if (($contact = $this->vcardtoegw($_vcard)))
|
|
|
|
{
|
|
|
|
if ($contentID)
|
|
|
|
{
|
|
|
|
$contact['contact_id'] = $contentID;
|
|
|
|
}
|
|
|
|
$result = $this->find_contact($contact, $relax);
|
Big SyncML patch from Philip Herbert <pherbert(at)knauber.de>:
- change the processing of slowsync, to use the content_map instead of
trying to build a new one. This caused duplication issues on the
client if multiple similar records where stored, because only the first
one found in the server-db was matched, These duplicate entries at client
side had no entry at serverside, so deleting the wrong one
on the client (the content with a valid map entry) could cause
unwanted data loss at server side, because it is impossible for the
user to see what is a duplicate, and what is not.
see also:
http://www.nabble.com/again---syncml-duplication-issue-to20333619s3741.html
- reenabled UID from syncml clients, because it was partly used this caused
issues during SlowSync if the content was changed.
- infolog, calendar if a uid is found in the provided data, allway try to
find the corresponding content first using only the UID, instead of
using the content-id taken from content_map.
also fixed:
- a few fixes in ./notes
- creating an entry on the client that can not be imported,
(Example, Nokia E Series Appointment without a Title)
will no longer create an invalid content-map entry
However, at client side this is still counted in the Protocol as
Server-Add
2008-11-16 11:42:29 +01:00
|
|
|
}
|
2009-07-15 21:44:09 +02:00
|
|
|
return $result;
|
|
|
|
}
|
Big SyncML patch from Philip Herbert <pherbert(at)knauber.de>:
- change the processing of slowsync, to use the content_map instead of
trying to build a new one. This caused duplication issues on the
client if multiple similar records where stored, because only the first
one found in the server-db was matched, These duplicate entries at client
side had no entry at serverside, so deleting the wrong one
on the client (the content with a valid map entry) could cause
unwanted data loss at server side, because it is impossible for the
user to see what is a duplicate, and what is not.
see also:
http://www.nabble.com/again---syncml-duplication-issue-to20333619s3741.html
- reenabled UID from syncml clients, because it was partly used this caused
issues during SlowSync if the content was changed.
- infolog, calendar if a uid is found in the provided data, allway try to
find the corresponding content first using only the UID, instead of
using the content-id taken from content_map.
also fixed:
- a few fixes in ./notes
- creating an entry on the client that can not be imported,
(Example, Nokia E Series Appointment without a Title)
will no longer create an invalid content-map entry
However, at client side this is still counted in the Protocol as
Server-Add
2008-11-16 11:42:29 +01:00
|
|
|
|
2009-07-15 21:44:09 +02:00
|
|
|
function setSupportedFields($_productManufacturer='', $_productName='')
|
|
|
|
{
|
|
|
|
$state = &$_SESSION['SyncML.state'];
|
|
|
|
if (isset($state))
|
|
|
|
{
|
|
|
|
$deviceInfo = $state->getClientDeviceInfo();
|
2007-01-23 18:34:24 +01:00
|
|
|
}
|
2008-04-16 06:37:05 +02:00
|
|
|
|
2009-07-15 21:44:09 +02:00
|
|
|
// store product manufacturer and name, to be able to use it elsewhere
|
|
|
|
if ($_productManufacturer)
|
|
|
|
{
|
|
|
|
$this->productManufacturer = strtolower($_productManufacturer);
|
|
|
|
$this->productName = strtolower($_productName);
|
|
|
|
}
|
2008-04-16 06:37:05 +02:00
|
|
|
|
2009-07-15 21:44:09 +02:00
|
|
|
if(isset($deviceInfo) && is_array($deviceInfo))
|
|
|
|
{
|
|
|
|
if(!isset($this->productManufacturer) ||
|
|
|
|
$this->productManufacturer == '' ||
|
|
|
|
$this->productManufacturer == 'file')
|
|
|
|
{
|
|
|
|
$this->productManufacturer = strtolower($deviceInfo['manufacturer']);
|
|
|
|
}
|
|
|
|
if(!isset($this->productName) || $this->productName == '')
|
|
|
|
{
|
|
|
|
$this->productName = strtolower($deviceInfo['model']);
|
|
|
|
}
|
2006-07-09 01:02:30 +02:00
|
|
|
}
|
2006-03-21 14:19:38 +01:00
|
|
|
|
2009-07-15 21:44:09 +02:00
|
|
|
Horde::logMessage('setSupportedFields(' . $this->productManufacturer . ', ' . $this->productName .')',
|
|
|
|
__FILE__, __LINE__, PEAR_LOG_DEBUG);
|
|
|
|
|
2006-07-09 01:02:30 +02:00
|
|
|
/**
|
2008-04-16 06:37:05 +02:00
|
|
|
* ToDo Lars:
|
2006-07-09 01:02:30 +02:00
|
|
|
* + changes / renamed fields in 1.3+:
|
|
|
|
* - access --> private (already done by Ralf)
|
|
|
|
* - tel_msg --> tel_assistent
|
|
|
|
* - tel_modem --> tel_fax_home
|
|
|
|
* - tel_isdn --> tel_cell_private
|
|
|
|
* - tel_voice/ophone --> tel_other
|
|
|
|
* - address2 --> adr_one_street2
|
|
|
|
* - address3 --> adr_two_street2
|
|
|
|
* - freebusy_url --> freebusy_uri (i instead l !)
|
|
|
|
* - fn --> n_fn
|
|
|
|
* - last_mod --> modified
|
|
|
|
* + new fields in 1.3+:
|
|
|
|
* - n_fileas
|
|
|
|
* - role
|
|
|
|
* - assistent
|
|
|
|
* - room
|
|
|
|
* - calendar_uri
|
|
|
|
* - url_home
|
|
|
|
* - created
|
|
|
|
* - creator (preset with owner)
|
|
|
|
* - modifier
|
|
|
|
* - jpegphoto
|
|
|
|
*/
|
2007-10-25 08:26:50 +02:00
|
|
|
$defaultFields[0] = array( // multisync
|
2006-07-09 01:02:30 +02:00
|
|
|
'ADR' => array('','','adr_one_street','adr_one_locality','adr_one_region',
|
|
|
|
'adr_one_postalcode','adr_one_countryname'),
|
|
|
|
'CATEGORIES' => array('cat_id'),
|
|
|
|
'CLASS' => array('private'),
|
|
|
|
'EMAIL' => array('email'),
|
|
|
|
'N' => array('n_family','n_given','','',''),
|
SyncML patches from patrick.bihan-faou-AT-mindstep.com (without
logout+mbstring stuff), small modification to use the already exiting
methodes to generate full name and fileas)
The code is commited to trunk only at the moment to allow testing of it.
If everything goes well, we intend to commit it to 1.4 branch too.
Here's the original description of the patch by Patrick:
- handles the default config for current versions of funambol (i.e. the
scard/stask/snote/scal locations)
- tries to be a bit smarter on how the data content should be encoded
based on what the client specified (sif+base64/vcard, / fragmented or
not, etc.)
- workaround a bug in some versions of funambol, where funambol does not
specify the proper sif type for the type of requested data
- imported patch #117 from egw's tracker
- make sure that the logs generated by the horde code go to stderr so
they can be view in the webserver's logs
- as much as possible reduce code duplication. For example, the
categories are handled in the parent classes for both the SIF avn VCAL
formats for each type of data (addressbook,infolog,calendar).
- make sure the code can handle more than one categories in each
direction
- treat the 'sony ericsson' vendor string just like 'sonyericsson', the
newer phones apparently have a space in the vendor string... (this
touches some files in the icalsrv as well)
- handle notes: these should now work with everything (funambol or
other)
- remove more code duplication: the syncml "api" for the various data
types (calendar, contacts, infolog) is now common for both the vcard and
sif data formats (cf the files that need to be removed)
- handle the "privat" filter in infolog like the "private" filter (some
part of the code use the name without the trailing e)
- imported patch # 267 from egw's tracker
2007-09-29 12:29:48 +02:00
|
|
|
'FN' => array('n_fn'),
|
2006-07-09 01:02:30 +02:00
|
|
|
'NOTE' => array('note'),
|
|
|
|
'ORG' => array('org_name',''),
|
|
|
|
'TEL;CELL' => array('tel_cell'),
|
|
|
|
'TEL;FAX' => array('tel_fax'),
|
|
|
|
'TEL;HOME' => array('tel_home'),
|
|
|
|
'TEL;WORK' => array('tel_work'),
|
|
|
|
'TITLE' => array('title'),
|
2009-07-15 21:44:09 +02:00
|
|
|
'UID' => array('uid'),
|
2006-07-09 01:02:30 +02:00
|
|
|
);
|
|
|
|
|
2008-11-03 10:36:20 +01:00
|
|
|
$defaultFields[1] = array( // all entries, nexthaus corporation, groupdav, ...
|
2006-07-09 01:02:30 +02:00
|
|
|
'ADR;WORK' => array('','','adr_one_street','adr_one_locality','adr_one_region',
|
|
|
|
'adr_one_postalcode','adr_one_countryname'),
|
|
|
|
'ADR;HOME' => array('','','adr_two_street','adr_two_locality','adr_two_region',
|
|
|
|
'adr_two_postalcode','adr_two_countryname'),
|
|
|
|
'BDAY' => array('bday'),
|
|
|
|
'CATEGORIES' => array('cat_id'),
|
2009-07-15 21:44:09 +02:00
|
|
|
'EMAIL;INTERNET;WORK' => array('email'),
|
|
|
|
'EMAIL;INTERNET;HOME' => array('email_home'),
|
2006-07-09 01:02:30 +02:00
|
|
|
'N' => array('n_family','n_given','n_middle','n_prefix','n_suffix'),
|
SyncML patches from patrick.bihan-faou-AT-mindstep.com (without
logout+mbstring stuff), small modification to use the already exiting
methodes to generate full name and fileas)
The code is commited to trunk only at the moment to allow testing of it.
If everything goes well, we intend to commit it to 1.4 branch too.
Here's the original description of the patch by Patrick:
- handles the default config for current versions of funambol (i.e. the
scard/stask/snote/scal locations)
- tries to be a bit smarter on how the data content should be encoded
based on what the client specified (sif+base64/vcard, / fragmented or
not, etc.)
- workaround a bug in some versions of funambol, where funambol does not
specify the proper sif type for the type of requested data
- imported patch #117 from egw's tracker
- make sure that the logs generated by the horde code go to stderr so
they can be view in the webserver's logs
- as much as possible reduce code duplication. For example, the
categories are handled in the parent classes for both the SIF avn VCAL
formats for each type of data (addressbook,infolog,calendar).
- make sure the code can handle more than one categories in each
direction
- treat the 'sony ericsson' vendor string just like 'sonyericsson', the
newer phones apparently have a space in the vendor string... (this
touches some files in the icalsrv as well)
- handle notes: these should now work with everything (funambol or
other)
- remove more code duplication: the syncml "api" for the various data
types (calendar, contacts, infolog) is now common for both the vcard and
sif data formats (cf the files that need to be removed)
- handle the "privat" filter in infolog like the "private" filter (some
part of the code use the name without the trailing e)
- imported patch # 267 from egw's tracker
2007-09-29 12:29:48 +02:00
|
|
|
'FN' => array('n_fn'),
|
2006-07-09 01:02:30 +02:00
|
|
|
'NOTE' => array('note'),
|
|
|
|
'ORG' => array('org_name','org_unit'),
|
|
|
|
'TEL;CELL;WORK' => array('tel_cell'),
|
2007-10-25 08:26:50 +02:00
|
|
|
'TEL;CELL;HOME' => array('tel_cell_private'),
|
2006-07-09 01:02:30 +02:00
|
|
|
'TEL;FAX;WORK' => array('tel_fax'),
|
2007-10-25 08:26:50 +02:00
|
|
|
'TEL;FAX;HOME' => array('tel_fax_home'),
|
2006-07-09 01:02:30 +02:00
|
|
|
'TEL;HOME' => array('tel_home'),
|
|
|
|
'TEL;PAGER;WORK' => array('tel_pager'),
|
|
|
|
'TEL;WORK' => array('tel_work'),
|
|
|
|
'TITLE' => array('title'),
|
|
|
|
'URL;WORK' => array('url'),
|
2006-07-09 15:29:19 +02:00
|
|
|
'ROLE' => array('role'),
|
2007-10-25 08:26:50 +02:00
|
|
|
'URL;HOME' => array('url_home'),
|
|
|
|
'FBURL' => array('freebusy_uri'),
|
2008-04-16 06:37:05 +02:00
|
|
|
'PHOTO' => array('jpegphoto'),
|
2008-05-10 23:01:53 +02:00
|
|
|
'UID' => array('uid'),
|
2006-07-09 01:02:30 +02:00
|
|
|
);
|
|
|
|
|
2007-10-25 08:26:50 +02:00
|
|
|
$defaultFields[2] = array( // sony ericson
|
2006-07-09 01:02:30 +02:00
|
|
|
'ADR;HOME' => array('','','adr_one_street','adr_one_locality','adr_one_region',
|
|
|
|
'adr_one_postalcode','adr_one_countryname'),
|
|
|
|
'BDAY' => array('bday'),
|
|
|
|
'CATEGORIES' => array('cat_id'),
|
|
|
|
'CLASS' => array('private'),
|
|
|
|
'EMAIL' => array('email'),
|
|
|
|
'N' => array('n_family','n_given','','',''),
|
SyncML patches from patrick.bihan-faou-AT-mindstep.com (without
logout+mbstring stuff), small modification to use the already exiting
methodes to generate full name and fileas)
The code is commited to trunk only at the moment to allow testing of it.
If everything goes well, we intend to commit it to 1.4 branch too.
Here's the original description of the patch by Patrick:
- handles the default config for current versions of funambol (i.e. the
scard/stask/snote/scal locations)
- tries to be a bit smarter on how the data content should be encoded
based on what the client specified (sif+base64/vcard, / fragmented or
not, etc.)
- workaround a bug in some versions of funambol, where funambol does not
specify the proper sif type for the type of requested data
- imported patch #117 from egw's tracker
- make sure that the logs generated by the horde code go to stderr so
they can be view in the webserver's logs
- as much as possible reduce code duplication. For example, the
categories are handled in the parent classes for both the SIF avn VCAL
formats for each type of data (addressbook,infolog,calendar).
- make sure the code can handle more than one categories in each
direction
- treat the 'sony ericsson' vendor string just like 'sonyericsson', the
newer phones apparently have a space in the vendor string... (this
touches some files in the icalsrv as well)
- handle notes: these should now work with everything (funambol or
other)
- remove more code duplication: the syncml "api" for the various data
types (calendar, contacts, infolog) is now common for both the vcard and
sif data formats (cf the files that need to be removed)
- handle the "privat" filter in infolog like the "private" filter (some
part of the code use the name without the trailing e)
- imported patch # 267 from egw's tracker
2007-09-29 12:29:48 +02:00
|
|
|
'FN' => array('n_fn'),
|
2006-07-09 01:02:30 +02:00
|
|
|
'NOTE' => array('note'),
|
|
|
|
'ORG' => array('org_name',''),
|
|
|
|
'TEL;CELL;WORK' => array('tel_cell'),
|
|
|
|
'TEL;FAX;WORK' => array('tel_fax'),
|
|
|
|
'TEL;HOME' => array('tel_home'),
|
|
|
|
'TEL;WORK' => array('tel_work'),
|
|
|
|
'TITLE' => array('title'),
|
2006-07-09 15:29:19 +02:00
|
|
|
'URL;WORK' => array('url'),
|
2009-07-15 21:44:09 +02:00
|
|
|
'UID' => array('uid'),
|
2006-07-09 01:02:30 +02:00
|
|
|
);
|
|
|
|
|
2007-10-25 08:26:50 +02:00
|
|
|
$defaultFields[3] = array( // siemens
|
2006-07-09 01:02:30 +02:00
|
|
|
'ADR;WORK' => array('','','adr_one_street','adr_one_locality','adr_one_region',
|
|
|
|
'adr_one_postalcode','adr_one_countryname'),
|
|
|
|
'ADR;HOME' => array('','','adr_two_street','adr_two_locality','adr_two_region',
|
|
|
|
'adr_two_postalcode','adr_two_countryname'),
|
|
|
|
'BDAY' => array('bday'),
|
|
|
|
'EMAIL;INTERNET;WORK' => array('email'),
|
|
|
|
'EMAIL;INTERNET;HOME' => array('email_home'),
|
|
|
|
'N' => array('n_family','n_given','','',''),
|
SyncML patches from patrick.bihan-faou-AT-mindstep.com (without
logout+mbstring stuff), small modification to use the already exiting
methodes to generate full name and fileas)
The code is commited to trunk only at the moment to allow testing of it.
If everything goes well, we intend to commit it to 1.4 branch too.
Here's the original description of the patch by Patrick:
- handles the default config for current versions of funambol (i.e. the
scard/stask/snote/scal locations)
- tries to be a bit smarter on how the data content should be encoded
based on what the client specified (sif+base64/vcard, / fragmented or
not, etc.)
- workaround a bug in some versions of funambol, where funambol does not
specify the proper sif type for the type of requested data
- imported patch #117 from egw's tracker
- make sure that the logs generated by the horde code go to stderr so
they can be view in the webserver's logs
- as much as possible reduce code duplication. For example, the
categories are handled in the parent classes for both the SIF avn VCAL
formats for each type of data (addressbook,infolog,calendar).
- make sure the code can handle more than one categories in each
direction
- treat the 'sony ericsson' vendor string just like 'sonyericsson', the
newer phones apparently have a space in the vendor string... (this
touches some files in the icalsrv as well)
- handle notes: these should now work with everything (funambol or
other)
- remove more code duplication: the syncml "api" for the various data
types (calendar, contacts, infolog) is now common for both the vcard and
sif data formats (cf the files that need to be removed)
- handle the "privat" filter in infolog like the "private" filter (some
part of the code use the name without the trailing e)
- imported patch # 267 from egw's tracker
2007-09-29 12:29:48 +02:00
|
|
|
'FN' => array('n_fn'),
|
2006-07-09 01:02:30 +02:00
|
|
|
'NOTE' => array('note'),
|
2009-07-15 21:44:09 +02:00
|
|
|
'ORG' => array('org_name'), // only one company field is supported
|
2006-07-09 01:02:30 +02:00
|
|
|
'TEL;CELL;WORK' => array('tel_cell'),
|
|
|
|
'TEL;FAX;WORK' => array('tel_fax'),
|
|
|
|
'TEL;HOME' => array('tel_home'),
|
|
|
|
'TEL;PAGER;WORK' => array('tel_pager'),
|
|
|
|
'TEL;WORK' => array('tel_work'),
|
|
|
|
'TITLE' => array('title'),
|
|
|
|
'URL;WORK' => array('url'),
|
2009-07-15 21:44:09 +02:00
|
|
|
'UID' => array('uid'),
|
2006-07-09 01:02:30 +02:00
|
|
|
);
|
|
|
|
|
2007-10-25 08:26:50 +02:00
|
|
|
$defaultFields[4] = array( // nokia 6600
|
2006-07-23 20:10:37 +02:00
|
|
|
'ADR;WORK' => array('','','adr_one_street','adr_one_locality','adr_one_region',
|
|
|
|
'adr_one_postalcode','adr_one_countryname'),
|
|
|
|
'ADR;HOME' => array('','','adr_two_street','adr_two_locality','adr_two_region',
|
|
|
|
'adr_two_postalcode','adr_two_countryname'),
|
2009-07-15 21:44:09 +02:00
|
|
|
'BDAY;TYPE=BASIC' => array('bday'),
|
2006-07-23 20:10:37 +02:00
|
|
|
'EMAIL;INTERNET;WORK' => array('email'),
|
|
|
|
'EMAIL;INTERNET;HOME' => array('email_home'),
|
|
|
|
'N' => array('n_family','n_given','','',''),
|
SyncML patches from patrick.bihan-faou-AT-mindstep.com (without
logout+mbstring stuff), small modification to use the already exiting
methodes to generate full name and fileas)
The code is commited to trunk only at the moment to allow testing of it.
If everything goes well, we intend to commit it to 1.4 branch too.
Here's the original description of the patch by Patrick:
- handles the default config for current versions of funambol (i.e. the
scard/stask/snote/scal locations)
- tries to be a bit smarter on how the data content should be encoded
based on what the client specified (sif+base64/vcard, / fragmented or
not, etc.)
- workaround a bug in some versions of funambol, where funambol does not
specify the proper sif type for the type of requested data
- imported patch #117 from egw's tracker
- make sure that the logs generated by the horde code go to stderr so
they can be view in the webserver's logs
- as much as possible reduce code duplication. For example, the
categories are handled in the parent classes for both the SIF avn VCAL
formats for each type of data (addressbook,infolog,calendar).
- make sure the code can handle more than one categories in each
direction
- treat the 'sony ericsson' vendor string just like 'sonyericsson', the
newer phones apparently have a space in the vendor string... (this
touches some files in the icalsrv as well)
- handle notes: these should now work with everything (funambol or
other)
- remove more code duplication: the syncml "api" for the various data
types (calendar, contacts, infolog) is now common for both the vcard and
sif data formats (cf the files that need to be removed)
- handle the "privat" filter in infolog like the "private" filter (some
part of the code use the name without the trailing e)
- imported patch # 267 from egw's tracker
2007-09-29 12:29:48 +02:00
|
|
|
'FN' => array('n_fn'),
|
2006-07-23 20:10:37 +02:00
|
|
|
'NOTE' => array('note'),
|
|
|
|
'ORG' => array('org_name',''),
|
|
|
|
'TEL;CELL;WORK' => array('tel_cell'),
|
|
|
|
'TEL;CELL;HOME' => array('tel_cell_private'),
|
|
|
|
'TEL;FAX;WORK' => array('tel_fax'),
|
|
|
|
'TEL;FAX;HOME' => array('tel_fax_home'),
|
|
|
|
'TEL;HOME' => array('tel_home'),
|
|
|
|
'TEL;PAGER;WORK' => array('tel_pager'),
|
|
|
|
'TEL;WORK' => array('tel_work'),
|
|
|
|
'TITLE' => array('title'),
|
|
|
|
'URL;WORK' => array('url'),
|
2006-08-15 14:46:26 +02:00
|
|
|
'URL;HOME' => array('url_home'),
|
2009-07-15 21:44:09 +02:00
|
|
|
'UID' => array('uid'),
|
2006-07-23 20:10:37 +02:00
|
|
|
);
|
|
|
|
|
2007-10-25 08:26:50 +02:00
|
|
|
$defaultFields[5] = array( // nokia e61
|
2006-08-15 14:46:26 +02:00
|
|
|
'ADR;WORK' => array('','','adr_one_street','adr_one_locality','adr_one_region',
|
|
|
|
'adr_one_postalcode','adr_one_countryname'),
|
|
|
|
'ADR;HOME' => array('','','adr_two_street','adr_two_locality','adr_two_region',
|
|
|
|
'adr_two_postalcode','adr_two_countryname'),
|
2009-07-15 21:44:09 +02:00
|
|
|
'BDAY;TYPE=BASIC' => array('bday'),
|
2006-08-15 14:46:26 +02:00
|
|
|
'EMAIL;INTERNET;WORK' => array('email'),
|
|
|
|
'EMAIL;INTERNET;HOME' => array('email_home'),
|
|
|
|
'N' => array('n_family','n_given','','n_prefix','n_suffix'),
|
SyncML patches from patrick.bihan-faou-AT-mindstep.com (without
logout+mbstring stuff), small modification to use the already exiting
methodes to generate full name and fileas)
The code is commited to trunk only at the moment to allow testing of it.
If everything goes well, we intend to commit it to 1.4 branch too.
Here's the original description of the patch by Patrick:
- handles the default config for current versions of funambol (i.e. the
scard/stask/snote/scal locations)
- tries to be a bit smarter on how the data content should be encoded
based on what the client specified (sif+base64/vcard, / fragmented or
not, etc.)
- workaround a bug in some versions of funambol, where funambol does not
specify the proper sif type for the type of requested data
- imported patch #117 from egw's tracker
- make sure that the logs generated by the horde code go to stderr so
they can be view in the webserver's logs
- as much as possible reduce code duplication. For example, the
categories are handled in the parent classes for both the SIF avn VCAL
formats for each type of data (addressbook,infolog,calendar).
- make sure the code can handle more than one categories in each
direction
- treat the 'sony ericsson' vendor string just like 'sonyericsson', the
newer phones apparently have a space in the vendor string... (this
touches some files in the icalsrv as well)
- handle notes: these should now work with everything (funambol or
other)
- remove more code duplication: the syncml "api" for the various data
types (calendar, contacts, infolog) is now common for both the vcard and
sif data formats (cf the files that need to be removed)
- handle the "privat" filter in infolog like the "private" filter (some
part of the code use the name without the trailing e)
- imported patch # 267 from egw's tracker
2007-09-29 12:29:48 +02:00
|
|
|
'FN' => array('n_fn'),
|
2006-08-15 14:46:26 +02:00
|
|
|
'NOTE' => array('note'),
|
|
|
|
'ORG' => array('org_name',''),
|
|
|
|
'TEL;CELL;WORK' => array('tel_cell'),
|
|
|
|
'TEL;CELL;HOME' => array('tel_cell_private'),
|
|
|
|
'TEL;FAX;WORK' => array('tel_fax'),
|
|
|
|
'TEL;FAX;HOME' => array('tel_fax_home'),
|
|
|
|
'TEL;HOME' => array('tel_home'),
|
|
|
|
'TEL;PAGER;WORK' => array('tel_pager'),
|
|
|
|
'TEL;WORK' => array('tel_work'),
|
|
|
|
'TITLE' => array('title'),
|
|
|
|
'URL;WORK' => array('url'),
|
|
|
|
'URL;HOME' => array('url_home'),
|
2009-07-15 21:44:09 +02:00
|
|
|
'UID' => array('uid'),
|
2006-08-15 14:46:26 +02:00
|
|
|
);
|
2007-06-25 01:53:10 +02:00
|
|
|
|
2007-10-25 08:26:50 +02:00
|
|
|
$defaultFields[6] = array( // funambol: fmz-thunderbird-plugin
|
SyncML patches from patrick.bihan-faou-AT-mindstep.com (without
logout+mbstring stuff), small modification to use the already exiting
methodes to generate full name and fileas)
The code is commited to trunk only at the moment to allow testing of it.
If everything goes well, we intend to commit it to 1.4 branch too.
Here's the original description of the patch by Patrick:
- handles the default config for current versions of funambol (i.e. the
scard/stask/snote/scal locations)
- tries to be a bit smarter on how the data content should be encoded
based on what the client specified (sif+base64/vcard, / fragmented or
not, etc.)
- workaround a bug in some versions of funambol, where funambol does not
specify the proper sif type for the type of requested data
- imported patch #117 from egw's tracker
- make sure that the logs generated by the horde code go to stderr so
they can be view in the webserver's logs
- as much as possible reduce code duplication. For example, the
categories are handled in the parent classes for both the SIF avn VCAL
formats for each type of data (addressbook,infolog,calendar).
- make sure the code can handle more than one categories in each
direction
- treat the 'sony ericsson' vendor string just like 'sonyericsson', the
newer phones apparently have a space in the vendor string... (this
touches some files in the icalsrv as well)
- handle notes: these should now work with everything (funambol or
other)
- remove more code duplication: the syncml "api" for the various data
types (calendar, contacts, infolog) is now common for both the vcard and
sif data formats (cf the files that need to be removed)
- handle the "privat" filter in infolog like the "private" filter (some
part of the code use the name without the trailing e)
- imported patch # 267 from egw's tracker
2007-09-29 12:29:48 +02:00
|
|
|
'ADR;WORK' => array('','','adr_one_street','adr_one_locality','adr_one_region',
|
|
|
|
'adr_one_postalcode','adr_one_countryname'),
|
|
|
|
'ADR;HOME' => array('','','adr_two_street','adr_two_locality','adr_two_region',
|
|
|
|
'adr_two_postalcode','adr_two_countryname'),
|
|
|
|
'EMAIL' => array('email'),
|
|
|
|
'EMAIL;HOME' => array('email_home'),
|
|
|
|
'N' => array('n_family','n_given','','',''),
|
2009-07-15 21:44:09 +02:00
|
|
|
'FN' => array('n_fn'),
|
SyncML patches from patrick.bihan-faou-AT-mindstep.com (without
logout+mbstring stuff), small modification to use the already exiting
methodes to generate full name and fileas)
The code is commited to trunk only at the moment to allow testing of it.
If everything goes well, we intend to commit it to 1.4 branch too.
Here's the original description of the patch by Patrick:
- handles the default config for current versions of funambol (i.e. the
scard/stask/snote/scal locations)
- tries to be a bit smarter on how the data content should be encoded
based on what the client specified (sif+base64/vcard, / fragmented or
not, etc.)
- workaround a bug in some versions of funambol, where funambol does not
specify the proper sif type for the type of requested data
- imported patch #117 from egw's tracker
- make sure that the logs generated by the horde code go to stderr so
they can be view in the webserver's logs
- as much as possible reduce code duplication. For example, the
categories are handled in the parent classes for both the SIF avn VCAL
formats for each type of data (addressbook,infolog,calendar).
- make sure the code can handle more than one categories in each
direction
- treat the 'sony ericsson' vendor string just like 'sonyericsson', the
newer phones apparently have a space in the vendor string... (this
touches some files in the icalsrv as well)
- handle notes: these should now work with everything (funambol or
other)
- remove more code duplication: the syncml "api" for the various data
types (calendar, contacts, infolog) is now common for both the vcard and
sif data formats (cf the files that need to be removed)
- handle the "privat" filter in infolog like the "private" filter (some
part of the code use the name without the trailing e)
- imported patch # 267 from egw's tracker
2007-09-29 12:29:48 +02:00
|
|
|
'NOTE' => array('note'),
|
|
|
|
'ORG' => array('org_name','org_unit'),
|
|
|
|
'TEL;CELL' => array('tel_cell'),
|
|
|
|
'TEL;HOME;FAX' => array('tel_fax'),
|
2007-06-25 01:53:10 +02:00
|
|
|
'TEL;HOME;VOICE' => array('tel_home'),
|
SyncML patches from patrick.bihan-faou-AT-mindstep.com (without
logout+mbstring stuff), small modification to use the already exiting
methodes to generate full name and fileas)
The code is commited to trunk only at the moment to allow testing of it.
If everything goes well, we intend to commit it to 1.4 branch too.
Here's the original description of the patch by Patrick:
- handles the default config for current versions of funambol (i.e. the
scard/stask/snote/scal locations)
- tries to be a bit smarter on how the data content should be encoded
based on what the client specified (sif+base64/vcard, / fragmented or
not, etc.)
- workaround a bug in some versions of funambol, where funambol does not
specify the proper sif type for the type of requested data
- imported patch #117 from egw's tracker
- make sure that the logs generated by the horde code go to stderr so
they can be view in the webserver's logs
- as much as possible reduce code duplication. For example, the
categories are handled in the parent classes for both the SIF avn VCAL
formats for each type of data (addressbook,infolog,calendar).
- make sure the code can handle more than one categories in each
direction
- treat the 'sony ericsson' vendor string just like 'sonyericsson', the
newer phones apparently have a space in the vendor string... (this
touches some files in the icalsrv as well)
- handle notes: these should now work with everything (funambol or
other)
- remove more code duplication: the syncml "api" for the various data
types (calendar, contacts, infolog) is now common for both the vcard and
sif data formats (cf the files that need to be removed)
- handle the "privat" filter in infolog like the "private" filter (some
part of the code use the name without the trailing e)
- imported patch # 267 from egw's tracker
2007-09-29 12:29:48 +02:00
|
|
|
'TEL;PAGER' => array('tel_pager'),
|
2007-06-25 01:53:10 +02:00
|
|
|
'TEL;WORK;VOICE' => array('tel_work'),
|
SyncML patches from patrick.bihan-faou-AT-mindstep.com (without
logout+mbstring stuff), small modification to use the already exiting
methodes to generate full name and fileas)
The code is commited to trunk only at the moment to allow testing of it.
If everything goes well, we intend to commit it to 1.4 branch too.
Here's the original description of the patch by Patrick:
- handles the default config for current versions of funambol (i.e. the
scard/stask/snote/scal locations)
- tries to be a bit smarter on how the data content should be encoded
based on what the client specified (sif+base64/vcard, / fragmented or
not, etc.)
- workaround a bug in some versions of funambol, where funambol does not
specify the proper sif type for the type of requested data
- imported patch #117 from egw's tracker
- make sure that the logs generated by the horde code go to stderr so
they can be view in the webserver's logs
- as much as possible reduce code duplication. For example, the
categories are handled in the parent classes for both the SIF avn VCAL
formats for each type of data (addressbook,infolog,calendar).
- make sure the code can handle more than one categories in each
direction
- treat the 'sony ericsson' vendor string just like 'sonyericsson', the
newer phones apparently have a space in the vendor string... (this
touches some files in the icalsrv as well)
- handle notes: these should now work with everything (funambol or
other)
- remove more code duplication: the syncml "api" for the various data
types (calendar, contacts, infolog) is now common for both the vcard and
sif data formats (cf the files that need to be removed)
- handle the "privat" filter in infolog like the "private" filter (some
part of the code use the name without the trailing e)
- imported patch # 267 from egw's tracker
2007-09-29 12:29:48 +02:00
|
|
|
'TITLE' => array('title'),
|
|
|
|
'URL;WORK' => array('url'),
|
|
|
|
'URL' => array('url_home'),
|
2007-06-25 01:53:10 +02:00
|
|
|
);
|
2008-04-16 18:05:48 +02:00
|
|
|
|
|
|
|
$defaultFields[7] = array( // SyncEvolution
|
2007-12-03 11:21:50 +01:00
|
|
|
'N'=> array('n_family','n_given','n_middle','n_prefix','n_suffix'),
|
|
|
|
'TITLE' => array('title'),
|
|
|
|
'ROLE' => array('role'),
|
|
|
|
'ORG' => array('org_name','org_unit','room'),
|
|
|
|
'ADR;WORK' => array('','adr_one_street2','adr_one_street','adr_one_locality','adr_one_region', 'adr_one_postalcode','adr_one_countryname'),
|
|
|
|
'ADR;HOME' => array('','adr_two_street2','adr_two_street','adr_two_locality','adr_two_region', 'adr_two_postalcode','adr_two_countryname'),
|
|
|
|
'TEL;WORK;VOICE' => array('tel_work'),
|
|
|
|
'TEL;HOME;VOICE' => array('tel_home'),
|
|
|
|
'TEL;CELL;WORK' => array('tel_cell'),
|
|
|
|
'TEL;FAX;WORK' => array('tel_fax'),
|
|
|
|
'TEL;FAX;HOME' => array('tel_fax_home'),
|
|
|
|
'TEL;PAGER;WORK' => array('tel_pager'),
|
|
|
|
'TEL;CAR' => array('tel_car'),
|
|
|
|
'TEL;VOICE' => array('tel_other'),
|
|
|
|
'EMAIL;INTERNET;WORK' => array('email'),
|
|
|
|
'EMAIL;INTERNET;HOME' => array('email_home'),
|
|
|
|
'URL;WORK' => array('url'),
|
|
|
|
'BDAY' => array('bday'),
|
|
|
|
'CATEGORIES' => array('cat_id'),
|
|
|
|
'NOTE' => array('note'),
|
|
|
|
'X-EVOLUTION-ASSISTANT' => array('assistent'),
|
2008-04-16 06:37:05 +02:00
|
|
|
'PHOTO' => array('jpegphoto'),
|
2009-07-15 21:44:09 +02:00
|
|
|
'UID' => array('uid'),
|
2007-12-03 11:21:50 +01:00
|
|
|
);
|
|
|
|
|
2008-04-16 18:05:48 +02:00
|
|
|
$defaultFields[8] = array_merge($defaultFields[1],array( // KDE Addressbook, only changes from all=1
|
|
|
|
'ORG' => array('org_name'),
|
|
|
|
'X-KADDRESSBOOK-X-Department' => array('org_unit'),
|
|
|
|
));
|
SyncML patches from patrick.bihan-faou-AT-mindstep.com (without
logout+mbstring stuff), small modification to use the already exiting
methodes to generate full name and fileas)
The code is commited to trunk only at the moment to allow testing of it.
If everything goes well, we intend to commit it to 1.4 branch too.
Here's the original description of the patch by Patrick:
- handles the default config for current versions of funambol (i.e. the
scard/stask/snote/scal locations)
- tries to be a bit smarter on how the data content should be encoded
based on what the client specified (sif+base64/vcard, / fragmented or
not, etc.)
- workaround a bug in some versions of funambol, where funambol does not
specify the proper sif type for the type of requested data
- imported patch #117 from egw's tracker
- make sure that the logs generated by the horde code go to stderr so
they can be view in the webserver's logs
- as much as possible reduce code duplication. For example, the
categories are handled in the parent classes for both the SIF avn VCAL
formats for each type of data (addressbook,infolog,calendar).
- make sure the code can handle more than one categories in each
direction
- treat the 'sony ericsson' vendor string just like 'sonyericsson', the
newer phones apparently have a space in the vendor string... (this
touches some files in the icalsrv as well)
- handle notes: these should now work with everything (funambol or
other)
- remove more code duplication: the syncml "api" for the various data
types (calendar, contacts, infolog) is now common for both the vcard and
sif data formats (cf the files that need to be removed)
- handle the "privat" filter in infolog like the "private" filter (some
part of the code use the name without the trailing e)
- imported patch # 267 from egw's tracker
2007-09-29 12:29:48 +02:00
|
|
|
|
2008-09-03 19:09:17 +02:00
|
|
|
$defaultFields[9] = array( // nokia e90
|
2008-11-03 08:44:02 +01:00
|
|
|
'ADR;WORK' => array('','adr_one_street2','adr_one_street','adr_one_locality','adr_one_region',
|
2008-09-03 19:09:17 +02:00
|
|
|
'adr_one_postalcode','adr_one_countryname'),
|
2008-11-03 08:44:02 +01:00
|
|
|
'ADR;HOME' => array('','adr_two_street2','adr_two_street','adr_two_locality','adr_two_region',
|
2008-09-03 19:09:17 +02:00
|
|
|
'adr_two_postalcode','adr_two_countryname'),
|
2009-07-15 21:44:09 +02:00
|
|
|
'BDAY;TYPE=BASIC' => array('bday'),
|
2008-09-03 19:09:17 +02:00
|
|
|
'X-CLASS' => array('private'),
|
|
|
|
'EMAIL;INTERNET;WORK' => array('email'),
|
|
|
|
'EMAIL;INTERNET;HOME' => array('email_home'),
|
|
|
|
'N' => array('n_family','n_given','n_middle','n_prefix','n_suffix'),
|
|
|
|
'FN' => array('n_fn'),
|
|
|
|
'NOTE' => array('note'),
|
|
|
|
'ORG' => array('org_name','org_unit'),
|
|
|
|
'TEL;CELL;WORK' => array('tel_cell'),
|
|
|
|
'TEL;CELL;HOME' => array('tel_cell_private'),
|
|
|
|
'TEL;FAX;WORK' => array('tel_fax'),
|
|
|
|
'TEL;FAX;HOME' => array('tel_fax_home'),
|
|
|
|
'TEL;CAR' => array('tel_car'),
|
|
|
|
'TEL;PAGER;WORK' => array('tel_pager'),
|
|
|
|
'TEL;VOICE;WORK' => array('tel_work'),
|
2008-10-10 08:28:58 +02:00
|
|
|
'TEL;VOICE;HOME' => array('tel_home'),
|
2008-11-03 08:44:02 +01:00
|
|
|
'TITLE' => array('title'),
|
2008-09-03 19:09:17 +02:00
|
|
|
'URL;WORK' => array('url'),
|
|
|
|
'URL;HOME' => array('url_home'),
|
|
|
|
'X-ASSISTANT' => array('assistent'),
|
|
|
|
'X-ASSISTANT-TEL' => array('tel_assistent'),
|
|
|
|
'PHOTO' => array('jpegphoto'),
|
2009-07-15 21:44:09 +02:00
|
|
|
'UID' => array('uid'),
|
2008-09-03 19:09:17 +02:00
|
|
|
);
|
2008-10-10 08:28:58 +02:00
|
|
|
|
2008-09-03 19:09:17 +02:00
|
|
|
$defaultFields[10] = array( // nokia 9300
|
|
|
|
'ADR;WORK' => array('','','adr_one_street','adr_one_locality','adr_one_region',
|
|
|
|
'adr_one_postalcode','adr_one_countryname'),
|
|
|
|
'ADR;HOME' => array('','','adr_two_street','adr_two_locality','adr_two_region',
|
|
|
|
'adr_two_postalcode','adr_two_countryname'),
|
|
|
|
'BDAY' => array('bday'),
|
|
|
|
'EMAIL;INTERNET' => array('email'),
|
|
|
|
'N' => array('n_family','n_given','n_middle','n_prefix','n_suffix'),
|
|
|
|
'FN' => array('n_fn'),
|
|
|
|
'NOTE' => array('note'),
|
|
|
|
'ORG' => array('org_name','org_unit'),
|
|
|
|
'TEL;CELL' => array('tel_cell'),
|
|
|
|
'TEL;WORK;FAX' => array('tel_fax'),
|
|
|
|
'TEL;FAX' => array('tel_fax_home'),
|
|
|
|
'TEL;PAGER' => array('tel_pager'),
|
|
|
|
'TEL;WORK;VOICE' => array('tel_work'),
|
2008-10-10 08:28:58 +02:00
|
|
|
'TEL;HOME;VOICE' => array('tel_home'),
|
2008-09-03 19:09:17 +02:00
|
|
|
'TITLE' => array('contact_role'),
|
|
|
|
'URL' => array('url'),
|
2009-07-15 21:44:09 +02:00
|
|
|
'UID' => array('uid'),
|
2008-09-03 19:09:17 +02:00
|
|
|
);
|
|
|
|
|
2009-07-15 21:44:09 +02:00
|
|
|
$defaultFields[11] = array( // funambol: iphone, blackberry, wm pocket pc
|
2008-09-03 19:09:17 +02:00
|
|
|
'ADR;WORK' => array('','','adr_one_street','adr_one_locality','adr_one_region',
|
|
|
|
'adr_one_postalcode','adr_one_countryname'),
|
|
|
|
'ADR;HOME' => array('','','adr_two_street','adr_two_locality','adr_two_region',
|
|
|
|
'adr_two_postalcode','adr_two_countryname'),
|
2009-07-15 21:44:09 +02:00
|
|
|
'BDAY' => array('bday'),
|
|
|
|
'CATEGORIES' => array('cat_id'),
|
2008-09-03 19:09:17 +02:00
|
|
|
'EMAIL;INTERNET;WORK' => array('email'),
|
|
|
|
'EMAIL;INTERNET;HOME' => array('email_home'),
|
|
|
|
'N' => array('n_family','n_given','n_middle','n_prefix','n_suffix'),
|
2009-07-15 21:44:09 +02:00
|
|
|
'FN' => array('n_fn'),
|
2008-09-03 19:09:17 +02:00
|
|
|
'NOTE' => array('note'),
|
|
|
|
'ORG' => array('org_name','org_unit'),
|
|
|
|
'TEL;CELL' => array('tel_cell'),
|
2009-07-15 21:44:09 +02:00
|
|
|
'TEL;FAX;HOME' => array('tel_fax_home'),
|
|
|
|
'TEL;FAX;WORK' => array('tel_fax'),
|
2008-09-03 19:09:17 +02:00
|
|
|
'TEL;VOICE;HOME' => array('tel_home'),
|
|
|
|
'TEL;VOICE;WORK' => array('tel_work'),
|
|
|
|
'TEL;PAGER' => array('tel_pager'),
|
2009-07-15 21:44:09 +02:00
|
|
|
'TEL;CAR' => array('tel_car'),
|
2008-09-03 19:09:17 +02:00
|
|
|
'TITLE' => array('title'),
|
|
|
|
'URL;WORK' => array('url'),
|
2009-07-15 21:44:09 +02:00
|
|
|
'URL;HOME' => array('url_home'),
|
2008-09-03 19:09:17 +02:00
|
|
|
'PHOTO' => array('jpegphoto'),
|
2009-07-15 21:44:09 +02:00
|
|
|
'UID' => array('uid'),
|
|
|
|
);
|
|
|
|
|
|
|
|
$defaultFields[12] = array( // Synthesis 4 iPhone
|
|
|
|
'ADR;WORK' => array('','','adr_one_street','adr_one_locality','adr_one_region',
|
|
|
|
'adr_one_postalcode','adr_one_countryname'),
|
|
|
|
'ADR;HOME' => array('','','adr_two_street','adr_two_locality','adr_two_region',
|
|
|
|
'adr_two_postalcode','adr_two_countryname'),
|
|
|
|
'BDAY' => array('bday'),
|
|
|
|
'CATEGORIES' => array('cat_id'),
|
|
|
|
'EMAIL;WORK;INTERNET' => array('email'),
|
|
|
|
'EMAIL;HOME;INTERNET' => array('email_home'),
|
|
|
|
'N' => array('n_family','n_given','n_middle','n_prefix','n_suffix'),
|
|
|
|
'FN' => array('n_fn'),
|
|
|
|
'NOTE' => array('note'),
|
|
|
|
'ORG' => array('org_name','org_unit'),
|
|
|
|
'TEL;VOICE;CELL' => array('tel_cell'),
|
|
|
|
'TEL;WORK;FAX' => array('tel_fax'),
|
|
|
|
'TEL;HOME;FAX' => array('tel_fax_home'),
|
|
|
|
'TEL;WORK;VOICE' => array('tel_work'),
|
|
|
|
'TEL;HOME;VOICE' => array('tel_home'),
|
|
|
|
'TEL;PAGER' => array('tel_pager'),
|
|
|
|
'TEL;X-CustomLabel-car' => array('tel_car'),
|
|
|
|
'TITLE' => array('title'),
|
|
|
|
'URL;WORK' => array('url'),
|
|
|
|
'ROLE' => array('role'),
|
|
|
|
'URL;HOME' => array('url_home'),
|
|
|
|
'PHOTO' => array('jpegphoto'),
|
|
|
|
'UID' => array('uid'),
|
|
|
|
);
|
|
|
|
|
|
|
|
$defaultFields[13] = array( // sonyericsson
|
|
|
|
'ADR;WORK' => array('','','adr_one_street','adr_one_locality','adr_one_region',
|
|
|
|
'adr_one_postalcode','adr_one_countryname'),
|
|
|
|
'ADR;HOME' => array('','','adr_two_street','adr_two_locality','adr_two_region',
|
|
|
|
'adr_two_postalcode','adr_two_countryname'),
|
|
|
|
'BDAY' => array('bday'),
|
|
|
|
'EMAIL;WORK' => array('email'),
|
|
|
|
'EMAIL;HOME' => array('email_home'),
|
|
|
|
'N' => array('n_family','n_given','n_middle','n_prefix','n_suffix'),
|
|
|
|
'NOTE' => array('note'),
|
|
|
|
'ORG' => array('org_name',''),
|
|
|
|
'TEL;CELL;WORK' => array('tel_cell'),
|
|
|
|
'TEL;CELL;HOME' => array('tel_cell_private'),
|
|
|
|
'TEL;FAX' => array('tel_fax'),
|
|
|
|
'TEL;HOME' => array('tel_home'),
|
|
|
|
'TEL;WORK' => array('tel_work'),
|
|
|
|
'TITLE' => array('title'),
|
|
|
|
'URL' => array('url'),
|
|
|
|
'UID' => array('uid'),
|
|
|
|
//'PHOTO' => array('jpegphoto'),
|
2008-09-03 19:09:17 +02:00
|
|
|
);
|
|
|
|
|
2006-08-15 14:46:26 +02:00
|
|
|
//error_log("Client: $_productManufacturer $_productName");
|
2009-07-15 21:44:09 +02:00
|
|
|
switch ($this->productManufacturer)
|
2006-07-09 01:02:30 +02:00
|
|
|
{
|
2007-06-25 01:53:10 +02:00
|
|
|
case 'funambol':
|
2008-09-03 19:09:17 +02:00
|
|
|
case 'funambol inc.':
|
2008-05-10 14:02:49 +02:00
|
|
|
switch ($this->productName)
|
2007-06-25 01:53:10 +02:00
|
|
|
{
|
SyncML patches from patrick.bihan-faou-AT-mindstep.com (without
logout+mbstring stuff), small modification to use the already exiting
methodes to generate full name and fileas)
The code is commited to trunk only at the moment to allow testing of it.
If everything goes well, we intend to commit it to 1.4 branch too.
Here's the original description of the patch by Patrick:
- handles the default config for current versions of funambol (i.e. the
scard/stask/snote/scal locations)
- tries to be a bit smarter on how the data content should be encoded
based on what the client specified (sif+base64/vcard, / fragmented or
not, etc.)
- workaround a bug in some versions of funambol, where funambol does not
specify the proper sif type for the type of requested data
- imported patch #117 from egw's tracker
- make sure that the logs generated by the horde code go to stderr so
they can be view in the webserver's logs
- as much as possible reduce code duplication. For example, the
categories are handled in the parent classes for both the SIF avn VCAL
formats for each type of data (addressbook,infolog,calendar).
- make sure the code can handle more than one categories in each
direction
- treat the 'sony ericsson' vendor string just like 'sonyericsson', the
newer phones apparently have a space in the vendor string... (this
touches some files in the icalsrv as well)
- handle notes: these should now work with everything (funambol or
other)
- remove more code duplication: the syncml "api" for the various data
types (calendar, contacts, infolog) is now common for both the vcard and
sif data formats (cf the files that need to be removed)
- handle the "privat" filter in infolog like the "private" filter (some
part of the code use the name without the trailing e)
- imported patch # 267 from egw's tracker
2007-09-29 12:29:48 +02:00
|
|
|
case 'thunderbird':
|
2009-07-15 21:44:09 +02:00
|
|
|
case 'mozilla plugin':
|
SyncML patches from patrick.bihan-faou-AT-mindstep.com (without
logout+mbstring stuff), small modification to use the already exiting
methodes to generate full name and fileas)
The code is commited to trunk only at the moment to allow testing of it.
If everything goes well, we intend to commit it to 1.4 branch too.
Here's the original description of the patch by Patrick:
- handles the default config for current versions of funambol (i.e. the
scard/stask/snote/scal locations)
- tries to be a bit smarter on how the data content should be encoded
based on what the client specified (sif+base64/vcard, / fragmented or
not, etc.)
- workaround a bug in some versions of funambol, where funambol does not
specify the proper sif type for the type of requested data
- imported patch #117 from egw's tracker
- make sure that the logs generated by the horde code go to stderr so
they can be view in the webserver's logs
- as much as possible reduce code duplication. For example, the
categories are handled in the parent classes for both the SIF avn VCAL
formats for each type of data (addressbook,infolog,calendar).
- make sure the code can handle more than one categories in each
direction
- treat the 'sony ericsson' vendor string just like 'sonyericsson', the
newer phones apparently have a space in the vendor string... (this
touches some files in the icalsrv as well)
- handle notes: these should now work with everything (funambol or
other)
- remove more code duplication: the syncml "api" for the various data
types (calendar, contacts, infolog) is now common for both the vcard and
sif data formats (cf the files that need to be removed)
- handle the "privat" filter in infolog like the "private" filter (some
part of the code use the name without the trailing e)
- imported patch # 267 from egw's tracker
2007-09-29 12:29:48 +02:00
|
|
|
$this->supportedFields = $defaultFields[6];
|
|
|
|
break;
|
|
|
|
|
2009-07-15 21:44:09 +02:00
|
|
|
case 'pocket pc plug-in':
|
|
|
|
case 'blackberry plug-in':
|
2008-09-03 19:09:17 +02:00
|
|
|
case 'iphone':
|
|
|
|
$this->supportedFields = $defaultFields[11];
|
|
|
|
break;
|
|
|
|
|
2007-06-25 01:53:10 +02:00
|
|
|
default:
|
2009-07-15 21:44:09 +02:00
|
|
|
error_log("Funambol product '$this->productName', assuming same as thunderbird");
|
2007-06-25 01:53:10 +02:00
|
|
|
$this->supportedFields = $defaultFields[6];
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
2006-07-09 01:02:30 +02:00
|
|
|
case 'nexthaus corporation':
|
2008-03-27 08:50:35 +01:00
|
|
|
case 'nexthaus corp':
|
2009-07-15 21:44:09 +02:00
|
|
|
switch ($this->productName)
|
2006-03-21 14:19:38 +01:00
|
|
|
{
|
2006-07-09 01:02:30 +02:00
|
|
|
case 'syncje outlook edition':
|
SyncML patches from patrick.bihan-faou-AT-mindstep.com (without
logout+mbstring stuff), small modification to use the already exiting
methodes to generate full name and fileas)
The code is commited to trunk only at the moment to allow testing of it.
If everything goes well, we intend to commit it to 1.4 branch too.
Here's the original description of the patch by Patrick:
- handles the default config for current versions of funambol (i.e. the
scard/stask/snote/scal locations)
- tries to be a bit smarter on how the data content should be encoded
based on what the client specified (sif+base64/vcard, / fragmented or
not, etc.)
- workaround a bug in some versions of funambol, where funambol does not
specify the proper sif type for the type of requested data
- imported patch #117 from egw's tracker
- make sure that the logs generated by the horde code go to stderr so
they can be view in the webserver's logs
- as much as possible reduce code duplication. For example, the
categories are handled in the parent classes for both the SIF avn VCAL
formats for each type of data (addressbook,infolog,calendar).
- make sure the code can handle more than one categories in each
direction
- treat the 'sony ericsson' vendor string just like 'sonyericsson', the
newer phones apparently have a space in the vendor string... (this
touches some files in the icalsrv as well)
- handle notes: these should now work with everything (funambol or
other)
- remove more code duplication: the syncml "api" for the various data
types (calendar, contacts, infolog) is now common for both the vcard and
sif data formats (cf the files that need to be removed)
- handle the "privat" filter in infolog like the "private" filter (some
part of the code use the name without the trailing e)
- imported patch # 267 from egw's tracker
2007-09-29 12:29:48 +02:00
|
|
|
$this->supportedFields = $defaultFields[1];
|
|
|
|
break;
|
2006-07-09 01:02:30 +02:00
|
|
|
default:
|
2009-07-15 21:44:09 +02:00
|
|
|
error_log("Nexthaus product '$this->productName', assuming same as 'syncje outlook'");
|
2006-07-09 01:02:30 +02:00
|
|
|
$this->supportedFields = $defaultFields[1];
|
|
|
|
break;
|
2006-03-21 14:19:38 +01:00
|
|
|
}
|
2006-07-09 01:02:30 +02:00
|
|
|
break;
|
|
|
|
|
2006-07-23 20:10:37 +02:00
|
|
|
case 'nokia':
|
2009-07-15 21:44:09 +02:00
|
|
|
switch ($this->productName)
|
2006-07-23 20:10:37 +02:00
|
|
|
{
|
2006-08-15 14:46:26 +02:00
|
|
|
case 'e61':
|
|
|
|
$this->supportedFields = $defaultFields[5];
|
|
|
|
break;
|
2008-09-03 19:09:17 +02:00
|
|
|
case 'e51':
|
|
|
|
case 'e90':
|
2008-11-03 08:44:02 +01:00
|
|
|
case 'e71':
|
2008-09-03 19:09:17 +02:00
|
|
|
$this->supportedFields = $defaultFields[9];
|
|
|
|
break;
|
|
|
|
case '9300':
|
|
|
|
$this->supportedFields = $defaultFields[10];
|
|
|
|
break;
|
2006-07-23 20:10:37 +02:00
|
|
|
case '6600':
|
SyncML patches from patrick.bihan-faou-AT-mindstep.com (without
logout+mbstring stuff), small modification to use the already exiting
methodes to generate full name and fileas)
The code is commited to trunk only at the moment to allow testing of it.
If everything goes well, we intend to commit it to 1.4 branch too.
Here's the original description of the patch by Patrick:
- handles the default config for current versions of funambol (i.e. the
scard/stask/snote/scal locations)
- tries to be a bit smarter on how the data content should be encoded
based on what the client specified (sif+base64/vcard, / fragmented or
not, etc.)
- workaround a bug in some versions of funambol, where funambol does not
specify the proper sif type for the type of requested data
- imported patch #117 from egw's tracker
- make sure that the logs generated by the horde code go to stderr so
they can be view in the webserver's logs
- as much as possible reduce code duplication. For example, the
categories are handled in the parent classes for both the SIF avn VCAL
formats for each type of data (addressbook,infolog,calendar).
- make sure the code can handle more than one categories in each
direction
- treat the 'sony ericsson' vendor string just like 'sonyericsson', the
newer phones apparently have a space in the vendor string... (this
touches some files in the icalsrv as well)
- handle notes: these should now work with everything (funambol or
other)
- remove more code duplication: the syncml "api" for the various data
types (calendar, contacts, infolog) is now common for both the vcard and
sif data formats (cf the files that need to be removed)
- handle the "privat" filter in infolog like the "private" filter (some
part of the code use the name without the trailing e)
- imported patch # 267 from egw's tracker
2007-09-29 12:29:48 +02:00
|
|
|
$this->supportedFields = $defaultFields[4];
|
|
|
|
break;
|
2009-07-15 21:44:09 +02:00
|
|
|
case 'nokia 6131':
|
|
|
|
$this->supportedFields = $defaultFields[4];
|
|
|
|
break;
|
2006-07-23 20:10:37 +02:00
|
|
|
default:
|
2009-07-15 21:44:09 +02:00
|
|
|
error_log("Unknown Nokia phone 'this->$productName', assuming same as '6600'");
|
2006-07-23 20:10:37 +02:00
|
|
|
$this->supportedFields = $defaultFields[4];
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
break;
|
2008-04-16 06:37:05 +02:00
|
|
|
|
2006-07-23 20:10:37 +02:00
|
|
|
|
2006-07-09 01:02:30 +02:00
|
|
|
// multisync does not provide anymore information then the manufacturer
|
|
|
|
// we suppose multisync with evolution
|
|
|
|
case 'the multisync project':
|
2009-07-15 21:44:09 +02:00
|
|
|
switch ($this->productName)
|
2006-03-21 14:19:38 +01:00
|
|
|
{
|
2006-07-09 01:02:30 +02:00
|
|
|
default:
|
|
|
|
$this->supportedFields = $defaultFields[0];
|
|
|
|
break;
|
2006-03-21 14:19:38 +01:00
|
|
|
}
|
2006-07-09 01:02:30 +02:00
|
|
|
break;
|
|
|
|
|
|
|
|
case 'siemens':
|
2009-07-15 21:44:09 +02:00
|
|
|
switch ($this->productName)
|
2006-03-21 14:19:38 +01:00
|
|
|
{
|
2006-07-09 01:02:30 +02:00
|
|
|
case 'sx1':
|
SyncML patches from patrick.bihan-faou-AT-mindstep.com (without
logout+mbstring stuff), small modification to use the already exiting
methodes to generate full name and fileas)
The code is commited to trunk only at the moment to allow testing of it.
If everything goes well, we intend to commit it to 1.4 branch too.
Here's the original description of the patch by Patrick:
- handles the default config for current versions of funambol (i.e. the
scard/stask/snote/scal locations)
- tries to be a bit smarter on how the data content should be encoded
based on what the client specified (sif+base64/vcard, / fragmented or
not, etc.)
- workaround a bug in some versions of funambol, where funambol does not
specify the proper sif type for the type of requested data
- imported patch #117 from egw's tracker
- make sure that the logs generated by the horde code go to stderr so
they can be view in the webserver's logs
- as much as possible reduce code duplication. For example, the
categories are handled in the parent classes for both the SIF avn VCAL
formats for each type of data (addressbook,infolog,calendar).
- make sure the code can handle more than one categories in each
direction
- treat the 'sony ericsson' vendor string just like 'sonyericsson', the
newer phones apparently have a space in the vendor string... (this
touches some files in the icalsrv as well)
- handle notes: these should now work with everything (funambol or
other)
- remove more code duplication: the syncml "api" for the various data
types (calendar, contacts, infolog) is now common for both the vcard and
sif data formats (cf the files that need to be removed)
- handle the "privat" filter in infolog like the "private" filter (some
part of the code use the name without the trailing e)
- imported patch # 267 from egw's tracker
2007-09-29 12:29:48 +02:00
|
|
|
$this->supportedFields = $defaultFields[3];
|
|
|
|
break;
|
2006-07-09 01:02:30 +02:00
|
|
|
default:
|
2009-07-15 21:44:09 +02:00
|
|
|
error_log("Unknown Siemens phone '$this->productName', assuming same as 'sx1'");
|
2006-07-09 01:02:30 +02:00
|
|
|
$this->supportedFields = $defaultFields[3];
|
|
|
|
break;
|
2006-03-21 14:19:38 +01:00
|
|
|
}
|
2006-07-09 01:02:30 +02:00
|
|
|
break;
|
2008-04-16 06:37:05 +02:00
|
|
|
|
2006-07-09 01:02:30 +02:00
|
|
|
case 'sonyericsson':
|
SyncML patches from patrick.bihan-faou-AT-mindstep.com (without
logout+mbstring stuff), small modification to use the already exiting
methodes to generate full name and fileas)
The code is commited to trunk only at the moment to allow testing of it.
If everything goes well, we intend to commit it to 1.4 branch too.
Here's the original description of the patch by Patrick:
- handles the default config for current versions of funambol (i.e. the
scard/stask/snote/scal locations)
- tries to be a bit smarter on how the data content should be encoded
based on what the client specified (sif+base64/vcard, / fragmented or
not, etc.)
- workaround a bug in some versions of funambol, where funambol does not
specify the proper sif type for the type of requested data
- imported patch #117 from egw's tracker
- make sure that the logs generated by the horde code go to stderr so
they can be view in the webserver's logs
- as much as possible reduce code duplication. For example, the
categories are handled in the parent classes for both the SIF avn VCAL
formats for each type of data (addressbook,infolog,calendar).
- make sure the code can handle more than one categories in each
direction
- treat the 'sony ericsson' vendor string just like 'sonyericsson', the
newer phones apparently have a space in the vendor string... (this
touches some files in the icalsrv as well)
- handle notes: these should now work with everything (funambol or
other)
- remove more code duplication: the syncml "api" for the various data
types (calendar, contacts, infolog) is now common for both the vcard and
sif data formats (cf the files that need to be removed)
- handle the "privat" filter in infolog like the "private" filter (some
part of the code use the name without the trailing e)
- imported patch # 267 from egw's tracker
2007-09-29 12:29:48 +02:00
|
|
|
case 'sony ericsson':
|
2009-07-15 21:44:09 +02:00
|
|
|
switch ($this->productName)
|
2006-03-21 14:19:38 +01:00
|
|
|
{
|
2009-07-15 21:44:09 +02:00
|
|
|
case 'p910i':
|
2006-07-09 01:02:30 +02:00
|
|
|
case 'd750i':
|
SyncML patches from patrick.bihan-faou-AT-mindstep.com (without
logout+mbstring stuff), small modification to use the already exiting
methodes to generate full name and fileas)
The code is commited to trunk only at the moment to allow testing of it.
If everything goes well, we intend to commit it to 1.4 branch too.
Here's the original description of the patch by Patrick:
- handles the default config for current versions of funambol (i.e. the
scard/stask/snote/scal locations)
- tries to be a bit smarter on how the data content should be encoded
based on what the client specified (sif+base64/vcard, / fragmented or
not, etc.)
- workaround a bug in some versions of funambol, where funambol does not
specify the proper sif type for the type of requested data
- imported patch #117 from egw's tracker
- make sure that the logs generated by the horde code go to stderr so
they can be view in the webserver's logs
- as much as possible reduce code duplication. For example, the
categories are handled in the parent classes for both the SIF avn VCAL
formats for each type of data (addressbook,infolog,calendar).
- make sure the code can handle more than one categories in each
direction
- treat the 'sony ericsson' vendor string just like 'sonyericsson', the
newer phones apparently have a space in the vendor string... (this
touches some files in the icalsrv as well)
- handle notes: these should now work with everything (funambol or
other)
- remove more code duplication: the syncml "api" for the various data
types (calendar, contacts, infolog) is now common for both the vcard and
sif data formats (cf the files that need to be removed)
- handle the "privat" filter in infolog like the "private" filter (some
part of the code use the name without the trailing e)
- imported patch # 267 from egw's tracker
2007-09-29 12:29:48 +02:00
|
|
|
$this->supportedFields = $defaultFields[2];
|
|
|
|
break;
|
2009-07-15 21:44:09 +02:00
|
|
|
case 'w760i':
|
|
|
|
case 'w890i':
|
|
|
|
$this->supportedFields = $defaultFields[13];
|
|
|
|
break;
|
2006-07-09 01:02:30 +02:00
|
|
|
default:
|
2009-07-15 21:44:09 +02:00
|
|
|
if ($this->productName[0] == 'w')
|
|
|
|
{
|
|
|
|
error_log("unknown Sony Ericsson phone '$this->productName', assuming same as 'W760i'");
|
|
|
|
$this->supportedFields = $defaultFields[13];
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
error_log("unknown Sony Ericsson phone '$this->productName', assuming same as 'D750i'");
|
|
|
|
$this->supportedFields = $defaultFields[2];
|
|
|
|
}
|
2006-07-09 01:02:30 +02:00
|
|
|
break;
|
2006-03-21 14:19:38 +01:00
|
|
|
}
|
2006-07-09 01:02:30 +02:00
|
|
|
break;
|
2008-04-16 06:37:05 +02:00
|
|
|
|
2006-07-09 01:02:30 +02:00
|
|
|
case 'synthesis ag':
|
2009-07-15 21:44:09 +02:00
|
|
|
switch ($this->productName)
|
2006-03-21 14:19:38 +01:00
|
|
|
{
|
2007-01-23 18:34:24 +01:00
|
|
|
case 'sysync client pocketpc pro':
|
2007-11-10 09:07:44 +01:00
|
|
|
case 'sysync client pocketpc std':
|
2007-01-23 18:34:24 +01:00
|
|
|
$this->supportedFields = $defaultFields[1];
|
2009-07-15 21:44:09 +02:00
|
|
|
$this->supportedFields['TEL;CELL;CAR;VOICE'] = array('tel_car');
|
|
|
|
break;
|
|
|
|
case 'sysync client iphone contacts':
|
|
|
|
case 'sysync client iphone contacts+todoz':
|
|
|
|
$this->supportedFields = $defaultFields[12];
|
2007-01-23 18:34:24 +01:00
|
|
|
break;
|
2006-07-09 01:02:30 +02:00
|
|
|
default:
|
2009-07-15 21:44:09 +02:00
|
|
|
error_log("Synthesis connector '$this->productName', using default fields");
|
2006-07-09 01:02:30 +02:00
|
|
|
$this->supportedFields = $defaultFields[0];
|
|
|
|
break;
|
2006-03-21 14:19:38 +01:00
|
|
|
}
|
2006-07-09 01:02:30 +02:00
|
|
|
break;
|
2008-04-16 06:37:05 +02:00
|
|
|
|
2007-12-03 11:21:50 +01:00
|
|
|
case 'patrick ohly': // SyncEvolution
|
|
|
|
$this->supportedFields = $defaultFields[7];
|
|
|
|
break;
|
|
|
|
|
2006-07-09 01:02:30 +02:00
|
|
|
case 'file': // used outside of SyncML, eg. by the calendar itself ==> all possible fields
|
|
|
|
$this->supportedFields = $defaultFields[1];
|
|
|
|
break;
|
2009-07-15 21:44:09 +02:00
|
|
|
|
|
|
|
case 'groupdav': // all GroupDAV access goes through here
|
|
|
|
switch ($this->productName)
|
2008-11-03 10:36:20 +01:00
|
|
|
{
|
2009-04-02 14:31:44 +02:00
|
|
|
case 'kde': // KDE Addressbook
|
|
|
|
$this->supportedFields = $defaultFields[1];
|
2009-06-29 21:03:43 +02:00
|
|
|
error_log(__FILE__ . ":groupdav kde 1");
|
2008-11-03 10:36:20 +01:00
|
|
|
break;
|
|
|
|
default:
|
|
|
|
$this->supportedFields = $defaultFields[1];
|
|
|
|
}
|
2009-06-29 21:03:43 +02:00
|
|
|
break;
|
2009-07-15 21:44:09 +02:00
|
|
|
|
2006-07-09 01:02:30 +02:00
|
|
|
// the fallback for SyncML
|
|
|
|
default:
|
2009-07-15 21:44:09 +02:00
|
|
|
error_log(__FILE__ . __METHOD__ ."\nClient not found:'" . $this->productManufacturer . "' '" . $this->productName . "'");
|
2006-07-09 01:02:30 +02:00
|
|
|
$this->supportedFields = $defaultFields[0];
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
2008-04-16 06:37:05 +02:00
|
|
|
|
|
|
|
function vcardtoegw($_vcard)
|
2006-07-09 01:02:30 +02:00
|
|
|
{
|
2006-08-15 14:46:26 +02:00
|
|
|
// the horde class does the charset conversion. DO NOT CONVERT HERE.
|
2009-07-15 21:44:09 +02:00
|
|
|
// be as flexible as possible
|
|
|
|
|
|
|
|
|
|
|
|
$databaseFields = array(
|
|
|
|
'ADR;WORK' => array('','','adr_one_street','adr_one_locality','adr_one_region',
|
|
|
|
'adr_one_postalcode','adr_one_countryname'),
|
|
|
|
'ADR;HOME' => array('','','adr_two_street','adr_two_locality','adr_two_region',
|
|
|
|
'adr_two_postalcode','adr_two_countryname'),
|
|
|
|
'BDAY' => array('bday'),
|
|
|
|
'X-CLASS' => array('private'),
|
2009-07-16 21:40:02 +02:00
|
|
|
'CATEGORIES' => array('cat_id'),
|
|
|
|
'EMAIL;WORK' => array('email'),
|
|
|
|
'EMAIL;HOME' => array('email_home'),
|
|
|
|
'N' => array('n_family','n_given','n_middle',
|
2009-07-15 21:44:09 +02:00
|
|
|
'n_prefix','n_suffix'),
|
2009-07-16 21:40:02 +02:00
|
|
|
'FN' => array('n_fn'),
|
2009-07-15 21:44:09 +02:00
|
|
|
'NOTE' => array('note'),
|
|
|
|
'ORG' => array('org_name','org_unit'),
|
2009-07-16 21:40:02 +02:00
|
|
|
'TEL;CELL;WORK' => array('tel_cell'),
|
|
|
|
'TEL;CELL;HOME' => array('tel_cell_private'),
|
2009-07-15 21:44:09 +02:00
|
|
|
'TEL;CAR' => array('tel_car'),
|
|
|
|
'TEL;OTHER' => array('tel_other'),
|
|
|
|
'TEL;WORK' => array('tel_work'),
|
2009-07-16 21:40:02 +02:00
|
|
|
'TEL;FAX;WORK' => array('tel_fax'),
|
2009-07-15 21:44:09 +02:00
|
|
|
'TEL;HOME' => array('tel_home'),
|
2009-07-16 21:40:02 +02:00
|
|
|
'TEL;FAX;HOME' => array('tel_fax_home'),
|
2009-07-15 21:44:09 +02:00
|
|
|
'TEL;PAGER' => array('tel_pager'),
|
|
|
|
'TITLE' => array('title'),
|
|
|
|
'URL;WORK' => array('url'),
|
|
|
|
'URL;HOME' => array('url_home'),
|
|
|
|
'ROLE' => array('role'),
|
|
|
|
'NICKNAME' => array('label'),
|
|
|
|
'FBURL' => array('freebusy_uri'),
|
|
|
|
'PHOTO' => array('jpegphoto'),
|
2009-07-16 21:40:02 +02:00
|
|
|
'X-ASSISTANT' => array('assistent'),
|
2009-07-15 21:44:09 +02:00
|
|
|
'X-ASSISTANT-TEL' => array('tel_assistent'),
|
|
|
|
'UID' => array('uid'),
|
|
|
|
);
|
2006-07-09 01:02:30 +02:00
|
|
|
|
2009-07-15 21:44:09 +02:00
|
|
|
Horde::logMessage("vCalAddressbook vcardtoegw:\n$_vcard", __FILE__, __LINE__, PEAR_LOG_DEBUG);
|
2006-07-09 01:02:30 +02:00
|
|
|
|
|
|
|
require_once(EGW_SERVER_ROOT.'/phpgwapi/inc/horde/Horde/iCalendar.php');
|
|
|
|
|
2009-07-15 21:44:09 +02:00
|
|
|
$container = false;
|
2006-07-09 01:02:30 +02:00
|
|
|
$vCard = Horde_iCalendar::newComponent('vcard', $container);
|
2008-04-16 06:37:05 +02:00
|
|
|
|
2009-07-15 21:44:09 +02:00
|
|
|
if (!$vCard->parsevCalendar($_vcard, 'VCARD'))
|
2008-09-03 19:09:17 +02:00
|
|
|
{
|
2006-07-09 01:02:30 +02:00
|
|
|
return False;
|
|
|
|
}
|
|
|
|
$vcardValues = $vCard->getAllAttributes();
|
|
|
|
|
2009-07-15 21:44:09 +02:00
|
|
|
if (isset($GLOBALS['egw_info']['user']['preferences']['syncml']['minimum_uid_length']))
|
|
|
|
{
|
|
|
|
$minimum_uid_length = $GLOBALS['egw_info']['user']['preferences']['syncml']['minimum_uid_length'];
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
$minimum_uid_length = 8;
|
|
|
|
}
|
|
|
|
|
2006-07-09 01:02:30 +02:00
|
|
|
#print "<pre>$_vcard</pre>";
|
2006-03-21 14:19:38 +01:00
|
|
|
|
2006-07-23 20:10:37 +02:00
|
|
|
#error_log(print_r($vcardValues, true));
|
2009-07-15 21:44:09 +02:00
|
|
|
Horde::logMessage("vCalAddressbook vcardtoegw: " . print_r($vcardValues, true), __FILE__, __LINE__, PEAR_LOG_DEBUG);
|
|
|
|
|
|
|
|
$email = 0;
|
|
|
|
$tel = 1;
|
|
|
|
$cell = 1;
|
|
|
|
$url = 0;
|
|
|
|
$pref_tel = false;
|
2008-04-16 06:37:05 +02:00
|
|
|
|
2006-07-09 01:02:30 +02:00
|
|
|
foreach($vcardValues as $key => $vcardRow)
|
|
|
|
{
|
2009-07-15 21:44:09 +02:00
|
|
|
$rowName = strtoupper($vcardRow['name']);
|
|
|
|
switch ($rowName)
|
|
|
|
{
|
|
|
|
case 'EMAIL':
|
|
|
|
$email++;
|
|
|
|
break;
|
|
|
|
case 'URL':
|
|
|
|
$url++;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
if ($vcardRow['value'] == '' && implode('', $vcardRow['values']) == '')
|
|
|
|
{
|
|
|
|
unset($vcardRow);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
$rowTypes = array();
|
2008-04-16 06:37:05 +02:00
|
|
|
|
2009-07-15 21:44:09 +02:00
|
|
|
$vcardRow['uparams'] = array();
|
|
|
|
foreach ($vcardRow['params'] as $pname => $params)
|
|
|
|
{
|
|
|
|
$pname = strtoupper($pname);
|
|
|
|
$vcardRow['uparams'][$pname] = $params;
|
|
|
|
}
|
|
|
|
ksort($vcardRow['uparams']);
|
2007-10-25 08:26:50 +02:00
|
|
|
|
2009-07-15 21:44:09 +02:00
|
|
|
foreach ($vcardRow['uparams'] as $pname => $params)
|
2007-12-03 11:21:50 +01:00
|
|
|
{
|
2009-07-15 21:44:09 +02:00
|
|
|
switch ($pname)
|
2008-09-03 19:09:17 +02:00
|
|
|
{
|
2009-07-15 21:44:09 +02:00
|
|
|
case 'TYPE':
|
|
|
|
if (is_array($params))
|
|
|
|
{
|
|
|
|
$rowTypes = array();
|
|
|
|
foreach ($params as $param)
|
|
|
|
{
|
|
|
|
$rowTypes[] = strtoupper($param);
|
|
|
|
}
|
|
|
|
sort($rowTypes);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
$rowTypes[] = strtoupper($params);
|
|
|
|
}
|
|
|
|
foreach ($rowTypes as $type)
|
|
|
|
{
|
|
|
|
switch ($type)
|
|
|
|
{
|
|
|
|
case 'PAGER':
|
|
|
|
case 'FAX':
|
|
|
|
case 'VOICE':
|
|
|
|
case 'OTHER':
|
|
|
|
case 'CELL':
|
|
|
|
case 'WORK':
|
|
|
|
case 'HOME':
|
|
|
|
$rowName .= ';' . $type;
|
|
|
|
break;
|
|
|
|
case 'PREF':
|
|
|
|
if ($vcardRow['name'] == 'TEL')
|
|
|
|
{
|
|
|
|
$pref_tel = $key;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 'CAR':
|
|
|
|
case 'X-CUSTOMLABEL-CAR':
|
|
|
|
$rowName = 'TEL;CAR';
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
//case 'INTERNET':
|
|
|
|
case 'PREF':
|
|
|
|
if (strtoupper($vcardRow['name']) == 'TEL')
|
|
|
|
{
|
|
|
|
$pref_tel = $key;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 'FAX':
|
|
|
|
case 'PAGER':
|
|
|
|
case 'VOICE':
|
|
|
|
case 'OTHER':
|
|
|
|
case 'CELL':
|
|
|
|
case 'WORK':
|
|
|
|
case 'HOME':
|
|
|
|
$rowName .= ';' . $pname;
|
|
|
|
break;
|
|
|
|
case 'CAR':
|
|
|
|
case 'X-CUSTOMLABEL-CAR':
|
|
|
|
$rowName = 'TEL;CAR';
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
2008-09-03 19:09:17 +02:00
|
|
|
}
|
2009-07-15 21:44:09 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
if($rowName == 'EMAIL')
|
|
|
|
{
|
|
|
|
$rowName .= ';X-egw-Ref' . $email;
|
|
|
|
}
|
|
|
|
|
|
|
|
if(($rowName == 'TEL;CELL') ||
|
|
|
|
($rowName == 'TEL;CELL;VOICE'))
|
|
|
|
{
|
|
|
|
$rowName = 'TEL;CELL;X-egw-Ref' . $cell++;
|
|
|
|
}
|
|
|
|
|
|
|
|
if(($rowName == 'TEL') ||
|
|
|
|
($rowName == 'TEL;VOICE'))
|
|
|
|
{
|
|
|
|
$rowName = 'TEL;X-egw-Ref' . $tel++;
|
|
|
|
}
|
|
|
|
|
|
|
|
if($rowName == 'URL')
|
|
|
|
{
|
|
|
|
$rowName = 'URL;X-egw-Ref' . $url;
|
|
|
|
}
|
|
|
|
|
2006-07-09 01:02:30 +02:00
|
|
|
$rowNames[$rowName] = $key;
|
|
|
|
}
|
|
|
|
|
2008-09-03 19:09:17 +02:00
|
|
|
|
2006-07-09 15:29:19 +02:00
|
|
|
#error_log(print_r($rowNames, true));
|
2006-03-21 14:19:38 +01:00
|
|
|
|
2009-07-15 21:44:09 +02:00
|
|
|
// All rowNames of the vCard are now concatenated with their qualifiers.
|
|
|
|
// If qualifiers are missing we apply a default strategy.
|
|
|
|
// E.g. ADR will be either ADR;WORK, if no ADR;WORK is given,
|
|
|
|
// or else ADR;HOME, if not available elsewhere.
|
2006-03-21 14:19:38 +01:00
|
|
|
|
2009-07-15 21:44:09 +02:00
|
|
|
$finalRowNames = array();
|
2009-06-29 21:03:43 +02:00
|
|
|
|
2009-07-15 21:44:09 +02:00
|
|
|
foreach ($rowNames as $rowName => $vcardKey)
|
2006-07-09 01:02:30 +02:00
|
|
|
{
|
|
|
|
switch($rowName)
|
2006-03-21 14:19:38 +01:00
|
|
|
{
|
2009-07-15 21:44:09 +02:00
|
|
|
case 'ADR':
|
|
|
|
if (!isset($rowNames[$rowName . ';WORK']))
|
2009-06-29 21:03:43 +02:00
|
|
|
{
|
2009-07-15 21:44:09 +02:00
|
|
|
$finalRowNames[$rowName . ';WORK'] = $vcardKey;
|
2009-06-29 21:03:43 +02:00
|
|
|
}
|
2009-07-15 21:44:09 +02:00
|
|
|
elseif (!isset($rowNames[$rowName . ';HOME']))
|
2009-06-29 21:03:43 +02:00
|
|
|
{
|
2009-07-15 21:44:09 +02:00
|
|
|
$finalRowNames[$rowName . ';HOME'] = $vcardKey;
|
2009-06-29 21:03:43 +02:00
|
|
|
}
|
|
|
|
break;
|
2006-07-09 01:02:30 +02:00
|
|
|
case 'TEL;FAX':
|
2009-07-15 21:44:09 +02:00
|
|
|
if (!isset($rowNames['TEL;FAX;WORK'])
|
|
|
|
&& !isset($finalRowNames['TEL;FAX;WORK']))
|
2006-07-09 01:02:30 +02:00
|
|
|
{
|
2009-07-15 21:44:09 +02:00
|
|
|
$finalRowNames['TEL;FAX;WORK'] = $vcardKey;
|
2006-07-09 01:02:30 +02:00
|
|
|
}
|
2009-07-15 21:44:09 +02:00
|
|
|
elseif (!isset($rowNames['TEL;FAX;HOME'])
|
|
|
|
&& !isset($finalRowNames['TEL;FAX;HOME']))
|
2008-09-03 19:09:17 +02:00
|
|
|
{
|
2009-07-15 21:44:09 +02:00
|
|
|
$finalRowNames['TEL;FAX;HOME'] = $vcardKey;
|
2008-09-03 19:09:17 +02:00
|
|
|
}
|
2009-07-15 21:44:09 +02:00
|
|
|
break;
|
|
|
|
case 'TEL;VOICE;WORK':
|
|
|
|
$finalRowNames['TEL;WORK'] = $vcardKey;
|
|
|
|
break;
|
|
|
|
case 'TEL;HOME;VOICE':
|
|
|
|
$finalRowNames['TEL;HOME'] = $vcardKey;
|
|
|
|
break;
|
|
|
|
case 'TEL;OTHER;VOICE':
|
|
|
|
$finalRowNames['TEL;OTHER'] = $vcardKey;
|
|
|
|
break;
|
|
|
|
case 'TEL;CAR;VOICE':
|
|
|
|
case 'TEL;CAR;CELL':
|
|
|
|
case 'TEL;CAR;CELL;VOICE':
|
|
|
|
$finalRowNames['TEL;CAR'] = $vcardKey;
|
|
|
|
break;
|
|
|
|
case 'TEL;X-egw-Ref1':
|
|
|
|
if (!isset($rowNames['TEL;VOICE;WORK'])
|
|
|
|
&& !isset($rowNames['TEL;WORK'])
|
|
|
|
&& !isset($finalRowNames['TEL;WORK']))
|
|
|
|
{
|
|
|
|
$finalRowNames['TEL;WORK'] = $vcardKey;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case 'TEL;X-egw-Ref2':
|
|
|
|
if (!isset($rowNames['TEL;HOME;VOICE'])
|
|
|
|
&& !isset($rowNames['TEL;HOME'])
|
|
|
|
&& !isset($finalRowNames['TEL;HOME']))
|
|
|
|
{
|
|
|
|
$finalRowNames['TEL;HOME'] = $vcardKey;
|
2008-09-03 19:09:17 +02:00
|
|
|
}
|
2006-07-09 01:02:30 +02:00
|
|
|
break;
|
2009-07-15 21:44:09 +02:00
|
|
|
case 'TEL;CELL;X-egw-Ref1':
|
|
|
|
if (!isset($rowNames['TEL;CELL;WORK'])
|
|
|
|
&& !isset($finalRowNames['TEL;CELL;WORK']))
|
2006-07-09 01:02:30 +02:00
|
|
|
{
|
2009-07-15 21:44:09 +02:00
|
|
|
$finalRowNames['TEL;CELL;WORK'] = $vcardKey;
|
|
|
|
break;
|
2009-04-02 14:31:44 +02:00
|
|
|
}
|
2009-07-15 21:44:09 +02:00
|
|
|
case 'TEL;CELL;X-egw-Ref2':
|
|
|
|
if (!isset($rowNames['TEL;CELL;HOME'])
|
|
|
|
&& !isset($finalRowNames['TEL;CELL;HOME']))
|
|
|
|
{
|
|
|
|
$finalRowNames['TEL;CELL;HOME'] = $vcardKey;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case 'TEL;CELL;X-egw-Ref3':
|
|
|
|
if (!isset($rowNames['TEL;CAR'])
|
|
|
|
&& !isset($rowNames['TEL;CAR;VOICE'])
|
|
|
|
&& !isset($rowNames['TEL;CAR;CELL'])
|
|
|
|
&& !isset($rowNames['TEL;CAR;CELL;VOICE'])
|
|
|
|
&& !isset($finalRowNames['TEL;CAR']))
|
2009-04-02 14:31:44 +02:00
|
|
|
{
|
2009-07-15 21:44:09 +02:00
|
|
|
$finalRowNames['TEL;CAR'] = $vcardKey;
|
2006-07-09 01:02:30 +02:00
|
|
|
}
|
|
|
|
break;
|
2009-07-15 21:44:09 +02:00
|
|
|
case 'EMAIL;X-egw-Ref1':
|
|
|
|
if (!isset($rowNames['EMAIL;WORK']) &&
|
|
|
|
!isset($finalRowNames['EMAIL;WORK']))
|
2006-07-09 01:02:30 +02:00
|
|
|
{
|
2009-07-15 21:44:09 +02:00
|
|
|
$finalRowNames['EMAIL;WORK'] = $vcardKey;
|
|
|
|
break;
|
2006-07-09 01:02:30 +02:00
|
|
|
}
|
2009-07-15 21:44:09 +02:00
|
|
|
case 'EMAIL;X-egw-Ref2':
|
|
|
|
if (!isset($rowNames['EMAIL;HOME']) &&
|
|
|
|
!isset($finalRowNames['EMAIL;HOME']))
|
2009-04-02 14:31:44 +02:00
|
|
|
{
|
2009-07-15 21:44:09 +02:00
|
|
|
$finalRowNames['EMAIL;HOME'] = $vcardKey;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 'URL;X-egw-Ref1':
|
|
|
|
if (!isset($rowNames['URL;WORK']) &&
|
|
|
|
!isset($finalRowNames['URL;WORK']))
|
|
|
|
{
|
|
|
|
$finalRowNames['URL;WORK'] = $vcardKey;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case 'URL;X-egw-Ref2':
|
|
|
|
if (!isset($rowNames['URL;HOME']) &&
|
|
|
|
!isset($finalRowNames['URL;HOME']))
|
|
|
|
{
|
|
|
|
$finalRowNames['URL;HOME'] = $vcardKey;
|
2009-04-02 14:31:44 +02:00
|
|
|
}
|
2006-07-09 01:02:30 +02:00
|
|
|
break;
|
|
|
|
case 'VERSION':
|
|
|
|
break;
|
2009-07-15 21:44:09 +02:00
|
|
|
case 'X-EVOLUTION-ASSISTANT':
|
|
|
|
$finalRowNames['X-ASSISTANT'] = $vcardKey;
|
|
|
|
break;
|
2006-07-09 01:02:30 +02:00
|
|
|
default:
|
|
|
|
$finalRowNames[$rowName] = $vcardKey;
|
2009-07-15 21:44:09 +02:00
|
|
|
break;
|
2006-03-21 14:19:38 +01:00
|
|
|
}
|
2006-07-09 01:02:30 +02:00
|
|
|
}
|
2009-07-15 21:44:09 +02:00
|
|
|
|
|
|
|
#error_log(print_r($finalRowNames, true));
|
|
|
|
#Horde::logMessage("vCalAddressbook vcardtoegw finalRowNames: " . print_r($finalRowNames, true), __FILE__, __LINE__, PEAR_LOG_DEBUG);
|
|
|
|
|
2006-07-09 15:29:19 +02:00
|
|
|
|
2006-07-09 01:02:30 +02:00
|
|
|
$contact = array();
|
2006-03-21 14:19:38 +01:00
|
|
|
|
2009-07-15 21:44:09 +02:00
|
|
|
foreach ($finalRowNames as $key => $vcardKey)
|
2006-07-09 01:02:30 +02:00
|
|
|
{
|
2009-07-15 21:44:09 +02:00
|
|
|
if (isset($databaseFields[$key]))
|
2006-03-21 14:19:38 +01:00
|
|
|
{
|
2009-07-15 21:44:09 +02:00
|
|
|
$fieldNames = $databaseFields[$key];
|
|
|
|
foreach ($fieldNames as $fieldKey => $fieldName)
|
2006-03-21 14:19:38 +01:00
|
|
|
{
|
2009-07-15 21:44:09 +02:00
|
|
|
if (!empty($fieldName))
|
2006-03-21 14:19:38 +01:00
|
|
|
{
|
2009-07-15 21:44:09 +02:00
|
|
|
$value = trim($vcardValues[$vcardKey]['values'][$fieldKey]);
|
|
|
|
if ($pref_tel && (($vcardKey == $pref_tel) ||
|
|
|
|
($vcardValues[$vcardKey]['name'] == 'TEL') &&
|
|
|
|
($vcardValues[$vcardKey]['value'] == $vcardValues[$pref_tel]['value'])))
|
2008-04-16 18:05:48 +02:00
|
|
|
{
|
2009-07-15 21:44:09 +02:00
|
|
|
$contact['tel_prefer'] = $fieldName;
|
2008-04-16 18:05:48 +02:00
|
|
|
}
|
2006-07-09 01:02:30 +02:00
|
|
|
switch($fieldName)
|
2006-03-21 14:19:38 +01:00
|
|
|
{
|
2006-07-09 15:29:19 +02:00
|
|
|
case 'bday':
|
2009-07-15 21:44:09 +02:00
|
|
|
$contact[$fieldName] = $vcardValues[$vcardKey]['values']['year'] .
|
|
|
|
'-' . $vcardValues[$vcardKey]['values']['month'] .
|
|
|
|
'-' . $vcardValues[$vcardKey]['values']['mday'];
|
2006-07-09 15:29:19 +02:00
|
|
|
break;
|
2008-04-16 06:37:05 +02:00
|
|
|
|
2006-07-09 01:02:30 +02:00
|
|
|
case 'private':
|
2008-09-03 19:09:17 +02:00
|
|
|
$contact[$fieldName] = (int) ( strtoupper($value) == 'PRIVATE');
|
2006-07-09 01:02:30 +02:00
|
|
|
break;
|
2008-04-16 06:37:05 +02:00
|
|
|
|
2006-07-09 01:02:30 +02:00
|
|
|
case 'cat_id':
|
2009-07-15 21:44:09 +02:00
|
|
|
$contact[$fieldName] = implode(',',$this->find_or_add_categories($vcardValues[$vcardKey]['values']));
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 'jpegphoto':
|
|
|
|
$contact[$fieldName] = $vcardValues[$vcardKey]['value'];
|
2006-07-09 01:02:30 +02:00
|
|
|
break;
|
SyncML patches from patrick.bihan-faou-AT-mindstep.com (without
logout+mbstring stuff), small modification to use the already exiting
methodes to generate full name and fileas)
The code is commited to trunk only at the moment to allow testing of it.
If everything goes well, we intend to commit it to 1.4 branch too.
Here's the original description of the patch by Patrick:
- handles the default config for current versions of funambol (i.e. the
scard/stask/snote/scal locations)
- tries to be a bit smarter on how the data content should be encoded
based on what the client specified (sif+base64/vcard, / fragmented or
not, etc.)
- workaround a bug in some versions of funambol, where funambol does not
specify the proper sif type for the type of requested data
- imported patch #117 from egw's tracker
- make sure that the logs generated by the horde code go to stderr so
they can be view in the webserver's logs
- as much as possible reduce code duplication. For example, the
categories are handled in the parent classes for both the SIF avn VCAL
formats for each type of data (addressbook,infolog,calendar).
- make sure the code can handle more than one categories in each
direction
- treat the 'sony ericsson' vendor string just like 'sonyericsson', the
newer phones apparently have a space in the vendor string... (this
touches some files in the icalsrv as well)
- handle notes: these should now work with everything (funambol or
other)
- remove more code duplication: the syncml "api" for the various data
types (calendar, contacts, infolog) is now common for both the vcard and
sif data formats (cf the files that need to be removed)
- handle the "privat" filter in infolog like the "private" filter (some
part of the code use the name without the trailing e)
- imported patch # 267 from egw's tracker
2007-09-29 12:29:48 +02:00
|
|
|
|
2007-07-04 21:13:00 +02:00
|
|
|
case 'note':
|
|
|
|
// note may contain ','s but maybe this needs to be fixed in vcard parser...
|
2009-07-15 21:44:09 +02:00
|
|
|
$contact[$fieldName] = $vcardValues[$vcardKey]['value'];
|
|
|
|
break;
|
SyncML patches from patrick.bihan-faou-AT-mindstep.com (without
logout+mbstring stuff), small modification to use the already exiting
methodes to generate full name and fileas)
The code is commited to trunk only at the moment to allow testing of it.
If everything goes well, we intend to commit it to 1.4 branch too.
Here's the original description of the patch by Patrick:
- handles the default config for current versions of funambol (i.e. the
scard/stask/snote/scal locations)
- tries to be a bit smarter on how the data content should be encoded
based on what the client specified (sif+base64/vcard, / fragmented or
not, etc.)
- workaround a bug in some versions of funambol, where funambol does not
specify the proper sif type for the type of requested data
- imported patch #117 from egw's tracker
- make sure that the logs generated by the horde code go to stderr so
they can be view in the webserver's logs
- as much as possible reduce code duplication. For example, the
categories are handled in the parent classes for both the SIF avn VCAL
formats for each type of data (addressbook,infolog,calendar).
- make sure the code can handle more than one categories in each
direction
- treat the 'sony ericsson' vendor string just like 'sonyericsson', the
newer phones apparently have a space in the vendor string... (this
touches some files in the icalsrv as well)
- handle notes: these should now work with everything (funambol or
other)
- remove more code duplication: the syncml "api" for the various data
types (calendar, contacts, infolog) is now common for both the vcard and
sif data formats (cf the files that need to be removed)
- handle the "privat" filter in infolog like the "private" filter (some
part of the code use the name without the trailing e)
- imported patch # 267 from egw's tracker
2007-09-29 12:29:48 +02:00
|
|
|
|
2009-07-15 21:44:09 +02:00
|
|
|
case 'uid':
|
|
|
|
if (strlen($value) < $minimum_uid_length) {
|
|
|
|
// we don't use it
|
|
|
|
break;
|
|
|
|
}
|
2006-07-09 01:02:30 +02:00
|
|
|
default:
|
SyncML patches from patrick.bihan-faou-AT-mindstep.com (without
logout+mbstring stuff), small modification to use the already exiting
methodes to generate full name and fileas)
The code is commited to trunk only at the moment to allow testing of it.
If everything goes well, we intend to commit it to 1.4 branch too.
Here's the original description of the patch by Patrick:
- handles the default config for current versions of funambol (i.e. the
scard/stask/snote/scal locations)
- tries to be a bit smarter on how the data content should be encoded
based on what the client specified (sif+base64/vcard, / fragmented or
not, etc.)
- workaround a bug in some versions of funambol, where funambol does not
specify the proper sif type for the type of requested data
- imported patch #117 from egw's tracker
- make sure that the logs generated by the horde code go to stderr so
they can be view in the webserver's logs
- as much as possible reduce code duplication. For example, the
categories are handled in the parent classes for both the SIF avn VCAL
formats for each type of data (addressbook,infolog,calendar).
- make sure the code can handle more than one categories in each
direction
- treat the 'sony ericsson' vendor string just like 'sonyericsson', the
newer phones apparently have a space in the vendor string... (this
touches some files in the icalsrv as well)
- handle notes: these should now work with everything (funambol or
other)
- remove more code duplication: the syncml "api" for the various data
types (calendar, contacts, infolog) is now common for both the vcard and
sif data formats (cf the files that need to be removed)
- handle the "privat" filter in infolog like the "private" filter (some
part of the code use the name without the trailing e)
- imported patch # 267 from egw's tracker
2007-09-29 12:29:48 +02:00
|
|
|
$contact[$fieldName] = $value;
|
2009-07-15 21:44:09 +02:00
|
|
|
break;
|
2006-03-21 14:19:38 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2008-04-16 06:37:05 +02:00
|
|
|
|
SyncML patches from patrick.bihan-faou-AT-mindstep.com (without
logout+mbstring stuff), small modification to use the already exiting
methodes to generate full name and fileas)
The code is commited to trunk only at the moment to allow testing of it.
If everything goes well, we intend to commit it to 1.4 branch too.
Here's the original description of the patch by Patrick:
- handles the default config for current versions of funambol (i.e. the
scard/stask/snote/scal locations)
- tries to be a bit smarter on how the data content should be encoded
based on what the client specified (sif+base64/vcard, / fragmented or
not, etc.)
- workaround a bug in some versions of funambol, where funambol does not
specify the proper sif type for the type of requested data
- imported patch #117 from egw's tracker
- make sure that the logs generated by the horde code go to stderr so
they can be view in the webserver's logs
- as much as possible reduce code duplication. For example, the
categories are handled in the parent classes for both the SIF avn VCAL
formats for each type of data (addressbook,infolog,calendar).
- make sure the code can handle more than one categories in each
direction
- treat the 'sony ericsson' vendor string just like 'sonyericsson', the
newer phones apparently have a space in the vendor string... (this
touches some files in the icalsrv as well)
- handle notes: these should now work with everything (funambol or
other)
- remove more code duplication: the syncml "api" for the various data
types (calendar, contacts, infolog) is now common for both the vcard and
sif data formats (cf the files that need to be removed)
- handle the "privat" filter in infolog like the "private" filter (some
part of the code use the name without the trailing e)
- imported patch # 267 from egw's tracker
2007-09-29 12:29:48 +02:00
|
|
|
$this->fixup_contact($contact);
|
2009-07-15 21:44:09 +02:00
|
|
|
|
|
|
|
Horde::logMessage("vCalAddressbook vcardtoegw: " . print_r($contact, true), __FILE__, __LINE__, PEAR_LOG_DEBUG);
|
|
|
|
|
2006-07-09 01:02:30 +02:00
|
|
|
return $contact;
|
|
|
|
}
|
2008-04-16 06:37:05 +02:00
|
|
|
|
2006-07-09 01:02:30 +02:00
|
|
|
/**
|
|
|
|
* Exports some contacts: download or write to a file
|
|
|
|
*
|
|
|
|
* @param array $ids contact-ids
|
|
|
|
* @param string $file filename or null for download
|
|
|
|
*/
|
2009-07-15 21:44:09 +02:00
|
|
|
function export($ids, $file=null)
|
2006-07-09 01:02:30 +02:00
|
|
|
{
|
|
|
|
if (!$file)
|
|
|
|
{
|
|
|
|
$browser =& CreateObject('phpgwapi.browser');
|
|
|
|
$browser->content_header('addressbook.vcf','text/x-vcard');
|
|
|
|
}
|
|
|
|
if (!($fp = fopen($file ? $file : 'php://output','w')))
|
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
2009-07-15 21:44:09 +02:00
|
|
|
foreach ($ids as $id)
|
2006-07-09 01:02:30 +02:00
|
|
|
{
|
|
|
|
fwrite($fp,$this->getVCard($id));
|
|
|
|
}
|
|
|
|
fclose($fp);
|
2008-04-16 06:37:05 +02:00
|
|
|
|
2006-07-09 01:02:30 +02:00
|
|
|
if (!$file)
|
|
|
|
{
|
|
|
|
$GLOBALS['egw']->common->egw_exit();
|
2008-04-16 06:37:05 +02:00
|
|
|
}
|
2006-07-09 01:02:30 +02:00
|
|
|
return true;
|
2005-07-20 14:14:39 +02:00
|
|
|
}
|
2006-07-09 01:02:30 +02:00
|
|
|
}
|