Spaces:
No application file
No application file
namespace Mautic\CampaignBundle\Model; | |
use Mautic\CampaignBundle\CampaignEvents; | |
use Mautic\CampaignBundle\Entity\Campaign; | |
use Mautic\CampaignBundle\Entity\Event; | |
use Mautic\CampaignBundle\Entity\LeadEventLog; | |
use Mautic\CampaignBundle\Entity\LeadEventLogRepository; | |
use Mautic\CampaignBundle\Event\DeleteEvent; | |
use Mautic\CoreBundle\Helper\Chart\ChartQuery; | |
use Mautic\CoreBundle\Helper\Chart\LineChart; | |
use Mautic\CoreBundle\Model\FormModel; | |
/** | |
* @extends FormModel<Event> | |
*/ | |
class EventModel extends FormModel | |
{ | |
/** | |
* @return \Mautic\CampaignBundle\Entity\EventRepository | |
*/ | |
public function getRepository() | |
{ | |
return $this->em->getRepository(Event::class); | |
} | |
/** | |
* @return \Mautic\CampaignBundle\Entity\CampaignRepository | |
*/ | |
public function getCampaignRepository() | |
{ | |
return $this->em->getRepository(Campaign::class); | |
} | |
/** | |
* @return LeadEventLogRepository | |
*/ | |
public function getLeadEventLogRepository() | |
{ | |
return $this->em->getRepository(LeadEventLog::class); | |
} | |
public function getPermissionBase(): string | |
{ | |
return 'campaign:campaigns'; | |
} | |
/** | |
* Get a specific entity or generate a new one if id is empty. | |
*/ | |
public function getEntity($id = null): ?Event | |
{ | |
if (null === $id) { | |
return new Event(); | |
} | |
return parent::getEntity($id); | |
} | |
public function deleteEvents($currentEvents, $deletedEvents): void | |
{ | |
$deletedKeys = []; | |
foreach ($deletedEvents as $k => $deleteMe) { | |
if ($deleteMe instanceof Event) { | |
$deleteMe = $deleteMe->getId(); | |
} | |
if (str_starts_with($deleteMe, 'new')) { | |
unset($deletedEvents[$k]); | |
} | |
if (isset($currentEvents[$deleteMe])) { | |
unset($deletedEvents[$k]); | |
} | |
if (isset($deletedEvents[$k])) { | |
$deletedKeys[] = $deleteMe; | |
} | |
} | |
if (count($deletedEvents)) { | |
// wipe out any references to these events to prevent restraint violations | |
$this->getRepository()->nullEventRelationships($deletedKeys); | |
$this->getRepository()->setEventsAsDeleted($deletedEvents); | |
$this->dispatcher->dispatch(new DeleteEvent($deletedKeys), CampaignEvents::ON_EVENT_DELETE); | |
} | |
} | |
public function deleteEventsByCampaignId(int $campaignId): void | |
{ | |
$eventIds = $this->getRepository()->getCampaignEventIds($campaignId); | |
$this->deleteEventsByEventIds($eventIds); | |
} | |
/** | |
* @param string[] $eventIds | |
*/ | |
public function deleteEventsByEventIds(array $eventIds): void | |
{ | |
$this->getRepository()->deleteEvents($eventIds); | |
$this->dispatcher->dispatch(new DeleteEvent($eventIds), CampaignEvents::ON_AFTER_EVENTS_DELETE); | |
} | |
/** | |
* Get line chart data of campaign events. | |
* | |
* @param string $unit {@link php.net/manual/en/function.date.php#refsect1-function.date-parameters} | |
* @param string $dateFormat | |
* @param array $filter | |
* @param bool $canViewOthers | |
*/ | |
public function getEventLineChartData($unit, \DateTime $dateFrom, \DateTime $dateTo, $dateFormat = null, $filter = [], $canViewOthers = true): array | |
{ | |
$chart = new LineChart($unit, $dateFrom, $dateTo, $dateFormat); | |
$query = new ChartQuery($this->em->getConnection(), $dateFrom, $dateTo); | |
$q = $query->prepareTimeDataQuery('campaign_lead_event_log', 'date_triggered', $filter); | |
if (!$canViewOthers) { | |
$q->join('t', MAUTIC_TABLE_PREFIX.'campaigns', 'c', 'c.id = t.campaign_id') | |
->andWhere('c.created_by = :userId') | |
->setParameter('userId', $this->userHelper->getUser()->getId()); | |
} | |
$data = $query->loadAndBuildTimeData($q); | |
$chart->setDataset($this->translator->trans('mautic.campaign.triggered.events'), $data); | |
return $chart->render(); | |
} | |
} | |