From 3c542abc3fca393085a2821bd4564b2387cedf0e Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Sun, 22 May 2011 17:29:09 +0200 Subject: [PATCH] Let backends decide whether they support alarms; minor improvements in event listing and UI --- plugins/calendar/calendar.js | 8 ++++++-- plugins/calendar/drivers/calendar_driver.php | 1 + plugins/calendar/drivers/database/database_driver.php | 7 ++++--- plugins/calendar/drivers/kolab/kolab_calendar.php | 8 +++++++- plugins/calendar/drivers/kolab/kolab_driver.php | 1 + plugins/calendar/lib/calendar_ui.php | 1 + plugins/calendar/skins/default/calendar.css | 4 ++++ plugins/calendar/skins/default/templates/calendar.html | 4 ++-- 8 files changed, 26 insertions(+), 8 deletions(-) diff --git a/plugins/calendar/calendar.js b/plugins/calendar/calendar.js index ecbb97a6..27ed452e 100644 --- a/plugins/calendar/calendar.js +++ b/plugins/calendar/calendar.js @@ -189,10 +189,10 @@ window.rcmail && rcmail.addEventListener('init', function(evt) { $('select.edit-alarm-type').val(alarm[0]); if (alarm[1].match(/@(\d+)/)) { - var ondate = new Date(parseInt(RegExp.$1)); + var ondate = new Date(parseInt(RegExp.$1) * 1000); $('select.edit-alarm-offset').val('@'); $('input.edit-alarm-date').val($.fullCalendar.formatDate(ondate, settings['date_format'])); - $('input.edit-alarmtime').val($.fullCalendar.formatDate(ondate, settings['time_format'])); + $('input.edit-alarm-time').val($.fullCalendar.formatDate(ondate, settings['time_format'])); } else if (alarm[1].match(/([-+])(\d+)([mhd])/)) { $('input.edit-alarm-value').val(RegExp.$2); @@ -203,6 +203,10 @@ window.rcmail && rcmail.addEventListener('init', function(evt) { $('select.edit-alarm-type, select.edit-alarm-offset').change(); } + // enable/disable alarm property according to backend support + $('#edit-alarms')[(calendar.alarms ? 'show' : 'hide')](); + + // set recurrence form var recurrence = $('#edit-recurrence-frequency').val(event.recurrence ? event.recurrence.FREQ : '').change(); var interval = $('select.edit-recurrence-interval').val(event.recurrence ? event.recurrence.INTERVAL : 1); diff --git a/plugins/calendar/drivers/calendar_driver.php b/plugins/calendar/drivers/calendar_driver.php index a2abe898..e386d75b 100644 --- a/plugins/calendar/drivers/calendar_driver.php +++ b/plugins/calendar/drivers/calendar_driver.php @@ -25,6 +25,7 @@ abstract class calendar_driver { // backend features + public $alarms = false; public $attendees = false; public $attachments = false; diff --git a/plugins/calendar/drivers/database/database_driver.php b/plugins/calendar/drivers/database/database_driver.php index 7ab32522..dea0eeed 100644 --- a/plugins/calendar/drivers/database/database_driver.php +++ b/plugins/calendar/drivers/database/database_driver.php @@ -26,6 +26,7 @@ class database_driver extends calendar_driver { // features this backend supports + public $alarms = true; public $attendees = true; public $attachments = true; @@ -306,10 +307,10 @@ class database_driver extends calendar_driver $result = $this->rc->db->query(sprintf( "SELECT * FROM events WHERE calendar_id IN (%s) - AND start >= %s AND end <= %s", + AND start <= %s AND end >= %s", $this->calendar_ids, - $this->rc->db->fromunixtime($start), - $this->rc->db->fromunixtime($end) + $this->rc->db->fromunixtime($end), + $this->rc->db->fromunixtime($start) )); while ($result && ($event = $this->rc->db->fetch_assoc($result))) { diff --git a/plugins/calendar/drivers/kolab/kolab_calendar.php b/plugins/calendar/drivers/kolab/kolab_calendar.php index 4eb1a9bc..c2901e42 100644 --- a/plugins/calendar/drivers/kolab/kolab_calendar.php +++ b/plugins/calendar/drivers/kolab/kolab_calendar.php @@ -88,7 +88,7 @@ class Kolab_calendar $events = array(); foreach ($this->events as $id => $event) { // TODO: also list recurring events - if ($event['start'] >= $start && $event['end'] <= $end) { + if ($event['start'] <= $end && $event['end'] >= $start) { $events[] = $event; } } @@ -144,6 +144,8 @@ class Kolab_calendar { $start_time = date('H:i:s', $rec['start-date']); $allday = $start_time == '00:00:00' && $start_time == date('H:i:s', $rec['end-date']); + if ($allday) // in Roundcube all-day events only go until 23:59:59 of the last day + $rec['end-date']--; return array( 'id' => $rec['uid'], @@ -169,6 +171,10 @@ class Kolab_calendar { $object = array(); + // set end-date to 00:00:00 of the following day + if ($event['all_day']) + $event['end']++; + return $object; } diff --git a/plugins/calendar/drivers/kolab/kolab_driver.php b/plugins/calendar/drivers/kolab/kolab_driver.php index 4d968ce9..d5e4bec7 100644 --- a/plugins/calendar/drivers/kolab/kolab_driver.php +++ b/plugins/calendar/drivers/kolab/kolab_driver.php @@ -21,6 +21,7 @@ require_once(dirname(__FILE__) . '/kolab_calendar.php'); class kolab_driver extends calendar_driver { // features this backend supports + public $alarms = true; public $attendees = false; public $attachments = false; diff --git a/plugins/calendar/lib/calendar_ui.php b/plugins/calendar/lib/calendar_ui.php index f7dfb4e1..2675498a 100644 --- a/plugins/calendar/lib/calendar_ui.php +++ b/plugins/calendar/lib/calendar_ui.php @@ -130,6 +130,7 @@ class calendar_ui $li = ''; foreach ((array)$calendars as $id => $prop) { unset($prop['user_id']); + $prop['alarms'] = $this->calendar->driver->alarms; $prop['attendees'] = $this->calendar->driver->attendees; $prop['attachments'] = $this->calendar->driver->attachments; $jsenv[$id] = $prop; diff --git a/plugins/calendar/skins/default/calendar.css b/plugins/calendar/skins/default/calendar.css index 913daf34..e9ea1c5d 100644 --- a/plugins/calendar/skins/default/calendar.css +++ b/plugins/calendar/skins/default/calendar.css @@ -321,6 +321,10 @@ td.topalign { padding: 0.2em 0; } +span.edit-alarm-set { + white-space: nowrap; +} + a.dropdown-link { color: #CC0000; font-size: 12px; diff --git a/plugins/calendar/skins/default/templates/calendar.html b/plugins/calendar/skins/default/templates/calendar.html index 259abf10..41e4ee96 100644 --- a/plugins/calendar/skins/default/templates/calendar.html +++ b/plugins/calendar/skins/default/templates/calendar.html @@ -101,9 +101,9 @@   -
+
- +