/** * @param EmailSendEvent $event * * @return void */ public function onEmailGenerate(EmailSendEvent $event) { $content = $event->getContent(); $plainText = $event->getPlainText(); $clickthrough = $event->shouldAppendClickthrough() ? $event->generateClickthrough() : array(); $this->emailIsInternalSend = $event->isInternalSend(); $this->emailEntity = $event->getEmail(); $tokens = array_merge($this->generatePageTokens($content . $plainText, $clickthrough), $this->generateExternalLinkTokens($content . $plainText, $clickthrough)); $event->addTokens($tokens); }
/** * @param $content * @param $clickthrough * @param null $emailId * @param Email $email * @param EmailSendEvent $event * * @return array */ protected function generateUrlTokens($content, $clickthrough, $emailId = null, Email $email = null, EmailSendEvent $event = null) { $tokens = array(); // check we have a complete event property before trying to use it's methods if ($event !== null) { $this->emailIsInternalSend = $event->isInternalSend(); } if ($emailId !== null && isset($this->emailTrackedLinks[$emailId])) { // Tokenization is supported and the links have already been parsed so rebuild tokens from saved links /** @var \Mautic\PageBundle\Model\RedirectModel $redirectModel */ $redirectModel = $this->factory->getModel('page.redirect'); foreach ($this->emailTrackedLinks[$emailId] as $url => $link) { $trackedUrl = $redirectModel->generateRedirectUrl($link, $clickthrough); if (strpos($url, '{') === 0) { // pageurl, externallink, or trackedlink tokens $tokens[$url] = $trackedUrl; } else { $tokens['{trackedlink=' . $link->getRedirectId() . '}'] = $trackedUrl; } } } else { $trackedLinks = $persistEntities = array(); $this->generatePageTokens($content, $clickthrough, $tokens, $persistEntities, $trackedLinks, $emailId, $email); $this->generateExternalLinkTokens($content, $clickthrough, $tokens, $persistEntities, $trackedLinks, $emailId, $email); if ($emailId !== null && !$this->emailIsInternalSend) { $this->generateTrackedLinkTokens($content, $clickthrough, $tokens, $persistEntities, $trackedLinks, $emailId, $email, $event); } elseif (!empty($persistEntities)) { /** @var \Mautic\PageBundle\Model\RedirectModel $redirectModel */ $redirectModel = $this->factory->getModel('page.redirect'); $redirectModel->getRepository()->saveEntities($persistEntities); } } return $tokens; }
/** * @param EmailSendEvent $event * * @return void */ public function onEmailGenerate(EmailSendEvent $event) { $content = $event->getContent(); $plainText = $event->getPlainText(); $source = $event->getSource(); $email = $event->getEmail(); $clickthrough = array('source' => $source, 'email' => $email != null ? $email->getId() : null, 'stat' => $event->getIdHash()); $lead = $event->getLead(); if ($lead !== null) { $clickthrough['lead'] = $lead['id']; } $this->emailIsInternalSend = $event->isInternalSend(); $this->emailEntity = $event->getEmail(); // Generate page tokens first so they are available to convert to trackables $tokens = array_merge($this->generatePageTokens($content . $plainText, $event->shouldAppendClickthrough() ? $clickthrough : array()), $this->generateExternalLinkTokens($content . $plainText, $clickthrough)); $event->addTokens($tokens); // Convert links to trackables if there is an email entity if (!$event->isInternalSend() && null !== $email) { $event->addTokens($this->generateEmailTokens($clickthrough, $event)); } }
/** * @param EmailSendEvent $event * * @return array */ public function convertUrlsToTokens(EmailSendEvent $event) { if ($event->isInternalSend()) { // Don't convert for previews, example emails, etc return; } $email = $event->getEmail(); $emailId = $email ? $email->getId() : null; $clickthrough = $event->generateClickthrough(); $trackables = $this->parseContentForUrls($event, $emailId); /** * @var string * @var Trackable $trackable */ foreach ($trackables as $token => $trackable) { $url = $trackable instanceof Trackable ? $this->pageTrackableModel->generateTrackableUrl($trackable, $clickthrough) : $this->pageRedirectModel->generateRedirectUrl($trackable, $clickthrough); $event->addToken($token, $url); } }
/** * @param EmailSendEvent $event */ public function onEmailGenerate(EmailSendEvent $event) { $content = $event->getContent(); $plainText = $event->getPlainText(); $clickthrough = $event->shouldAppendClickthrough() ? $event->generateClickthrough() : []; $this->emailIsInternalSend = $event->isInternalSend(); $this->emailEntity = $event->getEmail(); $tokens = $this->tokenHelper->findPageTokens($content . $plainText, $clickthrough); $event->addTokens($tokens); }