summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorAleksander Machniak <machniak@kolabsys.com>2013-12-02 09:15:08 (GMT)
committerAleksander Machniak <machniak@kolabsys.com>2013-12-02 09:15:08 (GMT)
commitbcd865a8e5a0831c52dda4417364df515354d130 (patch)
tree313e315f0436069d390239b334cb8e63fecebfba /plugins
parentf1dce1f5b9b097ffaf6a3fc5ff925a120273f49b (diff)
downloadroundcubemail-plugins-kolab-bcd865a8e5a0831c52dda4417364df515354d130.tar.gz
Fix possible "Call to a member function format() on a non-object" when
invitation event does not define 'changed' datetime object (Bug #2633)
Diffstat (limited to 'plugins')
-rw-r--r--plugins/calendar/calendar.php49
1 files changed, 33 insertions, 16 deletions
diff --git a/plugins/calendar/calendar.php b/plugins/calendar/calendar.php
index d0b6c02..a5caaa8 100644
--- a/plugins/calendar/calendar.php
+++ b/plugins/calendar/calendar.php
@@ -1922,11 +1922,12 @@ class calendar extends rcube_plugin
$html = '';
foreach ($this->ics_parts as $mime_id) {
- $part = $this->message->mime_parts[$mime_id];
+ $part = $this->message->mime_parts[$mime_id];
$charset = $part->ctype_parameters['charset'] ? $part->ctype_parameters['charset'] : RCMAIL_CHARSET;
- $events = $this->ical->import($this->message->get_part_content($mime_id), $charset);
- $title = $this->gettext('title');
-
+ $events = $this->ical->import($this->message->get_part_content($mime_id), $charset);
+ $title = $this->gettext('title');
+ $date = rcube_utils::anytodatetime($this->message->headers->date);
+
// successfully parsed events?
if (empty($events))
continue;
@@ -1971,13 +1972,21 @@ class calendar extends rcube_plugin
break;
}
}
-
- $dom_id = asciiwords($event['uid'], true);
- $buttons = html::div(array('id' => 'rsvp-'.$dom_id, 'style' => 'display:none'), $rsvp_buttons);
- $buttons .= html::div(array('id' => 'import-'.$dom_id, 'style' => 'display:none'), $import_button);
+
+ $dom_id = asciiwords($event['uid'], true);
+ $buttons = html::div(array('id' => 'rsvp-'.$dom_id, 'style' => 'display:none'), $rsvp_buttons);
+ $buttons .= html::div(array('id' => 'import-'.$dom_id, 'style' => 'display:none'), $import_button);
$buttons_pre = html::div(array('id' => 'loading-'.$dom_id, 'class' => 'rsvp-status loading'), $this->gettext('loading'));
-
- $this->rc->output->add_script('rcube_calendar.fetch_event_rsvp_status(' . json_serialize(array('uid' => $event['uid'], 'changed' => $event['changed']->format('U'), 'sequence' => intval($event['sequence']), 'fallback' => $status)) . ')', 'docready');
+ $changed = is_object($event['changed']) ? $event['changed'] : $date;
+
+ $script = json_serialize(array(
+ 'uid' => $event['uid'],
+ 'changed' => $changed ? $changed->format('U') : 0,
+ 'sequence' => intval($event['sequence']),
+ 'fallback' => $status,
+ ));
+
+ $this->rc->output->add_script("rcube_calendar.fetch_event_rsvp_status($script)", 'docready');
}
else if ($this->ical->method == 'CANCEL') {
$title = $this->gettext('itipcancellation');
@@ -1995,13 +2004,21 @@ class calendar extends rcube_plugin
'onclick' => "rcube_calendar.remove_event_from_mail('" . JQ($event['uid']) . "', '" . JQ($event['title']) . "')",
'value' => $this->gettext('removefromcalendar'),
));
-
- $dom_id = asciiwords($event['uid'], true);
- $buttons = html::div(array('id' => 'rsvp-'.$dom_id, 'style' => 'display:none'), $button_remove);
- $buttons .= html::div(array('id' => 'import-'.$dom_id, 'style' => 'display:none'), $button_import);
+
+ $dom_id = asciiwords($event['uid'], true);
+ $buttons = html::div(array('id' => 'rsvp-'.$dom_id, 'style' => 'display:none'), $button_remove);
+ $buttons .= html::div(array('id' => 'import-'.$dom_id, 'style' => 'display:none'), $button_import);
$buttons_pre = html::div(array('id' => 'loading-'.$dom_id, 'class' => 'rsvp-status loading'), $this->gettext('loading'));
-
- $this->rc->output->add_script('rcube_calendar.fetch_event_rsvp_status(' . json_serialize(array('uid' => $event['uid'], 'changed' => $event['changed']->format('U'), 'sequence' => intval($event['sequence']), 'fallback' => 'CANCELLED')) . ')', 'docready');
+ $changed = is_object($event['changed']) ? $event['changed'] : $date;
+
+ $script = json_serialize(array(
+ 'uid' => $event['uid'],
+ 'changed' => $changed ? $changed->format('U') : 0,
+ 'sequence' => intval($event['sequence']),
+ 'fallback' => 'CANCELLED',
+ ));
+
+ $this->rc->output->add_script("rcube_calendar.fetch_event_rsvp_status($script)", 'docready');
}
else {
$buttons = html::tag('input', array(