Spaces:
No application file
No application file
| namespace Mautic\CampaignBundle\Controller; | |
| use Doctrine\Persistence\ManagerRegistry; | |
| use Mautic\CampaignBundle\Entity\LeadEventLog; | |
| use Mautic\CampaignBundle\Model\EventLogModel; | |
| use Mautic\CoreBundle\Controller\AjaxController as CommonAjaxController; | |
| use Mautic\CoreBundle\Factory\MauticFactory; | |
| use Mautic\CoreBundle\Factory\ModelFactory; | |
| use Mautic\CoreBundle\Helper\CoreParametersHelper; | |
| use Mautic\CoreBundle\Helper\InputHelper; | |
| use Mautic\CoreBundle\Helper\UserHelper; | |
| use Mautic\CoreBundle\Security\Permissions\CorePermissions; | |
| use Mautic\CoreBundle\Service\FlashBag; | |
| use Mautic\CoreBundle\Translation\Translator; | |
| use Mautic\CoreBundle\Twig\Helper\DateHelper; | |
| use Symfony\Component\EventDispatcher\EventDispatcherInterface; | |
| use Symfony\Component\HttpFoundation\Request; | |
| use Symfony\Component\HttpFoundation\RequestStack; | |
| class AjaxController extends CommonAjaxController | |
| { | |
| public function __construct( | |
| private DateHelper $dateHelper, | |
| ManagerRegistry $doctrine, | |
| MauticFactory $factory, | |
| ModelFactory $modelFactory, | |
| UserHelper $userHelper, | |
| CoreParametersHelper $coreParametersHelper, | |
| EventDispatcherInterface $dispatcher, | |
| Translator $translator, | |
| FlashBag $flashBag, | |
| RequestStack $requestStack, | |
| CorePermissions $security | |
| ) { | |
| parent::__construct($doctrine, $factory, $modelFactory, $userHelper, $coreParametersHelper, $dispatcher, $translator, $flashBag, $requestStack, $security); | |
| } | |
| public function updateConnectionsAction(Request $request): \Symfony\Component\HttpFoundation\JsonResponse | |
| { | |
| $session = $request->getSession(); | |
| $campaignId = InputHelper::clean($request->query->get('campaignId')); | |
| $canvasSettings = $request->request->get('canvasSettings') ?? []; | |
| if (empty($campaignId)) { | |
| $dataArray = ['success' => 0]; | |
| } else { | |
| $session->set('mautic.campaign.'.$campaignId.'.events.canvassettings', $canvasSettings); | |
| $dataArray = ['success' => 1]; | |
| } | |
| return $this->sendJsonResponse($dataArray); | |
| } | |
| public function updateScheduledCampaignEventAction(Request $request): \Symfony\Component\HttpFoundation\JsonResponse | |
| { | |
| $eventId = (int) $request->request->get('eventId'); | |
| $contactId = (int) $request->request->get('contactId'); | |
| $newDate = InputHelper::clean($request->request->get('date')); | |
| $originalDate = InputHelper::clean($request->request->get('originalDate')); | |
| $dataArray = ['success' => 0, 'date' => $originalDate]; | |
| if (!empty($eventId) && !empty($contactId) && !empty($newDate)) { | |
| if ($log = $this->getContactEventLog($eventId, $contactId)) { | |
| $newDate = new \DateTime($newDate); | |
| if ($newDate >= new \DateTime()) { | |
| $log->setTriggerDate($newDate); | |
| /** @var EventLogModel $logModel */ | |
| $logModel = $this->getModel('campaign.event_log'); | |
| $logModel->saveEntity($log); | |
| $dataArray = [ | |
| 'success' => 1, | |
| 'date' => $newDate->format('Y-m-d H:i:s'), | |
| ]; | |
| } | |
| } | |
| } | |
| // Format the date to match the view | |
| $dataArray['formattedDate'] = $this->dateHelper->toFull($dataArray['date']); | |
| return $this->sendJsonResponse($dataArray); | |
| } | |
| public function cancelScheduledCampaignEventAction(Request $request): \Symfony\Component\HttpFoundation\JsonResponse | |
| { | |
| $dataArray = ['success' => 0]; | |
| $eventId = (int) $request->request->get('eventId'); | |
| $contactId = (int) $request->request->get('contactId'); | |
| if (!empty($eventId) && !empty($contactId)) { | |
| if ($log = $this->getContactEventLog($eventId, $contactId)) { | |
| $log->setIsScheduled(false); | |
| /** @var EventLogModel $logModel */ | |
| $logModel = $this->getModel('campaign.event_log'); | |
| $metadata = $log->getMetadata(); | |
| $metadata['errors'] = $this->translator->trans( | |
| 'mautic.campaign.event.cancelled.time', | |
| ['%date%' => $log->getTriggerDate()->format('Y-m-d H:i:s')] | |
| ); | |
| $log->setMetadata($metadata); | |
| $logModel->getRepository()->saveEntity($log); | |
| $dataArray = ['success' => 1]; | |
| } | |
| } | |
| return $this->sendJsonResponse($dataArray); | |
| } | |
| /** | |
| * @return LeadEventLog|null | |
| */ | |
| protected function getContactEventLog($eventId, $contactId) | |
| { | |
| $contact = $this->getModel('lead')->getEntity($contactId); | |
| if ($contact) { | |
| if ($this->security->hasEntityAccess('lead:leads:editown', 'lead:leads:editother', $contact->getPermissionUser())) { | |
| /** @var EventLogModel $logModel */ | |
| $logModel = $this->getModel('campaign.event_log'); | |
| /** @var LeadEventLog $log */ | |
| $log = $logModel->getRepository() | |
| ->findOneBy( | |
| [ | |
| 'lead' => $contactId, | |
| 'event' => $eventId, | |
| ], | |
| ['dateTriggered' => 'desc'] | |
| ); | |
| if ($log && ($log->getTriggerDate() > new \DateTime())) { | |
| return $log; | |
| } | |
| } | |
| } | |
| return null; | |
| } | |
| } | |