From f5e93184e3ef08d2e4f9d57f3ade9a41390fe610 Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Thu, 31 Jul 2014 12:49:27 +0200 Subject: [PATCH] Fix iTip replies to organizer (don't increment sequence if I'm not the owner) --- .../drivers/kolab/tasklist_kolab_driver.php | 10 ++++++++-- plugins/tasklist/skins/larry/tasklist.css | 3 ++- plugins/tasklist/tasklist.js | 18 ++++++++---------- plugins/tasklist/tasklist.php | 10 ++++++++++ 4 files changed, 28 insertions(+), 13 deletions(-) diff --git a/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php b/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php index ef8f31db..bcc5c06e 100644 --- a/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php +++ b/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php @@ -902,9 +902,15 @@ class tasklist_kolab_driver extends tasklist_driver unset($object['attachments']); } - $object['_owner'] = $identity['email']; + // allow sequence increments if I'm the organizer + if ($this->plugin->is_organizer($object)) { + unset($object['sequence']); + } + else if (isset($old['sequence'])) { + $object['sequence'] = $old['sequence']; + } - unset($object['tempid'], $object['raw'], $object['list'], $object['flagged'], $object['tags'], $object['sequence']); + unset($object['tempid'], $object['raw'], $object['list'], $object['flagged'], $object['tags']); return $object; } diff --git a/plugins/tasklist/skins/larry/tasklist.css b/plugins/tasklist/skins/larry/tasklist.css index 3953977d..96b5e823 100644 --- a/plugins/tasklist/skins/larry/tasklist.css +++ b/plugins/tasklist/skins/larry/tasklist.css @@ -949,10 +949,11 @@ a.morelink:hover { display: block; color: #333; font-weight: bold; - padding: 8px 4px 3px 30px; + padding: 3px 4px 3px 30px; text-shadow: 0px 1px 1px #fff; text-decoration: none; white-space: nowrap; + line-height: 20px; } #taskedit-attachments ul li a.file { diff --git a/plugins/tasklist/tasklist.js b/plugins/tasklist/tasklist.js index 9da7a88a..a0ff22f9 100644 --- a/plugins/tasklist/tasklist.js +++ b/plugins/tasklist/tasklist.js @@ -992,16 +992,14 @@ function rcube_tasklist_ui(settings) notify = false, partstat = false, html = ''; // task has attendees, ask whether to notify them - if (has_attendees(rec)) { - if (is_organizer(rec)) { - notify = true; - html = rcmail.gettext('changeconfirmnotifications', 'tasklist'); - } - // ask whether to change my partstat and notify organizer - else if (data._status_before !== undefined && data.status && data._status_before != data.status && is_attendee(rec)) { - partstat = true; - html = rcmail.gettext('partstatupdatenotification', 'tasklist'); - } + if (has_attendees(rec) && is_organizer(rec)) { + notify = true; + html = rcmail.gettext('changeconfirmnotifications', 'tasklist'); + } + // ask whether to change my partstat and notify organizer + else if (data._status_before !== undefined && data.status && data._status_before != data.status && is_attendee(rec)) { + partstat = true; + html = rcmail.gettext('partstatupdatenotification', 'tasklist'); } // remove to avoid endless recursion diff --git a/plugins/tasklist/tasklist.php b/plugins/tasklist/tasklist.php index ae76f997..728c4a3c 100644 --- a/plugins/tasklist/tasklist.php +++ b/plugins/tasklist/tasklist.php @@ -1097,6 +1097,16 @@ class tasklist extends rcube_plugin return false; } + /** + * Determine whether the current user is the organizer of the given task + */ + public function is_organizer($task) + { + $emails = $this->lib->get_user_emails(); + return (empty($task['organizer']) || in_array(strtolower($task['organizer']['email']), $emails)); + } + + /******* UI functions ********/ /**