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

@ -965,6 +965,17 @@ class Session implements ResourceWithAccessUrlInterface, Stringable
return $this->sessionRelCourseRelUsers->matching($criteria); 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 public function getIssuedSkills(): Collection
{ {
return $this->issuedSkills; return $this->issuedSkills;

Loading…
Cancel
Save