![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/mautic.corals.io/app/bundles/ConfigBundle/Form/Helper/ |
<?php 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; } } }