Skip to content

Commit 406d04a

Browse files
kristoffermollerhojphil-davis
authored andcommitted
Issue-722: Fixing problem with broker adding exdate property with floating timezone
1 parent 777f97c commit 406d04a

File tree

2 files changed

+183
-0
lines changed

2 files changed

+183
-0
lines changed

lib/ITip/Broker.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -586,6 +586,9 @@ protected function parseEventForOrganizer(VCalendar $calendar, array $eventInfo,
586586
));
587587
} else {
588588
$currentEvent->EXDATE = $exceptions;
589+
if ($currentEvent->DTSTART['TZID']) {
590+
$currentEvent->EXDATE['TZID'] = clone $currentEvent->DTSTART['TZID'];
591+
}
589592
}
590593
}
591594

tests/VObject/ITip/BrokerUpdateEventTest.php

Lines changed: 180 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -876,4 +876,184 @@ public function testInviteStatusCancelled(): void
876876

877877
$this->parse($oldMessage, $newMessage, $expected, 'mailto:[email protected]');
878878
}
879+
880+
/*
881+
* When EXDATE is added by Broker, it needs to be in the correct
882+
* timezone
883+
*/
884+
885+
public function testExdateTimezone(): void
886+
{
887+
$oldMessage = <<<ICS
888+
BEGIN:VCALENDAR
889+
VERSION:2.0
890+
BEGIN:VEVENT
891+
UID:foobar
892+
SEQUENCE:1
893+
SUMMARY:foo
894+
RRULE:FREQ=WEEKLY
895+
ORGANIZER;CN=Strunk:mailto:[email protected]
896+
ATTENDEE;CN=Strunk;PARTSTAT=ACCEPTED:mailto:[email protected]
897+
ATTENDEE;CN=One:mailto:[email protected]
898+
DTSTART;TZID=Europe/London:20140716T120000
899+
DTEND;TZID=Europe/London:20140716T130000
900+
END:VEVENT
901+
END:VCALENDAR
902+
ICS;
903+
904+
$newMessage = <<<ICS
905+
BEGIN:VCALENDAR
906+
VERSION:2.0
907+
BEGIN:VEVENT
908+
UID:foobar
909+
SEQUENCE:1
910+
SUMMARY:foo
911+
RRULE:FREQ=WEEKLY
912+
ORGANIZER;CN=Strunk:mailto:[email protected]
913+
ATTENDEE;CN=Strunk;PARTSTAT=ACCEPTED:mailto:[email protected]
914+
ATTENDEE;CN=One:mailto:[email protected]
915+
DTSTART;TZID=Europe/London:20140716T120000
916+
DTEND;TZID=Europe/London:20140716T130000
917+
END:VEVENT
918+
BEGIN:VEVENT
919+
UID:foobar
920+
SEQUENCE:1
921+
SUMMARY:foo
922+
RECURRENCE-ID;TZID=Europe/London:20140723T120000
923+
ORGANIZER;CN=Strunk:mailto:[email protected]
924+
ATTENDEE;CN=Strunk;PARTSTAT=ACCEPTED:mailto:[email protected]
925+
DTSTART;TZID=Europe/London:20140723T120000
926+
DTEND;TZID=Europe/London:20140723T130000
927+
END:VEVENT
928+
END:VCALENDAR
929+
ICS;
930+
931+
$version = Version::VERSION;
932+
933+
$expected = [
934+
[
935+
'uid' => 'foobar',
936+
'method' => 'REQUEST',
937+
'component' => 'VEVENT',
938+
'sender' => 'mailto:[email protected]',
939+
'senderName' => 'Strunk',
940+
'recipient' => 'mailto:[email protected]',
941+
'recipientName' => 'One',
942+
'significantChange' => true,
943+
'message' => <<<ICS
944+
BEGIN:VCALENDAR
945+
VERSION:2.0
946+
PRODID:-//Sabre//Sabre VObject 4.5.6//EN
947+
CALSCALE:GREGORIAN
948+
METHOD:REQUEST
949+
BEGIN:VEVENT
950+
UID:foobar
951+
SEQUENCE:1
952+
SUMMARY:foo
953+
RRULE:FREQ=WEEKLY
954+
ORGANIZER;CN=Strunk:mailto:[email protected]
955+
ATTENDEE;CN=Strunk;PARTSTAT=ACCEPTED:mailto:[email protected]
956+
ATTENDEE;CN=One;PARTSTAT=NEEDS-ACTION:mailto:[email protected]
957+
DTSTART;TZID=Europe/London:20140716T120000
958+
DTEND;TZID=Europe/London:20140716T130000
959+
EXDATE;TZID=Europe/London:20140723T120000
960+
DTSTAMP:**ANY**
961+
END:VEVENT
962+
END:VCALENDAR
963+
ICS,
964+
],
965+
];
966+
967+
$this->parse($oldMessage, $newMessage, $expected, 'mailto:[email protected]');
968+
}
969+
970+
/*
971+
* When EXDATE is added by Broker, it needs to be in the correct
972+
* timezone, also in case UTC is used
973+
*/
974+
975+
public function testExdateTimezoneUTC(): void
976+
{
977+
$oldMessage = <<<ICS
978+
BEGIN:VCALENDAR
979+
VERSION:2.0
980+
BEGIN:VEVENT
981+
UID:foobar
982+
SEQUENCE:1
983+
SUMMARY:foo
984+
RRULE:FREQ=WEEKLY
985+
ORGANIZER;CN=Strunk:mailto:[email protected]
986+
ATTENDEE;CN=Strunk;PARTSTAT=ACCEPTED:mailto:[email protected]
987+
ATTENDEE;CN=One:mailto:[email protected]
988+
DTSTART:20140716T120000Z
989+
DTEND:20140716T130000Z
990+
END:VEVENT
991+
END:VCALENDAR
992+
ICS;
993+
994+
$newMessage = <<<ICS
995+
BEGIN:VCALENDAR
996+
VERSION:2.0
997+
BEGIN:VEVENT
998+
UID:foobar
999+
SEQUENCE:1
1000+
SUMMARY:foo
1001+
RRULE:FREQ=WEEKLY
1002+
ORGANIZER;CN=Strunk:mailto:[email protected]
1003+
ATTENDEE;CN=Strunk;PARTSTAT=ACCEPTED:mailto:[email protected]
1004+
ATTENDEE;CN=One:mailto:[email protected]
1005+
DTSTART:20140716T120000Z
1006+
DTEND:20140716T130000Z
1007+
END:VEVENT
1008+
BEGIN:VEVENT
1009+
UID:foobar
1010+
SEQUENCE:1
1011+
SUMMARY:foo
1012+
RECURRENCE-ID:20140723T120000Z
1013+
ORGANIZER;CN=Strunk:mailto:[email protected]
1014+
ATTENDEE;CN=Strunk;PARTSTAT=ACCEPTED:mailto:[email protected]
1015+
DTSTART:20140723T120000Z
1016+
DTEND:20140723T130000Z
1017+
END:VEVENT
1018+
END:VCALENDAR
1019+
ICS;
1020+
1021+
$version = Version::VERSION;
1022+
1023+
$expected = [
1024+
[
1025+
'uid' => 'foobar',
1026+
'method' => 'REQUEST',
1027+
'component' => 'VEVENT',
1028+
'sender' => 'mailto:[email protected]',
1029+
'senderName' => 'Strunk',
1030+
'recipient' => 'mailto:[email protected]',
1031+
'recipientName' => 'One',
1032+
'significantChange' => true,
1033+
'message' => <<<ICS
1034+
BEGIN:VCALENDAR
1035+
VERSION:2.0
1036+
PRODID:-//Sabre//Sabre VObject 4.5.6//EN
1037+
CALSCALE:GREGORIAN
1038+
METHOD:REQUEST
1039+
BEGIN:VEVENT
1040+
UID:foobar
1041+
SEQUENCE:1
1042+
SUMMARY:foo
1043+
RRULE:FREQ=WEEKLY
1044+
ORGANIZER;CN=Strunk:mailto:[email protected]
1045+
ATTENDEE;CN=Strunk;PARTSTAT=ACCEPTED:mailto:[email protected]
1046+
ATTENDEE;CN=One;PARTSTAT=NEEDS-ACTION:mailto:[email protected]
1047+
DTSTART:20140716T120000Z
1048+
DTEND:20140716T130000Z
1049+
EXDATE:20140723T120000Z
1050+
DTSTAMP:**ANY**
1051+
END:VEVENT
1052+
END:VCALENDAR
1053+
ICS,
1054+
],
1055+
];
1056+
1057+
$this->parse($oldMessage, $newMessage, $expected, 'mailto:[email protected]');
1058+
}
8791059
}

0 commit comments

Comments
 (0)