Make identity/organizer selection for events work
This commit is contained in:
parent
de4c4b8c45
commit
8e5a92044e
5 changed files with 40 additions and 23 deletions
|
@ -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'));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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>';
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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">
|
||||
|
|
Loading…
Add table
Reference in a new issue