/** * Compile events for the lead timeline * * @param LeadTimelineEvent $event */ public function onTimelineGenerate(LeadTimelineEvent $event) { // Set available event types $eventTypeKey = 'asset.download'; $eventTypeName = $this->translator->trans('mautic.asset.event.download'); $event->addEventType($eventTypeKey, $eventTypeName); // Decide if those events are filtered $filters = $event->getEventFilters(); if (!$event->isApplicable($eventTypeKey)) { return; } $lead = $event->getLead(); $options = array('ipIds' => array(), 'filters' => $filters); /** @var \Mautic\CoreBundle\Entity\IpAddress $ip */ /* foreach ($lead->getIpAddresses() as $ip) { $options['ipIds'][] = $ip->getId(); } */ /** @var \Mautic\AssetBundle\Entity\DownloadRepository $downloadRepository */ $downloadRepository = $this->factory->getEntityManager()->getRepository('MauticAssetBundle:Download'); $downloads = $downloadRepository->getLeadDownloads($lead->getId(), $options); /** @var \Mautic\AssetBundle\Model\AssetModel $model */ $model = $this->factory->getModel('asset.asset'); // Add the downloads to the event array foreach ($downloads as $download) { $event->addEvent(array('event' => $eventTypeKey, 'eventLabel' => $eventTypeName, 'timestamp' => $download['dateDownload'], 'extra' => array('asset' => $model->getEntity($download['asset_id'])), 'contentTemplate' => 'MauticAssetBundle:SubscribedEvents\\Timeline:index.html.php')); } }
/** * Compile events for the lead timeline * * @param LeadTimelineEvent $event */ public function onTimelineGenerate(LeadTimelineEvent $event) { // Set available event types $eventTypeKeySent = 'email.sent'; $eventTypeNameSent = $this->translator->trans('mautic.email.sent'); $event->addEventType($eventTypeKeySent, $eventTypeNameSent); $eventTypeKeyRead = 'email.read'; $eventTypeNameRead = $this->translator->trans('mautic.email.read'); $event->addEventType($eventTypeKeyRead, $eventTypeNameRead); // Decide if those events are filtered $filters = $event->getEventFilters(); $lead = $event->getLead(); $options = array('ipIds' => array(), 'filters' => $filters); /** @var \Mautic\CoreBundle\Entity\IpAddress $ip */ /* foreach ($lead->getIpAddresses() as $ip) { $options['ipIds'][] = $ip->getId(); } */ /** @var \Mautic\EmailBundle\Entity\StatRepository $statRepository */ $statRepository = $this->factory->getEntityManager()->getRepository('MauticEmailBundle:Stat'); $stats = $statRepository->getLeadStats($lead->getId(), $options); // Add the events to the event array foreach ($stats as $stat) { if ($stat['dateRead'] && $event->isApplicable($eventTypeKeyRead, true)) { $event->addEvent(array('event' => $eventTypeKeyRead, 'eventLabel' => $eventTypeNameRead, 'timestamp' => $stat['dateRead'], 'extra' => array('stats' => $stat, 'type' => 'read'), 'contentTemplate' => 'MauticEmailBundle:SubscribedEvents\\Timeline:index.html.php')); } // Email read if ($stat['dateSent'] && $event->isApplicable($eventTypeKeySent)) { $event->addEvent(array('event' => $eventTypeKeySent, 'eventLabel' => $eventTypeNameSent, 'timestamp' => $stat['dateSent'], 'extra' => array('stats' => $stat, 'type' => 'sent'), 'contentTemplate' => 'MauticEmailBundle:SubscribedEvents\\Timeline:index.html.php')); } } }
/** * Compile events for the lead timeline * * @param LeadTimelineEvent $event */ public function onTimelineGenerate(LeadTimelineEvent $event) { // Set available event types $eventTypeKey = 'point.gained'; $eventTypeName = $this->translator->trans('mautic.point.event.gained'); $event->addEventType($eventTypeKey, $eventTypeName); $filters = $event->getEventFilters(); if (!$event->isApplicable($eventTypeKey)) { return; } $lead = $event->getLead(); $options = array('ipIds' => array(), 'filters' => $filters); /** @var \Mautic\CoreBundle\Entity\IpAddress $ip */ /* foreach ($lead->getIpAddresses() as $ip) { $options['ipIds'][] = $ip->getId(); } */ /** @var \Mautic\PageBundle\Entity\HitRepository $hitRepository */ $logRepository = $this->factory->getEntityManager()->getRepository('MauticLeadBundle:PointsChangeLog'); $logs = $logRepository->getLeadTimelineEvents($lead->getId(), $options); // Add the logs to the event array foreach ($logs as $log) { $event->addEvent(array('event' => $eventTypeKey, 'eventLabel' => $eventTypeName, 'timestamp' => $log['dateAdded'], 'extra' => array('log' => $log), 'contentTemplate' => 'MauticPointBundle:SubscribedEvents\\Timeline:index.html.php', 'icon' => 'fa-calculator')); } }
private function addTaskEvents(LeadTimelineEvent $event) { $eventTypeKeyCreated = 'task.created'; $eventTypeKeyCompleted = 'task.completed'; $event->addEventType($eventTypeKeyCreated, $this->translator->trans('ddi.lead_actions.tasks.timeline.filter.created')); $event->addEventType($eventTypeKeyCompleted, $this->translator->trans('ddi.lead_actions.tasks.timeline.filter.completed')); $em = $this->factory->getEntityManager(); $query = $em->getRepository('CustomCrmBundle:Task')->createQueryBuilder('t'); $query->where('t.lead = :lead')->setParameter('lead', $event->getLead()); $filters = $event->getEventFilters(); if (isset($filters['search']) && $filters['search']) { $query->andWhere('t.name LIKE :name')->setParameter('name', '%' . $filters['search'] . '%'); } $tasks = $query->getQuery()->getResult(); if ($event->isApplicable($eventTypeKeyCreated)) { foreach ($tasks as $task) { $event->addEvent(array('event' => $eventTypeKeyCreated, 'eventLabel' => 'Task created', 'eventType' => 'Task created', 'timestamp' => $task->getDateAdded(), 'extra' => array('name' => $task->getName()), 'contentTemplate' => 'CustomCrmBundle:Task\\Timeline:created.html.php')); } } // Completed tasks if ($event->isApplicable($eventTypeKeyCompleted)) { foreach ($tasks as $task) { if ($task->getIsCompleted()) { $event->addEvent(array('event' => $eventTypeKeyCompleted, 'eventLabel' => 'task', 'timestamp' => $task->getDateCompleted(), 'extra' => array('name' => $task->getName()), 'contentTemplate' => 'CustomCrmBundle:Task\\Timeline:completed.html.php')); } } } }
/** * Compile events for the lead timeline * * @param LeadTimelineEvent $event */ public function onTimelineGenerate(LeadTimelineEvent $event) { // Set available event types $eventTypeKey = 'form.submitted'; $eventTypeName = $this->translator->trans('mautic.form.event.submitted'); $event->addEventType($eventTypeKey, $eventTypeName); $filters = $event->getEventFilters(); if (!$event->isApplicable($eventTypeKey)) { return; } $lead = $event->getLead(); $options = array('ipIds' => array(), 'leadId' => $lead->getId(), 'filters' => $filters); /** @var \Mautic\CoreBundle\Entity\IpAddress $ip */ /* foreach ($lead->getIpAddresses() as $ip) { $options['ipIds'][] = $ip->getId(); } */ /** @var \Mautic\FormBundle\Entity\SubmissionRepository $submissionRepository */ $submissionRepository = $this->factory->getEntityManager()->getRepository('MauticFormBundle:Submission'); $rows = $submissionRepository->getSubmissions($options); $pageModel = $this->factory->getModel('page.page'); $formModel = $this->factory->getModel('form.form'); // Add the submissions to the event array foreach ($rows as $row) { // Convert to local from UTC $dtHelper = $this->factory->getDate($row['dateSubmitted'], 'Y-m-d H:i:s', 'UTC'); $submission = $submissionRepository->getEntity($row['id']); $event->addEvent(array('event' => $eventTypeKey, 'eventLabel' => $eventTypeName, 'timestamp' => $dtHelper->getLocalDateTime(), 'extra' => array('submission' => $submission, 'form' => $formModel->getEntity($row['form_id']), 'page' => $pageModel->getEntity($row['page_id'])), 'contentTemplate' => 'MauticFormBundle:SubscribedEvents\\Timeline:index.html.php')); } }
/** * Compile events for the lead timeline * * @param LeadTimelineEvent $event * * @return void */ public function onTimelineGenerate(LeadTimelineEvent $event) { $lead = $event->getLead(); /** @var \Mautic\CoreBundle\Model\AuditLogModel $model */ $model = $this->factory->getModel('core.auditLog'); $rows = $model->getEntities(array('filter' => array('force' => array(array('column' => 'e.bundle', 'expr' => 'eq', 'value' => 'lead'), array('column' => 'e.object', 'expr' => 'eq', 'value' => 'lead'), array('column' => 'e.action', 'expr' => 'in', 'value' => array("create", "identified", "ipadded")), array('column' => 'e.objectId', 'expr' => 'eq', 'value' => $lead->getId()), array('column' => 'e.dateAdded', 'expr' => 'gte', 'value' => $lead->getDateAdded()))))); $filters = $event->getEventFilters(); // Add the entries to the event array /** @var \Mautic\CoreBundle\Entity\AuditLog $row */ $IpAddresses = $lead->getIpAddresses(); $foundIpAddresses = array(); foreach ($rows as $row) { $action = $row->getAction(); $eventTypeKey = 'lead.' . $action; //don't include if type is not applicable or if there is a search string as there is nothing to search for this if (!$event->isApplicable($eventTypeKey) || !empty($filters['search'])) { continue; } $eventLabel = $this->translator->trans('mautic.lead.event.' . $row->getAction()); $details = $row->getDetails(); // Guess the IP address if (is_string($details)) { $ipAddress = $details; } elseif (isset($details['ipAddresses'][1])) { $ipAddress = $details['ipAddresses'][1]; } elseif (isset($details[1])) { $ipAddress = $details[1]; } else { $ipAddress = $row->getIpAddress(); } // Prevent duplicate IP entries from showing if ($eventTypeKey == 'lead.ipadded') { $ipDate = $row->getDateAdded()->format('Y-m-d H:i'); if (isset($foundIpAddresses[$ipDate]) && in_array($ipAddress, $foundIpAddresses[$ipDate])) { continue; } if (!isset($foundIpAddresses[$ipDate])) { $foundIpAddresses[$ipDate] = array(); } $foundIpAddresses[$ipDate][] = $ipAddress; } $event->addEvent(array('event' => $eventTypeKey, 'eventLabel' => $eventLabel, 'timestamp' => $row->getDateAdded(), 'extra' => array('details' => $details, 'editor' => $row->getUserName(), 'ipDetails' => $eventTypeKey == 'lead.ipadded' ? $IpAddresses[$ipAddress] : array()), 'contentTemplate' => 'MauticLeadBundle:SubscribedEvents\\Timeline:' . $action . '.html.php')); } }
/** * Compile events for the lead timeline * * @param LeadTimelineEvent $event */ public function onTimelineGenerate(LeadTimelineEvent $event) { // Set available event types $eventTypeKey = 'page.hit'; $eventTypeName = $this->translator->trans('mautic.page.event.hit'); $event->addEventType($eventTypeKey, $eventTypeName); $filters = $event->getEventFilters(); if (!$event->isApplicable($eventTypeKey)) { return; } $lead = $event->getLead(); $options = array('ipIds' => array(), 'filters' => $filters); /** @var \Mautic\CoreBundle\Entity\IpAddress $ip */ /* foreach ($lead->getIpAddresses() as $ip) { $options['ipIds'][] = $ip->getId(); } */ /** @var \Mautic\PageBundle\Entity\HitRepository $hitRepository */ $hitRepository = $this->factory->getEntityManager()->getRepository('MauticPageBundle:Hit'); $hits = $hitRepository->getLeadHits($lead->getId(), $options); $model = $this->factory->getModel('page.page'); // Add the hits to the event array foreach ($hits as $hit) { if ($hit['source'] && $hit['sourceId']) { $sourceModel = $this->factory->getModel($hit['source'] . '.' . $hit['source']); $sourceEntity = $sourceModel->getEntity($hit['sourceId']); if (method_exists($sourceEntity, 'getName')) { $hit['sourceName'] = $sourceEntity->getName(); } if (method_exists($sourceEntity, 'getTitle')) { $hit['sourceName'] = $sourceEntity->getTitle(); } } $event->addEvent(array('event' => $eventTypeKey, 'eventLabel' => $eventTypeName, 'timestamp' => $hit['dateHit'], 'extra' => array('page' => $model->getEntity($hit['page_id']), 'hit' => $hit), 'contentTemplate' => 'MauticPageBundle:SubscribedEvents\\Timeline:index.html.php')); } }
/** * Compile events for the lead timeline * * @param LeadTimelineEvent $event */ public function onTimelineGenerate(LeadTimelineEvent $event) { // Set available event types $eventTypeKey = 'campaign.evented'; $eventTypeName = $this->translator->trans('mautic.campaign.triggered'); $event->addEventType($eventTypeKey, $eventTypeName); // Decide if those events are filtered $filters = $event->getEventFilters(); if (!$event->isApplicable($eventTypeKey)) { return; } $lead = $event->getLead(); $options = array('ipIds' => array(), 'filters' => $filters); /** @var \Mautic\CoreBundle\Entity\IpAddress $ip */ /* foreach ($lead->getIpAddresses() as $ip) { $options['ipIds'][] = $ip->getId(); } */ /** @var \Mautic\CampaignBundle\Entity\LeadEventLogRepository $logRepository */ $logRepository = $this->factory->getEntityManager()->getRepository('MauticCampaignBundle:LeadEventLog'); $logs = $logRepository->getLeadLogs($lead->getId(), $options); $model = $this->factory->getModel('campaign'); $eventSettings = $model->getEvents(); // Add the hits to the event array foreach ($logs as $log) { if (!is_array($log['metadata'])) { $log['metadata'] = $log['metadata'] !== null ? unserialize($log['metadata']) : array(); } $template = !empty($eventSettings['action'][$log['type']]['timelineTemplate']) ? $eventSettings['action'][$log['type']]['timelineTemplate'] : 'MauticCampaignBundle:SubscribedEvents\\Timeline:index.html.php'; $event->addEvent(array('event' => $eventTypeKey, 'eventLabel' => $eventTypeName, 'timestamp' => $log['dateTriggered'], 'extra' => array('log' => $log), 'contentTemplate' => $template)); } }
/** * Compile events for the lead timeline * * @param Events\LeadTimelineEvent $event */ public function onTimelineGenerate(Events\LeadTimelineEvent $event) { $eventTypes = ['lead.create' => 'mautic.lead.event.create', 'lead.identified' => 'mautic.lead.event.identified', 'lead.ipadded' => 'mautic.lead.event.ipadded', 'lead.utmtagsadded' => 'mautic.lead.event.utmtagsadded', 'lead.donotcontact' => 'mautic.lead.event.donotcontact']; $filters = $event->getEventFilters(); foreach ($eventTypes as $type => $label) { $name = $this->translator->trans($label); $event->addEventType($type, $name); if (!$event->isApplicable($type) || $type != 'lead.utmtagsadded' && !empty($filters['search'])) { continue; } switch ($type) { case 'lead.create': $this->addTimelineDateCreatedEntry($event, $type, $name); break; case 'lead.identified': $this->addTimelineDateIdentifiedEntry($event, $type, $name); break; case 'lead.ipadded': $this->addTimelineIpAddressEntries($event, $type, $name); break; case 'lead.utmtagsadded': $this->addTimelineUtmEntries($event, $type, $name); break; case 'lead.donotcontact': $this->addTimelineDoNotContactEntries($event, $type, $name); break; } } }
/** * Compile events for the lead timeline * * @param LeadTimelineEvent $event */ public function onTimelineGenerate(LeadTimelineEvent $event) { // Set available event types $eventTypeKey = 'page.hit'; $eventTypeName = $this->translator->trans('mautic.page.event.hit'); $event->addEventType($eventTypeKey, $eventTypeName); $filters = $event->getEventFilters(); if (!$event->isApplicable($eventTypeKey)) { return; } $lead = $event->getLead(); $options = array('ipIds' => array(), 'filters' => $filters); /** @var \Mautic\CoreBundle\Entity\IpAddress $ip */ /* foreach ($lead->getIpAddresses() as $ip) { $options['ipIds'][] = $ip->getId(); } */ /** @var \Mautic\PageBundle\Entity\HitRepository $hitRepository */ $hitRepository = $this->factory->getEntityManager()->getRepository('MauticPageBundle:Hit'); $hits = $hitRepository->getLeadHits($lead->getId(), $options); $model = $this->factory->getModel('page.page'); // Add the hits to the event array foreach ($hits as $hit) { $template = 'MauticPageBundle:SubscribedEvents\\Timeline:index.html.php'; $eventLabel = $eventTypeName; if ($hit['source'] && $hit['sourceId']) { $sourceModel = false; try { $sourceModel = $this->factory->getModel($hit['source']); } catch (\Exception $exception) { // Try a plugin try { $sourceModel = $this->factory->getModel('plugin.' . $hit['source']); } catch (\Exception $exception) { // No model found } } if ($sourceModel) { try { $sourceEntity = $sourceModel->getEntity($hit['sourceId']); if (method_exists($sourceEntity, $sourceModel->getNameGetter())) { $hit['sourceName'] = $sourceEntity->{$sourceModel->getNameGetter()}(); } $baseRouteName = str_replace('.', '_', $hit['source']); if (method_exists($sourceModel, 'getActionRouteBase')) { $baseRouteName = $sourceModel->getActionRouteBase(); } $routeSourceName = 'mautic_' . $baseRouteName . '_action'; if ($this->factory->getRouter()->getRouteCollection()->get($routeSourceName) !== null) { $hit['sourceRoute'] = $this->factory->getRouter()->generate($routeSourceName, array('objectAction' => 'view', 'objectId' => $hit['sourceId'])); } // Allow a custom template if applicable if (method_exists($sourceModel, 'getPageHitLeadTimelineTemplate')) { $template = $sourceModel->getPageHitLeadTimelineTemplate($hit); } if (method_exists($sourceModel, 'getPageHitLeadTimelineLabel')) { $eventLabel = $sourceModel->getPageHitLeadTimelineLabel($hit); } } catch (\Exception $exception) { // Not found } } } $event->addEvent(array('event' => $eventTypeKey, 'eventLabel' => $eventLabel, 'timestamp' => $hit['dateHit'], 'extra' => array('page' => $model->getEntity($hit['page_id']), 'hit' => $hit), 'contentTemplate' => $template)); } }