Dependency Graph
View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0002865 | SOGo | Web Calendar | public | 2014-07-21 11:42 | 2017-01-09 20:49 |
Reporter | ams077 | Assigned To | ludovic | ||
Priority | normal | Severity | major | Reproducibility | always |
Status | resolved | Resolution | fixed | ||
Platform | [Server] Linux | OS | Debian | OS Version | 7 (Wheezy) |
Product Version | 2.2.6 | ||||
Fixed in Version | 3.2.5 | ||||
Summary | 0002865: SOGo does not interpret date-time without timezone correctly | ||||
Description | According to <http://www.ietf.org/rfc/rfc2445.txt>, datetimes without timezone information should be taken as 'local time'. The SOGo calendar UI fails to do this. It seems to interpret timezone-less datetimes as GMT and then apply an offset to convert to local time. For example: """ This event should show as starting at 1300 in whatever timezone the client happens to be. Thunderbird and Lightning using a SOGo CALDAV calendar displays this at the correct time. The SOGo UI displays the same event (same calendar) an hour later (my current timezone is BST, which is GMT+1). If I change my timezone in SOGo preferences, the event time moves around. | ||||
Steps To Reproduce |
instead of Event time | ||||
Tags | No tags attached. | ||||
I have the same problem and I think that the severity is major, some people in our organisation miss their appointmnt due to this bug ! FORM 0000001: DATE WITH LOCAL TIME The date with local time form is simply a date-time value that does
Date-time values of this type are said to be "floating" and are not |
|
I agreed with pbra, it's really a major issue, since it may confuse users/managers/directors. I see 13 common cases about formatting ICS and time/timezones.
These cases are:
For better understanding I've created test events for every case. You can upload them to your CalDAV server using curl: Attached test events (T01.ics, ... , T13.ics) start at 20151103T120000 (with various Z/TZID/VTIMEZONE/VALUE modifications). Let's view them with SOGo 2.3.2:
Since Lightning uses the most correct logic (at least as I think), let's view events with Lightning 4.3.0.1 .
You could test these events with any client you like, there will be different results with different clients... I'm not a developer, but this generic code could be used to implement Lightning logic:Variables:DTSTR # DTSTART/DTEND/other string all offsets are calculated for the given date-time, including daylight/standart handlingand time offset can also change the dateETZO # event's VTIMEZONE TZID offset from UTC let's call next code "f_datetime" function,which input is any DTSTR-formatted stringand output is resulting date-time for current client's timezone (RDT).This is the detailed "hard" logic (next you'll see the optimized logic):DTSTR is given with "Z"if Z then despite any TZID or VTIMEZONE given (the time can not be "UTC" add "with offset" simultaneously),use UTC + local time offsetRDT=DT+LTZO No "Z"else according to RFC, use localtime (floating)
else if event has no VTIMEZONE data about TZID offset
endif Here is the optimized variant:if Z then About 9,10, they are anyway inconsistent. DAVdroid treats them closer to RFC, but others get more "human" info from such events. About 11,12,13 - here is the Lightning-like algorithm:Variables:DTS # true if current DTSTR is DTSTART f_datetime(DT) functions is described abovef_date(DT) is a function which input is any DTSTRand output is the resulting date (yyyymmdd formatted).f_d(RDT) is a function which input is RDT-formatted string, output - yyyymmdd formatted datef_t(RDT) is a function which input is RDT-formatted string, output - hhmmss formatted timeThe next function input is DTSTR,DTS,DTEand output ADE,RD,RT.if DTS then similar if-else could be made about DUE,EXDATE,RDATE,TRIGGERAs I can see the required changes should be made near "SOPE/NGCards/iCalDateTime.m" Hope this will help to fix this bug (and may be others). I'm ready to provide more info, tests, etc. Thanks for attention! |
|
T03.ics (419 bytes)
BEGIN:VCALENDAR PRODID:-//Test// VERSION:2.0 BEGIN:VTIMEZONE TZID:Europe/Moscow BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0300 TZNAME:MSK DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE BEGIN:VEVENT UID:d2240999-ab22-410e-97e9-8f562cb87d03 SUMMARY:T03 DESCRIPTION:with Z/TZID/VTIMEZONE. without VALUE DTSTART;TZID=Europe/Moscow:20151103T120000Z DTEND;TZID=Europe/Moscow:20151103T130000Z END:VEVENT END:VCALENDAR |
|
T04.ics (269 bytes)
BEGIN:VCALENDAR PRODID:-//Test// VERSION:2.0 BEGIN:VEVENT UID:d2240999-ab22-410e-97e9-8f562cb87d04 SUMMARY:T04 DESCRIPTION:with TZID. without Z/VTIMEZONE/VALUE DTSTART;TZID=Europe/Moscow:20151103T120000 DTEND;TZID=Europe/Moscow:20151103T130000 END:VEVENT END:VCALENDAR |
|
T05.ics (417 bytes)
BEGIN:VCALENDAR PRODID:-//Test// VERSION:2.0 BEGIN:VTIMEZONE TZID:Europe/Moscow BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0300 TZNAME:MSK DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE BEGIN:VEVENT UID:d2240999-ab22-410e-97e9-8f562cb87d05 SUMMARY:T05 DESCRIPTION:with TZID/VTIMEZONE. without Z/VALUE DTSTART;TZID=Europe/Moscow:20151103T120000 DTEND;TZID=Europe/Moscow:20151103T130000 END:VEVENT END:VCALENDAR |
|
T06.ics (423 bytes)
BEGIN:VCALENDAR PRODID:-//Test// VERSION:2.0 BEGIN:VTIMEZONE TZID:Europe/Moscow BEGIN:STANDARD TZOFFSETFROM:+0400 TZOFFSETTO:+0400 TZNAME:MSK DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE BEGIN:VEVENT UID:d2240999-ab22-410e-97e9-8f562cb87d06 SUMMARY:T06 DESCRIPTION:with TZID/wrong-VTIMEZONE. without Z/VALUE DTSTART;TZID=Europe/Moscow:20151103T120000 DTEND;TZID=Europe/Moscow:20151103T130000 END:VEVENT END:VCALENDAR |
|
T07.ics (449 bytes)
BEGIN:VCALENDAR PRODID:-//Test// VERSION:2.0 BEGIN:VTIMEZONE TZID:Euro1pe/M123oscow1 BEGIN:STANDARD TZOFFSETFROM:+0400 TZOFFSETTO:+0400 TZNAME:MSK1 DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE BEGIN:VEVENT UID:d2240999-ab22-410e-97e9-8f562cb87d07 SUMMARY:T07 DESCRIPTION:with unknown-TZID/unknown-VTIMEZONE. without Z/VALUE DTSTART;TZID=Euro1pe/M123oscow1:20151103T120000 DTEND;TZID=Euro1pe/M123oscow1:20151103T130000 END:VEVENT END:VCALENDAR |
|
T08.ics (287 bytes)
BEGIN:VCALENDAR PRODID:-//Test// VERSION:2.0 BEGIN:VEVENT UID:d2240999-ab22-410e-97e9-8f562cb87d08 SUMMARY:T08 DESCRIPTION:with unknown-TZID. without Z/VTIMEZONE/VALUE DTSTART;TZID=Euro2pe/M234oscow2:20151103T120000 DTEND;TZID=Euro2pe/M234oscow2:20151103T130000 END:VEVENT END:VCALENDAR |
|
T09.ics (288 bytes)
BEGIN:VCALENDAR PRODID:-//Test// VERSION:2.0 BEGIN:VEVENT UID:d2240999-ab22-410e-97e9-8f562cb87d09 SUMMARY:T09 DESCRIPTION:with VALUE=DATE and format is yyyymmddThhmmss. without Z/TZID/VTIMEZONE DTSTART;VALUE=DATE:20151103T120000 DTEND;VALUE=DATE:20151103T130000 END:VEVENT END:VCALENDAR |
|
T10.ics (282 bytes)
BEGIN:VCALENDAR PRODID:-//Test// VERSION:2.0 BEGIN:VEVENT UID:d2240999-ab22-410e-97e9-8f562cb87d10 SUMMARY:T10 DESCRIPTION:with VALUE=DATE-TIME and format is yyyymmdd. without Z/TZID/VTIMEZONE DTSTART;VALUE=DATE-TIME:20151103 DTEND;VALUE=DATE-TIME:20151104 END:VEVENT END:VCALENDAR |
|
T12.ics (290 bytes)
BEGIN:VCALENDAR PRODID:-//Test// VERSION:2.0 BEGIN:VEVENT UID:d2240999-ab22-410e-97e9-8f562cb87d12 SUMMARY:T12 DESCRIPTION:with DTSTART-VALUE=DATE-TIME and DTEND-VALUE=DATE. without Z/TZID/VTIMEZONE DTSTART;VALUE=DATE-TIME:20151103T120000 DTEND;VALUE=DATE:20151104 END:VEVENT END:VCALENDAR |
|
T13.ics (290 bytes)
BEGIN:VCALENDAR PRODID:-//Test// VERSION:2.0 BEGIN:VEVENT UID:d2240999-ab22-410e-97e9-8f562cb87d13 SUMMARY:T13 DESCRIPTION:with DTSTART-VALUE=DATE and DTEND-VALUE=DATE-TIME. without Z/TZID/VTIMEZONE DTSTART;VALUE=DATE:20151103 DTEND;VALUE=DATE-TIME:20151104T130000 END:VEVENT END:VCALENDAR |
|
Are there any news regarding this issue, plans to improve the situation? |
|
I've had a look today and this is fairly nasty because in all SOPE/NGCards/* classes, we don't have access to the user's timezone. |
|
sogo: master 477c06a7 2016-12-30 12:26 Details Diff |
(fix) fix events in floating time during CalDAV's PUT operation (fixes 0002865) |
Affected Issues 0002865 |
|
mod - SoObjects/Appointments/SOGoAppointmentFolder.m | Diff File | ||
mod - SoObjects/Appointments/SOGoAppointmentObject.m | Diff File | ||
sogo: v2 72c03390 2016-12-30 12:26 Details Diff |
(fix) fix events in floating time during CalDAV's PUT operation (fixes 0002865) |
Affected Issues 0002865 |
|
mod - SoObjects/Appointments/SOGoAppointmentFolder.m | Diff File | ||
mod - SoObjects/Appointments/SOGoAppointmentObject.m | Diff File | ||
sogo: maint 78373433 2016-12-30 12:26 Committer: francis Details Diff |
(fix) fix events in floating time during CalDAV's PUT operation (fixes 0002865) |
Affected Issues 0002865 |
|
mod - SoObjects/Appointments/SOGoAppointmentFolder.m | Diff File | ||
mod - SoObjects/Appointments/SOGoAppointmentObject.m | Diff File |
Date Modified | Username | Field | Change |
---|---|---|---|
2014-07-21 11:42 | ams077 | New Issue | |
2015-04-08 12:46 | pbra | Note Added: 0008401 | |
2015-04-08 12:47 | pbra | Note Edited: 0008401 | |
2015-11-06 11:27 | Sergey Urushkin | Note Added: 0009077 | |
2015-11-06 11:28 | Sergey Urushkin | File Added: T01.ics | |
2015-11-06 11:28 | Sergey Urushkin | File Added: T02.ics | |
2015-11-06 11:29 | Sergey Urushkin | File Added: T03.ics | |
2015-11-06 11:29 | Sergey Urushkin | File Added: T04.ics | |
2015-11-06 11:29 | Sergey Urushkin | File Added: T05.ics | |
2015-11-06 11:29 | Sergey Urushkin | File Added: T06.ics | |
2015-11-06 11:29 | Sergey Urushkin | File Added: T07.ics | |
2015-11-06 11:29 | Sergey Urushkin | File Added: T08.ics | |
2015-11-06 11:30 | Sergey Urushkin | File Added: T09.ics | |
2015-11-06 11:30 | Sergey Urushkin | File Added: T10.ics | |
2015-11-06 11:30 | Sergey Urushkin | File Added: T11.ics | |
2015-11-06 11:30 | Sergey Urushkin | File Added: T12.ics | |
2015-11-06 11:30 | Sergey Urushkin | File Added: T13.ics | |
2016-11-20 09:37 | martin.grotzke | Note Added: 0010894 | |
2016-12-22 20:53 | ludovic | Note Added: 0011097 | |
2016-12-22 20:56 | ludovic | Relationship added | has duplicate 0002716 |
2016-12-22 20:56 | ludovic | Relationship added | has duplicate 0002707 |
2016-12-22 20:56 | ludovic | Severity | minor => major |
2016-12-30 17:27 | ludovic | Changeset attached | => sogo master 477c06a7 |
2016-12-30 17:27 | ludovic | Assigned To | => ludovic |
2016-12-30 17:27 | ludovic | Resolution | open => fixed |
2016-12-30 17:28 | ludovic | Changeset attached | => sogo v2 72c03390 |
2016-12-30 17:30 | ludovic | Status | new => resolved |
2016-12-30 17:30 | ludovic | Fixed in Version | => 3.2.5 |
2017-01-09 20:49 | francis | Changeset attached | => sogo maint 78373433 |