[Tickets #12843] Re: Wrong timezone calculation with CalDAV

noreply at bugs.horde.org noreply at bugs.horde.org
Thu Feb 6 05:44:04 UTC 2014


Ticket URL: http://bugs.horde.org/ticket/12843
  Ticket             | 12843
  Updated By         | info at individual-it.net
  Summary            | Wrong timezone calculation with CalDAV
  Queue              | Kronolith
  Version            | 4.1.4
  Type               | Bug
  State              | Feedback
  Priority           | 1. Low
  Milestone          |
  Patch              |
  Owners             |
+New Attachment     | berlin 10.ics

info at individual-it.net (2014-02-06 05:44) wrote:

I've installed 5.1.6-git and tried to dig deeper into that problem.
Here is what I got:

I'm importing the attached ics. That's the way lighning sends its data.
The main data is:

So here what happends in the code
In framework/Icalendar/lib/Horde/Icalendar.php line 1296
$time = $this->_parseTime($dateParts[1])
is called
it gets $dateParts[1] what has the correct value of 100000
and it returns:
$time	Array [4]
	hour	10
	minute	00
	second	00
	zone	Local

In the next lines $this->_parseTZID($date, $time, $tzid) is called
that returns
$tzoffset	3600

That offset is substracted from the calculated time, what gives us the  
correct time in UTC

But when we came back to line 681 In  
framework/Icalendar/lib/Horde/Icalendar.php and set the attribute with
$this->setAttribute($tag, $this->_parseDateTime($ts[0], $tzid), $params);

We end up with an Object that looks like:

$this	Horde_Icalendar_Vevent
	CLASSNAME	Horde_Icalendar_Vevent
	type	vEvent
	_container	Horde_Icalendar
	_attributes	Array [7]
		0	Array [4]
		1	Array [4]
		2	Array [4]
		3	Array [4]
		4	Array [4]
		5	Array [4]
			name	DTSTART
			params	Array [1]
				TZID	Europe/Berlin
			value	1391590800
			values	Array [1]
		6	Array [4]
	_components	Array [0]
	_version	2.0
	_oldFormat	false

So we have the time in UTC but TZID set to Europe/Berlin
That object get passed back the whole way to kronolith/data.php line 90
$next_step = $data->nextStep($actionID, $param);

So in the database I end up with and event that looks like:
event_start 	2014-02-05 08:00:00
event_end  2014-02-05 08:59:59
event_timezone Europe/Berlin

It looks like before the event get saved it get coonverted to UTC again
That's with
$conf['calendar']['params']['utc'] = true;
$conf['resource']['params']['utc'] = true;

If I set both values to false I end up in the database with:
event_start 	2014-02-05 09:00:00
event_end  2014-02-05 09:59:59
event_timezone Europe/Berlin

So my quick fix is simple to disable the $tzoffset calculation. and  
set it to false. (I know this is not really a fix of the problem)
Without that fix I can just add events correctly from lightning that  
are in the same  timezone as set in horde under  Global Preferences ->  
Local and Time
With that fix other timezones also work fine.

So far for now, will dig deeper.

Another problem is that the webinterface of kronolith seems to show  
all events according to UTC, no matter what is set in the settings.  
But I think that is not related.

info at individual-it.net (2014-02-06 05:44) uploaded: berlin 10.ics


More information about the bugs mailing list