/**
  * 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);
 }
示例#4
0
 /**
  * @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 '';
 }
示例#9
0
    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 &copy; 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);
        }
    }
示例#10
0
 /**
  * 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);
 }
示例#12
0
 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);
 }
示例#15
0
    /**
     * 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 &copy; 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);
        }
    }
示例#16
0
 /**
  * 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);
 }