Spaces:
No application file
No application file
| namespace Mautic\ConfigBundle\Form\Helper; | |
| use Mautic\ConfigBundle\Mapper\Helper\RestrictionHelper as FieldHelper; | |
| use Symfony\Component\Form\FormInterface; | |
| use Symfony\Contracts\Translation\TranslatorInterface; | |
| class RestrictionHelper | |
| { | |
| public const MODE_REMOVE = 'remove'; | |
| public const MODE_MASK = 'mask'; | |
| /** | |
| * @var string[] | |
| */ | |
| private array $restrictedFields; | |
| public function __construct( | |
| private TranslatorInterface $translator, | |
| array $restrictedFields, | |
| private string $displayMode | |
| ) { | |
| $this->restrictedFields = FieldHelper::prepareRestrictions($restrictedFields); | |
| } | |
| /** | |
| * @param FormInterface<mixed> $childType | |
| * @param FormInterface<mixed> $parentType | |
| */ | |
| public function applyRestrictions(FormInterface $childType, FormInterface $parentType, array $restrictedFields = null): void | |
| { | |
| if (null === $restrictedFields) { | |
| $restrictedFields = $this->restrictedFields; | |
| } | |
| $fieldName = $childType->getName(); | |
| if (array_key_exists($fieldName, $restrictedFields)) { | |
| if (is_array($restrictedFields[$fieldName])) { | |
| // Part of the collection of fields are restricted | |
| foreach ($childType as $grandchild) { | |
| $this->applyRestrictions($grandchild, $childType, $restrictedFields[$fieldName]); | |
| } | |
| return; | |
| } | |
| $this->restrictField($childType, $parentType); | |
| } | |
| } | |
| /** | |
| * @param FormInterface<mixed> $childType | |
| * @param FormInterface<mixed> $parentType | |
| */ | |
| private function restrictField(FormInterface $childType, FormInterface $parentType): void | |
| { | |
| switch ($this->displayMode) { | |
| case self::MODE_MASK: | |
| $parentType->add( | |
| $childType->getName(), | |
| $childType->getConfig()->getType()->getInnerType()::class, | |
| array_merge( | |
| $childType->getConfig()->getOptions(), | |
| [ | |
| 'required' => false, | |
| 'mapped' => false, | |
| 'disabled' => true, | |
| 'attr' => array_merge($childType->getConfig()->getOptions()['attr'] ?? [], [ | |
| 'placeholder' => $this->translator->trans('mautic.config.restricted'), | |
| 'readonly' => true, | |
| ]), | |
| ] | |
| ) | |
| ); | |
| break; | |
| case self::MODE_REMOVE: | |
| $parentType->remove($childType->getName()); | |
| break; | |
| } | |
| } | |
| } | |