123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Framework\View\Element;
- use Magento\Framework\Message\MessageInterface;
- /**
- * Class Messages
- *
- * @api
- * @since 100.0.2
- */
- class Messages extends Template
- {
- /**
- * Messages collection
- *
- * @var \Magento\Framework\Message\Collection
- */
- protected $messages;
- /**
- * Store first level html tag name for messages html output
- *
- * @var string
- */
- protected $firstLevelTagName = 'div';
- /**
- * Store second level html tag name for messages html output
- *
- * @var string
- */
- protected $secondLevelTagName = 'div';
- /**
- * Store content wrapper html tag name for messages html output
- *
- * @var string
- */
- protected $contentWrapTagName = 'div';
- /**
- * Storage for used types of message storages
- *
- * @var array
- */
- protected $usedStorageTypes = [];
- /**
- * Grouped message types
- *
- * @var string[]
- */
- protected $messageTypes = [
- MessageInterface::TYPE_ERROR,
- MessageInterface::TYPE_WARNING,
- MessageInterface::TYPE_NOTICE,
- MessageInterface::TYPE_SUCCESS,
- ];
- /**
- * Message singleton
- *
- * @var \Magento\Framework\Message\Factory
- */
- protected $messageFactory;
- /**
- * Message model factory
- *
- * @var \Magento\Framework\Message\CollectionFactory
- */
- protected $collectionFactory;
- /**
- * Message manager
- *
- * @var \Magento\Framework\Message\ManagerInterface
- */
- protected $messageManager;
- /**
- * @var Message\InterpretationStrategyInterface
- */
- private $interpretationStrategy;
- /**
- * Constructor
- *
- * @param Template\Context $context
- * @param \Magento\Framework\Message\Factory $messageFactory
- * @param \Magento\Framework\Message\CollectionFactory $collectionFactory
- * @param \Magento\Framework\Message\ManagerInterface $messageManager
- * @param Message\InterpretationStrategyInterface $interpretationStrategy
- * @param array $data
- */
- public function __construct(
- Template\Context $context,
- \Magento\Framework\Message\Factory $messageFactory,
- \Magento\Framework\Message\CollectionFactory $collectionFactory,
- \Magento\Framework\Message\ManagerInterface $messageManager,
- Message\InterpretationStrategyInterface $interpretationStrategy,
- array $data = []
- ) {
- $this->messageFactory = $messageFactory;
- $this->collectionFactory = $collectionFactory;
- $this->messageManager = $messageManager;
- parent::__construct($context, $data);
- $this->interpretationStrategy = $interpretationStrategy;
- }
- /**
- * Set messages collection
- *
- * @param \Magento\Framework\Message\Collection $messages
- * @return $this
- */
- public function setMessages(\Magento\Framework\Message\Collection $messages)
- {
- $this->messages = $messages;
- return $this;
- }
- /**
- * Add messages to display
- *
- * @param \Magento\Framework\Message\Collection $messages
- * @return $this
- */
- public function addMessages(\Magento\Framework\Message\Collection $messages)
- {
- foreach ($messages->getItems() as $message) {
- $this->getMessageCollection()->addMessage($message);
- }
- return $this;
- }
- /**
- * Retrieve messages collection
- *
- * @return \Magento\Framework\Message\Collection
- */
- public function getMessageCollection()
- {
- if (!$this->messages instanceof \Magento\Framework\Message\Collection) {
- $this->messages = $this->collectionFactory->create();
- }
- return $this->messages;
- }
- /**
- * Adding new message to message collection
- *
- * @param MessageInterface $message
- * @return $this
- */
- public function addMessage(MessageInterface $message)
- {
- $this->getMessageCollection()->addMessage($message);
- return $this;
- }
- /**
- * Adding new error message
- *
- * @param string $message
- * @return $this
- */
- public function addError($message)
- {
- $this->addMessage($this->messageFactory->create(MessageInterface::TYPE_ERROR, $message));
- return $this;
- }
- /**
- * Adding new warning message
- *
- * @param string $message
- * @return $this
- */
- public function addWarning($message)
- {
- $this->addMessage($this->messageFactory->create(MessageInterface::TYPE_WARNING, $message));
- return $this;
- }
- /**
- * Adding new notice message
- *
- * @param string $message
- * @return $this
- */
- public function addNotice($message)
- {
- $this->addMessage($this->messageFactory->create(MessageInterface::TYPE_NOTICE, $message));
- return $this;
- }
- /**
- * Adding new success message
- *
- * @param string $message
- * @return $this
- */
- public function addSuccess($message)
- {
- $this->addMessage($this->messageFactory->create(MessageInterface::TYPE_SUCCESS, $message));
- return $this;
- }
- /**
- * Retrieve messages array by message type
- *
- * @param string $type
- * @return MessageInterface[]
- */
- public function getMessagesByType($type)
- {
- return $this->getMessageCollection()->getItemsByType($type);
- }
- /**
- * Return grouped message types
- *
- * @return array
- */
- public function getMessageTypes()
- {
- return $this->messageTypes;
- }
- /**
- * Retrieve messages in HTML format grouped by type
- *
- * @return string
- */
- public function getGroupedHtml()
- {
- $html = $this->_renderMessagesByType();
- $this->_dispatchRenderGroupedAfterEvent($html);
- return $html;
- }
- /**
- * Dispatch render after event
- *
- * @param null|string|array|\Magento\Framework\DataObject &$html
- * @return void
- */
- protected function _dispatchRenderGroupedAfterEvent(&$html)
- {
- $transport = new \Magento\Framework\DataObject(['output' => $html]);
- $params = [
- 'element_name' => $this->getNameInLayout(),
- 'layout' => $this->getLayout(),
- 'transport' => $transport,
- ];
- $this->_eventManager->dispatch('view_message_block_render_grouped_html_after', $params);
- $html = $transport->getData('output');
- }
- /**
- * Render messages in HTML format grouped by type
- *
- * @return string
- */
- protected function _renderMessagesByType()
- {
- $html = '';
- foreach ($this->getMessageTypes() as $type) {
- if ($messages = $this->getMessagesByType($type)) {
- if (!$html) {
- $html .= '<' . $this->firstLevelTagName . ' class="messages">';
- }
- foreach ($messages as $message) {
- $html .= '<' . $this->secondLevelTagName . ' class="message ' . 'message-' . $type . ' ' . $type .
- '">';
- $html .= '<' . $this->contentWrapTagName . $this->getUiId('message', $type) . '>';
- $html .= $this->interpretationStrategy->interpret($message);
- $html .= '</' . $this->contentWrapTagName . '>';
- $html .= '</' . $this->secondLevelTagName . '>';
- }
- }
- }
- if ($html) {
- $html .= '</' . $this->firstLevelTagName . '>';
- }
- return $html;
- }
- /**
- * Render block HTML
- *
- * @return string
- */
- protected function _toHtml()
- {
- if ($this->getTemplate()) {
- $html = parent::_toHtml();
- } else {
- $html = $this->_renderMessagesByType();
- }
- return $html;
- }
- /**
- * Set messages first level html tag name for output messages as html
- *
- * @param string $tagName
- * @return void
- */
- public function setFirstLevelTagName($tagName)
- {
- $this->firstLevelTagName = $tagName;
- }
- /**
- * Set messages first level html tag name for output messages as html
- *
- * @param string $tagName
- * @return void
- */
- public function setSecondLevelTagName($tagName)
- {
- $this->secondLevelTagName = $tagName;
- }
- /**
- * Get cache key informative items
- *
- * @return array
- */
- public function getCacheKeyInfo()
- {
- return ['storage_types' => implode('|', $this->usedStorageTypes)];
- }
- /**
- * Add used storage type
- *
- * @param string $type
- * @return void
- */
- public function addStorageType($type)
- {
- $this->usedStorageTypes[] = $type;
- }
- }
|