/**
  * @param ContainerInterface $container
  * @returns ZendViewRenderer
  */
 public function __invoke(ContainerInterface $container)
 {
     $config = $container->has('config') ? $container->get('config') : [];
     $config = isset($config['templates']) ? $config['templates'] : [];
     // Configuration
     $resolver = new Resolver\AggregateResolver();
     $resolver->attach(new Resolver\TemplateMapResolver(isset($config['map']) ? $config['map'] : []), 100);
     // Create the renderer
     $renderer = new PhpRenderer();
     $renderer->setResolver($resolver);
     $manager = $container->has(HelperPluginManager::class) ? $container->get(HelperPluginManager::class) : new HelperPluginManager();
     // Inject helpers
     $this->injectHelpers($renderer, $manager);
     // Initialize renderer for HelperPluginManager
     $manager->setRenderer($renderer);
     // Inject renderer
     $view = new ZendViewRenderer($renderer, isset($config['layout']) ? $config['layout'] : null);
     // Add template paths
     $allPaths = isset($config['paths']) && is_array($config['paths']) ? $config['paths'] : [];
     foreach ($allPaths as $namespace => $paths) {
         $namespace = is_numeric($namespace) ? null : $namespace;
         foreach ((array) $paths as $path) {
             $view->addPath($path, $namespace);
         }
     }
     return $view;
 }
Ejemplo n.º 2
0
 /**
  * Create the aggregate view resolver
  *
  * Creates a Zend\View\Resolver\AggregateResolver and attaches the template
  * map resolver and path stack resolver
  *
  * @param  ServiceLocatorInterface $serviceLocator
  * @return ViewResolver\AggregateResolver
  */
 public function createService(ServiceLocatorInterface $serviceLocator)
 {
     $resolver = new ViewResolver\AggregateResolver();
     $resolver->attach($serviceLocator->get('ViewTemplateMapResolver'));
     $resolver->attach($serviceLocator->get('ViewTemplatePathStack'));
     return $resolver;
 }
Ejemplo n.º 3
0
 /**
  * @param $controller
  * @param array $actions
  * @param AggregateResolver $viewResolver
  */
 private function handleActions($controller, array $actions, AggregateResolver $viewResolver)
 {
     foreach ($actions as $action) {
         $template = $this->resolveTemplate($controller, $action);
         $resolved = $viewResolver->resolve($template);
         $this->addPath($controller, $action, $resolved);
     }
 }
Ejemplo n.º 4
0
 public function setUp()
 {
     if (!class_exists('ZendDeveloperTools\\Collector\\AbstractCollector')) {
         $this->markTestSkipped('ZDT not available');
     }
     parent::setUp();
     $resolver = new AggregateResolver();
     $resolver->attach($this->getResolver());
     $this->collector = new LayoutCollector($this->layout, $this->layoutUpdater, $resolver);
 }
Ejemplo n.º 5
0
 /**
  * Create the aggregate view resolver
  *
  * Creates a Zend\View\Resolver\AggregateResolver and attaches the template
  * map resolver and path stack resolver
  *
  * @param  ContainerInterface $container
  * @param  string $name
  * @param  null|array $options
  * @return ViewResolver\AggregateResolver
  */
 public function __invoke(ContainerInterface $container, $name, array $options = null)
 {
     $resolver = new ViewResolver\AggregateResolver();
     /* @var $mapResolver \Zend\View\Resolver\ResolverInterface */
     $mapResolver = $container->get('ViewTemplateMapResolver');
     /* @var $pathResolver \Zend\View\Resolver\ResolverInterface */
     $pathResolver = $container->get('ViewTemplatePathStack');
     /* @var $prefixPathStackResolver \Zend\View\Resolver\ResolverInterface */
     $prefixPathStackResolver = $container->get('ViewPrefixPathStackResolver');
     $resolver->attach($mapResolver)->attach($pathResolver)->attach($prefixPathStackResolver)->attach(new ViewResolver\RelativeFallbackResolver($mapResolver))->attach(new ViewResolver\RelativeFallbackResolver($pathResolver))->attach(new ViewResolver\RelativeFallbackResolver($prefixPathStackResolver));
     return $resolver;
 }
Ejemplo n.º 6
0
 /**
  * Create the aggregate view resolver
  *
  * Creates a Zend\View\Resolver\AggregateResolver and attaches the template
  * map resolver and path stack resolver
  *
  * @param  ServiceLocatorInterface        $serviceLocator
  * @return ViewResolver\AggregateResolver
  */
 public function createService(ServiceLocatorInterface $serviceLocator)
 {
     $resolver = new ViewResolver\AggregateResolver();
     /* @var $mapResolver \Zend\View\Resolver\ResolverInterface */
     $mapResolver = $serviceLocator->get('ViewTemplateMapResolver');
     /* @var $pathResolver \Zend\View\Resolver\ResolverInterface */
     $pathResolver = $serviceLocator->get('ViewTemplatePathStack');
     /* @var $prefixPathStackResolver \Zend\View\Resolver\ResolverInterface */
     $prefixPathStackResolver = $serviceLocator->get('ViewPrefixPathStackResolver');
     $resolver->attach($mapResolver)->attach($pathResolver)->attach($prefixPathStackResolver)->attach(new ViewResolver\RelativeFallbackResolver($mapResolver))->attach(new ViewResolver\RelativeFallbackResolver($pathResolver))->attach(new ViewResolver\RelativeFallbackResolver($prefixPathStackResolver));
     return $resolver;
 }
 /**
  * @param ContainerInterface $container
  * @return PhpRenderer
  */
 public function __invoke(ContainerInterface $container)
 {
     $config = $container->get('config');
     $viewHelperPluginManager = $container->get(HelperPluginManager::class);
     // Create the engine instance:
     $renderer = new PhpRenderer();
     // Configure it:
     $resolver = new Resolver\AggregateResolver();
     $resolver->attach(new Resolver\TemplateMapResolver($config['templates']), 100);
     $renderer->setResolver($resolver);
     $renderer->setHelperPluginManager($viewHelperPluginManager);
     return $renderer;
 }
Ejemplo n.º 8
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;
 }
Ejemplo n.º 9
0
 /**
  * @param $name
  * @param $path
  * @return View
  */
 private function createView($name, $path)
 {
     $ar = new Resolver\AggregateResolver();
     $helper = $this->helpers;
     $map = new Resolver\TemplateMapResolver(array($name => $path));
     $ar->attach($map);
     foreach ($this->resolvers as $r) {
         $ar->attach($r);
     }
     $renderer = new PhpRenderer();
     $renderer->setHelperPluginManager($helper);
     $renderer->setResolver($ar);
     $strategy = new PhpRendererStrategy($renderer);
     $view = new View();
     $view->setEventManager(clone $this->events);
     $view->setResponse(new Response());
     $view->getEventManager()->attach($strategy);
     return $view;
 }
Ejemplo n.º 10
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;
 }
Ejemplo n.º 11
0
 /**
  * Create the aggregate view resolver
  *
  * Creates a Zend\View\Resolver\AggregateResolver and attaches the template
  * map resolver and path stack resolver
  *
  * @param  ServiceLocatorInterface $serviceLocator
  * @return ViewResolverAggregateResolver
  */
 public function createService(ServiceLocatorInterface $serviceLocator)
 {
     $resolver = new ViewResolver\AggregateResolver();
     $resolver->attach($serviceLocator->get('ViewTemplateMapResolver'));
     /**#@+
      * Replace with Pi template mechanism
      */
     $moduleTemplateResolver = new ModuleTemplateResolver();
     $themeTemplateResolver = new ThemeTemplateResolver();
     $componentTemplateResolver = new ComponentTemplateResolver();
     $resolver->attach($moduleTemplateResolver);
     $resolver->attach($themeTemplateResolver);
     $resolver->attach($componentTemplateResolver);
     /**#@-*/
     $resolver->attach($serviceLocator->get('ViewTemplatePathStack'));
     return $resolver;
 }
Ejemplo n.º 12
0
 public function testReturnsFalseWhenAttemptingToResolveWhenNoResolversAreAttached()
 {
     $resolver = new Resolver\AggregateResolver();
     $this->assertFalse($resolver->resolve('foo'));
     $this->assertEquals(Resolver\AggregateResolver::FAILURE_NO_RESOLVERS, $resolver->getLastLookupFailure());
 }
Ejemplo n.º 13
0
 /**
  * Retorna em string arquivo php renderizado incluindo variaveis que a ele são passadas.
  * Ideal para enviar emails e outras coisas.
  * 
  * @param string $viewFile Arquivo php para renderizar, este arquivo deve ser relativo a 'module/Application/view'
  * @param array $vars
  * @return string
  */
 protected function render($viewFile, array $vars = array())
 {
     $view = new ViewModel($vars);
     $view->setTemplate($viewFile);
     $resolver = new AggregateResolver();
     $resolver->attach(new TemplatePathStack(array('script_paths' => array("module/" . ucfirst(strtolower($this->getModuleName())) . "/view"))));
     $renderer = new PhpRenderer();
     $renderer->setResolver($resolver);
     return $renderer->render($view);
 }
Ejemplo n.º 14
0
 /**
  * @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;
     }
 }
Ejemplo n.º 15
0
 /**
  * Init renderer object
  */
 protected function initRenderer()
 {
     $renderer = new PhpRenderer();
     $plugins = $renderer->getHelperPluginManager();
     $config = new \Zend\Form\View\HelperConfig();
     $config->configureServiceManager($plugins);
     $resolver = new Resolver\AggregateResolver();
     $map = new Resolver\TemplateMapResolver($this->getTable()->getOptions()->getTemplateMap());
     $resolver->attach($map);
     $renderer->setResolver($resolver);
     $this->renderer = $renderer;
 }
 /**
  * Attaches a new NamespacedPathStackResolver to the AggregateResolver
  *
  * A priority of 0 is used, to ensure it is the last queried.
  *
  * @param AggregateResolver $aggregate
  */
 private function injectNamespacedResolver(AggregateResolver $aggregate)
 {
     $aggregate->attach(new NamespacedPathStackResolver(), 0);
 }
Ejemplo n.º 17
0
    public function test()
    {
        /*
        $viewConfigExample = [
            'some-view' => [ // view name
                'template' => 'some-template', // html template
                //--- not required options
                'viewModel' => 'some-view-model|\Some\ViewModel::class', // Instance of ViewModel
                'extend' => 'parent-view', // extended view
                'capture' => 'some-capture', // for grouping views
                'children' => [
                    'child-view'// array of views
                ],
                'childrenDynamicLists' => [ // will be generated by list from one of child
                    'child-view' => 'listVar' // every entry in listVar will be setted to genereted child
                ],
                'data' => [ // required data
                    'fromGlobal' => 'varName', // // will be set as variables from global data
                    'fromParent' => 'varName', // will be set as variables by calling getVariable('varName') from parent
                    'static' => [ // will be set as variables
                        'key' => 'value'
                    ],
                ],
            ],
        ];
        */
        $renderer = new PhpRenderer();
        $resolver = new Resolver\AggregateResolver();
        $map = new Resolver\TemplateMapResolver(array('page' => __DIR__ . '/view/page.phtml', 'comments-list' => __DIR__ . '/view/comments-list.phtml', 'comment' => __DIR__ . '/view/comment.phtml', 'user' => __DIR__ . '/view/user.phtml'));
        $stack = new Resolver\TemplatePathStack(array('script_paths' => array(__DIR__ . '/view')));
        $resolver->attach($map)->attach($stack)->attach(new Resolver\RelativeFallbackResolver($map))->attach(new Resolver\RelativeFallbackResolver($stack));
        $renderer->setResolver($resolver);
        $view = new View();
        $response = new Response();
        $view->setResponse($response);
        $strategy = new PhpRendererStrategy($renderer);
        $strategy->attach($view->getEventManager());
        $viewConfig = ['layouts' => ['layout' => ['template' => 'layout']], 'contents' => ['page' => ['layout' => 'layout', 'template' => 'page', 'children' => ['comments-list' => ['extend' => 'comments-list', 'template' => 'comments-list'], 'comment-create' => ['template' => 'comment-create', 'children' => ['myself-info' => ['viewModel' => \Sebaks\ViewTest\MyselfViewModel::class, 'template' => 'user'], 'comment-create-form' => ['template' => 'form', 'children' => ['form-element-textarea' => ['capture' => 'form-element', 'template' => 'form-element-textarea'], 'form-element-button' => ['capture' => 'form-element', 'template' => 'form-element-button']]]]], 'users-table' => ['template' => 'table', 'children' => ['table-head-rows' => ['template' => 'table-tr', 'data' => ['fromParent' => 'rows'], 'children' => ['table-th' => ['template' => 'table-th', 'capture' => 'table-td', 'data' => ['fromParent' => 'value']]], 'childrenDynamicLists' => ['table-th' => 'rows']], 'table-body-rows' => ['template' => 'table-tr', 'data' => ['fromParent' => 'rows'], 'children' => ['table-td' => ['template' => 'table-td', 'data' => ['fromParent' => 'value']]], 'childrenDynamicLists' => ['table-td' => 'rows']]], 'childrenDynamicLists' => ['table-body-rows' => 'bodyRows', 'table-head-rows' => 'headRows'], 'data' => ['static' => ['headRows' => [['Id', 'Name']], 'bodyRows' => [['1', 'John'], ['2', 'Helen']]]]]]]], 'blocks' => ['comments-list' => ['children' => ['comment' => ['viewModel' => \Sebaks\ViewTest\CommentViewModel::class, 'template' => 'comment', 'children' => ['user' => ['viewModel' => \Sebaks\ViewTest\UserViewModel::class, 'template' => 'user', 'data' => ['fromParent' => 'userId', 'static' => ['class' => 'user']], 'children' => ['location' => ['viewModel' => \Sebaks\ViewTest\LocationViewModel::class, 'template' => 'location', 'data' => ['fromParent' => 'countryId']]]]], 'data' => ['fromParent' => ['foo' => 'bar', 'comment' => 'comment']]]], 'childrenDynamicLists' => ['comment' => 'comments'], 'data' => ['fromGlobal' => ['foo' => 'bar', 'result' => 'comments']]]]];
        $data = ['result' => [['id' => 'c1', 'userId' => 'u1', 'text' => 'text of c1'], ['id' => 'c2', 'userId' => 'u2', 'text' => 'text of c2']]];
        $serviceLocator = new \Zend\ServiceManager\ServiceManager();
        $serviceLocator->setInvokableClass(\Sebaks\ViewTest\CommentViewModel::class, \Sebaks\ViewTest\CommentViewModel::class, false);
        $serviceLocator->setInvokableClass(\Sebaks\ViewTest\UserViewModel::class, \Sebaks\ViewTest\UserViewModel::class, false);
        $serviceLocator->setInvokableClass(\Sebaks\ViewTest\LocationViewModel::class, \Sebaks\ViewTest\LocationViewModel::class, false);
        $serviceLocator->setInvokableClass(\Sebaks\ViewTest\MyselfViewModel::class, \Sebaks\ViewTest\MyselfViewModel::class, false);
        /////////////////////
        $config = ['sebaks-view' => $viewConfig];
        $serviceLocator->setService('config', $config);
        $serviceLocator->setService('EventManager', new EventManager());
        $request = new Request();
        $serviceLocator->setService('Request', $request);
        //$response = new Response();
        $serviceLocator->setService('Response', $response);
        $e = new MvcEvent();
        $e->setRequest($request);
        $e->setResponse($response);
        $dispatchResult = new ViewModel();
        $dispatchResult->setVariables($data);
        $e->setResult($dispatchResult);
        $routeMatch = new RouteMatch([]);
        $routeMatch->setMatchedRouteName('page');
        $e->setRouteMatch($routeMatch);
        $application = new Application([], $serviceLocator);
        $e->setApplication($application);
        /////////////////////
        $viewBuilder = new BuildViewListener();
        $viewBuilder->injectLayout($e);
        $pageViewModel = $e->getViewModel();
        $view->render($pageViewModel);
        $result = $response->getBody();
        $expected = '<body><ul><li>text of c1
<div class="user">John<span class="location">Ukraine</span></div></li><li>text of c2
<div class="user">Helen<span class="location">United States</span></div></li></ul>
<div class="">Me</div><form><textarea></textarea><button type="submit">Submit</button></form><table>
    <thead>
        <tr><th>Id</th><th>Name</th></tr>    </thead>
    <tbody>
        <tr><td>1</td><td>John</td></tr><tr><td>2</td><td>Helen</td></tr>    </tbody>
</table></body>';
        $this->assertEquals($expected, $result);
    }
Ejemplo n.º 18
0
    public function testRender()
    {
        $renderer = new PhpRenderer();
        $resolver = new Resolver\AggregateResolver();
        $map = new Resolver\TemplateMapResolver(array('page' => __DIR__ . '/view/page.phtml', 'comments-list' => __DIR__ . '/view/comments-list.phtml', 'comment' => __DIR__ . '/view/comment.phtml', 'user' => __DIR__ . '/view/user.phtml'));
        $stack = new Resolver\TemplatePathStack(array('script_paths' => array(__DIR__ . '/view')));
        $resolver->attach($map)->attach($stack)->attach(new Resolver\RelativeFallbackResolver($map))->attach(new Resolver\RelativeFallbackResolver($stack));
        $renderer->setResolver($resolver);
        $view = new View();
        $response = new Response();
        $view->setResponse($response);
        $strategy = new PhpRendererStrategy($renderer);
        $strategy->attach($view->getEventManager());
        /////////////////////////////////////////////////
        $viewConfigExample = ['some-view' => ['template' => 'some-template', 'viewModel' => 'some-view-model|\\Some\\ViewModel::class', 'extend' => 'parent-view', 'capture' => 'some-capture', 'children' => ['child-view'], 'childrenDynamicLists' => ['child-view' => 'listVar'], 'data' => ['fromGlobal' => 'varName', 'fromParent' => 'varName', 'static' => ['key' => 'value']], 'dataProvider' => 'some-view-model|\\Some\\DataProvider::class']];
        //////////////
        $viewConfig = ['page' => ['template' => 'page', 'children' => ['comments-list', 'comment-create' => ['template' => 'comment-create', 'children' => ['myself-info' => ['viewModel' => \Sebaks\ViewTest\MyselfViewModel::class, 'template' => 'user'], 'comment-create-form' => ['template' => 'form', 'children' => ['form-element-textarea' => ['capture' => 'form-element', 'template' => 'form-element-textarea'], 'form-element-button' => ['capture' => 'form-element', 'template' => 'form-element-button']]]]], 'users-table' => ['template' => 'table', 'children' => ['table-head-rows' => ['template' => 'table-tr', 'data' => ['fromParent' => 'rows'], 'children' => ['table-th' => ['template' => 'table-th', 'capture' => 'table-td', 'data' => ['fromParent' => 'value']]], 'childrenDynamicLists' => ['table-th' => 'rows']], 'table-body-rows' => ['template' => 'table-tr', 'data' => ['fromParent' => 'rows'], 'children' => ['table-td' => ['template' => 'table-td', 'data' => ['fromParent' => 'value']]], 'childrenDynamicLists' => ['table-td' => 'rows']]], 'childrenDynamicLists' => ['table-body-rows' => 'bodyRows', 'table-head-rows' => 'headRows'], 'data' => ['static' => ['headRows' => [['Id', 'Name']], 'bodyRows' => [['1', 'John'], ['2', 'Helen']]]]]]], 'comments-list' => ['template' => 'comments-list', 'children' => ['comment' => ['viewModel' => \Sebaks\ViewTest\CommentViewModel::class, 'template' => 'comment', 'children' => ['user' => ['viewModel' => \Sebaks\ViewTest\UserViewModel::class, 'template' => 'user', 'data' => ['fromParent' => ['comment:userId' => 'userId'], 'static' => ['class' => 'user']]]], 'data' => ['fromParent' => ['comment' => 'comment']]]], 'childrenDynamicLists' => ['comment' => 'comments'], 'data' => ['fromGlobal' => 'comments']]];
        $data = ['comments' => [['id' => 'c1', 'userId' => 'u1', 'text' => 'text of c1'], ['id' => 'c2', 'userId' => 'u2', 'text' => 'text of c2']]];
        $serviceLocator = new \Zend\ServiceManager\ServiceManager();
        $serviceLocator->setInvokableClass(\Sebaks\ViewTest\CommentViewModel::class, \Sebaks\ViewTest\CommentViewModel::class, false);
        $serviceLocator->setInvokableClass(\Sebaks\ViewTest\UserViewModel::class, \Sebaks\ViewTest\UserViewModel::class, false);
        $serviceLocator->setInvokableClass(\Sebaks\ViewTest\MyselfViewModel::class, \Sebaks\ViewTest\MyselfViewModel::class, false);
        /////////////////////
        $config = new Config($viewConfig);
        $viewBuilder = new ViewBuilder($config, $serviceLocator);
        $pageViewModel = $viewBuilder->build($viewConfig['page'], $data);
        /////////////////////
        $view->render($pageViewModel);
        $result = $response->getBody();
        $expected = '<ul><li>text of c1
<div class="user">John</div></li><li>text of c2
<div class="user">Helen</div></li></ul>
<div class="">Me</div><form><textarea></textarea><button type="submit">Submit</button></form><table>
    <thead>
        <tr><th>Id</th><th>Name</th></tr>    </thead>
    <tbody>
        <tr><td>1</td><td>John</td></tr><tr><td>2</td><td>Helen</td></tr>    </tbody>
</table>';
        $this->assertEquals($expected, $result);
    }
Ejemplo n.º 19
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;
 }