Internal: Agenda: Cron send messages for all event types + fix messages sent to course users - refs BT#20991

pull/5437/head
Angel Fernando Quiroz Campos 1 year ago
parent a710a2f66f
commit 56f3a74fac
  1. 44
      public/main/cron/agenda_reminders.php
  2. 11
      src/CoreBundle/Entity/Session.php

@ -7,6 +7,8 @@
*/
use Chamilo\CoreBundle\Entity\AgendaReminder;
use Chamilo\CoreBundle\Entity\CourseRelUser;
use Chamilo\CoreBundle\Entity\SessionRelCourseRelUser;
use Chamilo\CourseBundle\Entity\CCalendarEvent;
require_once __DIR__.'/../../main/inc/global.inc.php';
@ -40,7 +42,6 @@ foreach ($reminders as $reminder) {
continue;
}
if ('personal' === $event->determineType()) {
$notificationDate = clone $event->getStartDate();
$notificationDate->sub($reminder->getDateInterval());
@ -48,20 +49,21 @@ foreach ($reminders as $reminder) {
continue;
}
if ('course' !== $event->determineType()) {
$eventDetails = [];
$eventDetails[] = '<p><strong>'.$event->getTitle().'</strong></p>';
if ($event->isAllDay()) {
$eventDetails[] = '<p class="small">'.get_lang('AllDay').'</p>';
$eventDetails[] = '<p class="small">'.get_lang('All day').'</p>';
} else {
$eventDetails[] = sprintf(
'<p class="small">'.get_lang('FromDateX').'</p>',
'<p class="small">'.get_lang('From %s').'</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>',
'<p class="small">'.get_lang('Until %s').'</p>',
api_get_local_time($event->getEnddate(), null, null, false, true, true)
);
}
@ -71,7 +73,7 @@ foreach ($reminders as $reminder) {
$eventDetails[] = $event->getContent();
}
$messageSubject = sprintf(get_lang('ReminderXEvent'), $event->getTitle());
$messageSubject = sprintf(get_lang('Reminder for event : %s'), $event->getTitle());
$messageContent = implode(PHP_EOL, $eventDetails);
MessageManager::send_message_simple(
@ -81,7 +83,6 @@ foreach ($reminders as $reminder) {
$event->getResourceNode()->getCreator()->getId()
);
$getInviteesForEvent = function (?CCalendarEvent $event) use ($em) {
if (!$event) {
return [];
@ -112,16 +113,7 @@ foreach ($reminders as $reminder) {
$event->getResourceNode()->getCreator()->getId()
);
}
}
if ('course' === $event->determineType()) {
$notificationDate = clone $event->getStartDate();
$notificationDate->sub($reminder->getDateInterval());
if ($notificationDate > $now) {
continue;
}
} else {
$eventDetails = [
sprintf('<p><strong>%s</strong></p>', $event->getTitle()),
$event->isAllDay() ? '<p class="small">All Day</p>' : sprintf(
@ -167,6 +159,24 @@ foreach ($reminders as $reminder) {
foreach ($groupUsers as $groupUserId) {
$groupUserIdList[] = $groupUserId;
}
} else {
$course = $resourceLink->getCourse();
if ($session = $resourceLink->getSession()) {
$userSubscriptions = $session->getSessionRelCourseRelUserInCourse($course)->getValues();
$userIdList = array_map(
fn(SessionRelCourseRelUser $sessionCourseUserSubscription) => $sessionCourseUserSubscription->getUser()->getId(),
$userSubscriptions
);
} else {
$userSubscriptions = $course->getUsers()->getValues();
$userIdList = array_map(
fn(CourseRelUser $courseUserSubscription) => $courseUserSubscription->getUser()->getId(),
$userSubscriptions
);
}
}
}
@ -194,8 +204,6 @@ foreach ($reminders as $reminder) {
$reminder->setSent(true);
$em->persist($reminder);
$batchCounter++;
if (($batchCounter % $batchSize) === 0) {

@ -965,6 +965,17 @@ class Session implements ResourceWithAccessUrlInterface, Stringable
return $this->sessionRelCourseRelUsers->matching($criteria);
}
public function getSessionRelCourseRelUserInCourse(Course $course): Collection
{
$criteria = Criteria::create()
->where(
Criteria::expr()->eq('course', $course)
)
;
return $this->sessionRelCourseRelUsers->matching($criteria);
}
public function getIssuedSkills(): Collection
{
return $this->issuedSkills;

Loading…
Cancel
Save