[horde] ActiveSync -> CalDAV Timezone problems
Michael J Rubinsky
mrubinsk at horde.org
Fri Mar 18 03:56:01 UTC 2016
Quoting Michael J Rubinsky <mrubinsk at horde.org>:
> Quoting Steffen <skhorde at smail.inf.fh-bonn-rhein-sieg.de>:
>
>> On Wed, 16 Mar 2016, Michael J Rubinsky wrote:
>>> Quoting Jan Schneider <jan at horde.org>:
>>>
>>>> Zitat von Jan Schneider <jan at horde.org>:
>>>>
>>>>> Zitat von Steffen <skhorde at smail.inf.fh-bonn-rhein-sieg.de>:
>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> with
>>>>>> Horde_ActiveSync 2.31.6 stable
>>>>>> kronolith 4.2.15 stable
>>>>>>
>>>>>> when I create an event with Android ActiveSync, I get an entry
>>>>>> with event_timezone = 'CET' in the database; the GUI and
>>>>>> ActiveSync display the event correctly. But when downloaded by
>>>>>> CalDAV I get this:
>>>>>>
>>>>>> BEGIN:VCALENDAR
>>>>>> VERSION:2.0
>>>>>> X-WR-CALNAME:Calendar of dvtest1
>>>>>> PRODID:-//The Horde Project//Horde iCalendar Library//EN
>>>>>> BEGIN:VEVENT
>>>>>> DTSTART;TZID=CET:20160308T150000
>>>>>> DTEND;TZID=CET:20160308T153000
>>>>>> DTSTAMP:20160314T123714Z
>>>>>> UID:20160314132443.4C_Xp8mUFWBF6GsNZi0nVRb at ...
>>>>>> CREATED:20160314T122443Z
>>>>>> LAST-MODIFIED:20160314T122443Z
>>>>>> SUMMARY:B15:00
>>>>>> CLASS:PUBLIC
>>>>>> STATUS:CONFIRMED
>>>>>> TRANSP:OPAQUE
>>>>>> BEGIN:VALARM
>>>>>> ACTION:DISPLAY
>>>>>> DESCRIPTION:B15:00
>>>>>> TRIGGER;VALUE=DURATION:-PT15M
>>>>>> END:VALARM
>>>>>> END:VEVENT
>>>>>> BEGIN:VTIMEZONE
>>>>>> TZID:CET
>>>>>> END:VTIMEZONE
>>>>>> END:VCALENDAR
>>>>>>
>>>>>> My client is totally confused by the timezone CET. If I replace
>>>>>> the string CET by "Europe/Berlin" in the database, I get the
>>>>>> correct date in the CalDAV client, too, and a lot more entries
>>>>>> in VTIMEZONE.
>>>>>>
>>>>>> The user has Europe/Berlin as default timezone, as does PHP.
>>>>>>
>>>>>> Is this some configuration error?
>>>>>> If I remember correctly, ActiveSync storred UTC as timezone, didn't it?
>>>>>>
>>>>>> --
>>>>>> Steffen
>>>>>
>>>>> Looks like starting with PHP 5.5.10 DateTimeZone no longer
>>>>> converts timezone abbreviations to full timezone names, which is
>>>>> of course a big BC break. We would have to work around this.
>>>>
>>>> OTOH we don't import unknown timezones anyway, at least not via
>>>> iCalendar import. But maybe we do this differently with
>>>> ActiveSync. Michael does know better.
>>>
>>> Timezones from ActiveSync clients are presented in an MAPI encoded
>>> binary format that describes the timezone instead of naming it. We
>>> use DateTimeZone::listIdentifiers to retrieve the list of
>>> supported timezones when parsing the MAPI data to determine the
>>> matching/supported timezone name. So, if the timezone name comes
>>> from ActiveSync it means is MUST have been returned by DateTimeZone.
A more detailed explanation for the record:
EAS does not use timezone names/aliases at all. It only uses a single
set of transition dates that describe the timezone. It's up to the
client/server to translate that into timezone data it can use. For
Horde/PHP this means we have to translate it into a "standard"
identifier (as used in the Olson database). The reasons that this is a
broken design is a different discussion altogether.
Anyway, the problem here is that since all we have is a SINGLE set of
transition times, there will almost always be multiple timezone names
that will match when attempting to map the transitions to known zones.
This is why we check if we have an expected timezone and return it if
it's in the list of matched zones. What's happening for you is that
since the timezone data is incorrect for your expected timezone it's
not in the list so we return the more generic timezone
alias/abbreviation - CET in your case. FWIW, anytime there is an event
in a timezone that is different from date_default_timezone this will
happen. So, while in your case the CET being returned is the result of
broken client data - it's not an unexpected value to be returned.
For Horde 6 we could look at returning the full list of matching
timezones and let the calling code be responsible for picking the best
match. This might be more flexible, but still wouldn't help in this
case - we still would have no idea which Olson timezone name is
correct so the abbreviated alias would be the better choice.
--
mike
The Horde Project
http://www.horde.org
https://www.facebook.com/hordeproject
https://www.twitter.com/hordeproject
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 5751 bytes
Desc: S/MIME Signature
URL: <http://lists.horde.org/archives/horde/attachments/20160317/8df0b1ed/attachment-0001.bin>
More information about the horde
mailing list