Calendar: Fix edit reminders already sent - refs BT#19392

pull/4109/head
Angel Fernando Quiroz Campos 4 years ago
parent 76a91edbc5
commit 67df1a367f
  1. 1
      main/calendar/agenda.php
  2. 99
      main/inc/lib/agenda.lib.php
  3. 1
      main/template/default/agenda/month.tpl

@ -106,7 +106,6 @@ if ($agendaRemindersEnabled) {
\'<option value="i">'.get_lang('Minutes').'</option>\' + \'<option value="i">'.get_lang('Minutes').'</option>\' +
\'<option value="h">'.get_lang('Hours').'</option>\' + \'<option value="h">'.get_lang('Hours').'</option>\' +
\'<option value="d">'.get_lang('Days').'</option>\' + \'<option value="d">'.get_lang('Days').'</option>\' +
\'<option value="w">'.get_lang('Weeks').'</option>\' +
\'</select>\' + \'</select>\' +
\'</div>\' + \'</div>\' +
\'<div class="col-sm-2"><p class="form-control-static">'.get_lang('Before').'</p></div>\' + \'<div class="col-sm-2"><p class="form-control-static">'.get_lang('Before').'</p></div>\' +

@ -478,9 +478,6 @@ class Agenda
case 'd': case 'd':
$dateInterval = DateInterval::createFromDateString("$count days"); $dateInterval = DateInterval::createFromDateString("$count days");
break; break;
case 'w':
$dateInterval = DateInterval::createFromDateString("$count weeks");
break;
default: default:
return null; return null;
} }
@ -497,16 +494,65 @@ class Agenda
$em->flush(); $em->flush();
} }
public function removeReminders(int $eventId) public function removeReminders(int $eventId, int $count, string $period)
{ {
switch ($period) {
case 'i':
$dateInterval = DateInterval::createFromDateString("$count minutes");
break;
case 'h':
$dateInterval = DateInterval::createFromDateString("$count hours");
break;
case 'd':
$dateInterval = DateInterval::createFromDateString("$count days");
break;
default:
return null;
}
Database::getManager() Database::getManager()
->createQuery( ->createQuery(
'DELETE FROM ChamiloCoreBundle:AgendaReminder ar WHERE ar.eventId = :eventId AND ar.type = :type' 'DELETE FROM ChamiloCoreBundle:AgendaReminder ar
WHERE ar.eventId = :eventId AND ar.type = :type AND ar.dateInterval = :dateInterval'
)
->setParameters(
[
'eventId' => $eventId,
'type' => $this->type,
'dateInterval' => $dateInterval,
]
) )
->setParameters(['eventId' => $eventId, 'type' => $this->type])
->execute(); ->execute();
} }
public function getReminder(int $eventId, int $count, string $period)
{
switch ($period) {
case 'i':
$dateInterval = DateInterval::createFromDateString("$count minutes");
break;
case 'h':
$dateInterval = DateInterval::createFromDateString("$count hours");
break;
case 'd':
$dateInterval = DateInterval::createFromDateString("$count days");
break;
default:
return null;
}
$em = Database::getManager();
$remindersRepo = $em->getRepository('ChamiloCoreBundle:AgendaReminder');
return $remindersRepo->findOneBy(
[
'type' => $this->type,
'dateInterval' => $dateInterval,
'eventId' => $eventId,
]
);
}
/** /**
* @param int $eventId * @param int $eventId
* @param int $courseId * @param int $courseId
@ -810,7 +856,7 @@ class Agenda
$authorId = 0, $authorId = 0,
array $inviteesList = [], array $inviteesList = [],
bool $isCollective = false, bool $isCollective = false,
array $reminders = [] array $remindersList = []
) { ) {
$id = (int) $id; $id = (int) $id;
$start = api_get_utc_datetime($start); $start = api_get_utc_datetime($start);
@ -1129,13 +1175,7 @@ class Agenda
break; break;
} }
if (api_get_configuration_value('agenda_reminders')) { $this->editReminders($id, $remindersList);
$this->removeReminders($id);
foreach ($reminders as $reminder) {
$this->addReminder($id, $reminder[0], $reminder[1]);
}
}
} }
/** /**
@ -2512,6 +2552,12 @@ class Agenda
return $sendTo; return $sendTo;
} }
/**
* @param int $eventId
* @param string $type
*
* @return array<int, AgendaReminder>
*/
public function getEventReminders($eventId, $type = null): array public function getEventReminders($eventId, $type = null): array
{ {
$em = Database::getManager(); $em = Database::getManager();
@ -2860,7 +2906,6 @@ class Agenda
'i' => get_lang('Minutes'), 'i' => get_lang('Minutes'),
'h' => get_lang('Hours'), 'h' => get_lang('Hours'),
'd' => get_lang('Days'), 'd' => get_lang('Days'),
'w' => get_lang('Weeks'),
] ]
) )
->setValue($reminderInfo['date_interval'][1]) ->setValue($reminderInfo['date_interval'][1])
@ -4505,6 +4550,30 @@ class Agenda
$em->flush(); $em->flush();
} }
private function editReminders(int $eventId, array $reminderList = [])
{
if (false === api_get_configuration_value('agenda_reminders')) {
return;
}
$eventReminders = $this->parseEventReminders(
$this->getEventReminders($eventId)
);
$eventIntervalList = array_column($eventReminders, 'date_interval');
foreach ($eventIntervalList as $eventIntervalInfo) {
if (!in_array($eventIntervalInfo, $reminderList)) {
$this->removeReminders($eventId, $eventIntervalInfo[0], $eventIntervalInfo[1]);
}
}
foreach ($reminderList as $reminderInfo) {
if (!in_array($reminderInfo, $eventIntervalList)) {
$this->addReminder($eventId, $reminderInfo[0], $reminderInfo[1]);
}
}
}
private static function isUserInvitedInEvent(int $id, int $userId): bool private static function isUserInvitedInEvent(int $id, int $userId): bool
{ {
$user = api_get_user_entity($userId); $user = api_get_user_entity($userId);

@ -937,7 +937,6 @@ $(function() {
'<option value="i">{{ 'Minutes'|get_lang }}</option>' + '<option value="i">{{ 'Minutes'|get_lang }}</option>' +
'<option value="h">{{ 'Hours'|get_lang }}</option>' + '<option value="h">{{ 'Hours'|get_lang }}</option>' +
'<option value="d">{{ 'Days'|get_lang }}</option>' + '<option value="d">{{ 'Days'|get_lang }}</option>' +
'<option value="w">{{ 'Weeks'|get_lang }}</option>' +
'</select>' + '</select>' +
'</div>' + '</div>' +
'<div class="col-sm-2"><p class="form-control-static">{{ 'Before'|get_lang }}</p></div>' + '<div class="col-sm-2"><p class="form-control-static">{{ 'Before'|get_lang }}</p></div>' +

Loading…
Cancel
Save