Spaces:
No application file
No application file
| namespace Mautic\ConfigBundle\Mapper; | |
| use Mautic\ConfigBundle\Exception\BadFormConfigException; | |
| use Mautic\ConfigBundle\Mapper\Helper\ConfigHelper; | |
| use Mautic\ConfigBundle\Mapper\Helper\RestrictionHelper; | |
| use Mautic\CoreBundle\Helper\CoreParametersHelper; | |
| class ConfigMapper | |
| { | |
| /** | |
| * @var mixed[] | |
| */ | |
| private array $restrictedParameters; | |
| public function __construct( | |
| private CoreParametersHelper $parametersHelper, | |
| array $restrictedParameters = [] | |
| ) { | |
| $this->restrictedParameters = RestrictionHelper::prepareRestrictions($restrictedParameters); | |
| } | |
| /** | |
| * @throws BadFormConfigException | |
| */ | |
| public function bindFormConfigsWithRealValues(array $forms): array | |
| { | |
| foreach ($forms as $bundle => $config) { | |
| if (!isset($config['parameters'])) { | |
| throw new BadFormConfigException(); | |
| } | |
| $forms[$bundle]['parameters'] = $this->mergeWithLocalParameters($forms[$bundle]['parameters']); | |
| } | |
| return $forms; | |
| } | |
| /** | |
| * Merges default parameters from each subscribed bundle with the local (real) params. | |
| */ | |
| private function mergeWithLocalParameters(array $formParameters): array | |
| { | |
| $formParameters = RestrictionHelper::applyRestrictions($formParameters, $this->restrictedParameters); | |
| // All config values are stored at root level of the config | |
| foreach ($formParameters as $formKey => $defaultValue) { | |
| $configValue = $this->parametersHelper->get($formKey); | |
| if (null === $configValue) { | |
| // Nothing has been locally configured so keep default | |
| continue; | |
| } | |
| // Form field is a collection of parameters | |
| if (is_array($configValue)) { | |
| // Apply nested restrictions to nested config values | |
| $configValue = RestrictionHelper::applyRestrictions($configValue, $this->restrictedParameters, $formKey); | |
| // Bind configured values with defaults | |
| $formParameters[$formKey] = ConfigHelper::bindNestedConfigValues($configValue, $defaultValue); | |
| continue; | |
| } | |
| // Form field | |
| $formParameters[$formKey] = $configValue; | |
| } | |
| return $formParameters; | |
| } | |
| } | |