Config.php 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Customer\Model\Address;
  7. use Magento\Framework\Config\Data as ConfigData;
  8. use Magento\Framework\DataObject;
  9. use Magento\Framework\Serialize\SerializerInterface;
  10. use Magento\Store\Model\ScopeInterface;
  11. /**
  12. * Customer address configuration
  13. */
  14. class Config extends ConfigData
  15. {
  16. const DEFAULT_ADDRESS_RENDERER = \Magento\Customer\Block\Address\Renderer\DefaultRenderer::class;
  17. const XML_PATH_ADDRESS_TEMPLATE = 'customer/address_templates/';
  18. const DEFAULT_ADDRESS_FORMAT = 'oneline';
  19. /**
  20. * Customer address templates per store
  21. *
  22. * @var array
  23. */
  24. protected $_types = [];
  25. /**
  26. * Current store instance
  27. *
  28. * @var \Magento\Store\Model\Store
  29. */
  30. protected $_store = null;
  31. /**
  32. * Default types per store, used for invalid code
  33. *
  34. * @var array
  35. */
  36. protected $_defaultTypes = [];
  37. /**
  38. * @var \Magento\Store\Model\StoreManagerInterface
  39. */
  40. protected $_storeManager;
  41. /**
  42. * @var \Magento\Customer\Helper\Address
  43. */
  44. protected $_addressHelper;
  45. /**
  46. * @var \Magento\Framework\App\Config\ScopeConfigInterface
  47. */
  48. protected $_scopeConfig;
  49. /**
  50. * Constructor
  51. *
  52. * @param Config\Reader $reader
  53. * @param \Magento\Framework\Config\CacheInterface $cache
  54. * @param \Magento\Store\Model\StoreManagerInterface $storeManager
  55. * @param \Magento\Customer\Helper\Address $addressHelper
  56. * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
  57. * @param string|null $cacheId
  58. * @param SerializerInterface|null $serializer
  59. */
  60. public function __construct(
  61. \Magento\Customer\Model\Address\Config\Reader $reader,
  62. \Magento\Framework\Config\CacheInterface $cache,
  63. \Magento\Store\Model\StoreManagerInterface $storeManager,
  64. \Magento\Customer\Helper\Address $addressHelper,
  65. \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
  66. $cacheId = 'address_format',
  67. SerializerInterface $serializer = null
  68. ) {
  69. parent::__construct($reader, $cache, $cacheId, $serializer);
  70. $this->_storeManager = $storeManager;
  71. $this->_addressHelper = $addressHelper;
  72. $this->_scopeConfig = $scopeConfig;
  73. }
  74. /**
  75. * Set store
  76. *
  77. * @param null|string|bool|int|\Magento\Store\Model\Store $store
  78. * @return $this
  79. */
  80. public function setStore($store)
  81. {
  82. $this->_store = $this->_storeManager->getStore($store);
  83. return $this;
  84. }
  85. /**
  86. * Retrieve store
  87. *
  88. * @return \Magento\Store\Model\Store
  89. */
  90. public function getStore()
  91. {
  92. if ($this->_store === null) {
  93. $this->_store = $this->_storeManager->getStore();
  94. }
  95. return $this->_store;
  96. }
  97. /**
  98. * Retrieve address formats
  99. *
  100. * @return array
  101. */
  102. public function getFormats()
  103. {
  104. $store = $this->getStore();
  105. $storeId = $store->getId();
  106. if (!isset($this->_types[$storeId])) {
  107. $this->_types[$storeId] = [];
  108. foreach ($this->get() as $typeCode => $typeConfig) {
  109. $path = sprintf('%s%s', self::XML_PATH_ADDRESS_TEMPLATE, $typeCode);
  110. $type = new DataObject();
  111. if (isset($typeConfig['escapeHtml'])) {
  112. $escapeHtml = $typeConfig['escapeHtml'] == 'true' || $typeConfig['escapeHtml'] == '1';
  113. } else {
  114. $escapeHtml = false;
  115. }
  116. $type->setCode($typeCode)
  117. ->setTitle((string)$typeConfig['title'])
  118. ->setDefaultFormat($this->_scopeConfig->getValue($path, ScopeInterface::SCOPE_STORE, $store))
  119. ->setEscapeHtml($escapeHtml);
  120. $renderer = isset($typeConfig['renderer']) ? (string)$typeConfig['renderer'] : null;
  121. if (!$renderer) {
  122. $renderer = self::DEFAULT_ADDRESS_RENDERER;
  123. }
  124. $type->setRenderer($this->_addressHelper->getRenderer($renderer)->setType($type));
  125. $this->_types[$storeId][] = $type;
  126. }
  127. }
  128. return $this->_types[$storeId];
  129. }
  130. /**
  131. * Retrieve default address format
  132. *
  133. * @return DataObject
  134. */
  135. protected function _getDefaultFormat()
  136. {
  137. $store = $this->getStore();
  138. $storeId = $store->getId();
  139. if (!isset($this->_defaultTypes[$storeId])) {
  140. $this->_defaultTypes[$storeId] = new DataObject();
  141. $this->_defaultTypes[$storeId]->setCode(
  142. 'default'
  143. )->setDefaultFormat(
  144. '{{depend prefix}}{{var prefix}} {{/depend}}{{var firstname}} {{depend middlename}}' .
  145. '{{var middlename}} {{/depend}}{{var lastname}}{{depend suffix}} {{var suffix}}{{/depend}}, ' .
  146. '{{var street}}, {{var city}}, {{var region}} {{var postcode}}, {{var country}}'
  147. );
  148. $renderer = $this->_addressHelper->getRenderer(self::DEFAULT_ADDRESS_RENDERER)
  149. ->setType($this->_defaultTypes[$storeId]);
  150. $this->_defaultTypes[$storeId]->setRenderer($renderer);
  151. }
  152. return $this->_defaultTypes[$storeId];
  153. }
  154. /**
  155. * Retrieve address format by code
  156. *
  157. * @param string $typeCode
  158. * @return DataObject
  159. */
  160. public function getFormatByCode($typeCode)
  161. {
  162. foreach ($this->getFormats() as $type) {
  163. if ($type->getCode() == $typeCode) {
  164. return $type;
  165. }
  166. }
  167. return $this->_getDefaultFormat();
  168. }
  169. }