4 commits - plugins/calendar plugins/libcalendaring

Thomas Brüderli bruederli at kolabsys.com
Mon Mar 24 15:11:07 CET 2014


 plugins/calendar/calendar.php                      |   18 +++++++----
 plugins/calendar/calendar_ui.js                    |   33 +++++++++++++--------
 plugins/calendar/lib/calendar_ui.php               |    2 -
 plugins/libcalendaring/lib/libcalendaring_itip.php |    7 +++-
 plugins/libcalendaring/localization/en_US.inc      |    2 -
 plugins/libcalendaring/skins/larry/libcal.css      |    2 -
 6 files changed, 42 insertions(+), 22 deletions(-)

New commits:
commit 7df78a5052003f66dc9dfe4f5fc52ff5fb46477d
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date:   Mon Mar 24 15:10:39 2014 +0100

    Display delegated-to attribute in iTip view

diff --git a/plugins/libcalendaring/lib/libcalendaring_itip.php b/plugins/libcalendaring/lib/libcalendaring_itip.php
index a9e612b..ee40ff0 100644
--- a/plugins/libcalendaring/lib/libcalendaring_itip.php
+++ b/plugins/libcalendaring/lib/libcalendaring_itip.php
@@ -297,7 +297,12 @@ class libcalendaring_itip
           foreach ($existing['attendees'] as $attendee) {
             if ($attendee['role'] != 'ORGANIZER' && strcasecmp($attendee['email'], $event['attendee']) == 0) {
               if (in_array($status, array('ACCEPTED','TENTATIVE','DECLINED','DELEGATED'))) {
-                $html = html::div('rsvp-status ' . strtolower($status), $this->gettext('attendee'.strtolower($status)));
+                $html = html::div('rsvp-status ' . strtolower($status), $this->gettext(array(
+                    'name' => 'attendee'.strtolower($status),
+                    'vars' => array(
+                        'delegatedto' => Q($attendee['delegated-to'] ?: '?'),
+                    )
+                )));
               }
               $action = $attendee['status'] == $status ? '' : 'update';
               $listed = true;
diff --git a/plugins/libcalendaring/localization/en_US.inc b/plugins/libcalendaring/localization/en_US.inc
index d381768..4565cc1 100644
--- a/plugins/libcalendaring/localization/en_US.inc
+++ b/plugins/libcalendaring/localization/en_US.inc
@@ -60,7 +60,7 @@ $labels['youhavedelegated'] = 'You have delegated this invitation';
 $labels['attendeeaccepted'] = 'Participant has accepted';
 $labels['attendeetentative'] = 'Participant has tentatively accepted';
 $labels['attendeedeclined'] = 'Participant has declined';
-$labels['attendeedelegated'] = 'Participant has delegated';
+$labels['attendeedelegated'] = 'Participant has delegated to $delegatedto';
 $labels['notanattendee'] = 'You\'re not listed as an attendee of this object';
 
 $labels['importtocalendar'] = 'Save to my calendar';
diff --git a/plugins/libcalendaring/skins/larry/libcal.css b/plugins/libcalendaring/skins/larry/libcal.css
index e0bd514..62d2947 100644
--- a/plugins/libcalendaring/skins/larry/libcal.css
+++ b/plugins/libcalendaring/skins/larry/libcal.css
@@ -60,7 +60,7 @@ span.edit-alarm-set {
 a.reply-comment-toggle {
 	display: inline-block;
 	margin-left: 1em;
-	color: #333;
+	color: #666;
 }
 
 .itip-reply-comment textarea {


commit 7221557e317fc7247c2077fa02729556d9034681
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date:   Mon Mar 24 15:10:11 2014 +0100

    Fix iTip message processing after refactoring

diff --git a/plugins/calendar/calendar.php b/plugins/calendar/calendar.php
index c20a043..74f1ec1 100644
--- a/plugins/calendar/calendar.php
+++ b/plugins/calendar/calendar.php
@@ -2222,7 +2222,9 @@ class calendar extends rcube_plugin
     return $p;
   }
 
-
+  /**
+   * Read the given mime message from IMAP and parse ical data
+   */
   private function mail_get_itip_event($mbox, $uid, $mime_id)
   {
     $charset = RCMAIL_CHARSET;
@@ -2246,8 +2248,14 @@ class calendar extends rcube_plugin
 
     // successfully parsed events?
     if (!empty($events) && ($event = $events[$index])) {
+      // store the message's sender address for comparisons
+      $event['_sender'] = preg_match('/([a-z0-9][a-z0-9\-\.\+\_]*@[^&@"\'.][^@&"\']*\\.([^\\x00-\\x40\\x5b-\\x60\\x7b-\\x7f]{2,}|xn--[a-z0-9]{2,}))/', $headers->from, $m) ? $m[1] : '';
+      $event['_sender_utf'] = rcube_idn_to_utf8($event['_sender']);
+
       return $event;
     }
+
+    return null;
   }
 
   /**
@@ -2321,19 +2329,16 @@ class calendar extends rcube_plugin
           // only update attendee status
           if ($this->ical->method == 'REPLY') {
             // try to identify the attendee using the email sender address
-            $sender = preg_match('/([a-z0-9][a-z0-9\-\.\+\_]*@[^&@"\'.][^@&"\']*\\.([^\\x00-\\x40\\x5b-\\x60\\x7b-\\x7f]{2,}|xn--[a-z0-9]{2,}))/', $headers->from, $m) ? $m[1] : '';
-            $sender_utf = rcube_idn_to_utf8($sender);
-            
             $existing_attendee = -1;
             foreach ($existing['attendees'] as $i => $attendee) {
-              if ($sender && ($attendee['email'] == $sender || $attendee['email'] == $sender_utf)) {
+              if ($event['_sender'] && ($attendee['email'] == $event['_sender'] || $attendee['email'] == $event['_sender_utf'])) {
                 $existing_attendee = $i;
                 break;
               }
             }
             $event_attendee = null;
             foreach ($event['attendees'] as $attendee) {
-              if ($sender && ($attendee['email'] == $sender || $attendee['email'] == $sender_utf)) {
+              if ($event['_sender'] && ($attendee['email'] == $event['_sender'] || $attendee['email'] == $event['_sender_utf'])) {
                 $event_attendee = $attendee;
                 $metadata['fallback'] = $attendee['status'];
                 $metadata['attendee'] = $attendee['email'];


commit 377ba1be880e2e51428d83d87e961fd4d24787fd
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date:   Mon Mar 24 15:09:44 2014 +0100

    Don't use 'folderlist' GUI object identifier for calendars list (avoids Roundcube core to do some unwanted magic)

diff --git a/plugins/calendar/calendar_ui.js b/plugins/calendar/calendar_ui.js
index a63263d..e867856 100644
--- a/plugins/calendar/calendar_ui.js
+++ b/plugins/calendar/calendar_ui.js
@@ -2376,7 +2376,7 @@ function rcube_calendar_ui(settings)
       for (var i=0; i < delete_ids.length; i++) {
         id = delete_ids[i];
         fc.fullCalendar('removeEventSource', this.calendars[id]);
-        $(rcmail.get_folder_li(id, 'rcmlical')).remove();
+        $('#rcmlical' + id).remove();
         $('#edit-calendar option[value="'+id+'"]').remove();
         delete this.calendars[id];
       }
@@ -2563,7 +2563,7 @@ function rcube_calendar_ui(settings)
         if (!source.active) {
           source.active = true;
           fc.fullCalendar('addEventSource', source);
-          $('#' + rcmail.get_folder_li(source.id, 'rcmlical').id + ' input').prop('checked', true);
+          $('#rcmlical' + source.id + ' input').prop('checked', true);
         }
         else
           fc.fullCalendar('refetchEvents', source);
@@ -2786,13 +2786,24 @@ function rcube_calendar_ui(settings)
       fc.fullCalendar('option', 'height', $('#calendar').height() - footer);
     };
 
+    // mark the given calendar folder as selected
+    this.select_calendar = function(id)
+    {
+      var prefix = 'rcmlical';
 
-    /***  startup code  ***/
+      $(rcmail.gui_objects.calendarslist).find('li.selected')
+        .removeClass('selected').addClass('unfocused');
+      $('#' + prefix + id, rcmail.gui_objects.calendarslist)
+        .removeClass('unfocused').addClass('selected');
 
-    // destroy wrongly configured treelist widget for the calendars list
-    if (rcmail.gui_objects.folderlist && rcmail.treelist) {
-      rcmail.treelist = null;
-    }
+      // trigger event hook
+      rcmail.triggerEvent('selectfolder', { folder:name, prefix:prefix });
+
+      this.selected_calendar = id;
+    };
+
+
+    /***  startup code  ***/
 
     // create list of event sources AKA calendars
     this.calendars = {};
@@ -2824,7 +2835,7 @@ function rcube_calendar_ui(settings)
       }
 
       // init event handler on calendar list checkbox
-      if ((li = rcmail.get_folder_li(id, 'rcmlical'))) {
+      if ((li = rcube_find_object('rcmlical' + id))) {
         $('#'+li.id+' input').click(function(e){
           var id = $(this).data('id');
           if (me.calendars[id]) {  // add or remove event source on click
@@ -2845,11 +2856,9 @@ function rcube_calendar_ui(settings)
         }).data('id', id).get(0).checked = active;
         
         $(li).click(function(e){
-          var id = $(this).data('id');
-          rcmail.select_folder(id, 'rcmlical');
+          me.select_calendar($(this).data('id'));
           rcmail.enable_command('calendar-edit', true);
           rcmail.enable_command('calendar-remove', 'calendar-showurl', true);
-          me.selected_calendar = id;
         })
         .dblclick(function(){ me.calendar_edit_dialog(me.calendars[me.selected_calendar]); })
         .data('id', id);
@@ -2866,7 +2875,7 @@ function rcube_calendar_ui(settings)
       this.selected_calendar = settings.default_calendar;
     
     if (this.selected_calendar)
-      rcmail.select_folder(this.selected_calendar, 'rcmlical');
+      this.select_calendar(this.selected_calendar);
     
     var viewdate = new Date();
     if (rcmail.env.date)
diff --git a/plugins/calendar/lib/calendar_ui.php b/plugins/calendar/lib/calendar_ui.php
index ae39687..c2bbf1a 100644
--- a/plugins/calendar/lib/calendar_ui.php
+++ b/plugins/calendar/lib/calendar_ui.php
@@ -223,7 +223,7 @@ class calendar_ui
     }
 
     $this->rc->output->set_env('calendars', $jsenv);
-    $this->rc->output->add_gui_object('folderlist', $attrib['id']);
+    $this->rc->output->add_gui_object('calendarslist', $attrib['id']);
 
     return html::tag('ul', $attrib, $li, html::$common_attrib);
   }


commit 8c8d8f22337d8e64bc99d35825af9edb508de1f3
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date:   Mon Mar 24 09:12:14 2014 +0100

    Set RSVP=TRUE for appended attendees

diff --git a/plugins/calendar/calendar.php b/plugins/calendar/calendar.php
index 770d50c..c20a043 100644
--- a/plugins/calendar/calendar.php
+++ b/plugins/calendar/calendar.php
@@ -2304,6 +2304,7 @@ class calendar extends rcube_plugin
             'email' => $sender_identity['email'],
             'role' => 'OPT-PARTICIPANT',
             'status' => strtoupper($status),
+            'rsvp' => true,
           );
           $metadata['attendee'] = $sender_identity['email'];
         }




More information about the commits mailing list