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('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('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);
|
$view = get_input_value('view', RCUBE_INPUT_GPC);
|
||||||
if (in_array($view, array('agendaWeek', 'agendaDay', 'month', 'table')))
|
if (in_array($view, array('agendaWeek', 'agendaDay', 'month', 'table')))
|
||||||
|
@ -1058,6 +1059,7 @@ class calendar extends rcube_plugin
|
||||||
if (!$identity)
|
if (!$identity)
|
||||||
$identity = $rec;
|
$identity = $rec;
|
||||||
$identity['emails'][] = $rec['email'];
|
$identity['emails'][] = $rec['email'];
|
||||||
|
$settings['identities'][$rec['identity_id']] = $rec['email'];
|
||||||
}
|
}
|
||||||
$identity['emails'][] = $this->rc->user->get_username();
|
$identity['emails'][] = $this->rc->user->get_username();
|
||||||
$settings['identity'] = array('name' => $identity['name'], 'email' => $identity['email'], 'emails' => ';' . join(';', $identity['emails']));
|
$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;
|
$event['attachments'] = $attachments;
|
||||||
|
|
||||||
// check for organizer in attendees
|
// 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();
|
$emails = $this->get_user_emails();
|
||||||
$organizer = $owner = false;
|
$organizer = $owner = false;
|
||||||
foreach ($event['attendees'] as $i => $attendee) {
|
foreach ((array)$event['attendees'] as $i => $attendee) {
|
||||||
if ($attendee['role'] == 'ORGANIZER')
|
if ($attendee['role'] == 'ORGANIZER')
|
||||||
$organizer = true;
|
$organizer = $i;
|
||||||
if ($attendee['email'] == in_array($attendee['email'], $emails))
|
if ($attendee['email'] == in_array($attendee['email'], $emails))
|
||||||
$owner = $i;
|
$owner = $i;
|
||||||
else if (!isset($attendee['rsvp']))
|
else if (!isset($attendee['rsvp']))
|
||||||
$event['attendees'][$i]['rsvp'] = true;
|
$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
|
// set owner as organizer if yet missing
|
||||||
if (!$organizer && $owner !== false) {
|
if ($organizer === false && $owner !== false) {
|
||||||
$event['attendees'][$owner]['role'] = 'ORGANIZER';
|
$event['attendees'][$owner]['role'] = 'ORGANIZER';
|
||||||
unset($event['attendees'][$owner]['rsvp']);
|
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'));
|
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++) {
|
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)
|
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;
|
return false;
|
||||||
};
|
};
|
||||||
|
@ -521,6 +521,15 @@ function rcube_calendar_ui(settings)
|
||||||
add_attendee(event.attendees[j], !organizer);
|
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-attendees-form')[(organizer?'show':'hide')]();
|
||||||
$('#edit-attendee-schedule')[(calendar.freebusy?'show':'hide')]();
|
$('#edit-attendee-schedule')[(calendar.freebusy?'show':'hide')]();
|
||||||
};
|
};
|
||||||
|
@ -599,6 +608,9 @@ function rcube_calendar_ui(settings)
|
||||||
data.attendees[i].role = $(elem).val();
|
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
|
// 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)
|
if (data.attendees.length == 1 && data.attendees[0].role == 'ORGANIZER' && data.attendees[0].email == settings.identity.email)
|
||||||
data.attendees = [];
|
data.attendees = [];
|
||||||
|
@ -1371,6 +1383,9 @@ function rcube_calendar_ui(settings)
|
||||||
opts['OPT-PARTICIPANT'] = rcmail.gettext('calendar.roleoptional');
|
opts['OPT-PARTICIPANT'] = rcmail.gettext('calendar.roleoptional');
|
||||||
opts['CHAIR'] = rcmail.gettext('calendar.roleresource');
|
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"' : '') + '>';
|
var select = '<select class="edit-attendee-role"' + (organizer || readonly ? ' disabled="true"' : '') + '>';
|
||||||
for (var r in opts)
|
for (var r in opts)
|
||||||
select += '<option value="'+ r +'" class="' + r.toLowerCase() + '"' + (data.role == r ? ' selected="selected"' : '') +'>' + Q(opts[r]) + '</option>';
|
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="enddate" size="10" id="edit-enddate" />
|
||||||
<input type="text" name="endtime" size="6" id="edit-endtime" />
|
<input type="text" name="endtime" size="6" id="edit-endtime" />
|
||||||
</div>
|
</div>
|
||||||
<div class="event-section" id="edit-identities">
|
<div class="event-section" id="edit-alarms">
|
||||||
<label for="edit-identity"><roundcube:label name="calendar.roleorganizer" /></label>
|
<label for="edit-alarm"><roundcube:label name="calendar.alarms" /></label>
|
||||||
<roundcube:object name="plugin.identity_select" />
|
<roundcube:object name="plugin.alarm_select" />
|
||||||
</div>
|
</div>
|
||||||
<div class="event-section" id="calendar-select">
|
<div class="event-section" id="calendar-select">
|
||||||
<label for="edit-calendar"><roundcube:label name="calendar.calendar" /></label>
|
<label for="edit-calendar"><roundcube:label name="calendar.calendar" /></label>
|
||||||
|
@ -58,10 +58,6 @@
|
||||||
<label for="edit-sensitivity"><roundcube:label name="calendar.sensitivity" /></label>
|
<label for="edit-sensitivity"><roundcube:label name="calendar.sensitivity" /></label>
|
||||||
<roundcube:object name="plugin.sensitivity_select" id="edit-sensitivity" />
|
<roundcube:object name="plugin.sensitivity_select" id="edit-sensitivity" />
|
||||||
</div>
|
</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>
|
</div>
|
||||||
<!-- recurrence settings -->
|
<!-- recurrence settings -->
|
||||||
<div id="event-tab-2">
|
<div id="event-tab-2">
|
||||||
|
|
|
@ -796,7 +796,7 @@ td.topalign {
|
||||||
}
|
}
|
||||||
|
|
||||||
.attendees-list .attendee {
|
.attendees-list .attendee {
|
||||||
padding: 3px 4px 3px 1px;
|
padding: 4px 4px 4px 1px;
|
||||||
background: url(images/attendee-status.gif) 2px -97px no-repeat;
|
background: url(images/attendee-status.gif) 2px -97px no-repeat;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
|
@ -851,7 +851,7 @@ td.topalign {
|
||||||
}
|
}
|
||||||
|
|
||||||
#schedule-freebusy-times td {
|
#schedule-freebusy-times td {
|
||||||
padding: 3px;
|
padding: 4px;
|
||||||
border: 1px solid #ccc;
|
border: 1px solid #ccc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,9 +31,9 @@
|
||||||
<input type="text" name="enddate" size="10" id="edit-enddate" />
|
<input type="text" name="enddate" size="10" id="edit-enddate" />
|
||||||
<input type="text" name="endtime" size="6" id="edit-endtime" />
|
<input type="text" name="endtime" size="6" id="edit-endtime" />
|
||||||
</div>
|
</div>
|
||||||
<div class="event-section" id="edit-identities">
|
<div class="event-section" id="edit-alarms">
|
||||||
<label for="edit-identity"><roundcube:label name="calendar.roleorganizer" /></label>
|
<label for="edit-alarm"><roundcube:label name="calendar.alarms" /></label>
|
||||||
<roundcube:object name="plugin.identity_select" />
|
<roundcube:object name="plugin.alarm_select" />
|
||||||
</div>
|
</div>
|
||||||
<div class="event-section" id="calendar-select">
|
<div class="event-section" id="calendar-select">
|
||||||
<label for="edit-calendar"><roundcube:label name="calendar.calendar" /></label>
|
<label for="edit-calendar"><roundcube:label name="calendar.calendar" /></label>
|
||||||
|
@ -55,10 +55,6 @@
|
||||||
<label for="edit-sensitivity"><roundcube:label name="calendar.sensitivity" /></label>
|
<label for="edit-sensitivity"><roundcube:label name="calendar.sensitivity" /></label>
|
||||||
<roundcube:object name="plugin.sensitivity_select" id="edit-sensitivity" />
|
<roundcube:object name="plugin.sensitivity_select" id="edit-sensitivity" />
|
||||||
</div>
|
</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>
|
</div>
|
||||||
<!-- recurrence settings -->
|
<!-- recurrence settings -->
|
||||||
<div id="event-tab-2">
|
<div id="event-tab-2">
|
||||||
|
|
Loading…
Add table
Reference in a new issue