'info', PluginFlashMessenger::NAMESPACE_ERROR => 'error', PluginFlashMessenger::NAMESPACE_SUCCESS => 'success', PluginFlashMessenger::NAMESPACE_DEFAULT => 'default', PluginFlashMessenger::NAMESPACE_WARNING => 'warning', ); /** * Templates for the open/close/separators for message tags * * @var string */ protected $messageCloseString = ''; protected $messageOpenFormat = '
  • '; protected $messageSeparatorString = '
  • '; /** * Flag whether to escape messages * * @var bool */ protected $autoEscape = true; /** * Html escape helper * * @var EscapeHtml */ protected $escapeHtmlHelper; /** * Flash messenger plugin * * @var PluginFlashMessenger */ protected $pluginFlashMessenger; /** * Service locator * * @var ServiceLocatorInterface */ protected $serviceLocator; /** * Returns the flash messenger plugin controller * * @param string|null $namespace * @return FlashMessenger|PluginFlashMessenger */ public function __invoke($namespace = null) { if (null === $namespace) { return $this; } $flashMessenger = $this->getPluginFlashMessenger(); return $flashMessenger->getMessagesFromNamespace($namespace); } /** * Proxy the flash messenger plugin controller * * @param string $method * @param array $argv * @return mixed */ public function __call($method, $argv) { $flashMessenger = $this->getPluginFlashMessenger(); return call_user_func_array(array($flashMessenger, $method), $argv); } /** * Render Messages * * @param string $namespace * @param array $classes * @param null|bool $autoEscape * @return string */ public function render($namespace = PluginFlashMessenger::NAMESPACE_DEFAULT, array $classes = array(), $autoEscape = null) { $flashMessenger = $this->getPluginFlashMessenger(); $messages = $flashMessenger->getMessagesFromNamespace($namespace); return $this->renderMessages($namespace, $messages, $classes, $autoEscape); } /** * Render Current Messages * * @param string $namespace * @param array $classes * @param bool|null $autoEscape * @return string */ public function renderCurrent($namespace = PluginFlashMessenger::NAMESPACE_DEFAULT, array $classes = array(), $autoEscape = null) { $flashMessenger = $this->getPluginFlashMessenger(); $messages = $flashMessenger->getCurrentMessagesFromNamespace($namespace); return $this->renderMessages($namespace, $messages, $classes, $autoEscape); } /** * Render Messages * * @param string $namespace * @param array $messages * @param array $classes * @param bool|null $autoEscape * @return string */ protected function renderMessages( $namespace = PluginFlashMessenger::NAMESPACE_DEFAULT, array $messages = array(), array $classes = array(), $autoEscape = null ) { // Prepare classes for opening tag if (empty($classes)) { if (isset($this->classMessages[$namespace])) { $classes = $this->classMessages[$namespace]; } else { $classes = $this->classMessages[PluginFlashMessenger::NAMESPACE_DEFAULT]; } $classes = array($classes); } if (null === $autoEscape) { $autoEscape = $this->getAutoEscape(); } // Flatten message array $escapeHtml = $this->getEscapeHtmlHelper(); $messagesToPrint = array(); $translator = $this->getTranslator(); $translatorTextDomain = $this->getTranslatorTextDomain(); array_walk_recursive( $messages, function ($item) use (& $messagesToPrint, $escapeHtml, $autoEscape, $translator, $translatorTextDomain) { if ($translator !== null) { $item = $translator->translate( $item, $translatorTextDomain ); } if ($autoEscape) { $messagesToPrint[] = $escapeHtml($item); return; } $messagesToPrint[] = $item; } ); if (empty($messagesToPrint)) { return ''; } // Generate markup $markup = sprintf($this->getMessageOpenFormat(), ' class="' . implode(' ', $classes) . '"'); $markup .= implode( sprintf($this->getMessageSeparatorString(), ' class="' . implode(' ', $classes) . '"'), $messagesToPrint ); $markup .= $this->getMessageCloseString(); return $markup; } /** * Set whether or not auto escaping should be used * * @param bool $autoEscape * @return self */ public function setAutoEscape($autoEscape = true) { $this->autoEscape = (bool) $autoEscape; return $this; } /** * Return whether auto escaping is enabled or disabled * * return bool */ public function getAutoEscape() { return $this->autoEscape; } /** * Set the string used to close message representation * * @param string $messageCloseString * @return FlashMessenger */ public function setMessageCloseString($messageCloseString) { $this->messageCloseString = (string) $messageCloseString; return $this; } /** * Get the string used to close message representation * * @return string */ public function getMessageCloseString() { return $this->messageCloseString; } /** * Set the formatted string used to open message representation * * @param string $messageOpenFormat * @return FlashMessenger */ public function setMessageOpenFormat($messageOpenFormat) { $this->messageOpenFormat = (string) $messageOpenFormat; return $this; } /** * Get the formatted string used to open message representation * * @return string */ public function getMessageOpenFormat() { return $this->messageOpenFormat; } /** * Set the string used to separate messages * * @param string $messageSeparatorString * @return FlashMessenger */ public function setMessageSeparatorString($messageSeparatorString) { $this->messageSeparatorString = (string) $messageSeparatorString; return $this; } /** * Get the string used to separate messages * * @return string */ public function getMessageSeparatorString() { return $this->messageSeparatorString; } /** * Set the flash messenger plugin * * @param PluginFlashMessenger $pluginFlashMessenger * @return FlashMessenger */ public function setPluginFlashMessenger(PluginFlashMessenger $pluginFlashMessenger) { $this->pluginFlashMessenger = $pluginFlashMessenger; return $this; } /** * Get the flash messenger plugin * * @return PluginFlashMessenger */ public function getPluginFlashMessenger() { if (null === $this->pluginFlashMessenger) { $this->setPluginFlashMessenger(new PluginFlashMessenger()); } return $this->pluginFlashMessenger; } /** * Set the service locator. * * @param ServiceLocatorInterface $serviceLocator * @return AbstractHelper */ public function setServiceLocator(ServiceLocatorInterface $serviceLocator) { $this->serviceLocator = $serviceLocator; return $this; } /** * Get the service locator. * * @return ServiceLocatorInterface */ public function getServiceLocator() { return $this->serviceLocator; } /** * Retrieve the escapeHtml helper * * @return EscapeHtml */ protected function getEscapeHtmlHelper() { if ($this->escapeHtmlHelper) { return $this->escapeHtmlHelper; } if (method_exists($this->getView(), 'plugin')) { $this->escapeHtmlHelper = $this->view->plugin('escapehtml'); } if (!$this->escapeHtmlHelper instanceof EscapeHtml) { $this->escapeHtmlHelper = new EscapeHtml(); } return $this->escapeHtmlHelper; } }