CompositeReader.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\MessageQueue\Publisher\Config;
  7. use Magento\Framework\MessageQueue\DefaultValueProvider;
  8. /**
  9. * Composite reader for publisher config.
  10. */
  11. class CompositeReader implements ReaderInterface
  12. {
  13. /**
  14. * Config validator.
  15. *
  16. * @var ValidatorInterface
  17. */
  18. private $validator;
  19. /**
  20. * Config reade list.
  21. *
  22. * @var ReaderInterface[]
  23. */
  24. private $readers;
  25. /**
  26. * @var DefaultValueProvider
  27. */
  28. private $defaultValueProvider;
  29. /**
  30. * Initialize dependencies.
  31. *
  32. * @param ValidatorInterface $validator
  33. * @param DefaultValueProvider $defaultValueProvider
  34. * @param ReaderInterface[] $readers
  35. */
  36. public function __construct(
  37. ValidatorInterface $validator,
  38. DefaultValueProvider $defaultValueProvider,
  39. array $readers
  40. ) {
  41. $this->validator = $validator;
  42. $this->readers = $readers;
  43. $this->defaultValueProvider = $defaultValueProvider;
  44. }
  45. /**
  46. * Read config.
  47. *
  48. * @param string|null $scope
  49. * @return array
  50. */
  51. public function read($scope = null)
  52. {
  53. $result = [];
  54. foreach ($this->readers as $reader) {
  55. $result = array_replace_recursive($result, $reader->read($scope));
  56. }
  57. $result = $this->addDefaultConnection($result);
  58. $this->validator->validate($result);
  59. foreach ($result as $key => &$value) {
  60. //Find enabled connection
  61. $connection = null;
  62. foreach ($value['connections'] as $connectionConfig) {
  63. if (!$connectionConfig['disabled']) {
  64. $connection = $connectionConfig;
  65. break;
  66. }
  67. }
  68. $value['connection'] = $connection;
  69. unset($value['connections']);
  70. $result[$key] = $value;
  71. }
  72. return $result;
  73. }
  74. /**
  75. * Add default connection.
  76. *
  77. * @param array $config
  78. * @return array
  79. */
  80. private function addDefaultConnection(array $config)
  81. {
  82. $defaultConnectionName = $this->defaultValueProvider->getConnection();
  83. $default = [
  84. 'name' => $defaultConnectionName,
  85. 'exchange' => $this->defaultValueProvider->getExchange(),
  86. 'disabled' => false,
  87. ];
  88. foreach ($config as &$value) {
  89. if (!isset($value['connections']) || empty($value['connections'])) {
  90. $value['connections'][$defaultConnectionName] = $default;
  91. continue;
  92. }
  93. $hasActiveConnection = false;
  94. /** Find enabled connection */
  95. foreach ($value['connections'] as $connectionConfig) {
  96. if (!$connectionConfig['disabled']) {
  97. $hasActiveConnection = true;
  98. break;
  99. }
  100. }
  101. if (!$hasActiveConnection) {
  102. $value['connections'][$defaultConnectionName] = $default;
  103. }
  104. }
  105. return $config;
  106. }
  107. }