ServiceSource.php 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Indexer\Model\Source;
  7. use Magento\Framework\Api\SearchCriteriaBuilder;
  8. use Magento\Framework\Api\SearchResults;
  9. use Magento\Framework\Exception\NotFoundException;
  10. use Magento\Framework\ObjectManagerInterface;
  11. class ServiceSource implements DataInterface
  12. {
  13. /**
  14. * @var ObjectManagerInterface
  15. */
  16. private $objectManager;
  17. /**
  18. * @var string
  19. */
  20. private $service;
  21. /**
  22. * @var SearchCriteriaBuilder
  23. */
  24. private $searchCriteriaBuilder;
  25. /**
  26. * @param ObjectManagerInterface $objectManager
  27. * @param SearchCriteriaBuilder $searchCriteriaBuilder
  28. * @param string $service
  29. */
  30. public function __construct(
  31. ObjectManagerInterface $objectManager,
  32. SearchCriteriaBuilder $searchCriteriaBuilder,
  33. $service
  34. ) {
  35. $this->objectManager = $objectManager;
  36. $this->searchCriteriaBuilder = $searchCriteriaBuilder;
  37. $this->service = $service;
  38. }
  39. /**
  40. * {@inheritdoc}
  41. */
  42. public function getData(array $fieldsData)
  43. {
  44. $service = $this->getService();
  45. $searchCriteria = $this->searchCriteriaBuilder->create();
  46. /** @var SearchResults $list */
  47. $list = $service->getList($searchCriteria);
  48. return $this->getRequestedFields($list, $fieldsData);
  49. }
  50. /**
  51. * @param SearchResults $list
  52. * @param array $fields
  53. * @return array
  54. * @throws NotFoundException
  55. */
  56. private function getRequestedFields(SearchResults $list, array $fields)
  57. {
  58. $requestedData = [];
  59. foreach ($list->getItems() as $key => $item) {
  60. foreach (array_keys($fields) as $fieldName) {
  61. if (!isset($item[$fieldName])) {
  62. throw new NotFoundException(__("Field '%1' not found", $fieldName));
  63. }
  64. $requestedData[$key][$fieldName] = $item[$fieldName];
  65. }
  66. }
  67. return $requestedData;
  68. }
  69. /**
  70. * @return mixed
  71. */
  72. private function getService()
  73. {
  74. return $this->objectManager->get($this->service);
  75. }
  76. }