src/Controller/CronController.php line 37
<?php
namespace App\Controller;
use App\Classes\ConfigurationUtility;
use App\Classes\Setup\EventReminder\EventReminderClass;
use App\Repository\ActivityAssignmentsRepository;
use App\Repository\EventRemindersRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
/**
* @Route("/cron")
*/
class CronController extends AbstractController
{
private $event_reminder;
private $assignmentRepository;
private $event_reminder_class;
public function __construct(
EventRemindersRepository $eventReminder,
EventReminderClass $eventReminderClass,
ActivityAssignmentsRepository $activityAssignmentsRepository
) {
$this->event_reminder = $eventReminder;
$this->assignmentRepository = $activityAssignmentsRepository;
$this->event_reminder_class = $eventReminderClass;
}
/**
* @return Response
* @Route("/email-event-reminder", name="cron_event_reminder", methods={"GET"})
*/
public function sendEmailReminder(): Response
{
date_default_timezone_set('UTC');
$currentDate = new \DateTime();
$url = ConfigurationUtility::getBaseUrl() . '/login';
$currentTime = date('H:i');
$eventReminders = $this->event_reminder->getEventReminders();
foreach ($eventReminders as $val) {
if (isset($val['days_before']) && $val['days_before'] !== 0 && $val['time'] === $currentTime) {
$currentDate->add(new \DateInterval("P{$val['days_before']}D"));
$date_filter = $currentDate->format('Y-m-d');
$assignment = $this->assignmentRepository->findByFilters([
'conference_id' => $val['conference_id'],
'date_start' => $date_filter,
]);
if (count($assignment) > 0) {
foreach ($assignment as $item) {
$date_start = date('m/d/Y', strtotime($item['event_date']));
$workerJobs = [];
$event_status_name = $item['event_status_name'] !== "" ? strtoupper($item['event_status_name']) : null;
if (!in_array($event_status_name, ['CANCELLED', 'POSTPONED TO', 'POSTPONED'])) {
if (count($item['activity_assignment_details']) > 0) {
$workerJobs = $this->event_reminder_class
->groupActivityAssignmentByWorker($item['activity_assignment_details']);
foreach ($workerJobs as $v) {
if (count($v)) {
$jobNames = $this->event_reminder_class->getAllJobName($v);
$details = [
'email_subject' => 'Event reminder for ' . $item['activity_name'] . ' on ' . $date_start,
'email_to' => $v[0]['worker_email'],
'email_cc' => $val['email'],
'worker_name' => $v[0]['worker_name'],
'worker_id' => $v[0]['worker_id'],
'savable' => true,
];
$body = $this->event_reminder_class->createEventReminderEmailTemplate([
'worker_name' => $v[0]['worker_name'],
'job_name' => $jobNames,
'event_name' => $item['activity_name'],
'event_date' => $date_start,
'event_time' => $item['time_start'],
'event_location' => $item['location'],
'email_content' => $val['email_content'],
'url' => $url
]);
$this->event_reminder_class->sendReminder($body, $details);
}
}
}
}
}
}
}
}
return $this->json(true);
}
}