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);
     }
 }
Esempio n. 2
0
 /**
  * @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;
 }
Esempio n. 10
0
 /**
  * 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;
 }
Esempio n. 12
0
 /**
  * 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;
 }
Esempio n. 13
0
 /**
  * {@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'));
 }
Esempio n. 14
0
 /**
  * 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;
 }
Esempio n. 15
0
    /**
     * @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());
    }
Esempio n. 16
0
 /**
  * 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());
 }
Esempio n. 19
0
 /**
  * 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;
 }
Esempio n. 20
0
 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());
 }
Esempio n. 23
0
 /**
  * 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;
 }