StoreConfigManager.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Store\Model\Service;
  7. class StoreConfigManager implements \Magento\Store\Api\StoreConfigManagerInterface
  8. {
  9. /**
  10. * @var \Magento\Store\Model\ResourceModel\Store\CollectionFactory
  11. */
  12. protected $storeCollectionFactory;
  13. /**
  14. * @var \Magento\Store\Model\Data\StoreConfigFactory
  15. */
  16. protected $storeConfigFactory;
  17. /**
  18. * Core store config
  19. *
  20. * @var \Magento\Framework\App\Config\ScopeConfigInterface
  21. */
  22. protected $scopeConfig;
  23. /**
  24. * Map the setters to config path
  25. *
  26. * @var array
  27. */
  28. protected $configPaths = [
  29. 'setLocale' => 'general/locale/code',
  30. 'setBaseCurrencyCode' => 'currency/options/base',
  31. 'setDefaultDisplayCurrencyCode' => 'currency/options/default',
  32. 'setTimezone' => 'general/locale/timezone',
  33. 'setWeightUnit' => \Magento\Directory\Helper\Data::XML_PATH_WEIGHT_UNIT
  34. ];
  35. /**
  36. * @param \Magento\Store\Model\ResourceModel\Store\CollectionFactory $storeCollectionFactory
  37. * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
  38. * @param \Magento\Store\Model\Data\StoreConfigFactory $storeConfigFactory
  39. */
  40. public function __construct(
  41. \Magento\Store\Model\ResourceModel\Store\CollectionFactory $storeCollectionFactory,
  42. \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
  43. \Magento\Store\Model\Data\StoreConfigFactory $storeConfigFactory
  44. ) {
  45. $this->storeCollectionFactory = $storeCollectionFactory;
  46. $this->scopeConfig = $scopeConfig;
  47. $this->storeConfigFactory = $storeConfigFactory;
  48. }
  49. /**
  50. * @param string[] $storeCodes list of stores by store codes, will return all if storeCodes is not set
  51. * @return \Magento\Store\Api\Data\StoreConfigInterface[]
  52. */
  53. public function getStoreConfigs(array $storeCodes = null)
  54. {
  55. $storeConfigs = [];
  56. $storeCollection = $this->storeCollectionFactory->create();
  57. if ($storeCodes != null) {
  58. $storeCollection->addFieldToFilter('code', ['in' => $storeCodes]);
  59. }
  60. foreach ($storeCollection->load() as $item) {
  61. $storeConfigs[] = $this->getStoreConfig($item);
  62. }
  63. return $storeConfigs;
  64. }
  65. /**
  66. * @param \Magento\Store\Model\Store $store
  67. * @return \Magento\Store\Api\Data\StoreConfigInterface
  68. */
  69. protected function getStoreConfig($store)
  70. {
  71. /** @var \Magento\Store\Model\Data\StoreConfig $storeConfig */
  72. $storeConfig = $this->storeConfigFactory->create();
  73. $storeConfig->setId($store->getId())
  74. ->setCode($store->getCode())
  75. ->setWebsiteId($store->getWebsiteId());
  76. foreach ($this->configPaths as $methodName => $configPath) {
  77. $configValue = $this->scopeConfig->getValue(
  78. $configPath,
  79. \Magento\Store\Model\ScopeInterface::SCOPE_STORES,
  80. $store->getCode()
  81. );
  82. $storeConfig->$methodName($configValue);
  83. }
  84. $storeConfig->setBaseUrl($store->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_WEB, false));
  85. $storeConfig->setSecureBaseUrl($store->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_WEB, true));
  86. $storeConfig->setBaseLinkUrl($store->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_LINK, false));
  87. $storeConfig->setSecureBaseLinkUrl($store->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_LINK, true));
  88. $storeConfig->setBaseStaticUrl($store->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_STATIC, false));
  89. $storeConfig->setSecureBaseStaticUrl(
  90. $store->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_STATIC, true)
  91. );
  92. $storeConfig->setBaseMediaUrl($store->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA, false));
  93. $storeConfig->setSecureBaseMediaUrl(
  94. $store->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA, true)
  95. );
  96. return $storeConfig;
  97. }
  98. }