Agenda: Allow set reminder from announcement - refs BT#19392

pull/4134/head
Angel Fernando Quiroz Campos 4 years ago
parent a4aa79b692
commit 4d90c858d1
  1. 23
      main/announcements/announcements.php
  2. 37
      main/calendar/agenda.php
  3. 5
      main/calendar/agenda_js.php
  4. 8
      main/inc/lib/AnnouncementManager.php
  5. 34
      main/inc/lib/agenda.lib.php
  6. 32
      main/template/default/agenda/month.tpl

@ -732,6 +732,18 @@ switch ($action) {
$form->addHtml('<div id="add_event_options" style="display:none;">');
$form->addDateTimePicker('event_date_start', get_lang('DateStart'));
$form->addDateTimePicker('event_date_end', get_lang('DateEnd'));
if (true === api_get_configuration_value('agenda_reminders')) {
$form->addHtml('<hr><div id="notification_list"></div>');
$form->addButton('add_notification', get_lang('AddNotification'), 'bell-o')->setType('button');
$form->addHtml('<hr>');
$htmlHeadXtra[] = '<script>$(function () {'
.Agenda::getJsForReminders('#announcement_add_notification')
.'});</script>'
;
}
$form->addHtml('</div>');
if ($showSubmitButton) {
@ -758,6 +770,11 @@ switch ($action) {
}
$sendMeCopy = isset($data['send_me_a_copy_by_email']) ? true : false;
$notificationCount = $data['notification_count'] ?? [];
$notificationPeriod = $data['notification_period'] ?? [];
$reminders = $notificationCount ? array_map(null, $notificationCount, $notificationPeriod) : [];
if (isset($id) && $id) {
// there is an Id => the announcement already exists => update mode
if (Security::check_token('post')) {
@ -779,7 +796,8 @@ switch ($action) {
$id,
$data['event_date_start'],
$data['event_date_end'],
empty($data['users']) ? ['everyone'] : $data['users']
empty($data['users']) ? ['everyone'] : $data['users'],
$reminders
);
}
@ -867,7 +885,8 @@ switch ($action) {
$insert_id,
$data['event_date_start'],
$data['event_date_end'],
empty($data['users']) ? ['everyone'] : $data['users']
empty($data['users']) ? ['everyone'] : $data['users'],
$reminders
);
}

@ -95,39 +95,10 @@ function add_image_form() {
$agendaRemindersEnabled = api_get_configuration_value('agenda_reminders');
if ($agendaRemindersEnabled) {
$htmlHeadXtra[] = '<script>
$(function () {
var template = \'<div class="form-group">\' +
\'<div class="col-sm-offset-2 col-sm-3">\' +
\'<input min="0" step="1" id="notification_count[]" type="number" class=" form-control" name="notification_count[]">\' +
\'</div>\' +
\'<div class="col-sm-3">\' +
\'<select class="form-control" name="notification_period[]" id="form_notification_period[]">\' +
\'<option value="i">'.get_lang('Minutes').'</option>\' +
\'<option value="h">'.get_lang('Hours').'</option>\' +
\'<option value="d">'.get_lang('Days').'</option>\' +
\'</select>\' +
\'</div>\' +
\'<div class="col-sm-2"><p class="form-control-static">'.get_lang('Before').'</p></div>\' +
\'<div class="text-right col-sm-2">\' +
\'<button class="btn btn-default delete-notification" type="button" aria-label="'.get_lang('Delete').'"><em class="fa fa-times"></em></button>\' +
\'</div>\' +
\'</div>\';
$("#add_event_add_notification").on("click", function (e) {
e.preventDefault();
$(template).appendTo("#notification_list");
$("#notification_list select").selectpicker("refresh");
});
$("#notification_list").on("click", ".delete-notification", function (e) {
e.preventDefault();
$(this).parents(".form-group").remove();
});
});
</script>';
$htmlHeadXtra[] = '<script>$(function () {'
.Agenda::getJsForReminders('#add_event_add_notification')
.'});</script>'
;
}
// setting the name of the tool

@ -279,6 +279,11 @@ if ('course' === $agenda->type) {
$form->addElement('checkbox', 'add_as_annonuncement', null, get_lang('AddAsAnnouncement'));
$form->addHtml('</div>');
$form->addElement('textarea', 'comment', get_lang('Comment'), ['id' => 'comment']);
$tpl->assign(
'agenda_reminders_js',
Agenda::getJsForReminders('#form_add_notification')
);
}
if (api_get_configuration_value('agenda_collective_invitations') && 'personal' === $agenda->type) {

@ -2238,7 +2238,8 @@ class AnnouncementManager
int $announcementId,
string $startDate,
string $endDate,
array $choosenUsers = []
array $choosenUsers = [],
array $reminders = []
): ?CCalendarEvent {
$em = Database::getManager();
$announcement = $em->find('ChamiloCourseBundle:CAnnouncement', $announcementId);
@ -2256,7 +2257,10 @@ class AnnouncementManager
[],
[],
null,
''
'',
[],
false,
$reminders
);
if ($eventId) {

@ -4557,6 +4557,40 @@ class Agenda
$em->flush();
}
public static function getJsForReminders(string $cssSelectorBtnAdd): string
{
return '
var template = \'<div class="form-group">\' +
\'<div class="col-sm-offset-2 col-sm-3">\' +
\'<input min="0" step="1" id="notification_count[]" type="number" class=" form-control" name="notification_count[]">\' +
\'</div>\' +
\'<div class="col-sm-3">\' +
\'<select class="form-control" name="notification_period[]" id="form_notification_period[]">\' +
\'<option value="i">'.get_lang('Minutes').'</option>\' +
\'<option value="h">'.get_lang('Hours').'</option>\' +
\'<option value="d">'.get_lang('Days').'</option>\' +
\'</select>\' +
\'</div>\' +
\'<div class="col-sm-2"><p class="form-control-static">'.get_lang('Before').'</p></div>\' +
\'<div class="text-right col-sm-2">\' +
\'<button class="btn btn-default delete-notification" type="button" aria-label="'.get_lang('Delete').'"><em class="fa fa-times"></em></button>\' +
\'</div>\' +
\'</div>\';
$("'.$cssSelectorBtnAdd.'").on("click", function (e) {
e.preventDefault();
$(template).appendTo("#notification_list");
$("#notification_list select").selectpicker("refresh");
});
$("#notification_list").on("click", ".delete-notification", function (e) {
e.preventDefault();
$(this).parents(".form-group").remove();
});';
}
private function editReminders(int $eventId, array $reminderList = [])
{
if (false === api_get_configuration_value('agenda_reminders')) {

@ -927,37 +927,7 @@ $(function() {
}
});
{% if 'agenda_reminders'|api_get_configuration_value %}
var template = '<div class="form-group">' +
'<div class="col-sm-offset-2 col-sm-3">' +
'<input min="0" step="1" id="notification_count[]" type="number" class=" form-control" name="notification_count[]">' +
'</div>' +
'<div class="col-sm-3">' +
'<select class="form-control" name="notification_period[]" id="form_notification_period[]">' +
'<option value="i">{{ 'Minutes'|get_lang }}</option>' +
'<option value="h">{{ 'Hours'|get_lang }}</option>' +
'<option value="d">{{ 'Days'|get_lang }}</option>' +
'</select>' +
'</div>' +
'<div class="col-sm-2"><p class="form-control-static">{{ 'Before'|get_lang }}</p></div>' +
'<div class="text-right col-sm-2">' +
'<button class="btn btn-default delete-notification" type="button" aria-label="{{ 'Delete'|get_lang }}"><em class="fa fa-times"></em></button>' +
'</div>' +
'</div>';
$('#form_add_notification').on('click', function (e) {
e.preventDefault();
$(template).appendTo('#notification_list');
$('#notification_list select').selectpicker('refresh');
});
$('#notification_list').on('click', '.delete-notification', function (e) {
e.preventDefault();
$(this).parents('.form-group').remove();
});
{% endif %}
{{ agenda_reminders_js }}
});
</script>
{{ actions_div }}

Loading…
Cancel
Save