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; | |
} | |
} | |