CompositeConverter.php 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\MessageQueue\Config\Reader\Xml;
  7. use Magento\Framework\Config\ConverterInterface;
  8. use Magento\Framework\Phrase;
  9. /**
  10. * Converts MessageQueue config from \DOMDocument to array
  11. *
  12. * @deprecated 102.0.1
  13. */
  14. class CompositeConverter implements ConverterInterface
  15. {
  16. /**
  17. * @var ConverterInterface[]
  18. */
  19. private $converters;
  20. /**
  21. * Initialize dependencies.
  22. *
  23. * @param array $converters
  24. */
  25. public function __construct(array $converters)
  26. {
  27. $this->converters = [];
  28. $converters = $this->sortConverters($converters);
  29. foreach ($converters as $name => $converterInfo) {
  30. if (!isset($converterInfo['converter']) || !($converterInfo['converter'] instanceof ConverterInterface)) {
  31. throw new \InvalidArgumentException(
  32. new Phrase(
  33. 'Converter [%name] must implement Magento\Framework\Config\ConverterInterface',
  34. ['name' => $name]
  35. )
  36. );
  37. }
  38. $this->converters[] = $converterInfo['converter'];
  39. }
  40. }
  41. /**
  42. * @inheritdoc
  43. */
  44. public function convert($source)
  45. {
  46. $result = [];
  47. foreach ($this->converters as $converter) {
  48. $result = array_replace_recursive($result, $converter->convert($source));
  49. }
  50. return $result;
  51. }
  52. /**
  53. * Sort converters according to param 'sortOrder'
  54. *
  55. * @param array $converters
  56. * @return array
  57. */
  58. private function sortConverters(array $converters)
  59. {
  60. usort(
  61. $converters,
  62. function ($firstItem, $secondItem) {
  63. $firstValue = 0;
  64. $secondValue = 0;
  65. if (isset($firstItem['sortOrder'])) {
  66. $firstValue = (int)$firstItem['sortOrder'];
  67. }
  68. if (isset($secondItem['sortOrder'])) {
  69. $secondValue = (int)$secondItem['sortOrder'];
  70. }
  71. return $firstValue <=> $secondValue;
  72. }
  73. );
  74. return $converters;
  75. }
  76. }