Collection.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\AdminNotification\Model\ResourceModel\System\Message;
  7. /**
  8. * @api
  9. * @since 100.0.2
  10. */
  11. class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
  12. {
  13. /**
  14. * System message list
  15. *
  16. * @var \Magento\Framework\Notification\MessageList
  17. */
  18. protected $_messageList;
  19. /**
  20. * Number of messages by severity
  21. *
  22. * @var array
  23. */
  24. protected $_countBySeverity = [];
  25. /**
  26. * @param \Magento\Framework\Data\Collection\EntityFactory $entityFactory
  27. * @param \Psr\Log\LoggerInterface $logger
  28. * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
  29. * @param \Magento\Framework\Event\ManagerInterface $eventManager
  30. * @param \Magento\Framework\Notification\MessageList $messageList
  31. * @param mixed $connection
  32. * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
  33. */
  34. public function __construct(
  35. \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
  36. \Psr\Log\LoggerInterface $logger,
  37. \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
  38. \Magento\Framework\Event\ManagerInterface $eventManager,
  39. \Magento\Framework\Notification\MessageList $messageList,
  40. \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
  41. \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
  42. ) {
  43. $this->_messageList = $messageList;
  44. parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource);
  45. }
  46. /**
  47. * Resource collection initialization
  48. *
  49. * @return void
  50. */
  51. protected function _construct()
  52. {
  53. $this->_init(
  54. \Magento\AdminNotification\Model\System\Message::class,
  55. \Magento\AdminNotification\Model\ResourceModel\System\Message::class
  56. );
  57. }
  58. /**
  59. * Initialize db query
  60. *
  61. * @return void
  62. */
  63. protected function _initSelect()
  64. {
  65. parent::_initSelect();
  66. $this->addOrder('severity', self::SORT_ORDER_ASC)->addOrder('created_at');
  67. }
  68. /**
  69. * Initialize system messages after load
  70. *
  71. * @return void
  72. */
  73. protected function _afterLoad()
  74. {
  75. foreach ($this->_items as $key => $item) {
  76. $message = $this->_messageList->getMessageByIdentity($item->getIdentity());
  77. if ($message) {
  78. $item->setText($message->getText());
  79. if (array_key_exists($message->getSeverity(), $this->_countBySeverity)) {
  80. $this->_countBySeverity[$message->getSeverity()]++;
  81. } else {
  82. $this->_countBySeverity[$message->getSeverity()] = 1;
  83. }
  84. } else {
  85. unset($this->_items[$key]);
  86. }
  87. }
  88. }
  89. /**
  90. * Set message severity filter
  91. *
  92. * @param int $severity
  93. * @return $this
  94. */
  95. public function setSeverity($severity)
  96. {
  97. $this->addFieldToFilter('severity', ['eq' => $severity * 1]);
  98. return $this;
  99. }
  100. /**
  101. * Retrieve number of messages by severity
  102. *
  103. * @param int $severity
  104. * @return int
  105. */
  106. public function getCountBySeverity($severity)
  107. {
  108. return isset($this->_countBySeverity[$severity]) ? $this->_countBySeverity[$severity] : 0;
  109. }
  110. }