FieldsProvider.php 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Theme\Model\Indexer\Design\Config;
  7. use Magento\Framework\Indexer\FieldsetInterface;
  8. use Magento\Theme\Model\Design\Config\MetadataProviderInterface;
  9. class FieldsProvider implements FieldsetInterface
  10. {
  11. /**
  12. * @var MetadataProviderInterface
  13. */
  14. protected $metadataProvider;
  15. /**
  16. * @param MetadataProviderInterface $metadataProvider
  17. */
  18. public function __construct(
  19. MetadataProviderInterface $metadataProvider
  20. ) {
  21. $this->metadataProvider = $metadataProvider;
  22. }
  23. /**
  24. * Add additional fields to fieldset
  25. *
  26. * @param array $data
  27. * @return array
  28. */
  29. public function addDynamicData(array $data)
  30. {
  31. $additionalFields = $this->convert($this->metadataProvider->get());
  32. $data['fields'] = $this->merge($data['fields'], $additionalFields);
  33. return $data;
  34. }
  35. /**
  36. * Convert metadata to fields
  37. *
  38. * @param array $metadata
  39. * @return array
  40. */
  41. protected function convert(array $metadata)
  42. {
  43. $fields = [];
  44. foreach ($metadata as $itemName => $itemData) {
  45. if (isset($itemData['use_in_grid']) && (boolean)$itemData['use_in_grid']) {
  46. $fields[$itemName] = [
  47. 'name' => $itemName,
  48. 'origin' => 'value',
  49. 'handler' => \Magento\Framework\Indexer\Handler\DefaultHandler::class,
  50. 'type' => 'searchable',
  51. ];
  52. }
  53. }
  54. return $fields;
  55. }
  56. /**
  57. * Merge fields with metadata fields
  58. *
  59. * @param array $dataFields
  60. * @param array $searchableFields
  61. * @return array
  62. */
  63. protected function merge(array $dataFields, array $searchableFields)
  64. {
  65. foreach ($searchableFields as $name => $field) {
  66. if (!isset($field['name']) && !isset($dataFields[$name])) {
  67. continue;
  68. }
  69. if (!isset($dataFields[$name])) {
  70. $dataFields[$name] = [];
  71. }
  72. foreach ($field as $key => $value) {
  73. $dataFields[$name][$key] = $value;
  74. }
  75. }
  76. return $dataFields;
  77. }
  78. }