예제 #1
0
 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'));
 }
 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);
     }
 }
예제 #3
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 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());
 }
예제 #6
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'));
 }
예제 #7
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;
 }
 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());
 }
예제 #9
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());
 }
예제 #10
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;
 }
 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());
 }
예제 #12
0
 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());
 }