mirror of
https://github.com/EGroupware/egroupware.git
synced 2025-02-13 17:00:45 +01:00
Add device specific timezone settings
This commit is contained in:
parent
a4176448f0
commit
014119f075
@ -118,6 +118,20 @@ class calendar_ical extends calendar_boupdate
|
|||||||
*/
|
*/
|
||||||
var $uidExtension = false;
|
var $uidExtension = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Original timezone
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
var $original_tz;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* user preference: Use this timezone for import from and export to device
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
var $tzid = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Device CTCap Properties
|
* Device CTCap Properties
|
||||||
*
|
*
|
||||||
@ -152,6 +166,7 @@ class calendar_ical extends calendar_boupdate
|
|||||||
if ($this->log) $this->logfile = $GLOBALS['egw_info']['server']['temp_dir']."/log-vcal";
|
if ($this->log) $this->logfile = $GLOBALS['egw_info']['server']['temp_dir']."/log-vcal";
|
||||||
$this->clientProperties = $_clientProperties;
|
$this->clientProperties = $_clientProperties;
|
||||||
$this->vCalendar = new Horde_iCalendar;
|
$this->vCalendar = new Horde_iCalendar;
|
||||||
|
$this->original_tz = date_default_timezone_get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -232,15 +247,22 @@ class calendar_ical extends calendar_boupdate
|
|||||||
$recur_enddate += 24 * 60 * 60 - 1;
|
$recur_enddate += 24 * 60 * 60 - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->log) error_log(__FILE__.'('.__LINE__.'): '.__METHOD__.' '.array2string($event)."\n",3,$this->logfile);
|
if ($this->log) error_log(__FILE__.'['.__LINE__.'] '.__METHOD__."()\n".array2string($event)."\n",3,$this->logfile);
|
||||||
|
|
||||||
// for palmos we have to use user-time and NO timezone
|
if ($this->tzid === false)
|
||||||
if (strpos($this->productName, 'palmos') !== false)
|
|
||||||
{
|
{
|
||||||
$tzid = null;
|
$tzid = null;
|
||||||
}
|
}
|
||||||
|
elseif ($this->tzid)
|
||||||
|
{
|
||||||
|
$tzid = $this->tzid;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$tzid = $event['tzid'];
|
||||||
|
}
|
||||||
// check if tzid of event (not only recuring ones) is already added to export
|
// check if tzid of event (not only recuring ones) is already added to export
|
||||||
elseif (($tzid = $event['tzid']) && $tzid != 'UTC' && !in_array($tzid,$vtimezones_added))
|
if ($tzid && $tzid != 'UTC' && !in_array($tzid,$vtimezones_added))
|
||||||
{
|
{
|
||||||
// check if we have vtimezone component data for tzid of event, if not default to user timezone (default to server tz)
|
// check if we have vtimezone component data for tzid of event, if not default to user timezone (default to server tz)
|
||||||
if (!($vtimezone = calendar_timezones::tz2id($tzid,'component')))
|
if (!($vtimezone = calendar_timezones::tz2id($tzid,'component')))
|
||||||
@ -281,6 +303,8 @@ class calendar_ical extends calendar_boupdate
|
|||||||
|
|
||||||
foreach ($egwSupportedFields as $icalFieldName => $egwFieldName)
|
foreach ($egwSupportedFields as $icalFieldName => $egwFieldName)
|
||||||
{
|
{
|
||||||
|
if (!isset($this->supportedFields[$egwFieldName])) continue;
|
||||||
|
|
||||||
$values[$icalFieldName] = array();
|
$values[$icalFieldName] = array();
|
||||||
switch ($icalFieldName)
|
switch ($icalFieldName)
|
||||||
{
|
{
|
||||||
@ -716,7 +740,7 @@ class calendar_ical extends calendar_boupdate
|
|||||||
}
|
}
|
||||||
if (preg_match('/([\000-\012])/', $valueData))
|
if (preg_match('/([\000-\012])/', $valueData))
|
||||||
{
|
{
|
||||||
if ($this->log) error_log(__LINE__.__METHOD__.__FILE__." Has invalid XML data: $valueData",3,$this->logfile);
|
if ($this->log) error_log(__FILE__.'['.__LINE__.'] '.__METHOD__."() Has invalid XML data: $valueData",3,$this->logfile);
|
||||||
}
|
}
|
||||||
$vevent->setParameter($key, $options);
|
$vevent->setParameter($key, $options);
|
||||||
}
|
}
|
||||||
@ -725,7 +749,7 @@ class calendar_ical extends calendar_boupdate
|
|||||||
}
|
}
|
||||||
|
|
||||||
$retval = $vcal->exportvCalendar();
|
$retval = $vcal->exportvCalendar();
|
||||||
if ($this->log) error_log(__LINE__.__METHOD__.__FILE__.array2string($retval)."\n",3,$this->logfile);
|
if ($this->log) error_log(__FILE__.'['.__LINE__.'] '.__METHOD__."()\n".array2string($retval)."\n",3,$this->logfile);
|
||||||
return $retval;
|
return $retval;
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -773,7 +797,7 @@ class calendar_ical extends calendar_boupdate
|
|||||||
*/
|
*/
|
||||||
function importVCal($_vcalData, $cal_id=-1, $etag=null, $merge=false, $recur_date=0)
|
function importVCal($_vcalData, $cal_id=-1, $etag=null, $merge=false, $recur_date=0)
|
||||||
{
|
{
|
||||||
if ($this->log) error_log(__LINE__.__METHOD__.__FILE__.array2string($_vcalData)."\n",3,$this->logfile);
|
if ($this->log) error_log(__FILE__.'['.__LINE__.'] '.__METHOD__."()\n".array2string($_vcalData)."\n",3,$this->logfile);
|
||||||
|
|
||||||
if (!($events = $this->icaltoegw($_vcalData,$cal_id,$etag,$recur_date)))
|
if (!($events = $this->icaltoegw($_vcalData,$cal_id,$etag,$recur_date)))
|
||||||
{
|
{
|
||||||
@ -1105,7 +1129,7 @@ class calendar_ical extends calendar_boupdate
|
|||||||
if ($this->log)
|
if ($this->log)
|
||||||
{
|
{
|
||||||
$egw_event = $this->read($event['id']);
|
$egw_event = $this->read($event['id']);
|
||||||
error_log(__LINE__.__METHOD__.__FILE__.array2string($egw_event)."\n",3,$this->logfile);
|
error_log(__FILE__.'['.__LINE__.'] '.__METHOD__."()\n".array2string($egw_event)."\n",3,$this->logfile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1208,6 +1232,11 @@ class calendar_ical extends calendar_boupdate
|
|||||||
{
|
{
|
||||||
$this->nonBlockingAllday = true;
|
$this->nonBlockingAllday = true;
|
||||||
}
|
}
|
||||||
|
if (isset($deviceInfo['tzid']) &&
|
||||||
|
$deviceInfo['tzid'])
|
||||||
|
{
|
||||||
|
$this->tzid = $deviceInfo['tzid'];
|
||||||
|
}
|
||||||
if (!isset($this->productManufacturer) ||
|
if (!isset($this->productManufacturer) ||
|
||||||
$this->productManufacturer == '' ||
|
$this->productManufacturer == '' ||
|
||||||
$this->productManufacturer == 'file')
|
$this->productManufacturer == 'file')
|
||||||
@ -1394,14 +1423,31 @@ class calendar_ical extends calendar_boupdate
|
|||||||
$this->supportedFields = $defaultFields['synthesis'];
|
$this->supportedFields = $defaultFields['synthesis'];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
// for palmos we have to use user-time and NO timezone
|
||||||
|
if (strpos($this->productName, 'palmos') !== false)
|
||||||
|
{
|
||||||
|
$this->tzid = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function icaltoegw($_vcalData, $cal_id=-1, $etag=null, $recur_date=0)
|
function icaltoegw($_vcalData, $cal_id=-1, $etag=null, $recur_date=0)
|
||||||
{
|
{
|
||||||
$events = array();
|
$events = array();
|
||||||
|
|
||||||
|
if ($this->tzid)
|
||||||
|
{
|
||||||
|
date_default_timezone_set($this->tzid);
|
||||||
|
}
|
||||||
|
|
||||||
$vcal = new Horde_iCalendar;
|
$vcal = new Horde_iCalendar;
|
||||||
if (!$vcal->parsevCalendar($_vcalData)) return false;
|
if (!$vcal->parsevCalendar($_vcalData))
|
||||||
|
{
|
||||||
|
if ($this->tzid)
|
||||||
|
{
|
||||||
|
date_default_timezone_set($this->original_tz);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
$version = $vcal->getAttribute('VERSION');
|
$version = $vcal->getAttribute('VERSION');
|
||||||
if (!is_array($this->supportedFields)) $this->setSupportedFields();
|
if (!is_array($this->supportedFields)) $this->setSupportedFields();
|
||||||
|
|
||||||
@ -1440,6 +1486,11 @@ class calendar_ical extends calendar_boupdate
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($this->tzid)
|
||||||
|
{
|
||||||
|
date_default_timezone_set($this->original_tz);
|
||||||
|
}
|
||||||
|
|
||||||
// decide what to return
|
// decide what to return
|
||||||
if (count($events) == 1)
|
if (count($events) == 1)
|
||||||
{
|
{
|
||||||
@ -1516,6 +1567,10 @@ class calendar_ical extends calendar_boupdate
|
|||||||
$event['tzid'] = egw_time::$user_timezone->getName(); // default to user timezone
|
$event['tzid'] = egw_time::$user_timezone->getName(); // default to user timezone
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
elseif ($this->tzid)
|
||||||
|
{
|
||||||
|
$event['tzid'] = $this->tzid;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 'DTEND':
|
case 'DTEND':
|
||||||
$dtend_ts = is_numeric($attributes['value']) ? $attributes['value'] : $this->date2ts($attributes['value']);
|
$dtend_ts = is_numeric($attributes['value']) ? $attributes['value'] : $this->date2ts($attributes['value']);
|
||||||
|
Loading…
Reference in New Issue
Block a user