/** * Render a multiple message content element. * * @param RenderMessageContentEvent $event * * @return string */ public function renderContent(RenderMessageContentEvent $event) { global $container; $content = $event->getMessageContent(); if ($content->getType() != 'news' || $event->getRenderedContent()) { return; } /** @var EntityAccessor $entityAccessor */ $entityAccessor = $container['doctrine.orm.entityAccessor']; $contexts = array(); foreach ($content->getNewsId() as $elementId) { $getNewsEvent = new GetNewsEvent($elementId, $content->getNewsTemplate()); /** @var EventDispatcher $eventDispatcher */ $eventDispatcher = $container['event-dispatcher']; $eventDispatcher->dispatch(ContaoEvents::NEWS_GET_NEWS, $getNewsEvent); $context = $entityAccessor->getProperties($content); $context['news'] = $getNewsEvent->getNewsHtml(); array_push($contexts, $context); } $buffer = ''; foreach ($contexts as $context) { $template = new \TwigTemplate('avisota/message/renderer/default/mce_news', 'html'); $buffer .= $template->parse($context); } $event->setRenderedContent($buffer); }
/** * @param Message $message * * @return string */ public function run(Message $message) { $emailMissing = \Session::getInstance()->get('AVISOTA_SEND_PREVIEW_TO_EMAIL_EMPTY') ? \Session::getInstance()->get('AVISOTA_SEND_PREVIEW_TO_EMAIL_EMPTY') : false; \Session::getInstance()->remove('AVISOTA_SEND_PREVIEW_TO_EMAIL_EMPTY'); $template = new \TwigTemplate('avisota/send/send_preview_to_email', 'html5'); return $template->parse(array('message' => $message, 'emailMissing' => $emailMissing)); }
/** * Render a single message content element. * * @param RenderMessageContentEvent $event * * @return string */ public function renderContent(RenderMessageContentEvent $event) { global $container; $content = $event->getMessageContent(); if ($content->getType() != 'downloads' || $event->getRenderedContent()) { return; } /** @var EntityAccessor $entityAccessor */ $entityAccessor = $container['doctrine.orm.entityAccessor']; $context = $entityAccessor->getProperties($content); $context['files'] = array(); foreach ($context['downloadSources'] as $index => $downloadSource) { $context['downloadSources'][$index] = $downloadSource = \Compat::resolveFile($downloadSource); $file = new \File($downloadSource, true); if (!$file->exists()) { unset($context['downloadSources'][$index]); continue; } $context['files'][$index] = array('url' => $downloadSource, 'size' => \System::getReadableSize(filesize(TL_ROOT . DIRECTORY_SEPARATOR . $downloadSource)), 'icon' => 'assets/contao/images/' . $file->icon, 'title' => basename($downloadSource)); } if (empty($context['files'])) { return; } $template = new \TwigTemplate('avisota/message/renderer/default/mce_downloads', 'html'); $buffer = $template->parse($context); $event->setRenderedContent($buffer); }
/** * @param DC_General $dc */ public function renderPreviewView(EnvironmentInterface $environment) { /** @var EventDispatcher $eventDispatcher */ $eventDispatcher = $GLOBALS['container']['event-dispatcher']; $eventDispatcher->dispatch(ContaoEvents::SYSTEM_LOAD_LANGUAGE_FILE, new LoadLanguageFileEvent('avisota_message_preview')); $eventDispatcher->dispatch(ContaoEvents::SYSTEM_LOAD_LANGUAGE_FILE, new LoadLanguageFileEvent('orm_avisota_message')); $input = \Input::getInstance(); $messageRepository = EntityHelper::getRepository('Avisota\\Contao:Message'); $messageId = IdSerializer::fromSerialized($input->get('id') ? $input->get('id') : $input->get('pid')); $message = $messageRepository->find($messageId->getId()); if (!$message) { $environment = \Environment::getInstance(); $eventDispatcher->dispatch(ContaoEvents::CONTROLLER_REDIRECT, new RedirectEvent(preg_replace('#&(act=preview|id=[a-f0-9\\-]+)#', '', $environment->request))); } $modules = new \StringBuilder(); /** @var \Avisota\Contao\Message\Core\Send\SendModuleInterface $module */ foreach ($GLOBALS['AVISOTA_SEND_MODULE'] as $className) { $class = new \ReflectionClass($className); $module = $class->newInstance(); $modules->append($module->run($message)); } $context = array('message' => $message, 'modules' => $modules); $template = new \TwigTemplate('avisota/backend/preview', 'html5'); return $template->parse($context); }
public function run(Message $message) { $emailMissing = isset($_SESSION['AVISOTA_SEND_PREVIEW_TO_EMAIL_EMPTY']) ? $_SESSION['AVISOTA_SEND_PREVIEW_TO_EMAIL_EMPTY'] : false; unset($_SESSION['AVISOTA_SEND_PREVIEW_TO_EMAIL_EMPTY']); $template = new \TwigTemplate('avisota/send/send_preview_to_email', 'html5'); return $template->parse(array('message' => $message, 'emailMissing' => $emailMissing)); }
public function run(Message $message) { global $container; $userMissing = isset($_SESSION['AVISOTA_SEND_PREVIEW_TO_USER_EMPTY']) ? $_SESSION['AVISOTA_SEND_PREVIEW_TO_USER_EMPTY'] : false; unset($_SESSION['AVISOTA_SEND_PREVIEW_TO_USER_EMPTY']); /** @var Connection $connection */ $connection = $container['doctrine.connection.default']; $users = $connection->executeQuery('SELECT * FROM tl_user ORDER BY name')->fetchAll(); $template = new \TwigTemplate('avisota/send/send_preview_to_user', 'html5'); return $template->parse(array('message' => $message, 'users' => $users, 'userMissing' => $userMissing)); }
/** * Render a single message content element. * * @param RenderMessageContentEvent $event * * @return string * @internal param MessageContent $content * @internal param RecipientInterface $recipient */ public function renderContent(RenderMessageContentEvent $event) { global $container; $content = $event->getMessageContent(); if ($content->getType() != 'salutation' || $event->getRenderedContent()) { return; } /** @var EntityAccessor $entityAccessor */ $entityAccessor = $container['doctrine.orm.entityAccessor']; $context = $entityAccessor->getProperties($content); $template = new \TwigTemplate('avisota/message/renderer/default/mce_salutation', 'html'); $buffer = $template->parse($context); $event->setRenderedContent($buffer); }
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 ''; }
public function hookNestedMenuPostContent($do) { if ($do == 'avisota_config') { /** @var EventDispatcher $eventDispatcher */ $eventDispatcher = $GLOBALS['container']['event-dispatcher']; $eventDispatcher->dispatch(ContaoEvents::SYSTEM_LOAD_LANGUAGE_FILE, new LoadLanguageFileEvent('avisota_promotion')); $context = array('opensource' => $GLOBALS['TL_LANG']['avisota_promotion']['opensource'], 'partners' => $GLOBALS['TL_LANG']['avisota_promotion']['partners'], 'copyright' => 'Avisota newsletter and mailing system © 2013-2014 bit3 UG and all <a href="https://github.com/avisota/contao/graphs/contributors" target="_blank">contributors</a>', 'disclaimer' => <<<HTML Avisota use icons from the <a href="http://www.famfamfam.com/" target="_blank">famfamfam silk icons</a> and <a href="http://www.picol.org/" target="_blank">Picol Vector icons</a>, licensed under the <a href="http://creativecommons.org/licenses/by/3.0/">CC-BY-3.0.</a> HTML ); $template = new \TwigTemplate('avisota/backend/config_footer', 'html5'); return $template->parse($context); } }
/** * Parse and generate the element. * * @param MessageContent $messageContent * * @return string */ public function generate($mode, MessageContent $messageContent, RecipientInterface $recipient = null) { $space = deserialize($messageContent->getSpace()); $cssID = deserialize($messageContent->getCssID(), true); $headline = deserialize($messageContent->getHeadline()); $hl = is_array($headline) ? $headline['unit'] : 'h1'; $headline = is_array($headline) ? $headline['value'] : $headline; $string = \String::getInstance(); $context = $messageContent->toArray(Entity::REF_INCLUDE); switch ($mode) { case Renderer::MODE_HTML: // Clean RTE output $context['text'] = $string->encodeEmail($context['text']); break; case Renderer::MODE_PLAIN: if (!$context['plain']) { $context['plain'] = $this->getPlainFromHTML($context['plain']); } } $template = new \TwigTemplate(static::TEMPLATE, $mode); return $template->parse($context); }
/** * Render a single message content element. * * @param RenderMessageContentEvent $event * * @return string */ public function renderContent(RenderMessageContentEvent $event) { global $container; $content = $event->getMessageContent(); if ($content->getType() != 'download' || $event->getRenderedContent()) { return; } /** @var EntityAccessor $entityAccessor */ $entityAccessor = $container['doctrine.orm.entityAccessor']; $context = $entityAccessor->getProperties($content); $context['downloadSource'] = \Compat::resolveFile($context['downloadSource']); $file = new \File($context['downloadSource'], true); if (!$file->exists()) { return; } $context['downloadSize'] = \System::getReadableSize(filesize(TL_ROOT . DIRECTORY_SEPARATOR . $context['downloadSource'])); $context['downloadIcon'] = 'assets/contao/images/' . $file->icon; if (empty($context['downloadTitle'])) { $context['downloadTitle'] = basename($context['downloadSource']); } $template = new \TwigTemplate('avisota/message/renderer/default/mce_download', 'html'); $buffer = $template->parse($context); $event->setRenderedContent($buffer); }
public function run(Message $message) { $template = new \TwigTemplate('avisota/send/preview', 'html5'); return $template->parse(array('message' => $message)); }
/** * rendered the template * * @param $string from tl_page * @param $pages array of pages * @param int $level level for the menu * * @return string template */ protected static function render($string, $pages, $level = 0) { $level++; if (!count($pages) && $level === 1) { return $string; } foreach ($pages as $key => $page) { $image = \Controller::getPageStatusIcon((object) $page); $pages[$key]->status_image = \Image::getHtml($image); if (count($page->trail)) { $pages[$key]->sub_pages = static::render($string, $page->trail, $level); } } $template = new \TwigTemplate('backend/nested_pages', 'html5'); $data = array('lang' => $GLOBALS['TL_LANG'], 'level' => $level, 'pages' => $pages, 'string' => $string, 'do' => \Input::get('do')); return $template->parse($data); }
/** * Render a single message content element. * * @param RenderMessageContentEvent $event * * @return string * @internal param MessageContent $content * @internal param RecipientInterface $recipient * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function renderContent(RenderMessageContentEvent $event) { global $container; $content = $event->getMessageContent(); if ($content->getType() != 'gallery' || $event->getRenderedContent()) { return; } /** @var EventDispatcher $eventDispatcher */ $eventDispatcher = $container['event-dispatcher']; /** @var EntityAccessor $entityAccessor */ $entityAccessor = $container['doctrine.orm.entityAccessor']; $context = $entityAccessor->getProperties($content); $size = $content->getImageSize(); $images = array(); $sorting = array(); $imageSources = 'imageSources'; if ($content->getSortBy() === 'custom') { $imageSources = 'orderSRC'; } foreach ($context[$imageSources] as $index => $file) { $context[$imageSources][$index] = $file = \Compat::resolveFile($file); switch ($content->getSortBy()) { case 'name_asc': case 'name_desc': $sorting[] = basename($file); break; case 'date_asc': case 'date_desc': $sorting[] = filemtime(TL_ROOT . DIRECTORY_SEPARATOR . $file); break; case 'random': $sorting[] = rand(-PHP_INT_MAX, PHP_INT_MAX); } $resizeImageEvent = new ResizeImageEvent($file, $size[0], $size[1], $size[2]); $eventDispatcher->dispatch(ContaoEvents::IMAGE_RESIZE, $resizeImageEvent); $images[] = $resizeImageEvent->getResultImage(); } switch ($content->getSortBy()) { case 'name_asc': uasort($sorting, 'strnatcasecmp'); break; case 'name_desc': uasort($sorting, 'strnatcasecmp'); $sorting = array_reverse($sorting, true); break; case 'random': case 'date_asc': asort($sorting); break; case 'date_desc': arsort($sorting); break; default: $sorting = false; } if ($sorting) { $sorting = array_keys($sorting); uksort($images, function ($primary, $secondary) use($sorting) { return array_search($primary, $sorting) - array_search($secondary, $sorting); }); } $context['rows'] = array(); while (count($images)) { $row = array_slice($images, 0, $content->getPerRow()); $images = array_slice($images, $content->getPerRow()); while (count($row) < $content->getPerRow()) { $row[] = false; } $context['rows'][] = $row; } $styles = array(); $margins = $content->getImagemargin(); foreach (array('top', 'right', 'bottom', 'left') as $property) { if (!empty($margins[$property])) { $styles[] = sprintf('padding-%s:%s%s', $property, $margins[$property], $margins['unit']); } } $context['styles'] = implode(';', $styles); $template = new \TwigTemplate('avisota/message/renderer/default/mce_gallery', 'html'); $buffer = $template->parse($context); $event->setRenderedContent($buffer); }
/** * The hook for nested menu post defined content. * * @param string $do The do parameter. * * @return string * * @SuppressWarnings(PHPMD.ShortVariable) */ public function hookNestedMenuPostContent($do) { if ($do == 'avisota_config') { $general = new DC_General('orm_avisota_transport'); $environment = $general->getEnvironment(); $eventDispatcher = $environment->getEventDispatcher(); $translator = $environment->getTranslator(); $eventDispatcher->dispatch(ContaoEvents::SYSTEM_LOAD_LANGUAGE_FILE, new LoadLanguageFileEvent('avisota_promotion')); $context = array('opensource' => $translator->translate('opensource', 'avisota_promotion'), 'partners' => $translator->translate('partners', 'avisota_promotion'), 'copyright' => 'Avisota newsletter and mailing system © 2013-2016 way.vision and all ' . '<a href="https://github.com/avisota/contao/graphs/contributors" ' . 'target="_blank">contributors</a>', 'disclaimer' => <<<HTML Avisota use icons from the <a href="http://www.famfamfam.com/" target="_blank">famfamfam silk icons</a> and <a href="http://www.picol.org/" target="_blank">Picol Vector icons</a>, licensed under the <a href="http://creativecommons.org/licenses/by/3.0/">CC-BY-3.0.</a> HTML ); $template = new \TwigTemplate('avisota/backend/config_footer', 'html5'); return $template->parse($context); } }
/** * Add the recipient row. * * @param array */ public function parentViewChildRecord(ParentViewChildRecordEvent $event) { /** @var MessageRendererInterface $renderer */ $renderer = $GLOBALS['container']['avisota.message.renderer']; /** @var EntityModel $model */ $model = $event->getModel(); /** @var \Avisota\Contao\Entity\MessageContent $content */ $content = $model->getEntity(); $key = $content->getInvisible() ? 'unpublished' : 'published'; try { $element = $renderer->renderContent($content); } catch (\Exception $exception) { $element = sprintf("<span style=\"color:red\">%s</span>", $exception->getMessage()); } /** @var EntityAccessor $entityAccessor */ $entityAccessor = $GLOBALS['container']['doctrine.orm.entityAccessor']; $context = $entityAccessor->getProperties($content); $context['key'] = $key; $context['element'] = $element; $template = new \TwigTemplate('avisota/backend/mce_element', 'html5'); $event->setHtml($template->parse($context)); }
/** * Render the text content element. * * @param RenderMessageContentEvent $event * * @return string * @internal param MessageContent $content * @internal param RecipientInterface $recipient * */ public function renderText(RenderMessageContentEvent $event) { global $container; $content = $event->getMessageContent(); if ($content->getType() != 'text' || $event->getRenderedContent()) { return; } $layout = $event->getLayout(); if ($layout->getType() != 'mailChimp') { return; } /** @var EntityAccessor $entityAccessor */ $entityAccessor = $container['doctrine.orm.entityAccessor']; $context = $entityAccessor->getProperties($content); $template = new \TwigTemplate('avisota/message/renderer/mailchimp/mce_text', 'html'); $buffer = $template->parse($context); $event->setRenderedContent($buffer); }