Reader.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  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\Env;
  7. use Magento\Framework\MessageQueue\Config\Data as MessageQueueConfigData;
  8. use Magento\Framework\App\DeploymentConfig;
  9. use Magento\Framework\MessageQueue\Config\Reader\Env as MessageQueueEnvReader;
  10. /**
  11. * Publisher configuration reader. Reads data from env.php.
  12. */
  13. class Reader implements \Magento\Framework\Config\ReaderInterface
  14. {
  15. /**
  16. * @var \Magento\Framework\MessageQueue\Config\Reader\Env
  17. */
  18. private $deploymentConfig;
  19. /**
  20. * @var MessageQueueConfigData
  21. */
  22. private $configData;
  23. /**
  24. * Mapping between default publishers name and connections
  25. *
  26. * @var array
  27. */
  28. private $publisherNameToConnectionMap;
  29. /**
  30. * @param DeploymentConfig $deploymentConfig
  31. * @param MessageQueueConfigData $configData
  32. * @param array $publisherNameToConnectionMap
  33. */
  34. public function __construct(
  35. DeploymentConfig $deploymentConfig,
  36. MessageQueueConfigData $configData,
  37. $publisherNameToConnectionMap = []
  38. ) {
  39. $this->deploymentConfig = $deploymentConfig;
  40. $this->configData = $configData;
  41. $this->publisherNameToConnectionMap = $publisherNameToConnectionMap;
  42. }
  43. /**
  44. * Read publisher configuration from env.php
  45. *
  46. * @param string|null $scope
  47. * @return array
  48. */
  49. public function read($scope = null)
  50. {
  51. $configData = $this->deploymentConfig->getConfigData(MessageQueueEnvReader::ENV_QUEUE);
  52. if (isset($configData['config'])) {
  53. $configData = isset($configData['config'][MessageQueueEnvReader::ENV_PUBLISHERS])
  54. ? $configData['config'][MessageQueueEnvReader::ENV_PUBLISHERS]
  55. : [];
  56. } else {
  57. $configData = isset($configData[MessageQueueEnvReader::ENV_PUBLISHERS])
  58. ? $this->convertConfigData($scope)
  59. : [];
  60. }
  61. return $configData;
  62. }
  63. /**
  64. * Convert publisher related data to publisher config format
  65. *
  66. * @param string|null $scope
  67. * @return array
  68. */
  69. private function convertConfigData($scope)
  70. {
  71. $configData = [];
  72. $topicsConfig = $this->configData->get('topics');
  73. foreach ($topicsConfig as $topicName => $topicConfig) {
  74. $configData[$topicName] = [];
  75. if (isset($topicConfig['disabled'])) {
  76. $configData[$topicName]['disabled'] = $topicConfig['disabled'];
  77. }
  78. $publisherName = $this->configData->get('topics/' . $topicName . '/publisher', $scope);
  79. $config = $this->configData->get('publishers/' . $publisherName, $scope);
  80. if (!empty($config) && isset($this->publisherNameToConnectionMap[$publisherName])) {
  81. $connectionName = $this->publisherNameToConnectionMap[$publisherName];
  82. $config['name'] = $config['connection'];
  83. unset($config['connection']);
  84. $disabled = isset($config['disabled']) ? $config['disabled'] : false;
  85. $config['disabled'] = $disabled;
  86. $configData[$topicName]['connections'][$connectionName] = $config;
  87. }
  88. }
  89. return $configData;
  90. }
  91. }