public function onEmailGenerate(EmailSendEvent $event) { $content = $event->getContent(); $regex = '/' . $this->leadFieldRegex . '/'; $lead = $event->getLead(); preg_match_all($regex, $content, $matches); if (!empty($matches[1])) { $tokenList = array(); foreach ($matches[1] as $key => $match) { $token = $matches[0][$key]; if (isset($tokenList[$token])) { continue; } $fallbackCheck = explode('|', $match); $fallback = $urlencode = false; if (isset($fallbackCheck[1])) { // There is a fallback or to be urlencoded $alias = $fallbackCheck[0]; if ($fallbackCheck[1] === 'true') { $urlencode = true; $fallback = ''; } else { $fallback = $fallbackCheck[1]; } } else { $alias = $match; } $value = !empty($lead[$alias]) ? $lead[$alias] : $fallback; $tokenList[$token] = $urlencode ? urlencode($value) : $value; } $event->addTokens($tokenList); unset($tokenList); } }
/** * @param EmailSendEvent $event */ public function onEmailGenerate(EmailSendEvent $event) { $lead = $event->getLead(); $leadId = $lead !== null ? $lead['id'] : null; $email = $event->getEmail(); $tokens = $this->generateTokensFromContent($event, $leadId, $event->getSource(), $email === null ? null : $email->getId()); $event->addTokens($tokens); }
/** * Trigger point actions for email send * * @param EmailSendEvent $event */ public function onEmailSend(EmailSendEvent $event) { if ($leadArray = $event->getLead()) { $lead = $this->factory->getEntityManager()->getReference('MauticLeadBundle:Lead', $leadArray['id']); } else { return; } $this->factory->getModel('point')->triggerAction('email.send', $event->getEmail(), null, $lead); }
/** * @param EmailSendEvent $event */ public function onEmailGenerate(EmailSendEvent $event) { $content = $event->getContent(); $lead = $event->getLead(); $tokenList = self::findLeadTokens($content, $lead); if (count($tokenList)) { $event->addTokens($tokenList); unset($tokenList); } }
/** * @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 EmailSendEvent $event */ public function decodeTokens(EmailSendEvent $event) { // Find and replace encoded tokens for trackable URL conversion $content = $event->getContent(); $content = preg_replace('/(%7B)(.*?)(%7D)/i', '{$2}', $content, -1, $count); $event->setContent($content); if ($plainText = $event->getPlainText()) { $plainText = preg_replace('/(%7B)(.*?)(%7D)/i', '{$2}', $plainText); $event->setPlainText($plainText); } $lead = $event->getLead(); $email = $event->getEmail(); $dynamicContentAsArray = $email instanceof Email ? $email->getDynamicContent() : null; if (!empty($dynamicContentAsArray)) { $tokenEvent = new TokenReplacementEvent(null, $lead, ['lead' => null, 'dynamicContent' => $dynamicContentAsArray]); $this->dispatcher->dispatch(EmailEvents::TOKEN_REPLACEMENT, $tokenEvent); $event->addTokens($tokenEvent->getTokens()); } }
/** * @param EmailSendEvent $event */ public function onEmailGenerate(EmailSendEvent $event) { $idHash = $event->getIdHash(); $lead = $event->getLead(); $email = $event->getEmail(); if ($idHash == null) { // Generate a bogus idHash to prevent errors for routes that may include it $idHash = uniqid(); } $model = $this->factory->getModel('email'); $unsubscribeText = $this->factory->getParameter('unsubscribe_text'); if (!$unsubscribeText) { $unsubscribeText = $this->translator->trans('mautic.email.unsubscribe.text', array('%link%' => '|URL|')); } $unsubscribeText = str_replace('|URL|', $model->buildUrl('mautic_email_unsubscribe', array('idHash' => $idHash)), $unsubscribeText); $event->addToken('{unsubscribe_text}', $unsubscribeText); $event->addToken('{unsubscribe_url}', $model->buildUrl('mautic_email_unsubscribe', array('idHash' => $idHash))); $webviewText = $this->factory->getParameter('webview_text'); if (!$webviewText) { $webviewText = $this->translator->trans('mautic.email.webview.text', array('%link%' => '|URL|')); } $webviewText = str_replace('|URL|', $model->buildUrl('mautic_email_webview', array('idHash' => $idHash)), $webviewText); $event->addToken('{webview_text}', $webviewText); // Show public email preview if the lead is not known to prevent 404 if (empty($lead['id']) && $email) { $event->addToken('{webview_url}', $model->buildUrl('mautic_email_preview', array('objectId' => $email->getId()))); } else { $event->addToken('{webview_url}', $model->buildUrl('mautic_email_webview', array('idHash' => $idHash))); } $signatureText = $this->factory->getParameter('default_signature_text'); $fromName = $this->factory->getParameter('mailer_from_name'); if (!empty($lead['owner_id'])) { $owner = $this->factory->getModel('lead')->getRepository()->getLeadOwner($lead['owner_id']); if ($owner && !empty($owner['signature'])) { $fromName = $owner['first_name'] . ' ' . $owner['last_name']; $signatureText = $owner['signature']; } } $signatureText = str_replace('|FROM_NAME|', $fromName, nl2br($signatureText)); $event->addToken('{signature}', $signatureText); $event->addToken('{subject}', $event->getSubject()); }
/** * @param EmailSendEvent $event * * @return void */ public function onEmailGenerate(EmailSendEvent $event) { $content = $event->getContent(); $source = $event->getSource(); $email = $event->getEmail(); $clickthrough = array(); if (!$event->isInternalSend()) { $clickthrough = array('source' => $source, 'email' => $email != null ? $email->getId() : null, 'stat' => $event->getIdHash()); $lead = $event->getLead(); if ($lead !== null) { $clickthrough['lead'] = $lead['id']; } } $tokens = $this->generateUrlTokens($content, $clickthrough, $email === null ? 0 : $email->getId(), $email, $event); $event->addTokens($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)); } }