Mapper.php 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Config\Model\Config\Structure\Element\Dependency;
  7. /**
  8. * @api
  9. * @since 100.0.2
  10. */
  11. class Mapper
  12. {
  13. /**
  14. * Field locator model
  15. *
  16. * @var \Magento\Config\Model\Config\Structure\SearchInterface
  17. */
  18. protected $_fieldLocator;
  19. /**
  20. * Dependency Field model
  21. *
  22. * @var FieldFactory
  23. */
  24. protected $_fieldFactory;
  25. /**
  26. * @var \Magento\Framework\App\Config\ScopeConfigInterface
  27. */
  28. protected $_scopeConfig;
  29. /**
  30. * @param \Magento\Config\Model\Config\Structure\SearchInterface $fieldLocator
  31. * @param FieldFactory $fieldFactory
  32. * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
  33. */
  34. public function __construct(
  35. \Magento\Config\Model\Config\Structure\SearchInterface $fieldLocator,
  36. FieldFactory $fieldFactory,
  37. \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
  38. ) {
  39. $this->_fieldLocator = $fieldLocator;
  40. $this->_fieldFactory = $fieldFactory;
  41. $this->_scopeConfig = $scopeConfig;
  42. }
  43. /**
  44. * Retrieve field dependencies
  45. *
  46. * @param array $dependencies
  47. * @param string $storeCode
  48. * @param string $fieldPrefix
  49. * @return array
  50. */
  51. public function getDependencies($dependencies, $storeCode, $fieldPrefix = '')
  52. {
  53. $output = [];
  54. foreach ($dependencies as $depend) {
  55. $field = $this->_fieldFactory->create(['fieldData' => $depend, 'fieldPrefix' => $fieldPrefix]);
  56. $shouldAddDependency = true;
  57. /** @var \Magento\Config\Model\Config\Structure\Element\Field $dependentField */
  58. $dependentField = $this->_fieldLocator->getElement($depend['id']);
  59. /*
  60. * If dependent field can't be shown in current scope and real dependent config value
  61. * is not equal to preferred one, then hide dependence fields by adding dependence
  62. * based on not shown field (not rendered field)
  63. */
  64. if (false == $dependentField->isVisible()) {
  65. $valueInStore = $this->_scopeConfig->getValue(
  66. $dependentField->getPath($fieldPrefix),
  67. \Magento\Store\Model\ScopeInterface::SCOPE_STORE,
  68. $storeCode
  69. );
  70. $shouldAddDependency = !$field->isValueSatisfy($valueInStore);
  71. }
  72. if ($shouldAddDependency) {
  73. $output[$field->getId()] = $field;
  74. }
  75. }
  76. return $output;
  77. }
  78. }