plugins/calendar plugins/libcalendaring
Thomas Brüderli
bruederli at kolabsys.com
Wed Nov 21 10:33:41 CET 2012
plugins/calendar/drivers/calendar_driver.php | 19 ++++++++++++++++++
plugins/calendar/drivers/database/database_driver.php | 3 ++
plugins/calendar/drivers/kolab/kolab_driver.php | 3 ++
plugins/calendar/lib/calendar_ical.php | 11 ++++++++--
plugins/libcalendaring/libcalendaring.php | 5 ++++
5 files changed, 39 insertions(+), 2 deletions(-)
New commits:
commit db7d41432402093da94a1e5af6bfaa669ccc9449
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date: Wed Nov 21 10:33:02 2012 +0100
Correctly handle iTip replies without valid DTSTSART/DTEND attributes (#1178)
diff --git a/plugins/calendar/drivers/calendar_driver.php b/plugins/calendar/drivers/calendar_driver.php
index deb7502..15183e9 100644
--- a/plugins/calendar/drivers/calendar_driver.php
+++ b/plugins/calendar/drivers/calendar_driver.php
@@ -249,6 +249,25 @@ abstract class calendar_driver
abstract function dismiss_alarm($event_id, $snooze = 0);
/**
+ * Check the given event object for validity
+ *
+ * @param array Event object as hash array
+ * @return boolean True if valid, false if not
+ */
+ public function validate($event)
+ {
+ $valid = true;
+
+ if (!is_object($event['start']) || !is_a($event['start'], 'DateTime'))
+ $valid = false;
+ if (!is_object($event['end']) || !is_a($event['end'], 'DateTime'))
+ $valid = false;
+
+ return $valid;
+ }
+
+
+ /**
* Get list of event's attachments.
* Drivers can return list of attachments as event property.
* If they will do not do this list_attachments() method will be used.
diff --git a/plugins/calendar/drivers/database/database_driver.php b/plugins/calendar/drivers/database/database_driver.php
index 5aac2dd..1f26446 100644
--- a/plugins/calendar/drivers/database/database_driver.php
+++ b/plugins/calendar/drivers/database/database_driver.php
@@ -210,6 +210,9 @@ class database_driver extends calendar_driver
*/
public function new_event($event)
{
+ if (!$this->validate($event))
+ return false;
+
if (!empty($this->calendars)) {
if ($event['calendar'] && !$this->calendars[$event['calendar']])
return false;
diff --git a/plugins/calendar/drivers/kolab/kolab_driver.php b/plugins/calendar/drivers/kolab/kolab_driver.php
index 65bbbb2..0251107 100644
--- a/plugins/calendar/drivers/kolab/kolab_driver.php
+++ b/plugins/calendar/drivers/kolab/kolab_driver.php
@@ -286,6 +286,9 @@ class kolab_driver extends calendar_driver
*/
public function new_event($event)
{
+ if (!$this->validate($event))
+ return false;
+
$cid = $event['calendar'] ? $event['calendar'] : reset(array_keys($this->calendars));
if ($storage = $this->calendars[$cid]) {
// handle attachments to add
diff --git a/plugins/calendar/lib/calendar_ical.php b/plugins/calendar/lib/calendar_ical.php
index 20d5757..34eeeef 100644
--- a/plugins/calendar/lib/calendar_ical.php
+++ b/plugins/calendar/lib/calendar_ical.php
@@ -160,8 +160,15 @@ class calendar_ical
$event['end']->sub(new DateInterval('PT23H'));
// assign current timezone to event start/end
- $event['start']->setTimezone($this->cal->timezone);
- $event['end']->setTimezone($this->cal->timezone);
+ if (is_a($event['start'], 'DateTime'))
+ $event['start']->setTimezone($this->cal->timezone);
+ else
+ unset($event['start']);
+
+ if (is_a($event['end'], 'DateTime'))
+ $event['end']->setTimezone($this->cal->timezone);
+ else
+ unset($event['end']);
// map other attributes to internal fields
$_attendees = array();
diff --git a/plugins/libcalendaring/libcalendaring.php b/plugins/libcalendaring/libcalendaring.php
index fcbce27..24f98cb 100644
--- a/plugins/libcalendaring/libcalendaring.php
+++ b/plugins/libcalendaring/libcalendaring.php
@@ -206,6 +206,11 @@ class libcalendaring extends rcube_plugin
public function event_date_text($event, $tzinfo = false)
{
$fromto = '';
+
+ // abort if no valid event dates are given
+ if (!is_object($event['start']) || !is_a($event['start'], 'DateTime') || !is_object($event['end']) || !is_a($event['end'], 'DateTime'))
+ return $fromto;
+
$duration = $event['start']->diff($event['end'])->format('s');
$this->date_format_defaults();
More information about the commits
mailing list