Overview

Namespaces

  • Avisota
    • Event
    • Message
    • Queue
    • Recipient
    • RecipientSource
    • Renderer
    • Templating
    • Test
      • Database
      • Imap
      • Message
      • Queue
      • Renderer
      • Transport
    • Transport

Classes

  • DelegateMessageRenderer
  • MessageRendererChain
  • NativeMessageRenderer

Interfaces

  • MessageRendererInterface
  • Overview
  • Namespace
  • Class
  • Tree
  • Deprecated
  • Todo
  • Download
  1: <?php
  2: 
  3: /**
  4:  * Avisota newsletter and mailing system
  5:  *
  6:  * PHP Version 5.3
  7:  *
  8:  * @copyright  bit3 UG 2013
  9:  * @author     Tristan Lins <tristan.lins@bit3.de>
 10:  * @package    avisota-core
 11:  * @license    LGPL-3.0+
 12:  * @link       http://avisota.org
 13:  */
 14: 
 15: namespace Avisota\Renderer;
 16: 
 17: use Avisota\Message\MessageInterface;
 18: 
 19: /**
 20:  * The basic message interface.
 21:  *
 22:  * @package avisota-core
 23:  */
 24: class MessageRendererChain implements MessageRendererInterface
 25: {
 26:     /**
 27:      * @var MessageRendererInterface[][]
 28:      */
 29:     protected $chain = array();
 30: 
 31:     /**
 32:      * Add a renderer to this chain.
 33:      *
 34:      * @param MessageRendererInterface $renderer The renderer to add.
 35:      * @param int                      $priority The priority of the renderer,
 36:      *                                           higher value means higher priority.
 37:      *
 38:      * @return void
 39:      */
 40:     public function addRenderer(MessageRendererInterface $renderer, $priority = 0)
 41:     {
 42:         $this->removeRenderer($renderer);
 43: 
 44:         $hash = spl_object_hash($renderer);
 45:         if (!isset($this->chain[$priority])) {
 46:             $this->chain[$priority] = array($hash => $renderer);
 47:             krsort($this->chain);
 48:         }
 49:         else {
 50:             $this->chain[$priority][$hash] = $renderer;
 51:         }
 52:     }
 53: 
 54:     /**
 55:      * Remove a renderer from this chain.
 56:      *
 57:      * @param MessageRendererInterface $renderer
 58:      *
 59:      * @return void
 60:      */
 61:     public function removeRenderer(MessageRendererInterface $renderer)
 62:     {
 63:         $hash = spl_object_hash($renderer);
 64:         foreach ($this->chain as &$renderers) {
 65:             unset($renderers[$hash]);
 66:         }
 67:     }
 68: 
 69:     /**
 70:      * {@inheritdoc}
 71:      */
 72:     public function renderMessage(MessageInterface $message)
 73:     {
 74:         foreach ($this->chain as $renderers) {
 75:             foreach ($renderers as $renderer) {
 76:                 if ($renderer->canRender($message)) {
 77:                     return $renderer->renderMessage($message);
 78:                 }
 79:             }
 80:         }
 81: 
 82:         throw new \RuntimeException('Could not render message ' . $message->getSubject());
 83:     }
 84: 
 85:     /**
 86:      * {@inheritdoc}
 87:      */
 88:     public function canRender(MessageInterface $message)
 89:     {
 90:         foreach ($this->chain as $renderers) {
 91:             foreach ($renderers as $renderer) {
 92:                 if ($renderer->canRender($message)) {
 93:                     return true;
 94:                 }
 95:             }
 96:         }
 97: 
 98:         return false;
 99:     }
100: }
avisota/core API documentation generated by ApiGen 2.8.0