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