From e9825fa24ef333a606ef8dbcf263cef2533c4702 Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Wed, 21 Nov 2012 21:27:35 +0100 Subject: [PATCH] Fix timezone detection in iCalendar parser --- plugins/calendar/lib/Horde_iCalendar.php | 12 +++++++++- .../lib/Horde_iCalendar_timezone.diff | 23 +++++++++++++++++++ plugins/calendar/lib/calendar_ical.php | 3 --- 3 files changed, 34 insertions(+), 4 deletions(-) create mode 100644 plugins/calendar/lib/Horde_iCalendar_timezone.diff diff --git a/plugins/calendar/lib/Horde_iCalendar.php b/plugins/calendar/lib/Horde_iCalendar.php index a3ff79dc..6d75d273 100644 --- a/plugins/calendar/lib/Horde_iCalendar.php +++ b/plugins/calendar/lib/Horde_iCalendar.php @@ -1874,7 +1874,17 @@ class Horde_iCalendar { { $vtimezone = $this->_container->findComponentByAttribute('vtimezone', 'TZID', $tzid); if (!$vtimezone) { - return false; + // use PHP's standard timezone db to determine tzoffset + try { + $tz = new DateTimeZone($tzid); + $dt = new DateTime('now', $tz); + $dt->setDate($date['year'], $date['month'], $date['mday']); + $dt->setTime($time['hour'], $time['minute'], $date['recond']); + return $tz->getOffset($dt); + } + catch (Exception $e) { + return false; + } } $change_times = array(); diff --git a/plugins/calendar/lib/Horde_iCalendar_timezone.diff b/plugins/calendar/lib/Horde_iCalendar_timezone.diff new file mode 100644 index 00000000..1ae130ee --- /dev/null +++ b/plugins/calendar/lib/Horde_iCalendar_timezone.diff @@ -0,0 +1,23 @@ +diff --git a/plugins/calendar/lib/Horde_iCalendar.php b/plugins/calendar/lib/Horde_iCalendar.php +index a3ff79d..6d75d27 100644 +--- a/plugins/calendar/lib/Horde_iCalendar.php ++++ b/plugins/calendar/lib/Horde_iCalendar.php +@@ -1874,7 +1874,17 @@ class Horde_iCalendar { + { + $vtimezone = $this->_container->findComponentByAttribute('vtimezone', 'TZID', $tzid); + if (!$vtimezone) { +- return false; ++ // use PHP's standard timezone db to determine tzoffset ++ try { ++ $tz = new DateTimeZone($tzid); ++ $dt = new DateTime('now', $tz); ++ $dt->setDate($date['year'], $date['month'], $date['mday']); ++ $dt->setTime($time['hour'], $time['minute'], $date['recond']); ++ return $tz->getOffset($dt); ++ } ++ catch (Exception $e) { ++ return false; ++ } + } + + $change_times = array(); diff --git a/plugins/calendar/lib/calendar_ical.php b/plugins/calendar/lib/calendar_ical.php index 34eeeef4..601ac864 100644 --- a/plugins/calendar/lib/calendar_ical.php +++ b/plugins/calendar/lib/calendar_ical.php @@ -123,9 +123,6 @@ class calendar_ical */ public function get_parser() { - // use Horde:iCalendar to parse vcalendar file format - @include_once('Horde/Icalendar.php'); - if (!class_exists('Horde_iCalendar')) require_once($this->cal->home . '/lib/Horde_iCalendar.php');