src/Form/Type/Admin/ModelType.php line 23

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Form\Type\Admin;
  4. use App\Entity\Configurator\Font;
  5. use App\Entity\Configurator\FontColor;
  6. use App\Entity\Configurator\Model;
  7. use App\Model\ElementType as types;
  8. use App\Provider\ModelTokenProvider;
  9. use Sylius\Bundle\ResourceBundle\Form\EventSubscriber\AddCodeFormSubscriber;
  10. use Sylius\Bundle\ResourceBundle\Form\Type\AbstractResourceType;
  11. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  12. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  13. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  14. use Symfony\Component\Form\Extension\Core\Type\CollectionType;
  15. use Symfony\Component\Form\Extension\Core\Type\IntegerType;
  16. use Symfony\Component\Form\Extension\Core\Type\NumberType;
  17. use Symfony\Component\Form\Extension\Core\Type\TextType;
  18. use Symfony\Component\Form\FormBuilderInterface;
  19. final class ModelType extends AbstractResourceType
  20. {
  21.     public function __construct(string $dataClass, array $validationGroups = [], private ModelTokenProvider $modelTokenProvider)
  22.     {
  23.         parent::__construct($dataClass$validationGroups);
  24.     }
  25.     public function buildForm(FormBuilderInterface $builder, array $options): void
  26.     {
  27.         $modelTokenProvider $this->modelTokenProvider;
  28.         $builder
  29.             ->add('name'TextType::class, [
  30.                 'required' => true,
  31.                 'label' => 'app.ui.name'
  32.             ])
  33.             ->addEventSubscriber(new AddCodeFormSubscriber())
  34.             ->add('productVariant'ProductVariantAutocompleteChoiceType::class, [
  35.                 'label' => 'app.form.configurator.variant',
  36.                 'required' => false,
  37.             ])
  38.             ->add('elements'CollectionType::class, [
  39.                 'label' => 'app.form.configurator.elements',
  40.                 'entry_type' => ElementType::class,
  41.                 'allow_delete' => true,
  42.                 'allow_add' => true,
  43.                 'by_reference' => false,
  44.                 'entry_options' => ['model' => $options['data']],
  45.                 'attr' => ['class' => 'elements']
  46.             ])
  47.             ->add('width'IntegerType::class, [
  48.                 'label' => 'app.form.configurator.width_px',
  49.                 'attr' => ['max' => Model::WIDTH_MAX'min' => 0'class' => 'context-sizes']
  50.             ])
  51.             ->add('height'IntegerType::class, [
  52.                 'label' => 'app.form.configurator.height_px',
  53.                 'attr' => ['max' => Model::HEIGHT_MAX'min' => 0'class' => 'context-sizes']
  54.             ])
  55.             ->add('printZoneWidthPx'IntegerType::class, [
  56.                 'label' => 'app.form.configurator.print_zone_width_px',
  57.                 'attr' => ['max' => Model::WIDTH_MAX'min' => 0'class' => 'printzone']
  58.             ])
  59.             ->add('printZoneHeightPx'IntegerType::class, [
  60.                 'label' => 'app.form.configurator.print_zone_height_px',
  61.                 'attr' => ['max' => Model::HEIGHT_MAX'min' => 0'class' => 'printzone']
  62.             ])
  63.             ->add('printZoneCoordinatesX'IntegerType::class, [
  64.                 'label' => 'app.form.configurator.print_zone_coordinates_X',
  65.                 'attr' => ['max' => Model::WIDTH_MAX'min' => 0'class' => 'model-coordinate']
  66.             ])
  67.             ->add('printZoneCoordinatesY'IntegerType::class, [
  68.                 'label' => 'app.form.configurator.print_zone_coordinates_Y',
  69.                 'attr' => ['max' => Model::WIDTH_MAX'min' => 0'class' => 'model-coordinate']
  70.             ])
  71.             ->add('scale'NumberType::class, [
  72.                 'attr' => ['readonly' => true'class' => 'input-model-scale'],
  73.                 'label' => 'app.form.configurator.scale',
  74.                 'scale' => 15,
  75.                 "required" => false
  76.             ])
  77.             ->add('printFormat'ChoiceType::class, [
  78.                 'label' => 'app.form.configurator.print_format',
  79.                 'choices' => [
  80.                     Model::PRINT_FORMAT_PDF => Model::PRINT_FORMAT_PDF,
  81.                     Model::PRINT_FORMAT_PNG => Model::PRINT_FORMAT_PNG,
  82.                     Model::PRINT_FORMAT_JPG => Model::PRINT_FORMAT_JPG
  83.                 ]
  84.             ])
  85.             ->add('watermarkOnCartRendering'CheckboxType::class, [
  86.                 'label' => 'app.form.configurator.watermark_on_cart_cendering',
  87.             ])
  88.             ->add('advanced'CheckboxType::class, [
  89.                 'label' => 'app.form.configurator.advanced',
  90.                 'help' => 'app.form.configurator.advanced_help',
  91.                 'attr' => ['class' => 'help-text js-type-configurator']
  92.             ])
  93.             ->add('freeConfiguration'CheckboxType::class, [
  94.                 'label' => 'app.form.configurator.free_configuration',
  95.                 'help' => 'app.form.configurator.free_configuration_help',
  96.                 'attr' => ['class' => 'help-text js-type-configurator']
  97.             ])
  98.             ->add('type'ChoiceType::class, [
  99.                 'label' => 'app.form.configurator.model_type',
  100.                 'choices' => [
  101.                     'app.form.configurator.image_library' => types::TYPE_IMAGE_LIBRARY,
  102.                     'app.form.configurator.image_upload' => types::TYPE_IMAGE_UPLOAD,
  103.                     'app.form.configurator.text' => types::TYPE_TEXT,
  104.                 ],
  105.                 'multiple' => true,
  106.                 "expanded" => true,
  107.             ])
  108.             ->add('libraries'LibraryAutocompleteChoiceType::class, [
  109.                 'placeholder' => 'app.ui.choose_an_option',
  110.                 'required' => false,
  111.                 'multiple' => true,
  112.                 'label' => "app.ui.libraries"
  113.             ])
  114.             ->add('fonts'FontAutoCompleteChoiceType::class, [
  115.                 'label' => 'app.form.configurator.fonts',
  116.                 'required' => false,
  117.                 'multiple' => true,
  118.                 'placeholder' => "app.form.configurator.fonts",
  119.             ])
  120.             ->add('defaultFont'EntityType::class, [
  121.                 'class' => Font::class,
  122.                 'required' => false,
  123.                 'label' => "app.form.configurator.default_font",
  124.                 'choice_label' => 'name',
  125.                 'placeholder' => 'app.form.configurator.choose_font'
  126.             ])
  127.             ->add('fontColors'FontColorAutoCompleteChoiceType::class, [
  128.                 'label' => 'app.form.configurator.font_colors',
  129.                 'required' => false,
  130.                 'multiple' => true,
  131.                 'placeholder' => "app.form.configurator.font_colors"
  132.             ])
  133.             ->add('defaultFontColor'EntityType::class, [
  134.                 'class' => FontColor::class,
  135.                 'label' => 'app.form.configurator.default_font_color',
  136.                 'required' => false,
  137.                 'choice_label' => function ($entity) {
  138.                     return $entity->getTranslation()->getMetaTitle();
  139.                 },
  140.                 'placeholder' => 'app.form.configurator.choose_font_color'
  141.             ])
  142.             ->add('strokeColors'FontColorAutoCompleteChoiceType::class, [
  143.                 'label' => 'app.form.configurator.stroke_colors',
  144.                 'required' => false,
  145.                 'multiple' => true,
  146.                 'placeholder' => "app.form.configurator.stroke_colors"
  147.             ])
  148.             ->add('defaultStrokeColor'EntityType::class, [
  149.                 'class' => FontColor::class,
  150.                 'label' => 'app.form.configurator.default_stroke_color',
  151.                 'required' => false,
  152.                 'choice_label' => function ($entity) {
  153.                     return $entity->getTranslation()->getMetaTitle();
  154.                 },
  155.                 'placeholder' => 'app.form.configurator.no_stroke_color'
  156.             ])
  157.             ->add('shadowColors'FontColorAutoCompleteChoiceType::class, [
  158.                 'label' => 'app.form.configurator.shadow_colors',
  159.                 'required' => false,
  160.                 'multiple' => true,
  161.                 'placeholder' => "app.form.configurator.shadow_colors"
  162.             ])
  163.             ->add('defaultShadowColor'EntityType::class, [
  164.                 'class' => FontColor::class,
  165.                 'label' => 'app.form.configurator.default_shadow_color',
  166.                 'required' => false,
  167.                 'choice_label' => function ($entity) {
  168.                     return $entity->getTranslation()->getMetaTitle();
  169.                 },
  170.                 'placeholder' => 'app.form.configurator.no_shadow_color'
  171.             ])
  172.             ->add('textPersonalisation'CheckboxType::class, [
  173.                 'label' => "app.form.configurator.allow_text_personalisation"
  174.             ])
  175.             ;
  176.     }
  177.     public function getBlockPrefix(): string
  178.     {
  179.         return 'app_configurator_model';
  180.     }
  181. }