/** * @param EmailSendEvent $event */ public function onEmailGenerate(EmailSendEvent $event) { // Combine all possible content to find tokens across them $content = $event->getSubject(); $content .= $event->getContent(); $content .= $event->getPlainText(); $lead = $event->getLead(); $tokenList = TokenHelper::findLeadTokens($content, $lead); if (count($tokenList)) { $event->addTokens($tokenList); unset($tokenList); } }
/** * @param $redirectId * * @return \Symfony\Component\HttpFoundation\RedirectResponse * @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException */ public function redirectAction($redirectId) { /** @var \Mautic\PageBundle\Model\RedirectModel $redirectModel */ $redirectModel = $this->getModel('page.redirect'); $redirect = $redirectModel->getRedirectById($redirectId); if (empty($redirect) || !$redirect->isPublished(false)) { throw $this->createNotFoundException($this->factory->getTranslator()->trans('mautic.core.url.error.404')); } $this->getModel('page')->hitPage($redirect, $this->request); $url = $redirect->getUrl(); // Ensure the URL does not have encoded ampersands $url = str_replace('&', '&', $url); // Get query string $query = $this->request->query->all(); // Unset the clickthrough unset($query['ct']); // Tak on anything left to the URL if (count($query)) { $url .= strpos($url, '?') !== false ? '&' : '?'; $url .= http_build_query($query); } // Search replace lead fields in the URL /** @var \Mautic\LeadBundle\Model\LeadModel $leadModel */ $leadModel = $this->getModel('lead'); $lead = $leadModel->getCurrentLead(); $leadArray = $lead->getProfileFields(); $url = TokenHelper::findLeadTokens($url, $leadArray, true); return $this->redirect($url); }
/** * @param TokenReplacementEvent $event */ public function onTokenReplacement(TokenReplacementEvent $event) { /** @var Lead $lead */ $lead = $event->getLead(); $content = $event->getContent(); $clickthrough = $event->getClickthrough(); if ($content) { $tokens = array_merge(TokenHelper::findLeadTokens($content, $lead->getProfileFields()), $this->pageTokenHelper->findPageTokens($content, $clickthrough), $this->assetTokenHelper->findAssetTokens($content, $clickthrough)); list($content, $trackables) = $this->trackableModel->parseContentForTrackables($content, $tokens, 'sms', $clickthrough['channel'][1]); /** * @var string * @var Trackable $trackable */ foreach ($trackables as $token => $trackable) { $tokens[$token] = $this->trackableModel->generateTrackableUrl($trackable, $clickthrough, true); } $content = str_replace(array_keys($tokens), array_values($tokens), $content); $event->setContent($content); } }
/** * @param $string * @param $submissionEvent */ private function replacePostSubmitTokens($string, SubmissionEvent $submissionEvent) { static $tokens = []; if (empty($tokens)) { $tokens = array_merge($submissionEvent->getTokens(), TokenHelper::findLeadTokens($string, $submissionEvent->getLead()->getProfileFields())); } return str_replace(array_keys($tokens), array_values($tokens), $string); }
/** * PreParse the twitter message and replace placeholders with values. * * @param $tweet * @param $lead * * @return mixed */ protected function parseTweetText($tweet, $lead) { $tweetHandle = $lead['twitter']; $tokens = ['{twitter_handle}' => strpos($tweetHandle, '@') !== false ? $tweetHandle : "@{$tweetHandle}"]; $tokens = array_merge($tokens, TokenHelper::findLeadTokens($tweet, $lead), $this->pageTokenHelper->findPageTokens($tweet, $this->clickthrough), $this->assetTokenHelper->findAssetTokens($tweet, $this->clickthrough)); list($tweet, $trackables) = $this->trackableModel->parseContentForTrackables($tweet, $tokens, 'social_twitter', -1); /** * @var string $token * @var Trackable $trackable */ foreach ($trackables as $token => $trackable) { $tokens[$token] = $this->trackableModel->generateTrackableUrl($trackable, $this->clickthrough); } return str_replace(array_keys($tokens), array_values($tokens), $tweet); }