Add possibility to choose to which attendees invitations/notifications will be sent (#1790)
Small style improvements in event dialog
This commit is contained in:
parent
ca5cb4ac01
commit
4b3283a26f
5 changed files with 63 additions and 19 deletions
|
@ -1644,6 +1644,10 @@ class calendar extends rcube_plugin
|
|||
// skip myself for obvious reasons
|
||||
if (!$attendee['email'] || in_array(strtolower($attendee['email']), $emails))
|
||||
continue;
|
||||
|
||||
// skip if notification is disabled for this attendee
|
||||
if ($attendee['noreply'])
|
||||
continue;
|
||||
|
||||
// which template to use for mail text
|
||||
$is_new = !in_array($attendee['email'], $old_attendees);
|
||||
|
|
|
@ -753,9 +753,24 @@ function rcube_calendar_ui(settings)
|
|||
// don't submit attendees if only myself is added as organizer
|
||||
if (data.attendees.length == 1 && data.attendees[0].role == 'ORGANIZER' && String(data.attendees[0].email).toLowerCase() == settings.identity.email)
|
||||
data.attendees = [];
|
||||
|
||||
|
||||
// per-attendee notification suppression
|
||||
var need_invitation = false;
|
||||
if (allow_invitations) {
|
||||
$.each(data.attendees, function (i, v) {
|
||||
if (v.role != 'ORGANIZER') {
|
||||
if ($('input.edit-attendee-reply[value="' + v.email + '"]').prop('checked')) {
|
||||
need_invitation = true;
|
||||
}
|
||||
else {
|
||||
data.attendees[i].noreply = 1;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// tell server to send notifications
|
||||
if ((data.attendees.length || (event.id && event.attendees.length)) && allow_invitations && (notify.checked || invite.checked)) {
|
||||
if ((data.attendees.length || (event.id && event.attendees.length)) && allow_invitations && (notify.checked || invite.checked || need_invitation)) {
|
||||
data._notify = 1;
|
||||
data._comment = comment.val();
|
||||
}
|
||||
|
@ -1543,6 +1558,9 @@ function rcube_calendar_ui(settings)
|
|||
var dellink = '<a href="#delete" class="iconlink delete deletelink" title="' + Q(rcmail.gettext('delete')) + '">' + icon + '</a>';
|
||||
var tooltip = data.status || '';
|
||||
|
||||
// send invitation checkbox
|
||||
var invbox = '<input type="checkbox" class="edit-attendee-reply" value="' + Q(data.email) +'" checked="checked" title="' + Q(rcmail.gettext('calendar.sendinvitations')) + '" />';
|
||||
|
||||
if (data['delegated-to'])
|
||||
tooltip = rcmail.gettext('delegatedto', 'calendar') + data['delegated-to'];
|
||||
else if (data['delegated-from'])
|
||||
|
@ -1552,7 +1570,7 @@ function rcube_calendar_ui(settings)
|
|||
'<td class="name">' + dispname + '</td>' +
|
||||
'<td class="availability"><img src="./program/resources/blank.gif" class="availabilityicon ' + avail + '" data-email="' + data.email + '" alt="" /></td>' +
|
||||
'<td class="confirmstate"><span class="' + String(data.status).toLowerCase() + '" title="' + Q(tooltip) + '">' + Q(data.status || '') + '</span></td>' +
|
||||
'<td class="options">' + (organizer || readonly ? '' : dellink) + '</td>';
|
||||
'<td class="options">' + (organizer || readonly ? '' : dellink + invbox) + '</td>';
|
||||
|
||||
var table = rcmail.env.calendar_resources && data.cutype == 'RESOURCE' ? resources_list : attendees_list;
|
||||
var tr = $('<tr>')
|
||||
|
@ -3368,9 +3386,17 @@ function rcube_calendar_ui(settings)
|
|||
return false;
|
||||
});
|
||||
|
||||
// keep these two checkboxes in sync
|
||||
$('#edit-attendees-donotify, #edit-attendees-invite').click(function(){
|
||||
$('#edit-attendees-donotify, #edit-attendees-invite').prop('checked', this.checked);
|
||||
// handle change of "send invitations" checkbox
|
||||
$('#edit-attendees-invite').change(function() {
|
||||
$('#edit-attendees-donotify,input.edit-attendee-reply').prop('checked', this.checked);
|
||||
// hide/show comment field
|
||||
$('.attendees-commentbox')[this.checked ? 'show' : 'hide']();
|
||||
});
|
||||
|
||||
// delegate change event to "send invitations" checkbox
|
||||
$('#edit-attendees-donotify').change(function() {
|
||||
$('#edit-attendees-invite').click();
|
||||
return false;
|
||||
});
|
||||
|
||||
$('#edit-attendee-schedule').click(function(){
|
||||
|
|
|
@ -714,11 +714,11 @@ class calendar_ui
|
|||
'rows' => 4, 'cols' => 55, 'title' => $this->cal->gettext('itipcommenttitle')));
|
||||
|
||||
return html::div($attrib,
|
||||
html::p('attendees-invitebox', html::label(null, $this->cal->gettext('sendinvitations') . $checkbox->show(1))) .
|
||||
html::div(null, $input->show() . " " .
|
||||
html::tag('input', array('type' => 'button', 'class' => 'button', 'id' => 'edit-attendee-add', 'value' => $this->cal->gettext('addattendee'))) . " " .
|
||||
html::tag('input', array('type' => 'button', 'class' => 'button', 'id' => 'edit-attendee-schedule', 'value' => $this->cal->gettext('scheduletime').'...'))) .
|
||||
html::p('attendees-invitebox', html::label(null, $checkbox->show(1) . $this->cal->gettext('sendinvitations'))) .
|
||||
html::p('attendees-commentbox', html::label(null, $this->cal->gettext('comment') . $textarea->show()))
|
||||
html::p('attendees-commentbox', html::label(null, $this->cal->gettext('itipcomment') . $textarea->show()))
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -170,7 +170,8 @@ $labels['itipmailbodycancel'] = "\$sender has rejected your participation in the
|
|||
|
||||
$labels['itipdeclineevent'] = 'Do you want to decline your invitation to this event?';
|
||||
$labels['declinedeleteconfirm'] = 'Do you also want to delete this declined event from your calendar?';
|
||||
$labels['itipcommenttitle'] = 'This comment will be attached to the invitation/notification message send to participants';
|
||||
$labels['itipcomment'] = 'Invitation/notification comment';
|
||||
$labels['itipcommenttitle'] = 'This comment will be attached to the invitation/notification message sent to participants';
|
||||
|
||||
$labels['notanattendee'] = 'You\'re not listed as an attendee of this event';
|
||||
$labels['eventcancelled'] = 'The event has been cancelled';
|
||||
|
|
|
@ -845,9 +845,8 @@ td.topalign {
|
|||
|
||||
.edit-attendees-table th.options,
|
||||
.edit-attendees-table td.options {
|
||||
width: 3em;
|
||||
text-align: right;
|
||||
padding-right: 4px;
|
||||
width: 40px;
|
||||
padding: 2px 4px;
|
||||
}
|
||||
|
||||
.edit-attendees-table th.name,
|
||||
|
@ -858,8 +857,12 @@ td.topalign {
|
|||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.edit-attendees-table td.name select {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.edit-attendees-table a.deletelink {
|
||||
display: block;
|
||||
display: inline-block;
|
||||
width: 17px;
|
||||
height: 17px;
|
||||
padding: 0;
|
||||
|
@ -870,16 +873,28 @@ td.topalign {
|
|||
#edit-attendees-form,
|
||||
#edit-resources-form {
|
||||
position: relative;
|
||||
margin-top: 1em;
|
||||
margin-top: 3px;
|
||||
}
|
||||
|
||||
#edit-attendees-form .attendees-invitebox {
|
||||
text-align: right;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#edit-attendees-form .attendees-invitebox label {
|
||||
padding-right: 3px;
|
||||
}
|
||||
|
||||
#edit-attendees-form #edit-attendee-schedule,
|
||||
#edit-resources-form #edit-resource-find {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
#edit-attendees-form #edit-attendee-schedule {
|
||||
margin-left: 20px;
|
||||
}
|
||||
|
||||
.edit-attendees-table select.edit-attendee-role {
|
||||
border: 0;
|
||||
padding: 2px;
|
||||
|
@ -1124,10 +1139,8 @@ td.topalign {
|
|||
text-align: center;
|
||||
}
|
||||
|
||||
#eventedit .attendees-commentbox textarea {
|
||||
width: auto;
|
||||
margin-left: 10px;
|
||||
vertical-align: middle;
|
||||
#eventedit .attendees-commentbox label {
|
||||
display: block;
|
||||
}
|
||||
|
||||
a.dropdown-link {
|
||||
|
|
Loading…
Add table
Reference in a new issue