Spaces:
No application file
No application file
File size: 2,765 Bytes
d2897cd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
<?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;
}
}
}
|