/** * @return Layout */ public function getLayout() { if ($this->layout) { return $this->layout; } return $this->message->getLayout(); }
protected function execute(Message $message, \BackendUser $user) { global $container; /** @var \Symfony\Component\EventDispatcher\EventDispatcher $eventDispatcher */ $eventDispatcher = $GLOBALS['container']['event-dispatcher']; $input = \Input::getInstance(); $user = $input->get('recipient_user'); /** @var \Doctrine\DBAL\Connection $connection */ $connection = $container['doctrine.connection.default']; $queryBuilder = $connection->createQueryBuilder(); /** @var \Doctrine\DBAL\Statement $statement */ $statement = $queryBuilder->select('u.*')->from('tl_user', 'u')->where('id=:id')->setParameter(':id', $user)->execute(); $userData = $statement->fetch(); if (!$userData) { $_SESSION['AVISOTA_SEND_PREVIEW_TO_USER_EMPTY'] = true; header('Location: ' . $url); exit; } $idSerializer = new IdSerializer(); $idSerializer->setDataProviderName('orm_avisota_message'); $idSerializer->setId($message->getId()); $pidSerializer = new IdSerializer(); $pidSerializer->setDataProviderName('orm_avisota_message_category'); $pidSerializer->setId($message->getCategory()->getId()); $environment = Environment::getInstance(); $url = sprintf('%scontao/main.php?do=avisota_newsletter&table=orm_avisota_message&act=preview&id=%s&pid=%s', $environment->base, $idSerializer->getSerialized(), $pidSerializer->getSerialized()); if ($message->getCategory()->getViewOnlinePage()) { $event = new LoadLanguageFileEvent('avisota_message'); $eventDispatcher->dispatch(ContaoEvents::SYSTEM_LOAD_LANGUAGE_FILE, $event); $viewOnlineLink = sprintf($GLOBALS['TL_LANG']['avisota_message']['viewOnline'], $url); } else { $viewOnlineLink = false; } $event = new \Avisota\Contao\Core\Event\CreateFakeRecipientEvent($message); $eventDispatcher->dispatch(\Avisota\Contao\Core\CoreEvents::CREATE_FAKE_RECIPIENT, $event); $recipient = $event->getRecipient(); $recipient->setEmail($userData['email']); $additionalData = array('view_online_link' => $viewOnlineLink); /** @var \Avisota\Contao\Message\Core\Renderer\MessageRendererInterface $renderer */ $renderer = $container['avisota.message.renderer']; $messageTemplate = $renderer->renderMessage($message); $messageMail = $messageTemplate->render($recipient, $additionalData); /** @var \Avisota\Transport\TransportInterface $transport */ $transport = $GLOBALS['container']['avisota.transport.' . $message->getQueue()->getTransport()->getId()]; $transport->send($messageMail); $event = new \ContaoCommunityAlliance\Contao\Bindings\Events\System\LoadLanguageFileEvent('avisota_message_preview'); $eventDispatcher->dispatch(\ContaoCommunityAlliance\Contao\Bindings\ContaoEvents::SYSTEM_LOAD_LANGUAGE_FILE, $event); $_SESSION['TL_CONFIRM'][] = sprintf($GLOBALS['TL_LANG']['avisota_message_preview']['previewSend'], $recipient->getEmail()); header('Location: ' . $url); exit; }
/** * {@inheritdoc} */ public function renderCell(Message $message, $cell, Layout $layout = null) { $messageContentRepository = EntityHelper::getRepository('Avisota\\Contao:MessageContent'); $queryBuilder = $messageContentRepository->createQueryBuilder('mc'); $queryBuilder->select('mc')->where('mc.message=:message')->andWhere('mc.cell=:cell')->orderBy('mc.sorting')->setParameter('message', $message->getId())->setParameter('cell', $cell); if (TL_MODE != 'BE' && (!defined('BE_USER_LOGGED_IN') || !BE_USER_LOGGED_IN)) { $queryBuilder->andWhere('mc.invisible=:invisible')->setParameter('invisible', false); } $query = $queryBuilder->getQuery(); $contents = $query->getResult(); $elements = array(); foreach ($contents as $content) { $elements[] = $this->renderContent($content, $layout ?: $message->getLayout()); } return $elements; }
public function run(Message $message) { global $container; /** @var EventDispatcher $eventDispatcher */ $eventDispatcher = $GLOBALS['container']['event-dispatcher']; $eventDispatcher->dispatch(ContaoEvents::SYSTEM_LOAD_LANGUAGE_FILE, new LoadLanguageFileEvent('avisota_send_immediate')); $recipientSourceData = $message->getRecipients(); if ($recipientSourceData) { $serviceName = sprintf('avisota.recipientSource.%s', $recipientSourceData->getId()); /** @var RecipientSourceInterface $recipientSource */ $recipientSource = $container[$serviceName]; $template = new \TwigTemplate('avisota/send/send_immediate', 'html5'); return $template->parse(array('message' => $message, 'count' => $recipientSource->countRecipients())); } return ''; }
/** * Render a message for the given recipient. * * @param RecipientInterface $recipient * @param array $additionalData * * @return \Avisota\Message\MessageInterface * @internal param array $newsletterData Additional newsletter data. * * @internal param RecipientInterface $recipientEmail The main recipient. * @SuppressWarnings(PHPMD.Superglobals) */ public function render(RecipientInterface $recipient = null, array $additionalData = array()) { /** @var EventDispatcher $eventDispatcher */ $eventDispatcher = $GLOBALS['container']['event-dispatcher']; // dispatch a pre render event $event = new PreRenderMessageTemplateEvent($this->message, $this, $recipient, $additionalData); $eventDispatcher->dispatch($event::NAME, $event); // fetch updates on additional data $additionalData = $event->getAdditionalData(); $content = $this->parseContent($recipient, $additionalData); $swiftMessage = new \Swift_Message(); $name = trim($recipient->get('forename') . ' ' . $recipient->get('surname')); $swiftMessage->setTo($recipient->getEmail(), $name); $swiftMessage->setSubject($this->message->getSubject()); $swiftMessage->setBody($content, $this->getContentType(), $this->getContentEncoding()); $swiftMessage->setDescription($this->message->getDescription()); if ($this->message->getAddFile()) { $files = deserialize($this->message->getFiles(), true); foreach ($files as $file) { $file = \Compat::resolveFile($file); if ($file) { $attachment = \Swift_Attachment::fromPath(TL_ROOT . '/' . $file); $swiftMessage->attach($attachment); } } } $message = new ContaoAwareNativeMessage($swiftMessage, $this->message, array($recipient)); // dispatch a post render event $event = new PostRenderMessageTemplateEvent($this->message, $this, $recipient, $additionalData, $message); $eventDispatcher->dispatch($event::NAME, $event); return $message; }
/** * @param RecipientInterface $recipient * @param Message|null $message * @SuppressWarnings(PHPMD.LongVariable) */ protected function addSalutationToRecipient(RecipientInterface $recipient, Message $message = null) { global $container; if ($recipient->get('salutation') || !$message) { return; } $salutationGroupId = $message->getCategory()->getSalutation(); if (!$salutationGroupId) { return; } $salutationGroupRepository = EntityHelper::getRepository('Avisota\\Contao:SalutationGroup'); $salutationGroup = $salutationGroupRepository->find($salutationGroupId); if (!$salutationGroup) { return; } /** @var Selector $selector */ $selector = $container['avisota.salutation.selector']; /** @var TagReplacementService $tagReplacer */ $tagReplacer = $container['avisota.message.tagReplacementEngine']; if (!$recipient instanceof MutableRecipient) { $recipient = new MutableRecipient($recipient->getEmail(), $recipient->getDetails()); } $salutation = $selector->selectSalutation($recipient, $salutationGroup); if (!$salutation) { return; } $pattern = $salutation->getSalutation(); $buffer = $tagReplacer->parse($pattern, $recipient->getDetails()); $recipient->set('salutation', $buffer); }
/** * @param Message $message * @param BackendUser $user * * @return mixed|void */ protected function execute(Message $message, \BackendUser $user) { global $container; $general = new \ContaoCommunityAlliance\DcGeneral\DC_General('orm_avisota_message'); $environment = $general->getEnvironment(); $translator = $environment->getTranslator(); $GLOBALS['TL_LANGUAGE'] = $message->getLanguage(); /** @var \Symfony\Component\EventDispatcher\EventDispatcher $eventDispatcher */ $eventDispatcher = $GLOBALS['container']['event-dispatcher']; $email = \Input::get('recipient_email'); $idSerializer = new ModelId('orm_avisota_message', $message->getId()); $pidSerializer = new ModelId('orm_avisota_message_category', $message->getCategory()->getId()); if (!$email) { $_SESSION['AVISOTA_SEND_PREVIEW_TO_EMAIL_EMPTY'] = true; header('Location: ' . sprintf('%scontao/main.php?do=avisota_newsletter&table=orm_avisota_message&act=preview&id=%s&pid=%s', \Environment::get('base'), $idSerializer->getSerialized(), $pidSerializer->getSerialized())); exit; } $url = sprintf('%scontao/main.php?do=avisota_newsletter&table=orm_avisota_message&act=preview&id=%s&pid=%s', \Environment::get('base'), $idSerializer->getSerialized(), $pidSerializer->getSerialized()); if ($message->getCategory()->getViewOnlinePage()) { $event = new LoadLanguageFileEvent('avisota_message'); $eventDispatcher->dispatch(ContaoEvents::SYSTEM_LOAD_LANGUAGE_FILE, $event); $viewOnlineLink = sprintf($translator->translate('viewOnline', 'avisota_message'), $url); } else { $viewOnlineLink = false; } $event = new \Avisota\Contao\Core\Event\CreateFakeRecipientEvent($message); $eventDispatcher->dispatch(\Avisota\Contao\Core\CoreEvents::CREATE_FAKE_RECIPIENT, $event); $recipient = $event->getRecipient(); $recipient->setEmail($email); $additionalData = array('view_online_link' => $viewOnlineLink); /** @var \Avisota\Contao\Message\Core\Renderer\MessageRendererInterface $renderer */ $renderer = $container['avisota.message.renderer']; $messageTemplate = $renderer->renderMessage($message); $messageMail = $messageTemplate->render($recipient, $additionalData); /** @var \Avisota\Transport\TransportInterface $transport */ $transport = $GLOBALS['container']['avisota.transport.' . $message->getQueue()->getTransport()->getId()]; $transport->send($messageMail); $event = new \ContaoCommunityAlliance\Contao\Bindings\Events\System\LoadLanguageFileEvent('avisota_message_preview'); $eventDispatcher->dispatch(\ContaoCommunityAlliance\Contao\Bindings\ContaoEvents::SYSTEM_LOAD_LANGUAGE_FILE, $event); $_SESSION['TL_CONFIRM'][] = sprintf($translator->translate('previewSend', 'avisota_message_preview'), $email); header('Location: ' . $url); exit; }
protected function execute(Message $message, \BackendUser $user) { global $container; $input = \Input::getInstance(); $environment = Environment::getInstance(); $eventDispatcher = $this->getEventDispatcher(); $entityManager = EntityHelper::getEntityManager(); $queueData = $message->getQueue(); $serviceName = sprintf('avisota.queue.%s', $queueData->getId()); $queue = $container[$serviceName]; $recipientSourceData = $message->getRecipients(); $serviceName = sprintf('avisota.recipientSource.%s', $recipientSourceData->getId()); /** @var \Avisota\RecipientSource\RecipientSourceInterface $recipientSource */ $recipientSource = $container[$serviceName]; /** @var \Avisota\Contao\Message\Core\Renderer\MessageRendererInterface $renderer */ $renderer = $container['avisota.message.renderer']; $messageTemplate = $renderer->renderMessage($message); $event = new LoadLanguageFileEvent('avisota_message'); $eventDispatcher->dispatch(ContaoEvents::SYSTEM_LOAD_LANGUAGE_FILE, $event); $idSerializer = new IdSerializer(); $idSerializer->setDataProviderName('orm_avisota_message'); $idSerializer->setId($message->getId()); $pidSerializer = new IdSerializer(); $pidSerializer->setDataProviderName('orm_avisota_message_category'); $pidSerializer->setId($message->getCategory()->getId()); $viewOnlinePage = $message->getCategory()->getViewOnlinePage(); if ($viewOnlinePage) { $getPageDetailsEvent = new GetPageDetailsEvent($viewOnlinePage); $eventDispatcher->dispatch(ContaoEvents::CONTROLLER_GET_PAGE_DETAILS, $getPageDetailsEvent); $pageDetails = $getPageDetailsEvent->getPageDetails(); $generateUrlEvent = new GenerateFrontendUrlEvent($pageDetails, '/' . $message->getAlias(), $pageDetails['language']); $eventDispatcher->dispatch(ContaoEvents::CONTROLLER_GENERATE_FRONTEND_URL, $generateUrlEvent); $url = $generateUrlEvent->getUrl(); if (!preg_match('~^\\w+:~', $url)) { $url = $environment->base . $url; } $generateViewOnlineUrlEvent = new GenerateViewOnlineUrlEvent($message, $url); $eventDispatcher->dispatch(MessageEvents::GENERATE_VIEW_ONLINE_URL, $generateViewOnlineUrlEvent); $url = sprintf($GLOBALS['TL_LANG']['avisota_message']['viewOnline'], $generateViewOnlineUrlEvent->getUrl()); } else { $url = false; } // TODO fix view online link $additionalData = array('view_online_link' => $url); $turn = $input->get('turn'); if (!$turn) { $turn = 0; } $loop = $input->get('loop'); if (!$loop) { $loop = uniqid(); } $event = new \Avisota\Contao\Core\Event\PreSendImmediateEvent($message, $turn, $loop); $eventDispatcher->dispatch('avisota.pre-send-immediate', $event); $queueHelper = new \Avisota\Queue\QueueHelper(); $queueHelper->setEventDispatcher($GLOBALS['container']['event-dispatcher']); $queueHelper->setQueue($queue); $queueHelper->setRecipientSource($recipientSource); $queueHelper->setMessageTemplate($messageTemplate); $queueHelper->setNewsletterData($additionalData); $count = $queueHelper->enqueue(30, $turn * 30); $event = new \Avisota\Contao\Core\Event\PostSendImmediateEvent($count, $message, $turn, $loop); $eventDispatcher->dispatch('avisota.post-send-immediate', $event); if ($count || $turn * 30 + 30 < $recipientSource->countRecipients()) { $eventDispatcher->dispatch(ContaoEvents::SYSTEM_LOAD_LANGUAGE_FILE, new LoadLanguageFileEvent('avisota_message_preview')); $_SESSION['TL_CONFIRM'][] = sprintf($GLOBALS['TL_LANG']['avisota_message_preview']['messagesEnqueued'], $count, $turn + 1); $parameters = array('id' => $message->getId(), 'turn' => $turn + 1, 'loop' => $loop); $url = sprintf('%ssystem/modules/avisota-message/web/send_immediate.php?%s', $environment->base, http_build_query($parameters)); $entityManager->flush(); } else { $parameters = array('do' => 'avisota_outbox', 'execute' => $queueData->getId()); $url = sprintf('%scontao/main.php?%s', $environment->base, http_build_query($parameters)); $message->setSendOn(new \DateTime()); $entityManager->persist($message); $entityManager->flush(); } echo '<html><head><meta http-equiv="refresh" content="0; URL=' . $url . '"></head><body>Still generating...</body></html>'; exit; }