145 lines
5.5 KiB
PHP
Executable File
145 lines
5.5 KiB
PHP
Executable File
<?php
|
|
|
|
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\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,
|
|
ModelFactory $modelFactory,
|
|
UserHelper $userHelper,
|
|
CoreParametersHelper $coreParametersHelper,
|
|
EventDispatcherInterface $dispatcher,
|
|
Translator $translator,
|
|
FlashBag $flashBag,
|
|
RequestStack $requestStack,
|
|
CorePermissions $security,
|
|
) {
|
|
parent::__construct($doctrine, $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->all()['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;
|
|
}
|
|
}
|