Пример #1
0
 /**
  * Compile events for the lead timeline.
  *
  * @param LeadTimelineEvent $event
  */
 public function onTimelineGenerate(LeadTimelineEvent $event)
 {
     // Set available event types
     $eventTypeKey = 'stage.changed';
     $eventTypeName = $this->translator->trans('mautic.stage.event.changed');
     $event->addEventType($eventTypeKey, $eventTypeName);
     if (!$event->isApplicable($eventTypeKey)) {
         return;
     }
     $lead = $event->getLead();
     /** @var StagesChangeLogRepository $logRepository */
     $logRepository = $this->em->getRepository('MauticLeadBundle:StagesChangeLog');
     $logs = $logRepository->getLeadTimelineEvents($lead->getId(), $event->getQueryOptions());
     // Add to counter
     $event->addToCounter($eventTypeKey, $logs);
     if (!$event->isEngagementCount()) {
         // Add the logs to the event array
         foreach ($logs['results'] as $log) {
             if (isset($log['reference']) && $log['reference'] != null) {
                 $eventLabel = ['label' => $log['eventName'], 'href' => $this->router->generate('mautic_stage_action', ['objectAction' => 'edit', 'objectId' => $log['reference']]), 'isExternal' => false];
             } else {
                 $eventLabel = $log['eventName'];
             }
             $event->addEvent(['event' => $eventTypeKey, 'eventLabel' => $eventLabel, 'eventType' => $eventTypeName, 'timestamp' => $log['dateAdded'], 'extra' => ['log' => $log], 'icon' => 'fa-tachometer']);
         }
     }
 }
Пример #2
0
 /**
  * @param LeadTimelineEvent $event
  * @param                   $state
  */
 protected function addEmailEvents(LeadTimelineEvent $event, $state)
 {
     // Set available event types
     $eventTypeKey = 'email.' . $state;
     $eventTypeName = $this->translator->trans('mautic.email.' . $state);
     $event->addEventType($eventTypeKey, $eventTypeName);
     // Decide if those events are filtered
     if (!$event->isApplicable($eventTypeKey)) {
         return;
     }
     $lead = $event->getLead();
     /** @var \Mautic\EmailBundle\Entity\StatRepository $statRepository */
     $statRepository = $this->em->getRepository('MauticEmailBundle:Stat');
     $queryOptions = $event->getQueryOptions();
     $queryOptions['state'] = $state;
     $stats = $statRepository->getLeadStats($lead->getId(), $queryOptions);
     // Add total to counter
     $event->addToCounter($eventTypeKey, $stats);
     if (!$event->isEngagementCount()) {
         // Add the events to the event array
         foreach ($stats['results'] as $stat) {
             if (!empty($stat['storedSubject'])) {
                 $label = $this->translator->trans('mautic.email.timeline.event.custom_email') . ': ' . $stat['storedSubject'];
             } elseif (!empty($stat['email_name'])) {
                 $label = $stat['email_name'];
             } else {
                 $label = $this->translator->trans('mautic.email.timeline.event.custom_email');
             }
             if (!empty($stat['idHash'])) {
                 $eventName = ['label' => $label, 'href' => $this->router->generate('mautic_email_webview', ['idHash' => $stat['idHash']]), 'isExternal' => true];
             } else {
                 $eventName = $label;
             }
             if ('failed' == $state or 'sent' == $state) {
                 //this is to get the correct column for date dateSent
                 $dateSent = 'sent';
             } else {
                 $dateSent = 'read';
             }
             $event->addEvent(['event' => $eventTypeKey, 'eventLabel' => $eventName, 'eventType' => $eventTypeName, 'timestamp' => $stat['date' . ucfirst($dateSent)], 'dateSent' => $stat['dateSent'], 'extra' => ['stat' => $stat, 'type' => $state], 'contentTemplate' => 'MauticEmailBundle:SubscribedEvents\\Timeline:index.html.php', 'icon' => $state == 'read' ? 'fa-envelope-o' : 'fa-envelope']);
         }
     }
 }
Пример #3
0
 /**
  * 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);
     if (!$event->isApplicable($eventTypeKey)) {
         return;
     }
     $lead = $event->getLead();
     /** @var \Mautic\PageBundle\Entity\HitRepository $hitRepository */
     $logRepository = $this->em->getRepository('MauticLeadBundle:PointsChangeLog');
     $logs = $logRepository->getLeadTimelineEvents($lead->getId(), $event->getQueryOptions());
     // Add to counter
     $event->addToCounter($eventTypeKey, $logs);
     if (!$event->isEngagementCount()) {
         // Add the logs to the event array
         foreach ($logs['results'] as $log) {
             $event->addEvent(['event' => $eventTypeKey, 'eventLabel' => $log['eventName'] . ' / ' . $log['delta'], 'eventType' => $eventTypeName, 'timestamp' => $log['dateAdded'], 'extra' => ['log' => $log], 'icon' => 'fa-calculator']);
         }
     }
 }
Пример #4
0
 /**
  * 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
     if (!$event->isApplicable($eventTypeKey)) {
         return;
     }
     $lead = $event->getLead();
     /** @var \Mautic\AssetBundle\Entity\DownloadRepository $downloadRepository */
     $downloadRepository = $this->em->getRepository('MauticAssetBundle:Download');
     $downloads = $downloadRepository->getLeadDownloads($lead->getId(), $event->getQueryOptions());
     // Add total number to counter
     $event->addToCounter($eventTypeKey, $downloads);
     if (!$event->isEngagementCount()) {
         // Add the downloads to the event array
         foreach ($downloads['results'] as $download) {
             $asset = $this->assetModel->getEntity($download['asset_id']);
             $event->addEvent(['event' => $eventTypeKey, 'eventLabel' => ['label' => $download['title'], 'href' => $this->router->generate('mautic_asset_action', ['objectAction' => 'view', 'objectId' => $download['asset_id']])], 'extra' => ['asset' => $asset, 'assetDownloadUrl' => $this->assetModel->generateUrl($asset)], 'eventType' => $eventTypeName, 'timestamp' => $download['dateDownload'], 'icon' => 'fa-download', 'contentTemplate' => 'MauticAssetBundle:SubscribedEvents\\Timeline:index.html.php']);
         }
     }
 }
Пример #5
0
 /**
  * Compile events for the lead timeline.
  *
  * @param LeadTimelineEvent $event
  */
 public function onTimelineGenerate(LeadTimelineEvent $event)
 {
     // Set available event types
     $eventTypeKey = 'dynamic.content.sent';
     $eventTypeNameSent = $this->translator->trans('mautic.dynamic.content.sent');
     $event->addEventType($eventTypeKey, $eventTypeNameSent);
     if (!$event->isApplicable($eventTypeKey)) {
         return;
     }
     $lead = $event->getLead();
     /** @var \Mautic\DynamicContentBundle\Entity\StatRepository $statRepository */
     $statRepository = $this->em->getRepository('MauticDynamicContentBundle:Stat');
     $stats = $statRepository->getLeadStats($lead->getId(), $event->getQueryOptions());
     // Add total number to counter
     $event->addToCounter($eventTypeKey, $stats);
     if (!$event->isEngagementCount()) {
         // Add the events to the event array
         foreach ($stats['results'] as $stat) {
             if ($stat['dateSent']) {
                 $event->addEvent(['event' => $eventTypeKey, 'eventLabel' => ['label' => $stat['name'], 'href' => $this->router->generate('mautic_dynamicContent_action', ['objectId' => $stat['dynamic_content_id'], 'objectAction' => 'view'])], 'eventType' => $eventTypeNameSent, 'timestamp' => $stat['dateSent'], 'extra' => ['stat' => $stat, 'type' => 'sent'], 'contentTemplate' => 'MauticDynamicContentBundle:SubscribedEvents\\Timeline:index.html.php', 'icon' => 'fa-envelope']);
             }
         }
     }
 }
Пример #6
0
 /**
  * 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);
     if (!$event->isApplicable($eventTypeKey)) {
         return;
     }
     /** @var \Mautic\FormBundle\Entity\SubmissionRepository $submissionRepository */
     $submissionRepository = $this->em->getRepository('MauticFormBundle:Submission');
     $rows = $submissionRepository->getSubmissions($event->getQueryOptions());
     // Add total to counter
     $event->addToCounter($eventTypeKey, $rows);
     if (!$event->isEngagementCount()) {
         // Add the submissions to the event array
         foreach ($rows['results'] as $row) {
             // Convert to local from UTC
             $form = $this->formModel->getEntity($row['form_id']);
             $submission = $submissionRepository->getEntity($row['id']);
             $event->addEvent(['event' => $eventTypeKey, 'eventLabel' => ['label' => $form->getName(), 'href' => $this->router->generate('mautic_form_action', ['objectAction' => 'view', 'objectId' => $form->getId()])], 'eventType' => $eventTypeName, 'timestamp' => $row['dateSubmitted'], 'extra' => ['submission' => $submission, 'form' => $form, 'page' => $this->pageModel->getEntity($row['page_id'])], 'contentTemplate' => 'MauticFormBundle:SubscribedEvents\\Timeline:index.html.php', 'icon' => 'fa-pencil-square-o']);
         }
     }
 }
Пример #7
0
 /**
  * Compile events for the lead timeline.
  *
  * @param LeadTimelineEvent $event
  */
 public function onTimelineGenerateVideo(LeadTimelineEvent $event)
 {
     // Set available event types
     $eventTypeKey = 'page.videohit';
     $eventTypeName = $this->translator->trans('mautic.page.event.videohit');
     $event->addEventType($eventTypeKey, $eventTypeName);
     if (!$event->isApplicable($eventTypeKey)) {
         return;
     }
     /** @var \Mautic\PageBundle\Entity\VideoHitRepository $hitRepository */
     $hitRepository = $this->em->getRepository('MauticPageBundle:VideoHit');
     $hits = $hitRepository->getTimelineStats($event->getLead()->getId(), $event->getQueryOptions());
     $event->addToCounter($eventTypeKey, $hits);
     if (!$event->isEngagementCount()) {
         // Add the hits to the event array
         foreach ($hits['results'] as $hit) {
             $template = 'MauticPageBundle:SubscribedEvents\\Timeline:videohit.html.php';
             $eventLabel = $eventTypeName;
             $event->addEvent(['event' => $eventTypeKey, 'eventLabel' => $eventLabel, 'eventType' => $eventTypeName, 'timestamp' => $hit['date_hit'], 'extra' => ['hit' => $hit], 'contentTemplate' => $template, 'icon' => 'fa-video-camera']);
         }
     }
 }
Пример #8
0
 /**
  * Compile events for the lead timeline
  *
  * @param LeadTimelineEvent $event
  */
 public function onTimelineGenerate(LeadTimelineEvent $event)
 {
     // Set available event types
     $eventTypeKey = 'campaign.event';
     $eventTypeName = $this->translator->trans('mautic.campaign.triggered');
     $event->addEventType($eventTypeKey, $eventTypeName);
     // Decide if those events are filtered
     if (!$event->isApplicable($eventTypeKey)) {
         return;
     }
     $lead = $event->getLead();
     /** @var \Mautic\CampaignBundle\Entity\LeadEventLogRepository $logRepository */
     $logRepository = $this->em->getRepository('MauticCampaignBundle:LeadEventLog');
     $logs = $logRepository->getLeadLogs($lead->getId(), $event->getQueryOptions());
     $eventSettings = $this->campaignModel->getEvents();
     // Add total number to counter
     $event->addToCounter($eventTypeKey, $logs);
     if (!$event->isEngagementCount()) {
         foreach ($logs['results'] as $log) {
             // Hide this from the time line all together
             if (!empty($log['metadata']['failed'])) {
                 $event->subtractFromCounter($eventTypeKey);
                 continue;
             }
             $template = !empty($eventSettings['action'][$log['type']]['timelineTemplate']) ? $eventSettings['action'][$log['type']]['timelineTemplate'] : 'MauticCampaignBundle:SubscribedEvents\\Timeline:index.html.php';
             $event->addEvent(['event' => $eventTypeKey, 'eventLabel' => ['label' => $log['event_name'] . ' / ' . $log['campaign_name'], 'href' => $this->router->generate('mautic_campaign_action', ['objectAction' => 'view', 'objectId' => $log['campaign_id']])], 'eventType' => $eventTypeName, 'timestamp' => $log['dateTriggered'], 'extra' => ['log' => $log], 'contentTemplate' => $template, 'icon' => 'fa-clock-o']);
         }
     }
 }
Пример #9
0
 /**
  * @param Events\LeadTimelineEvent $event
  * @param                          $eventTypeKey
  * @param                          $eventTypeName
  */
 protected function addTimelineDoNotContactEntries(Events\LeadTimelineEvent $event, $eventTypeKey, $eventTypeName)
 {
     $lead = $event->getLead();
     /** @var \Mautic\LeadBundle\Entity\DoNotContactRepository $dncRepo */
     $dncRepo = $this->em->getRepository('MauticLeadBundle:DoNotContact');
     /** @var \Mautic\LeadBundle\Entity\DoNotContact[] $entries */
     $rows = $dncRepo->getTimelineStats($lead->getId(), $event->getQueryOptions());
     // Add to counter
     $event->addToCounter($eventTypeKey, $rows);
     if (!$event->isEngagementCount()) {
         foreach ($rows['results'] as $row) {
             switch ($row['reason']) {
                 case DoNotContact::UNSUBSCRIBED:
                     $row['reason'] = $this->translator->trans('mautic.lead.event.donotcontact_unsubscribed');
                     break;
                 case DoNotContact::BOUNCED:
                     $row['reason'] = $this->translator->trans('mautic.lead.event.donotcontact_bounced');
                     break;
                 case DoNotContact::MANUAL:
                     $row['reason'] = $this->translator->trans('mautic.lead.event.donotcontact_manual');
                     break;
             }
             $template = 'MauticLeadBundle:SubscribedEvents\\Timeline:donotcontact.html.php';
             $icon = 'fa-ban';
             if (!empty($row['channel'])) {
                 if ($channelModel = $this->getChannelModel($row['channel'])) {
                     // Allow a custom template if applicable
                     if (method_exists($channelModel, 'getDoNotContactLeadTimelineTemplate')) {
                         $template = $channelModel->getDoNotContactLeadTimelineTemplate($row);
                     }
                     if (method_exists($channelModel, 'getDoNotContactLeadTimelineLabel')) {
                         $eventTypeName = $channelModel->getDoNotContactLeadTimelineLabel($row);
                     }
                     if (method_exists($channelModel, 'getDoNotContactLeadTimelineIcon')) {
                         $icon = $channelModel->getDoNotContactLeadTimelineIcon($row);
                     }
                     if (!empty($row['channel_id'])) {
                         if ($item = $this->getChannelEntityName($row['channel'], $row['channel_id'], true)) {
                             $row['itemName'] = $item['name'];
                             $row['itemRoute'] = $item['url'];
                         }
                     }
                 }
             }
             $event->addEvent(['event' => $eventTypeKey, 'eventLabel' => isset($row['itemName']) ? ['label' => ucfirst($row['channel']) . ' / ' . $row['itemName'], 'href' => $row['itemRoute']] : ucfirst($row['channel']), 'eventType' => $eventTypeName, 'timestamp' => $row['date_added'], 'extra' => ['dnc' => $row], 'contentTemplate' => $template, 'icon' => $icon]);
         }
     }
 }