plugins/calendar
Thomas Brüderli
bruederli at kolabsys.com
Sat Dec 15 17:25:17 CET 2012
plugins/calendar/calendar.php | 22 +++++++++++-----
plugins/calendar/calendar_ui.js | 17 +++++++++++-
plugins/calendar/skins/classic/templates/eventedit.html | 10 ++-----
plugins/calendar/skins/larry/calendar.css | 4 +-
plugins/calendar/skins/larry/templates/eventedit.html | 10 ++-----
5 files changed, 40 insertions(+), 23 deletions(-)
New commits:
commit 8e5a92044e5db99520e35b8905adcb8f78f58c5e
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date: Sat Dec 15 17:24:53 2012 +0100
Make identity/organizer selection for events work
diff --git a/plugins/calendar/calendar.php b/plugins/calendar/calendar.php
index eafb015..350903d 100644
--- a/plugins/calendar/calendar.php
+++ b/plugins/calendar/calendar.php
@@ -277,6 +277,7 @@ class calendar extends rcube_plugin
$this->rc->output->set_env('calendar_driver', $this->rc->config->get('calendar_driver'), false);
$this->rc->output->set_env('mscolors', $this->driver->get_color_values());
+ $this->rc->output->set_env('identities-selector', $this->ui->identity_select(array('id' => 'edit-identities-list')));
$view = get_input_value('view', RCUBE_INPUT_GPC);
if (in_array($view, array('agendaWeek', 'agendaDay', 'month', 'table')))
@@ -1058,6 +1059,7 @@ class calendar extends rcube_plugin
if (!$identity)
$identity = $rec;
$identity['emails'][] = $rec['email'];
+ $settings['identities'][$rec['identity_id']] = $rec['email'];
}
$identity['emails'][] = $this->rc->user->get_username();
$settings['identity'] = array('name' => $identity['name'], 'email' => $identity['email'], 'emails' => ';' . join(';', $identity['emails']));
@@ -1278,24 +1280,32 @@ class calendar extends rcube_plugin
$event['attachments'] = $attachments;
// check for organizer in attendees
- if ($event['attendees'] && ($action == 'new' || $action == 'edit')) {
+ if (!$event['attendees'])
+ $event['attendees'] = array();
+ if ($action == 'new' || $action == 'edit') {
$emails = $this->get_user_emails();
$organizer = $owner = false;
- foreach ($event['attendees'] as $i => $attendee) {
+ foreach ((array)$event['attendees'] as $i => $attendee) {
if ($attendee['role'] == 'ORGANIZER')
- $organizer = true;
+ $organizer = $i;
if ($attendee['email'] == in_array($attendee['email'], $emails))
$owner = $i;
else if (!isset($attendee['rsvp']))
$event['attendees'][$i]['rsvp'] = true;
}
-
+
+ // set new organizer identity
+ if ($organizer !== false && !empty($event['_identity']) && ($identity = $this->rc->user->get_identity($event['_identity']))) {
+ $event['attendees'][$organizer]['name'] = $identity['name'];
+ $event['attendees'][$organizer]['email'] = $identity['email'];
+ }
+
// set owner as organizer if yet missing
- if (!$organizer && $owner !== false) {
+ if ($organizer === false && $owner !== false) {
$event['attendees'][$owner]['role'] = 'ORGANIZER';
unset($event['attendees'][$owner]['rsvp']);
}
- else if (!$organizer && $action == 'new' && ($identity = $this->rc->user->get_identity()) && $identity['email']) {
+ else if ($organizer === false && $action == 'new' && ($identity = $this->rc->user->get_identity($event['_identity'])) && $identity['email']) {
array_unshift($event['attendees'], array('role' => 'ORGANIZER', 'name' => $identity['name'], 'email' => $identity['email'], 'status' => 'ACCEPTED'));
}
}
diff --git a/plugins/calendar/calendar_ui.js b/plugins/calendar/calendar_ui.js
index 57a5947..a93f050 100644
--- a/plugins/calendar/calendar_ui.js
+++ b/plugins/calendar/calendar_ui.js
@@ -159,7 +159,7 @@ function rcube_calendar_ui(settings)
{
for (var i=0; event.attendees && i < event.attendees.length; i++) {
if ((!role || event.attendees[i].role == role) && event.attendees[i].email && settings.identity.emails.indexOf(';'+event.attendees[i].email) >= 0)
- return true;
+ return event.attendees[i];
}
return false;
};
@@ -521,6 +521,15 @@ function rcube_calendar_ui(settings)
add_attendee(event.attendees[j], !organizer);
}
+ // select the correct organizer identity
+ var identity_id = 0;
+ $.each(settings.identities, function(i,v){
+ if (organizer && v == organizer.email) {
+ identity_id = i;
+ return false;
+ }
+ });
+ $('#edit-identities-list').val(identity_id);
$('#edit-attendees-form')[(organizer?'show':'hide')]();
$('#edit-attendee-schedule')[(calendar.freebusy?'show':'hide')]();
};
@@ -599,6 +608,9 @@ function rcube_calendar_ui(settings)
data.attendees[i].role = $(elem).val();
});
+ if (organizer)
+ data._identity = $('#edit-identities-list option:selected').val();
+
// don't submit attendees if only myself is added as organizer
if (data.attendees.length == 1 && data.attendees[0].role == 'ORGANIZER' && data.attendees[0].email == settings.identity.email)
data.attendees = [];
@@ -1371,6 +1383,9 @@ function rcube_calendar_ui(settings)
opts['OPT-PARTICIPANT'] = rcmail.gettext('calendar.roleoptional');
opts['CHAIR'] = rcmail.gettext('calendar.roleresource');
+ if (organizer && !readonly)
+ dispname = rcmail.env['identities-selector'];
+
var select = '<select class="edit-attendee-role"' + (organizer || readonly ? ' disabled="true"' : '') + '>';
for (var r in opts)
select += '<option value="'+ r +'" class="' + r.toLowerCase() + '"' + (data.role == r ? ' selected="selected"' : '') +'>' + Q(opts[r]) + '</option>';
diff --git a/plugins/calendar/skins/classic/templates/eventedit.html b/plugins/calendar/skins/classic/templates/eventedit.html
index d889d57..3548478 100644
--- a/plugins/calendar/skins/classic/templates/eventedit.html
+++ b/plugins/calendar/skins/classic/templates/eventedit.html
@@ -34,9 +34,9 @@
<input type="text" name="enddate" size="10" id="edit-enddate" />
<input type="text" name="endtime" size="6" id="edit-endtime" />
</div>
- <div class="event-section" id="edit-identities">
- <label for="edit-identity"><roundcube:label name="calendar.roleorganizer" /></label>
- <roundcube:object name="plugin.identity_select" />
+ <div class="event-section" id="edit-alarms">
+ <label for="edit-alarm"><roundcube:label name="calendar.alarms" /></label>
+ <roundcube:object name="plugin.alarm_select" />
</div>
<div class="event-section" id="calendar-select">
<label for="edit-calendar"><roundcube:label name="calendar.calendar" /></label>
@@ -58,10 +58,6 @@
<label for="edit-sensitivity"><roundcube:label name="calendar.sensitivity" /></label>
<roundcube:object name="plugin.sensitivity_select" id="edit-sensitivity" />
</div>
- <div class="event-section" id="edit-alarms">
- <label for="edit-alarm"><roundcube:label name="calendar.alarms" /></label>
- <roundcube:object name="plugin.alarm_select" />
- </div>
</div>
<!-- recurrence settings -->
<div id="event-tab-2">
diff --git a/plugins/calendar/skins/larry/calendar.css b/plugins/calendar/skins/larry/calendar.css
index 0f71aad..a209710 100644
--- a/plugins/calendar/skins/larry/calendar.css
+++ b/plugins/calendar/skins/larry/calendar.css
@@ -796,7 +796,7 @@ td.topalign {
}
.attendees-list .attendee {
- padding: 3px 4px 3px 1px;
+ padding: 4px 4px 4px 1px;
background: url(images/attendee-status.gif) 2px -97px no-repeat;
white-space: nowrap;
}
@@ -851,7 +851,7 @@ td.topalign {
}
#schedule-freebusy-times td {
- padding: 3px;
+ padding: 4px;
border: 1px solid #ccc;
}
diff --git a/plugins/calendar/skins/larry/templates/eventedit.html b/plugins/calendar/skins/larry/templates/eventedit.html
index 66dc649..841baf7 100644
--- a/plugins/calendar/skins/larry/templates/eventedit.html
+++ b/plugins/calendar/skins/larry/templates/eventedit.html
@@ -31,9 +31,9 @@
<input type="text" name="enddate" size="10" id="edit-enddate" />
<input type="text" name="endtime" size="6" id="edit-endtime" />
</div>
- <div class="event-section" id="edit-identities">
- <label for="edit-identity"><roundcube:label name="calendar.roleorganizer" /></label>
- <roundcube:object name="plugin.identity_select" />
+ <div class="event-section" id="edit-alarms">
+ <label for="edit-alarm"><roundcube:label name="calendar.alarms" /></label>
+ <roundcube:object name="plugin.alarm_select" />
</div>
<div class="event-section" id="calendar-select">
<label for="edit-calendar"><roundcube:label name="calendar.calendar" /></label>
@@ -55,10 +55,6 @@
<label for="edit-sensitivity"><roundcube:label name="calendar.sensitivity" /></label>
<roundcube:object name="plugin.sensitivity_select" id="edit-sensitivity" />
</div>
- <div class="event-section" id="edit-alarms">
- <label for="edit-alarm"><roundcube:label name="calendar.alarms" /></label>
- <roundcube:object name="plugin.alarm_select" />
- </div>
</div>
<!-- recurrence settings -->
<div id="event-tab-2">
More information about the commits
mailing list