SearchResult.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\AsynchronousOperations\Ui\Component\DataProvider\Operation\Failed;
  7. use Magento\Framework\Data\Collection\Db\FetchStrategyInterface as FetchStrategy;
  8. use Magento\Framework\Data\Collection\EntityFactoryInterface as EntityFactory;
  9. use Magento\Framework\Event\ManagerInterface as EventManager;
  10. use Psr\Log\LoggerInterface as Logger;
  11. use Magento\AsynchronousOperations\Ui\Component\DataProvider\Bulk\IdentifierResolver;
  12. use Magento\Framework\Bulk\OperationInterface;
  13. /**
  14. * Class SearchResult
  15. */
  16. class SearchResult extends \Magento\Framework\View\Element\UiComponent\DataProvider\SearchResult
  17. {
  18. /**
  19. * @var IdentifierResolver
  20. */
  21. private $identifierResolver;
  22. /**
  23. * @var \Magento\Framework\Json\Helper\Data
  24. */
  25. private $jsonHelper;
  26. /**
  27. * SearchResult constructor.
  28. * @param EntityFactory $entityFactory
  29. * @param Logger $logger
  30. * @param FetchStrategy $fetchStrategy
  31. * @param EventManager $eventManager
  32. * @param IdentifierResolver $identifierResolver
  33. * @param \Magento\Framework\Json\Helper\Data $jsonHelper
  34. * @param string $mainTable
  35. * @param null $resourceModel
  36. * @param string $identifierName identifier field name for collection items
  37. */
  38. public function __construct(
  39. EntityFactory $entityFactory,
  40. Logger $logger,
  41. FetchStrategy $fetchStrategy,
  42. EventManager $eventManager,
  43. IdentifierResolver $identifierResolver,
  44. \Magento\Framework\Json\Helper\Data $jsonHelper,
  45. $mainTable = 'magento_operation',
  46. $resourceModel = null,
  47. $identifierName = 'id'
  48. ) {
  49. $this->jsonHelper = $jsonHelper;
  50. $this->identifierResolver = $identifierResolver;
  51. parent::__construct(
  52. $entityFactory,
  53. $logger,
  54. $fetchStrategy,
  55. $eventManager,
  56. $mainTable,
  57. $resourceModel,
  58. $identifierName
  59. );
  60. }
  61. /**
  62. * {@inheritdoc}
  63. */
  64. protected function _initSelect()
  65. {
  66. $bulkUuid = $this->identifierResolver->execute();
  67. $this->getSelect()->from(['main_table' => $this->getMainTable()], ['id', 'result_message', 'serialized_data'])
  68. ->where('bulk_uuid=?', $bulkUuid)
  69. ->where('status=?', OperationInterface::STATUS_TYPE_NOT_RETRIABLY_FAILED);
  70. return $this;
  71. }
  72. /**
  73. * {@inheritdoc}
  74. */
  75. protected function _afterLoad()
  76. {
  77. parent::_afterLoad();
  78. foreach ($this->_items as $key => $item) {
  79. try {
  80. $unserializedData = $this->jsonHelper->jsonDecode($item['serialized_data']);
  81. } catch (\Exception $e) {
  82. $this->_logger->error($e->getMessage());
  83. $unserializedData = [];
  84. }
  85. $this->_items[$key]->setData('meta_information', $this->provideMetaInfo($unserializedData));
  86. $this->_items[$key]->setData('link', $this->getLink($unserializedData));
  87. $this->_items[$key]->setData('entity_id', $this->getEntityId($unserializedData));
  88. }
  89. return $this;
  90. }
  91. /**
  92. * Provide meta info by serialized data
  93. *
  94. * @param array $item
  95. * @return string
  96. */
  97. private function provideMetaInfo($item)
  98. {
  99. $metaInfo = '';
  100. if (isset($item['meta_information'])) {
  101. $metaInfo = $item['meta_information'];
  102. }
  103. return $metaInfo;
  104. }
  105. /**
  106. * Get link from serialized data
  107. *
  108. * @param array $item
  109. * @return string
  110. */
  111. private function getLink($item)
  112. {
  113. $entityLink = '';
  114. if (isset($item['entity_link'])) {
  115. $entityLink = $item['entity_link'];
  116. }
  117. return $entityLink;
  118. }
  119. /**
  120. * Get entity id from serialized data
  121. *
  122. * @param array $item
  123. * @return string
  124. */
  125. private function getEntityId($item)
  126. {
  127. $entityLink = '';
  128. if (isset($item['entity_id'])) {
  129. $entityLink = $item['entity_id'];
  130. }
  131. return $entityLink;
  132. }
  133. }