public function testNewRendererWithResolvers() { $templatePathStack1 = new Resolver\TemplatePathStack(); $templatePathStack1->addPath(realpath('view')); $templatePathStack2 = new Resolver\TemplatePathStack(); $templatePathStack2->addPath(realpath('view')); $resolvers1 = array($templatePathStack1); $resolvers2 = array($templatePathStack2); $class = new ReflectionClass('Lfj\\ZfRenderer\\Renderer'); $property = $class->getProperty("resolvers"); $property->setAccessible(true); $rendererResolvers1 = new Renderer(null, null, $resolvers1); $rendererResolvers2 = $rendererResolvers1->withResolvers($resolvers2); $resolversFromRendererResolvers1 = $property->getValue($rendererResolvers1); $resolversFromRendererResolvers2 = $property->getValue($rendererResolvers2); // all resolvers of $rendererResolvers1 must be the same as the ones in $resolvers1 // but must be different from the ones in $resolvers2 foreach ($resolversFromRendererResolvers1 as $i => $v) { $this->assertSame($resolvers1[$i], $v); $this->assertNotSame($resolvers2[$i], $v); } // all resolvers of $rendererResolvers2 must be the same as the ones in $resolvers2 // but must be different from the ones in $resolvers1 foreach ($resolversFromRendererResolvers2 as $i => $v) { $this->assertSame($resolvers2[$i], $v); $this->assertNotSame($resolvers1[$i], $v); } }
/** * @return PhpRenderer */ public function getTestRenderer() { $resolver = new TemplatePathStack(); $resolver->addPath(__DIR__ . '/../views'); $renderer = new PhpRenderer(); $renderer->setResolver($resolver); return $renderer; }
public function getContent() { $info = new \SplFileInfo($this->file); $renderer = new PhpRenderer(); $stack = new TemplatePathStack(); $stack->addPath($info->getPath()); $stack->setDefaultSuffix(pathinfo($this->file, PATHINFO_EXTENSION)); $renderer->setResolver($stack); return $renderer->render($info->getBasename()); }
public function createService(ServiceLocatorInterface $serviceLocator) { /* @var $config ModuleOptions */ $config = $serviceLocator->get('ZendSmarty\\ModuleOptions'); /* @var $orig TemplatePathStack */ $orig = $serviceLocator->get('ViewTemplatePathStack'); $instance = new TemplatePathStack(); $instance->addPaths($orig->getPaths()->toArray()); $instance->setDefaultSuffix($config->suffix); return $instance; }
public function setUp() { parent::setUp(); $this->renderer = new PdfRenderer(); $this->resolver = new TemplatePathStack(); $this->resolver->addPath(dirname(__DIR__) . '/_templates'); $this->renderer->setResolver($this->resolver); $htmlRenderer = new PhpRenderer(); $htmlRenderer->setResolver($this->resolver); $this->renderer->setHtmlRenderer($htmlRenderer); $this->renderer->setEngine($this->serviceManager->get('dompdf')); }
/** * Create the template map view resolver * * Creates a Zend\View\Resolver\TemplatePathStack and populates it with the * ['view_manager']['template_path_stack'] * * @param ServiceLocatorInterface $serviceLocator * @return ViewResolver\TemplatePathStack */ public function createService(ServiceLocatorInterface $serviceLocator) { $config = $serviceLocator->get('Config'); $stack = array(); if (is_array($config) && isset($config['view_manager'])) { $config = $config['view_manager']; if (is_array($config) && isset($config['template_path_stack'])) { $stack = $config['template_path_stack']; } } $templatePathStack = new ViewResolver\TemplatePathStack(); $templatePathStack->addPaths($stack); return $templatePathStack; }
public function testRenderingAnotherTemplateInsideATemplate() { $expectedContent = 'hello world'; $content = null; $template = realpath('view/template-with-renderer.phtml'); $templatePathStack = new Resolver\TemplatePathStack(); $templatePathStack->addPath(realpath('view')); $renderer = new Renderer(); $rendererWithTemplatePathStack = $renderer->withResolvers(array($templatePathStack)); $viewVariables = array('name' => 'world', 'renderer' => $rendererWithTemplatePathStack); $renderedContent = $rendererWithTemplatePathStack->render($template, $viewVariables); $this->assertEquals('Zend\\Stdlib\\Response', get_class($renderedContent->getResponse())); $this->assertEquals($expectedContent, $renderedContent->getResponse()->getContent()); }
/** * Create service * * @param ServiceLocatorInterface $serviceLocator * @return mixed */ public function createService(ServiceLocatorInterface $serviceLocator) { $config = $serviceLocator->get('Config'); $templatePathStack = new ViewResolver\TemplatePathStack(); if (is_array($config) && isset($config['view_manager'])) { $config = $config['view_manager']; if (is_array($config) && isset($config['template_path_stack'])) { $templatePathStack->addPaths($config['template_path_stack']); } if (is_array($config) && isset($config['smarty_default_suffix'])) { $templatePathStack->setDefaultSuffix($config['smarty_default_suffix']); } } return $templatePathStack; }
/** * {@inheritDoc} */ public function resolve($name, Renderer $renderer = null) { foreach ($this->prefixes as $prefix => &$resolver) { if (strpos($name, $prefix) !== 0) { continue; } if (!$resolver instanceof ResolverInterface) { $resolver = new TemplatePathStack(array('script_paths' => (array) $resolver)); } if ($result = $resolver->resolve(substr($name, strlen($prefix)), $renderer)) { return $result; } } return; }
/** * Return the PHP Renderer to render the partials * @return null|PhpRenderer */ protected function getRenderer() { if (!is_null($this->renderer)) { return $this->renderer; } $renderer = $this->getServiceLocator()->get('Zend\\View\\Renderer\\RendererInterface'); $resolver = new AggregateResolver(); $stack = new TemplatePathStack(); $config = $this->getServiceLocator()->get('Config'); foreach ($config['view_manager']["template_path_stack"] as $path) { $stack->addPath($path); } $resolver->attach($stack); $renderer->setResolver($resolver); return $this->renderer = $renderer; }
/** * Create the template path stack view resolver * * Creates a Zend\View\Resolver\TemplatePathStack and populates it with the * ['view_manager']['template_path_stack'] and sets the default suffix with the * ['view_manager']['default_template_suffix'] * * @param ContainerInterface $container * @param string $name * @param null|array $options * @return ViewResolver\TemplatePathStack */ public function __invoke(ContainerInterface $container, $name, array $options = null) { $config = $container->get('config'); $templatePathStack = new ViewResolver\TemplatePathStack(); if (is_array($config) && isset($config['view_manager'])) { $config = $config['view_manager']; if (is_array($config)) { if (isset($config['template_path_stack'])) { $templatePathStack->addPaths($config['template_path_stack']); } if (isset($config['default_template_suffix'])) { $templatePathStack->setDefaultSuffix($config['default_template_suffix']); } } } return $templatePathStack; }
/** * Create, configure and return the email renderer. * * @see FactoryInterface::createService() * @return \Zend\View\Renderer\RendererInterface */ public function createService(ServiceLocatorInterface $serviceLocator) { $config = $serviceLocator->get('config'); if (empty($config['uj']['mail']['renderer'])) { throw new RuntimeException('Config required in order to create \\Uj\\Mail\\Renderer.' . 'required config key: $config["uj"]["mail"]["renderer"].'); } $rendererConfig = $config['uj']['mail']['renderer']; $resolver = new AggregateResolver(); if (isset($rendererConfig['templateMap'])) { $resolver->attach(new TemplateMapResolver($rendererConfig['templateMap'])); } if (isset($rendererConfig['templatePathStack'])) { $pathStackResolver = new TemplatePathStack(); $pathStackResolver->setPaths($rendererConfig['templatePathStack']); $resolver->attach($pathStackResolver); } $renderer = new PhpRenderer(); $renderer->setHelperPluginManager($serviceLocator->get('ViewHelperManager')); $renderer->setResolver($resolver); return $renderer; }
/** * {@inheritdoc} */ protected function setUp() { parent::setUp(); $this->renderer = new PdfRenderer(); $this->strategy = new PdfStrategy($this->renderer); $this->event = new ViewEvent(); $this->response = new HttpResponse(); $this->resolver = new TemplatePathStack(); $this->resolver->addPath(dirname(__DIR__) . '/_templates'); $this->renderer->setResolver($this->resolver); $htmlRenderer = new PhpRenderer(); $htmlRenderer->setResolver($this->resolver); $this->renderer->setHtmlRenderer($htmlRenderer); $this->renderer->setEngine($this->getServiceManager()->get('dompdf')); }
/** * Retrieve the filesystem path to a view script * * @param string $name * @param null|Renderer $renderer * @throws \Zend\View\Exception\DomainException * @return string */ public function resolve($name, Renderer $renderer = null) { if (!self::$currentLayoutId) { $activeLayouts = LayoutService::getCurrentLayouts(); self::$currentLayoutId = end($activeLayouts)['name']; } // generate a cache name $cacheName = CacheUtility::getCacheName(self::CACHE_TEMPLATE_PATH, [$name, $renderer, self::$currentLayoutId]); // check data in cache if (null === ($templatePath = $this->dynamicCacheInstance->getItem($cacheName))) { if (false !== ($templatePath = parent::resolve($name, $renderer))) { // save data in cache $this->dynamicCacheInstance->setItem($cacheName, $templatePath); } } return $templatePath; }
/** * @dataProvider validOptions */ public function testAllowsPassingOptionsToConstructor($arg) { $arg['script_paths'] = $this->paths; $stack = new TemplatePathStack($arg); $this->assertFalse($stack->isLfiProtectionOn()); $expected = (bool) ini_get('short_open_tag'); $this->assertSame($expected, $stack->useStreamWrapper()); $this->assertEquals(array_reverse($this->paths), $stack->getPaths()->toArray()); }
/** * Add a path for template * * @param string $path * @param string $namespace */ public function addPath($path, $namespace = null) { $this->resolver->addPath($path); // Normalize the path to be compliant with the TemplatePathStack $this->paths[TemplatePathStack::normalizePath($path)] = $namespace; }
/** * @param ServiceLocatorInterface $sm * @return RendererInterface */ protected function createRenderer(ServiceLocatorInterface $sm) { // Try to return the configured renderer. If it points to an undefined service, create a renderer on the fly try { /** @var RendererInterface $renderer */ $renderer = $sm->get('mailviewrenderer'); return $renderer; } catch (ServiceNotFoundException $e) { // In case the renderer service is not defined, try to construct it $vmConfig = $this->getSpecificConfig($sm, 'view_manager'); $renderer = new PhpRenderer(); // Check what kind of view_manager configuration has been defined if (isset($vmConfig['template_map']) && isset($vmConfig['template_path_stack'])) { // If both a template_map and a template_path_stack have been defined, create an AggregateResolver $pathStackResolver = new TemplatePathStack(); $pathStackResolver->setPaths($vmConfig['template_path_stack']); $resolver = new AggregateResolver(); $resolver->attach($pathStackResolver)->attach(new TemplateMapResolver($vmConfig['template_map'])); $renderer->setResolver($resolver); } elseif (isset($vmConfig['template_map'])) { // Create a TemplateMapResolver in case only the template_map has been defined $renderer->setResolver(new TemplateMapResolver($vmConfig['template_map'])); } elseif (isset($vmConfig['template_path_stack'])) { // Create a TemplatePathStack resolver in case only the template_path_stack has been defined $pathStackResolver = new TemplatePathStack(); $pathStackResolver->setPaths($vmConfig['template_path_stack']); $renderer->setResolver($pathStackResolver); } // Create a HelperPluginManager with default view helpers and user defined view helpers $renderer->setHelperPluginManager($this->createHelperPluginManager($sm)); return $renderer; } }
public function testWithDefaultLayout() { $options = ['message_options' => ['body' => ['use_template' => true, 'template' => ['path' => 'ac-mailer/mail-templates/mail', 'default_layout' => ['path' => 'ac-mailer/mail-templates/layout']]]]]; $this->initServiceLocator($options); $resolver = new TemplatePathStack(); $resolver->addPath(__DIR__ . '/../../view'); $renderer = new PhpRenderer(); $renderer->setResolver($resolver); $this->serviceLocator->set('mailviewrenderer', $renderer); $mailService = $this->mailServiceFactory->__invoke($this->serviceLocator, 'acmailer.mailservice.default'); $this->assertInstanceOf('Zend\\Mime\\Message', $mailService->getMessage()->getBody()); }
/** * Instantiates and configures the renderer's resolver * * @return ViewAggregateResolver */ public function getResolver() { if ($this->resolver) { return $this->resolver; } $map = array(); if (isset($this->config['template_map'])) { $map = $this->config['template_map']; } $templateMapResolver = new ViewResolver\TemplateMapResolver($map); $stack = array(); if (isset($this->config['template_path_stack'])) { $stack = $this->config['template_path_stack']; } $templatePathStack = new ViewResolver\TemplatePathStack(); $templatePathStack->addPaths($stack); $this->resolver = new ViewResolver\AggregateResolver(); $this->resolver->attach($templateMapResolver); $this->resolver->attach($templatePathStack); $this->services->setService('ViewTemplateMapResolver', $templateMapResolver); $this->services->setService('ViewTemplatePathStack', $templatePathStack); $this->services->setService('ViewResolver', $this->resolver); $this->services->setAlias('Zend\\View\\Resolver\\TemplateMapResolver', 'ViewTemplateMapResolver'); $this->services->setAlias('Zend\\View\\Resolver\\TemplatePathStack', 'ViewTemplatePathStack'); $this->services->setAlias('Zend\\View\\Resolver\\AggregateResolver', 'ViewResolver'); $this->services->setAlias('Zend\\View\\Resolver\\ResolverInterface', 'ViewResolver'); return $this->resolver; }
public function testValidTemplateMakesBodyToBeMimeMessage() { $resolver = new TemplatePathStack(); $resolver->addPath(__DIR__ . '/../../view'); $this->mailService->getRenderer()->setResolver($resolver); $this->mailService->setTemplate('ac-mailer/mail-templates/mail.phtml'); $this->assertInstanceOf('Zend\\Mime\\Message', $this->mailService->getMessage()->getBody()); }
public function testTemplateBody() { $options = array('template' => array('use_template' => true, 'path' => 'ac-mailer/mail-templates/layout', 'children' => array('content' => array('path' => 'ac-mailer/mail-templates/mail'))), 'body' => 'This body is not going to be used'); $this->initServiceLocator($options); $resolver = new TemplatePathStack(); $resolver->addPath(__DIR__ . '/../../view'); $renderer = new PhpRenderer(); $renderer->setResolver($resolver); $this->serviceLocator->set('mailviewrenderer', $renderer); $mailService = $this->mailServiceFactory->createService($this->serviceLocator); $this->assertNotEquals($options['body'], $mailService->getMessage()->getBody()); $this->assertInstanceOf('Zend\\Mime\\Message', $mailService->getMessage()->getBody()); }
public function testWithDefaultLayout() { $resolver = new TemplatePathStack(); $resolver->addPath(__DIR__ . '/../../view'); $this->mailService->getRenderer()->setResolver($resolver); $model = new ViewModel(); $model->setTemplate('ac-mailer/mail-templates/layout.phtml'); $this->mailService->setDefaultLayout(new DefaultLayout($model)); $this->mailService->setTemplate('ac-mailer/mail-templates/mail.phtml'); $this->assertInstanceOf('Zend\\Mime\\Message', $this->mailService->getMessage()->getBody()); }
/** * Prepare email to send. */ private function prepare($email) { //Template Variables $templateVars = $this->config["template_vars"]; $templateVars = array_merge($templateVars, $email->toArray()); //If not layout, use default if (!$email->getLayoutName()) { $email->setLayoutName($this->config["defaults"]["layout_name"]); } //If not recipient, send to admin if (count($email->getTo()) == 0) { $email->addTo($this->config["emails"]["admin"]); } //If not sender, use default if (!$email->getFrom()) { $email->setFrom($this->config["defaults"]["from_email"]); $email->setFromName($this->config["defaults"]["from_name"]); } //Render system $renderer = new PhpRenderer(); $resolver = new AggregateResolver(); $stack = new TemplatePathStack(); foreach ($this->config["template_path_stack"] as $path) { $stack->addPath($path); } $resolver->attach($stack); $renderer->setResolver($resolver); // Subject if (!$email->getSubject()) { $subjectView = $this->createView($templateVars, "subject", $email->getTemplateName()); try { $email->setSubject($renderer->render($subjectView)); } catch (\Exception $e) { $email->setSubject(null); } } // Text Content if (!$email->getTextContent()) { $textView = $this->createView($templateVars, "txt", $email->getTemplateName()); $layoutTextView = new ViewModel($templateVars); $layoutTextView->setTemplate("/layout/txt/" . $email->getLayoutName()); try { $layoutTextView->setVariable("content", $renderer->render($textView)); $email->setTextContent($renderer->render($layoutTextView)); } catch (\Exception $e) { $email->setTextContent(null); } } // Html Content if (!$email->getHtmlContent()) { $htmlView = $this->createView($templateVars, "html", $email->getTemplateName()); $layoutHtmlView = new ViewModel($templateVars); $layoutHtmlView->setTemplate("/layout/html/" . $email->getLayoutName()); try { $layoutHtmlView->setVariable("content", $renderer->render($htmlView)); $email->setHtmlContent($renderer->render($layoutHtmlView)); } catch (\Exception $e) { $email->setHtmlContent(null); } } //Create Zend Message $message = new Message(); //From $message->setFrom($email->getFrom(), $email->getFromName()); //Reply to if ($this->config["defaults"]["reply_to"]) { $message->addReplyTo($this->config["defaults"]["reply_to"], $this->config["defaults"]["reply_to_name"]); } if ($email->getReplyTo()) { $message->addReplyTo($email->getReplyTo(), $email->getReplyToName()); } //To recipients foreach ($email->getTo() as $emailAddress => $user) { if (is_object($user)) { if ($user->getMailOpt()) { $message->addTo($emailAddress, $user->getFullName()); } } else { $message->addTo($emailAddress, $user); } } //Cc recipients foreach ($email->getCc() as $emailAddress => $name) { if (is_object($user)) { if ($user->getMailOpt()) { $message->addCc($emailAddress, $user->getFullName()); } } else { $message->addCc($emailAddress, $user); } } //Bcc recipients foreach ($email->getBcc() as $emailAddress => $name) { if (is_object($user)) { if ($user->getMailOpt()) { $message->addBcc($emailAddress, $user->getFullName()); } } else { $message->addBcc($emailAddress, $user); } } //Subject if ($email->getSubject()) { $message->setSubject($email->getSubject()); } // Body Multipart // Issue - not able to send TXT and HTML multibody // http://framework.zend.com/issues/browse/ZF2-196 /* if($textContent) { $textContent = new MimePart($textContent); $textContent->type = "text/plain"; } if($htmlContent) { $htmlContent = new MimePart($htmlContent); $htmlContent->type = "text/html"; } $body = new MimeMessage(); $body->setParts(array($textContent, $htmlContent)); $message->setBody($body); $message->getHeaders()->get('content-type')->setType('multipart/alternative'); */ //Body (Just html email right now) $htmlContent = new MimePart($email->getHtmlContent()); $htmlContent->type = "text/html"; $body = new MimeMessage(); $body->setParts(array($htmlContent)); $message->setBody($body); return $message; }