upgrade
This commit is contained in:
206
main/cron/agenda_reminders.php
Normal file
206
main/cron/agenda_reminders.php
Normal file
@@ -0,0 +1,206 @@
|
||||
<?php
|
||||
|
||||
/* For licensing terms, see /license.txt */
|
||||
|
||||
/**
|
||||
* This script send notification messages to users that have reminders from an event in their agenda.
|
||||
*/
|
||||
require_once __DIR__.'/../../main/inc/global.inc.php';
|
||||
|
||||
exit;
|
||||
|
||||
if (false === api_get_configuration_value('agenda_reminders')) {
|
||||
exit;
|
||||
}
|
||||
|
||||
$batchCounter = 0;
|
||||
$batchSize = 100;
|
||||
|
||||
$agendaCollectiveInvitations = api_get_configuration_value('agenda_collective_invitations');
|
||||
|
||||
$now = new DateTime('now', new DateTimeZone('UTC'));
|
||||
|
||||
$em = Database::getManager();
|
||||
$remindersRepo = $em->getRepository('ChamiloCoreBundle:AgendaReminder');
|
||||
|
||||
$reminders = $remindersRepo->findBySent(false);
|
||||
|
||||
$senderId = api_get_configuration_value('agenda_reminders_sender_id');
|
||||
|
||||
if (empty($senderId)) {
|
||||
$firstAdmin = current(UserManager::get_all_administrators());
|
||||
$senderId = $firstAdmin['user_id'];
|
||||
}
|
||||
|
||||
foreach ($reminders as $reminder) {
|
||||
if ('personal' === $reminder->getType()) {
|
||||
$event = $em->find('ChamiloCoreBundle:PersonalAgenda', $reminder->getEventId());
|
||||
|
||||
if (null === $event) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$notificationDate = clone $event->getDate();
|
||||
$notificationDate->sub($reminder->getDateInterval());
|
||||
|
||||
if ($notificationDate > $now) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$eventDetails = [];
|
||||
$eventDetails[] = '<p><strong>'.$event->getTitle().'</strong></p>';
|
||||
|
||||
if ($event->getAllDay()) {
|
||||
$eventDetails[] = '<p class="small">'.get_lang('AllDay').'</p>';
|
||||
} else {
|
||||
$eventDetails[] = sprintf(
|
||||
'<p class="small">'.get_lang('FromDateX').'</p>',
|
||||
api_get_local_time($event->getDate(), null, null, false, true, true)
|
||||
);
|
||||
|
||||
if (!empty($event->getEnddate())) {
|
||||
$eventDetails[] = sprintf(
|
||||
'<p class="small">'.get_lang('UntilDateX').'</p>',
|
||||
api_get_local_time($event->getEnddate(), null, null, false, true, true)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($event->getText())) {
|
||||
$eventDetails[] = $event->getText();
|
||||
}
|
||||
|
||||
$messageSubject = sprintf(get_lang('ReminderXEvent'), $event->getTitle());
|
||||
$messageContent = implode(PHP_EOL, $eventDetails);
|
||||
|
||||
MessageManager::send_message_simple(
|
||||
$event->getUser(),
|
||||
$messageSubject,
|
||||
$messageContent,
|
||||
$event->getUser()
|
||||
);
|
||||
|
||||
if ($agendaCollectiveInvitations) {
|
||||
$invitees = Agenda::getInviteesForPersonalEvent($reminder->getEventId());
|
||||
$inviteesIdList = array_column($invitees, 'id');
|
||||
|
||||
foreach ($inviteesIdList as $userId) {
|
||||
MessageManager::send_message_simple(
|
||||
$userId,
|
||||
$messageSubject,
|
||||
$messageContent,
|
||||
$event->getUser()
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ('course' === $reminder->getType()) {
|
||||
$event = $em->find('ChamiloCourseBundle:CCalendarEvent', $reminder->getEventId());
|
||||
|
||||
if (null === $event) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$agenda = new Agenda('course');
|
||||
|
||||
$notificationDate = clone $event->getStartDate();
|
||||
$notificationDate->sub($reminder->getDateInterval());
|
||||
|
||||
if ($notificationDate > $now) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$eventDetails = [];
|
||||
$eventDetails[] = '<p><strong>'.$event->getTitle().'</strong></p>';
|
||||
|
||||
if ($event->getAllDay()) {
|
||||
$eventDetails[] = '<p class="small">'.get_lang('AllDay').'</p>';
|
||||
} else {
|
||||
$eventDetails[] = sprintf(
|
||||
'<p class="small">'.get_lang('FromDateX').'</p>',
|
||||
api_get_local_time($event->getStartDate(), null, null, false, true, true)
|
||||
);
|
||||
|
||||
if (!empty($event->getEndDate())) {
|
||||
$eventDetails[] = sprintf(
|
||||
'<p class="small">'.get_lang('UntilDateX').'</p>',
|
||||
api_get_local_time($event->getEndDate(), null, null, false, true, true)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($event->getContent())) {
|
||||
$eventDetails[] = $event->getContent();
|
||||
}
|
||||
|
||||
if (!empty($event->getComment())) {
|
||||
$eventDetails[] = '<p class="small">'.$event->getComment().'</p>';
|
||||
}
|
||||
|
||||
$messageSubject = sprintf(get_lang('ReminderXEvent'), $event->getTitle());
|
||||
$messageContent = implode(PHP_EOL, $eventDetails);
|
||||
|
||||
$courseInfo = api_get_course_info_by_id($event->getCId());
|
||||
|
||||
$sendTo = $agenda->getUsersAndGroupSubscribedToEvent(
|
||||
$event->getIid(),
|
||||
$event->getCId(),
|
||||
$event->getSessionId()
|
||||
);
|
||||
|
||||
if ($sendTo['everyone']) {
|
||||
$users = CourseManager::get_user_list_from_course_code($courseInfo['code'], $event->getSessionId());
|
||||
$userIdList = array_keys($users);
|
||||
|
||||
if ($event->getSessionId()) {
|
||||
$coaches = SessionManager::getCoachesByCourseSession($event->getSessionId(), $event->getCId());
|
||||
$userIdList += $coaches;
|
||||
}
|
||||
|
||||
foreach ($userIdList as $userId) {
|
||||
MessageManager::send_message_simple(
|
||||
$userId,
|
||||
$messageSubject,
|
||||
$messageContent,
|
||||
$senderId
|
||||
);
|
||||
}
|
||||
} else {
|
||||
foreach ($sendTo['groups'] as $groupId) {
|
||||
$groupUserList = GroupManager::get_users($groupId, false, null, null, false, $event->getSessionId());
|
||||
|
||||
foreach ($groupUserList as $groupUserId) {
|
||||
MessageManager::send_message_simple(
|
||||
$groupUserId,
|
||||
$messageSubject,
|
||||
$messageContent,
|
||||
$senderId
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($sendTo['users'] as $userId) {
|
||||
MessageManager::send_message_simple(
|
||||
$userId,
|
||||
$messageSubject,
|
||||
$messageContent,
|
||||
$senderId
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$reminder->setSent(true);
|
||||
|
||||
$em->persist($reminder);
|
||||
|
||||
$batchCounter++;
|
||||
|
||||
if (($batchCounter % $batchSize) === 0) {
|
||||
$em->flush();
|
||||
}
|
||||
}
|
||||
|
||||
$em->flush();
|
||||
$em->clear();
|
||||
Reference in New Issue
Block a user