plugins/calendar plugins/libcalendaring

Thomas Brüderli bruederli at kolabsys.com
Tue Jul 8 20:13:03 CEST 2014


 plugins/calendar/calendar.php                                |   11 ++++++++---
 plugins/calendar/calendar_ui.js                              |    4 +++-
 plugins/calendar/drivers/kolab/kolab_invitation_calendar.php |    3 +++
 plugins/calendar/skins/larry/calendar.css                    |    1 +
 plugins/libcalendaring/lib/libcalendaring_itip.php           |    1 +
 5 files changed, 16 insertions(+), 4 deletions(-)

New commits:
commit ca5cb4ac012898374bb1f32d5e774633f4602645
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date:   Tue Jul 8 20:12:53 2014 +0200

    Unset RSVP flag after replying; skip other user's namespace for invitations listing

diff --git a/plugins/calendar/calendar.php b/plugins/calendar/calendar.php
index 2667c6d..c9e9f67 100644
--- a/plugins/calendar/calendar.php
+++ b/plugins/calendar/calendar.php
@@ -896,14 +896,18 @@ class calendar extends rcube_plugin
           $noreply = intval(get_input_value('noreply', RCUBE_INPUT_GPC)) || $status == 'needs-action';
           $reload = $event['calendar'] != $ev['calendar'] ? 2 : 1;
           $organizer = null;
+          $emails = $this->get_user_emails();
           foreach ($event['attendees'] as $i => $attendee) {
             if ($attendee['role'] == 'ORGANIZER') {
               $organizer = $attendee;
-              break;
+            }
+            else if ($attendee['email'] && in_array(strtolower($attendee['email']), $emails)) {
+              $reply_sender = $attendee['email'];
             }
           }
           if (!$noreply) {
             $itip = $this->load_itip();
+            $itip->set_sender_email($reply_sender);
             $event['comment'] = $reply_comment;
             if ($organizer && $itip->send_itip_message($event, 'REPLY', $organizer, 'itipsubject' . $status, 'itipmailbody' . $status))
               $this->rc->output->command('display_message', $this->gettext(array('name' => 'sentresponseto', 'vars' => array('mailto' => $organizer['name'] ? $organizer['name'] : $organizer['email']))), 'confirmation');
@@ -2318,8 +2322,10 @@ class calendar extends rcube_plugin
           }
           else if ($attendee['email'] && in_array(strtolower($attendee['email']), $emails)) {
             $event['attendees'][$i]['status'] = strtoupper($status);
+            if ($event['attendees'][$i]['status'] != 'NEEDS-ACTION')
+              unset($event['attendees'][$i]['rsvp']);  // remove RSVP attribute
             $metadata['attendee'] = $attendee['email'];
-            $metadata['rsvp'] = $attendee['rsvp'] || $attendee['role'] != 'NON-PARTICIPANT';
+            $metadata['rsvp'] = $attendee['role'] != 'NON-PARTICIPANT';
             $reply_sender = $attendee['email'];
           }
         }
@@ -2332,7 +2338,6 @@ class calendar extends rcube_plugin
             'email' => $sender_identity['email'],
             'role' => 'OPT-PARTICIPANT',
             'status' => strtoupper($status),
-            'rsvp' => true,
           );
           $metadata['attendee'] = $sender_identity['email'];
         }
diff --git a/plugins/calendar/calendar_ui.js b/plugins/calendar/calendar_ui.js
index 2e63eb7..cc07474 100644
--- a/plugins/calendar/calendar_ui.js
+++ b/plugins/calendar/calendar_ui.js
@@ -1928,8 +1928,10 @@ function rcube_calendar_ui(settings)
         // update attendee status
         for (var data, i=0; i < me.selected_event.attendees.length; i++) {
           data = me.selected_event.attendees[i];
-          if (settings.identity.emails.indexOf(';'+String(data.email).toLowerCase()) >= 0)
+          if (settings.identity.emails.indexOf(';'+String(data.email).toLowerCase()) >= 0) {
             data.status = response.toUpperCase();
+            delete data.rsvp;  // unset RSVP flag
+          }
         }
         event_show_dialog(me.selected_event);
 
diff --git a/plugins/calendar/drivers/kolab/kolab_invitation_calendar.php b/plugins/calendar/drivers/kolab/kolab_invitation_calendar.php
index ab5fe4b..ac3740a 100644
--- a/plugins/calendar/drivers/kolab/kolab_invitation_calendar.php
+++ b/plugins/calendar/drivers/kolab/kolab_invitation_calendar.php
@@ -215,6 +215,9 @@ class kolab_invitation_calendar
     $events = array();
     foreach (kolab_storage::list_folders('', '*', 'event', null) as $foldername) {
       $cal = new kolab_calendar($foldername, $this->cal);
+      if ($cal->get_namespace() == 'other')
+        continue;
+
       foreach ($cal->list_events($start, $end, $search, 1, $query, array(array($subquery, 'OR'))) as $event) {
         $match = false;
 
diff --git a/plugins/calendar/skins/larry/calendar.css b/plugins/calendar/skins/larry/calendar.css
index ddb1a2f..43c7a35 100644
--- a/plugins/calendar/skins/larry/calendar.css
+++ b/plugins/calendar/skins/larry/calendar.css
@@ -277,6 +277,7 @@ pre {
 	cursor: pointer;
 }
 
+#calendars .treelist div > a.quickview:focus,
 #calendars .treelist div > a.subscribed:focus {
 	border-radius: 3px;
 	outline: 2px solid rgba(30,150,192, 0.5);
diff --git a/plugins/libcalendaring/lib/libcalendaring_itip.php b/plugins/libcalendaring/lib/libcalendaring_itip.php
index 93e33a6..074f87f 100644
--- a/plugins/libcalendaring/lib/libcalendaring_itip.php
+++ b/plugins/libcalendaring/lib/libcalendaring_itip.php
@@ -205,6 +205,7 @@ class libcalendaring_itip
                 }
                 else if (strcasecmp($attedee['email'], $from) == 0 || strcasecmp($attendee['email'], $from_utf) == 0) {
                     $replying_attendee = $attendee;
+                    unset($replying_attendee['rsvp']);  // unset the RSVP attribute
                 }
             }
             if ($replying_attendee) {




More information about the commits mailing list