Spaces:
No application file
No application file
File size: 4,077 Bytes
d2897cd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
<?php
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();
}
}
|