<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\AdminNotification\Model\ResourceModel\System\Message; /** * @api * @since 100.0.2 */ class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * System message list * * @var \Magento\Framework\Notification\MessageList */ protected $_messageList; /** * Number of messages by severity * * @var array */ protected $_countBySeverity = []; /** * @param \Magento\Framework\Data\Collection\EntityFactory $entityFactory * @param \Psr\Log\LoggerInterface $logger * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Framework\Event\ManagerInterface $eventManager * @param \Magento\Framework\Notification\MessageList $messageList * @param mixed $connection * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource */ public function __construct( \Magento\Framework\Data\Collection\EntityFactory $entityFactory, \Psr\Log\LoggerInterface $logger, \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Framework\Event\ManagerInterface $eventManager, \Magento\Framework\Notification\MessageList $messageList, \Magento\Framework\DB\Adapter\AdapterInterface $connection = null, \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null ) { $this->_messageList = $messageList; parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource); } /** * Resource collection initialization * * @return void */ protected function _construct() { $this->_init( \Magento\AdminNotification\Model\System\Message::class, \Magento\AdminNotification\Model\ResourceModel\System\Message::class ); } /** * Initialize db query * * @return void */ protected function _initSelect() { parent::_initSelect(); $this->addOrder('severity', self::SORT_ORDER_ASC)->addOrder('created_at'); } /** * Initialize system messages after load * * @return void */ protected function _afterLoad() { foreach ($this->_items as $key => $item) { $message = $this->_messageList->getMessageByIdentity($item->getIdentity()); if ($message) { $item->setText($message->getText()); if (array_key_exists($message->getSeverity(), $this->_countBySeverity)) { $this->_countBySeverity[$message->getSeverity()]++; } else { $this->_countBySeverity[$message->getSeverity()] = 1; } } else { unset($this->_items[$key]); } } } /** * Set message severity filter * * @param int $severity * @return $this */ public function setSeverity($severity) { $this->addFieldToFilter('severity', ['eq' => $severity * 1]); return $this; } /** * Retrieve number of messages by severity * * @param int $severity * @return int */ public function getCountBySeverity($severity) { return isset($this->_countBySeverity[$severity]) ? $this->_countBySeverity[$severity] : 0; } }