vendor/easycorp/easyadmin-bundle/src/Dto/FieldDto.php line 26

Open in your IDE?
  1. <?php
  2. namespace EasyCorp\Bundle\EasyAdminBundle\Dto;
  3. use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
  4. use EasyCorp\Bundle\EasyAdminBundle\Config\KeyValueStore;
  5. use EasyCorp\Bundle\EasyAdminBundle\Form\Type\EaFormFieldsetType;
  6. use EasyCorp\Bundle\EasyAdminBundle\Form\Type\Layout\EaFormColumnCloseType;
  7. use EasyCorp\Bundle\EasyAdminBundle\Form\Type\Layout\EaFormColumnGroupCloseType;
  8. use EasyCorp\Bundle\EasyAdminBundle\Form\Type\Layout\EaFormColumnGroupOpenType;
  9. use EasyCorp\Bundle\EasyAdminBundle\Form\Type\Layout\EaFormColumnOpenType;
  10. use EasyCorp\Bundle\EasyAdminBundle\Form\Type\Layout\EaFormFieldsetCloseType;
  11. use EasyCorp\Bundle\EasyAdminBundle\Form\Type\Layout\EaFormFieldsetOpenType;
  12. use EasyCorp\Bundle\EasyAdminBundle\Form\Type\Layout\EaFormTabListType;
  13. use EasyCorp\Bundle\EasyAdminBundle\Form\Type\Layout\EaFormTabPaneCloseType;
  14. use EasyCorp\Bundle\EasyAdminBundle\Form\Type\Layout\EaFormTabPaneGroupCloseType;
  15. use EasyCorp\Bundle\EasyAdminBundle\Form\Type\Layout\EaFormTabPaneGroupOpenType;
  16. use EasyCorp\Bundle\EasyAdminBundle\Form\Type\Layout\EaFormTabPaneOpenType;
  17. use Symfony\Component\ExpressionLanguage\Expression;
  18. use Symfony\Component\Uid\Ulid;
  19. use Symfony\Contracts\Translation\TranslatableInterface;
  20. /**
  21.  * @author Javier Eguiluz <javier.eguiluz@gmail.com>
  22.  */
  23. final class FieldDto
  24. {
  25.     private ?string $fieldFqcn null;
  26.     private ?string $propertyName null;
  27.     private mixed $value null;
  28.     private mixed $formattedValue null;
  29.     private $formatValueCallable;
  30.     private $label;
  31.     private ?string $formType null;
  32.     private KeyValueStore $formTypeOptions;
  33.     private ?bool $sortable null;
  34.     private ?bool $virtual null;
  35.     private string|Expression|null $permission null;
  36.     private ?string $textAlign null;
  37.     private $help;
  38.     private string $cssClass '';
  39.     // how many columns the field takes when rendering
  40.     // (defined as Bootstrap 5 grid classes; e.g. 'col-md-6 col-xxl-3')
  41.     private ?string $columns null;
  42.     // same as $columns but used when the user doesn't define columns explicitly
  43.     private string $defaultColumns '';
  44.     private array $translationParameters = [];
  45.     private ?string $templateName 'crud/field/text';
  46.     private ?string $templatePath null;
  47.     private array $formThemePaths = [];
  48.     private AssetsDto $assets;
  49.     private KeyValueStore $customOptions;
  50.     private KeyValueStore $doctrineMetadata;
  51.     /** @internal */
  52.     private $uniqueId;
  53.     private KeyValueStore $displayedOn;
  54.     private array $htmlAttributes = [];
  55.     public function __construct()
  56.     {
  57.         $this->uniqueId = new Ulid();
  58.         $this->assets = new AssetsDto();
  59.         $this->formTypeOptions KeyValueStore::new();
  60.         $this->customOptions KeyValueStore::new();
  61.         $this->doctrineMetadata KeyValueStore::new();
  62.         $this->displayedOn KeyValueStore::new([
  63.             Crud::PAGE_INDEX => Crud::PAGE_INDEX,
  64.             Crud::PAGE_DETAIL => Crud::PAGE_DETAIL,
  65.             Crud::PAGE_EDIT => Crud::PAGE_EDIT,
  66.             Crud::PAGE_NEW => Crud::PAGE_NEW,
  67.         ]);
  68.     }
  69.     public function __clone()
  70.     {
  71.         $this->uniqueId = new Ulid();
  72.         $this->assets = clone $this->assets;
  73.         $this->formTypeOptions = clone $this->formTypeOptions;
  74.         $this->customOptions = clone $this->customOptions;
  75.         $this->doctrineMetadata = clone $this->doctrineMetadata;
  76.         $this->displayedOn = clone $this->displayedOn;
  77.     }
  78.     public function getUniqueId(): string
  79.     {
  80.         return $this->uniqueId;
  81.     }
  82.     public function setUniqueId(string $uniqueId): void
  83.     {
  84.         $this->uniqueId $uniqueId;
  85.     }
  86.     public function isFormDecorationField(): bool
  87.     {
  88.         trigger_deprecation(
  89.             'easycorp/easyadmin-bundle',
  90.             '4.8.0',
  91.             '"FieldDto::isFormDecorationField()" has been deprecated in favor of "FieldDto::isFormLayoutField()" and it will be removed in 5.0.0.',
  92.         );
  93.         return $this->isFormLayoutField();
  94.     }
  95.     public function isFormLayoutField(): bool
  96.     {
  97.         $formLayoutFieldClasses = [
  98.             EaFormTabListType::class,
  99.             EaFormTabPaneGroupOpenType::class,
  100.             EaFormTabPaneGroupCloseType::class,
  101.             EaFormTabPaneOpenType::class,
  102.             EaFormTabPaneCloseType::class,
  103.             EaFormColumnGroupOpenType::class,
  104.             EaFormColumnGroupCloseType::class,
  105.             EaFormColumnOpenType::class,
  106.             EaFormColumnCloseType::class,
  107.             EaFormFieldsetOpenType::class,
  108.             EaFormFieldsetCloseType::class,
  109.         ];
  110.         return \in_array($this->formType$formLayoutFieldClassestrue);
  111.     }
  112.     public function isFormFieldset(): bool
  113.     {
  114.         return \in_array($this->formType, [EaFormFieldsetType::class, EaFormFieldsetOpenType::class], true);
  115.     }
  116.     public function isFormTab(): bool
  117.     {
  118.         return EaFormTabPaneOpenType::class === $this->formType;
  119.     }
  120.     public function isFormColumn(): bool
  121.     {
  122.         return EaFormColumnOpenType::class === $this->formType;
  123.     }
  124.     public function getFieldFqcn(): ?string
  125.     {
  126.         return $this->fieldFqcn;
  127.     }
  128.     /**
  129.      * @internal Don't use this method yourself. EasyAdmin uses it internally
  130.      *           to set the field FQCN. It's OK to use getFieldFqcn() to get this value.
  131.      */
  132.     public function setFieldFqcn(string $fieldFqcn): void
  133.     {
  134.         $this->fieldFqcn $fieldFqcn;
  135.     }
  136.     public function getProperty(): string
  137.     {
  138.         return $this->propertyName;
  139.     }
  140.     public function setProperty(string $propertyName): void
  141.     {
  142.         $this->propertyName $propertyName;
  143.     }
  144.     /**
  145.      * Returns the original unmodified value stored in the entity field.
  146.      */
  147.     public function getValue(): mixed
  148.     {
  149.         return $this->value;
  150.     }
  151.     public function setValue(mixed $value): void
  152.     {
  153.         $this->value $value;
  154.     }
  155.     /**
  156.      * Returns the value to be displayed for the field (it could be the
  157.      * same as the value stored in the field or not).
  158.      */
  159.     public function getFormattedValue(): mixed
  160.     {
  161.         return $this->formattedValue;
  162.     }
  163.     public function setFormattedValue(mixed $formattedValue): void
  164.     {
  165.         $this->formattedValue $formattedValue;
  166.     }
  167.     public function getFormatValueCallable(): ?callable
  168.     {
  169.         return $this->formatValueCallable;
  170.     }
  171.     public function setFormatValueCallable(?callable $callable): void
  172.     {
  173.         $this->formatValueCallable $callable;
  174.     }
  175.     /**
  176.      * @return TranslatableInterface|string|false|null
  177.      */
  178.     public function getLabel()
  179.     {
  180.         return $this->label;
  181.     }
  182.     /**
  183.      * @param TranslatableInterface|string|false|null $label
  184.      */
  185.     public function setLabel($label): void
  186.     {
  187.         if (!\is_string($label) && !$label instanceof TranslatableInterface && false !== $label && null !== $label) {
  188.             trigger_deprecation(
  189.                 'easycorp/easyadmin-bundle',
  190.                 '4.0.5',
  191.                 'Argument "%s" for "%s" must be one of these types: %s. Passing type "%s" will cause an error in 5.0.0.',
  192.                 '$label',
  193.                 __METHOD__,
  194.                 '"TranslatableInterface", "string", "false" or "null"',
  195.                 \gettype($label)
  196.             );
  197.         }
  198.         $this->label $label;
  199.     }
  200.     public function getFormType(): ?string
  201.     {
  202.         return $this->formType;
  203.     }
  204.     public function setFormType(string $formTypeFqcn): void
  205.     {
  206.         $this->formType $formTypeFqcn;
  207.     }
  208.     public function getFormTypeOptions(): array
  209.     {
  210.         return $this->formTypeOptions->all();
  211.     }
  212.     public function getFormTypeOption(string $optionName)
  213.     {
  214.         return $this->formTypeOptions->get($optionName);
  215.     }
  216.     public function setFormTypeOptions(array $formTypeOptions): void
  217.     {
  218.         foreach ($formTypeOptions as $optionName => $optionValue) {
  219.             $this->setFormTypeOption($optionName$optionValue);
  220.         }
  221.     }
  222.     /**
  223.      * @param string $optionName You can use "dot" notation to set nested options (e.g. 'attr.class')
  224.      */
  225.     public function setFormTypeOption(string $optionNamemixed $optionValue): void
  226.     {
  227.         $this->formTypeOptions->set($optionName$optionValue);
  228.     }
  229.     /**
  230.      * @param string $optionName You can use "dot" notation to set nested options (e.g. 'attr.class')
  231.      */
  232.     public function setFormTypeOptionIfNotSet(string $optionNamemixed $optionValue): void
  233.     {
  234.         $this->formTypeOptions->setIfNotSet($optionName$optionValue);
  235.     }
  236.     public function isSortable(): ?bool
  237.     {
  238.         return $this->sortable;
  239.     }
  240.     public function setSortable(bool $isSortable): void
  241.     {
  242.         $this->sortable $isSortable;
  243.     }
  244.     public function isVirtual(): ?bool
  245.     {
  246.         return $this->virtual;
  247.     }
  248.     public function setVirtual(bool $isVirtual): void
  249.     {
  250.         $this->virtual $isVirtual;
  251.     }
  252.     public function getTextAlign(): ?string
  253.     {
  254.         return $this->textAlign;
  255.     }
  256.     public function setTextAlign(string $textAlign): void
  257.     {
  258.         $this->textAlign $textAlign;
  259.     }
  260.     public function getPermission(): string|Expression|null
  261.     {
  262.         return $this->permission;
  263.     }
  264.     public function setPermission(string|Expression $permission): void
  265.     {
  266.         $this->permission $permission;
  267.     }
  268.     public function getHelp(): TranslatableInterface|string|null
  269.     {
  270.         return $this->help;
  271.     }
  272.     public function setHelp(TranslatableInterface|string $help): void
  273.     {
  274.         $this->help $help;
  275.     }
  276.     public function getCssClass(): string
  277.     {
  278.         return $this->cssClass;
  279.     }
  280.     public function setCssClass(string $cssClass): void
  281.     {
  282.         $this->cssClass trim($cssClass);
  283.     }
  284.     public function getColumns(): ?string
  285.     {
  286.         return $this->columns;
  287.     }
  288.     public function setColumns(?string $columnCssClasses): void
  289.     {
  290.         $this->columns $columnCssClasses;
  291.     }
  292.     public function getDefaultColumns(): string
  293.     {
  294.         return $this->defaultColumns;
  295.     }
  296.     public function setDefaultColumns(string $columnCssClasses): void
  297.     {
  298.         $this->defaultColumns $columnCssClasses;
  299.     }
  300.     public function getTranslationParameters(): array
  301.     {
  302.         return $this->translationParameters;
  303.     }
  304.     public function setTranslationParameters(array $translationParameters): void
  305.     {
  306.         $this->translationParameters $translationParameters;
  307.     }
  308.     public function getTemplateName(): ?string
  309.     {
  310.         return $this->templateName;
  311.     }
  312.     public function setTemplateName(?string $templateName): void
  313.     {
  314.         $this->templateName $templateName;
  315.     }
  316.     public function getTemplatePath(): ?string
  317.     {
  318.         return $this->templatePath;
  319.     }
  320.     public function setTemplatePath(?string $templatePath): void
  321.     {
  322.         $this->templatePath $templatePath;
  323.     }
  324.     public function addFormTheme(string $formThemePath): void
  325.     {
  326.         $this->formThemePaths[] = $formThemePath;
  327.     }
  328.     public function getFormThemes(): array
  329.     {
  330.         return $this->formThemePaths;
  331.     }
  332.     public function setFormThemes(array $formThemePaths): void
  333.     {
  334.         $this->formThemePaths $formThemePaths;
  335.     }
  336.     public function getAssets(): AssetsDto
  337.     {
  338.         return $this->assets;
  339.     }
  340.     public function setAssets(AssetsDto $assets): void
  341.     {
  342.         $this->assets $assets;
  343.     }
  344.     public function addAssetMapperEncoreAsset(AssetDto $assetDto): void
  345.     {
  346.         $this->assets->addAssetMapperAsset($assetDto);
  347.     }
  348.     public function addWebpackEncoreAsset(AssetDto $assetDto): void
  349.     {
  350.         $this->assets->addWebpackEncoreAsset($assetDto);
  351.     }
  352.     public function addCssAsset(AssetDto $assetDto): void
  353.     {
  354.         $this->assets->addCssAsset($assetDto);
  355.     }
  356.     public function addJsAsset(AssetDto $assetDto): void
  357.     {
  358.         $this->assets->addJsAsset($assetDto);
  359.     }
  360.     public function addHtmlContentToHead(string $htmlContent): void
  361.     {
  362.         $this->assets->addHtmlContentToHead($htmlContent);
  363.     }
  364.     public function addHtmlContentToBody(string $htmlContent): void
  365.     {
  366.         $this->assets->addHtmlContentToBody($htmlContent);
  367.     }
  368.     public function getCustomOptions(): KeyValueStore
  369.     {
  370.         return $this->customOptions;
  371.     }
  372.     public function getCustomOption(string $optionName): mixed
  373.     {
  374.         return $this->customOptions->get($optionName);
  375.     }
  376.     public function setCustomOptions(array $customOptions): void
  377.     {
  378.         $this->customOptions KeyValueStore::new($customOptions);
  379.     }
  380.     public function setCustomOption(string $optionNamemixed $optionValue): void
  381.     {
  382.         $this->customOptions->set($optionName$optionValue);
  383.     }
  384.     public function getDoctrineMetadata(): KeyValueStore
  385.     {
  386.         return $this->doctrineMetadata;
  387.     }
  388.     public function setDoctrineMetadata(array $metadata): void
  389.     {
  390.         $this->doctrineMetadata KeyValueStore::new($metadata);
  391.     }
  392.     public function getDisplayedOn(): KeyValueStore
  393.     {
  394.         return $this->displayedOn;
  395.     }
  396.     public function setDisplayedOn(KeyValueStore $displayedOn): void
  397.     {
  398.         $this->displayedOn $displayedOn;
  399.     }
  400.     public function isDisplayedOn(string $pageName): bool
  401.     {
  402.         return $this->displayedOn->has($pageName);
  403.     }
  404.     public function getHtmlAttributes(): array
  405.     {
  406.         return $this->htmlAttributes;
  407.     }
  408.     public function setHtmlAttributes(array $htmlAttributes): self
  409.     {
  410.         $this->htmlAttributes $htmlAttributes;
  411.         return $this;
  412.     }
  413.     public function setHtmlAttribute(string $attributemixed $value): self
  414.     {
  415.         $this->htmlAttributes[$attribute] = $value;
  416.         return $this;
  417.     }
  418. }