3 commits - plugins/calendar plugins/libkolab plugins/tasklist
Thomas Brüderli
bruederli at kolabsys.com
Wed Aug 6 15:22:11 CEST 2014
plugins/calendar/calendar.php | 4 +++-
plugins/calendar/calendar_ui.js | 2 +-
plugins/calendar/drivers/kolab/kolab_driver.php | 16 +++++++++++-----
plugins/libkolab/lib/kolab_format_xcal.php | 14 +++++++++++---
plugins/tasklist/skins/larry/tasklist.css | 14 +++++++-------
5 files changed, 33 insertions(+), 17 deletions(-)
New commits:
commit 435b4483ec0d24a97a8b17c1c3e39bf518fed92b
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date: Wed Aug 6 15:21:32 2014 +0200
Minor fixes for attendee display and updates
diff --git a/plugins/calendar/calendar.php b/plugins/calendar/calendar.php
index 722e64b..3160b6b 100644
--- a/plugins/calendar/calendar.php
+++ b/plugins/calendar/calendar.php
@@ -978,7 +978,7 @@ class calendar extends rcube_plugin
$data = $this->driver->get_event_changelog($event);
if (is_array($data) && !empty($data)) {
$lib = $this->lib;
- array_walk($data, function($change) use ($lib) {
+ array_walk($data, function(&$change) use ($lib) {
if ($change['date']) {
$dt = $lib->adjust_timezone($change['date']);
if ($dt instanceof DateTime)
@@ -1720,6 +1720,8 @@ class calendar extends rcube_plugin
$owner = $i;
else if (!isset($attendee['rsvp']))
$event['attendees'][$i]['rsvp'] = true;
+ else if (is_string($attendee['rsvp']))
+ $event['attendees'][$i]['rsvp'] = $attendee['rsvp'] == 'true' || $attendee['rsvp'] == '1';
}
// set new organizer identity
diff --git a/plugins/calendar/calendar_ui.js b/plugins/calendar/calendar_ui.js
index ad699de..23a7d54 100644
--- a/plugins/calendar/calendar_ui.js
+++ b/plugins/calendar/calendar_ui.js
@@ -619,7 +619,7 @@ function rcube_calendar_ui(settings)
var dispname = Q(data.name || data.email), tooltip = '';
if (data.email) {
- tooltip = data.email;
+ tooltip = data.email + '; ' + data.status;
dispname = '<a href="mailto:' + data.email + '" class="mailtolink" data-cutype="' + data.cutype + '">' + dispname + '</a>';
}
diff --git a/plugins/calendar/drivers/kolab/kolab_driver.php b/plugins/calendar/drivers/kolab/kolab_driver.php
index 4f0bdfb..869d56b 100644
--- a/plugins/calendar/drivers/kolab/kolab_driver.php
+++ b/plugins/calendar/drivers/kolab/kolab_driver.php
@@ -1326,6 +1326,17 @@ class kolab_driver extends calendar_driver
$record['attachments'] = $attachments;
}
+ if (!empty($record['attendees'])) {
+ foreach ((array)$record['attendees'] as $i => $attendee) {
+ if (is_array($attendee['delegated-from'])) {
+ $record['attendees'][$i]['delegated-from'] = join(', ', $attendee['delegated-from']);
+ }
+ if (is_array($attendee['delegated-to'])) {
+ $record['attendees'][$i]['delegated-to'] = join(', ', $attendee['delegated-to']);
+ }
+ }
+ }
+
// Roundcube only supports one category assignment
if (is_array($record['categories']))
$record['categories'] = $record['categories'][0];
@@ -1543,11 +1554,6 @@ class kolab_driver extends calendar_driver
$uid = $event;
}
- // FIXME: hard-code UID for static Bonnie API demo
- $demo_uids = $this->rc->config->get('kolab_static_bonnie_uids', array('0015c5fe-9baf-0561-11e3-d584fa2894b7'));
- if (!in_array($uid, $demo_uids))
- $uid = reset($demo_uids);
-
return array($uid, $mailbox);
}
commit fa3377cf2021510bff58425ea9bee9cfe9097b1e
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date: Wed Aug 6 15:16:33 2014 +0200
Set attendee RSVP=TRUE when sequence was increased
diff --git a/plugins/libkolab/lib/kolab_format_xcal.php b/plugins/libkolab/lib/kolab_format_xcal.php
index a18557b..421ee92 100644
--- a/plugins/libkolab/lib/kolab_format_xcal.php
+++ b/plugins/libkolab/lib/kolab_format_xcal.php
@@ -304,6 +304,8 @@ abstract class kolab_format_xcal extends kolab_format
$this->init();
$is_new = !$this->obj->uid();
+ $old_sequence = $this->obj->sequence();
+ $reschedule = $is_new;
// set common object properties
parent::set($object);
@@ -314,7 +316,7 @@ abstract class kolab_format_xcal extends kolab_format
$object['sequence'] = 0;
}
else {
- $object['sequence'] = $this->obj->sequence();
+ $object['sequence'] = $old_sequence;
$old = $this->data['uid'] ? $this->data : $this->to_array();
// increment sequence when updating properties relevant for scheduling.
@@ -336,6 +338,10 @@ abstract class kolab_format_xcal extends kolab_format
}
$this->obj->setSequence(intval($object['sequence']));
+ if ($object['sequence'] > $old_sequence) {
+ $reschedule = true;
+ }
+
$this->obj->setSummary($object['title']);
$this->obj->setLocation($object['location']);
$this->obj->setDescription($object['description']);
@@ -350,7 +356,7 @@ abstract class kolab_format_xcal extends kolab_format
// process event attendees
$attendees = new vectorattendee;
- foreach ((array)$object['attendees'] as $attendee) {
+ foreach ((array)$object['attendees'] as $i => $attendee) {
if ($attendee['role'] == 'ORGANIZER') {
$object['organizer'] = $attendee;
}
@@ -363,7 +369,9 @@ abstract class kolab_format_xcal extends kolab_format
$att->setPartStat($this->part_status_map[$attendee['status']]);
$att->setRole($this->role_map[$attendee['role']] ? $this->role_map[$attendee['role']] : kolabformat::Required);
$att->setCutype($this->cutype_map[$attendee['cutype']] ? $this->cutype_map[$attendee['cutype']] : kolabformat::CutypeIndividual);
- $att->setRSVP((bool)$attendee['rsvp']);
+ $att->setRSVP((bool)$attendee['rsvp'] || $reschedule);
+
+ $object['attendees'][$i]['rsvp'] = $attendee['rsvp'] || $reschedule;
if (!empty($attendee['delegated-from'])) {
$vdelegators = new vectorcontactref;
commit 0ba3579f2dfb0d655e970e0f0655f4dae42c02f9
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date: Wed Aug 6 15:09:56 2014 +0200
Avoid styles colliding with other modules
diff --git a/plugins/tasklist/skins/larry/tasklist.css b/plugins/tasklist/skins/larry/tasklist.css
index ff8ba12..3b0e403 100644
--- a/plugins/tasklist/skins/larry/tasklist.css
+++ b/plugins/tasklist/skins/larry/tasklist.css
@@ -1171,7 +1171,7 @@ div.tasklist-invitebox .rsvp-status.hint {
}
#task-partstat .changersvp,
-.edit-attendees-table td.confirmstate span,
+.tasklistview .edit-attendees-table td.confirmstate span,
div.tasklist-invitebox .rsvp-status.declined,
div.tasklist-invitebox .rsvp-status.tentative,
div.tasklist-invitebox .rsvp-status.accepted,
@@ -1185,37 +1185,37 @@ div.tasklist-invitebox .rsvp-status.needs-action {
#task-partstat .changersvp.declined,
div.tasklist-invitebox .rsvp-status.declined,
-.edit-attendees-table td.confirmstate span.declined {
+.tasklistview .edit-attendees-table td.confirmstate span.declined {
background-position: 2px -40px;
}
#task-partstat .changersvp.tentative,
div.tasklist-invitebox .rsvp-status.tentative,
-.edit-attendees-table td.confirmstate span.tentative {
+.tasklistview .edit-attendees-table td.confirmstate span.tentative {
background-position: 2px -60px;
}
#task-partstat .changersvp.delegated,
div.tasklist-invitebox .rsvp-status.delegated,
-.edit-attendees-table td.confirmstate span.delegated {
+.tasklistview .edit-attendees-table td.confirmstate span.delegated {
background-position: 2px -180px;
}
#task-partstat .changersvp.needs-action,
div.tasklist-invitebox .rsvp-status.needs-action,
-.edit-attendees-table td.confirmstate span.needs-action {
+.tasklistview .edit-attendees-table td.confirmstate span.needs-action {
background-position: 2px 0;
}
#task-partstat .changersvp.in-process,
div.tasklist-invitebox .rsvp-status.in-process,
-.edit-attendees-table td.confirmstate span.in-process {
+.tasklistview .edit-attendees-table td.confirmstate span.in-process {
background-position: 2px -200px;
}
#task-partstat .changersvp.accepted,
div.tasklist-invitebox .rsvp-status.accepted,
-.edit-attendees-table td.confirmstate span.accepted {
+.tasklistview .edit-attendees-table td.confirmstate span.accepted {
background-position: 2px -220px;
}
More information about the commits
mailing list