<?php
declare(strict_types=1);
namespace App\Form\Type\Admin;
use App\Entity\Configurator\Font;
use App\Entity\Configurator\FontColor;
use App\Entity\Configurator\Model;
use App\Model\ElementType as types;
use App\Provider\ModelTokenProvider;
use Sylius\Bundle\ResourceBundle\Form\EventSubscriber\AddCodeFormSubscriber;
use Sylius\Bundle\ResourceBundle\Form\Type\AbstractResourceType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
use Symfony\Component\Form\Extension\Core\Type\NumberType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
final class ModelType extends AbstractResourceType
{
public function __construct(string $dataClass, array $validationGroups = [], private ModelTokenProvider $modelTokenProvider)
{
parent::__construct($dataClass, $validationGroups);
}
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$modelTokenProvider = $this->modelTokenProvider;
$builder
->add('name', TextType::class, [
'required' => true,
'label' => 'app.ui.name'
])
->addEventSubscriber(new AddCodeFormSubscriber())
->add('productVariant', ProductVariantAutocompleteChoiceType::class, [
'label' => 'app.form.configurator.variant',
'required' => false,
])
->add('elements', CollectionType::class, [
'label' => 'app.form.configurator.elements',
'entry_type' => ElementType::class,
'allow_delete' => true,
'allow_add' => true,
'by_reference' => false,
'entry_options' => ['model' => $options['data']],
'attr' => ['class' => 'elements']
])
->add('width', IntegerType::class, [
'label' => 'app.form.configurator.width_px',
'attr' => ['max' => Model::WIDTH_MAX, 'min' => 0, 'class' => 'context-sizes']
])
->add('height', IntegerType::class, [
'label' => 'app.form.configurator.height_px',
'attr' => ['max' => Model::HEIGHT_MAX, 'min' => 0, 'class' => 'context-sizes']
])
->add('printZoneWidthPx', IntegerType::class, [
'label' => 'app.form.configurator.print_zone_width_px',
'attr' => ['max' => Model::WIDTH_MAX, 'min' => 0, 'class' => 'printzone']
])
->add('printZoneHeightPx', IntegerType::class, [
'label' => 'app.form.configurator.print_zone_height_px',
'attr' => ['max' => Model::HEIGHT_MAX, 'min' => 0, 'class' => 'printzone']
])
->add('printZoneCoordinatesX', IntegerType::class, [
'label' => 'app.form.configurator.print_zone_coordinates_X',
'attr' => ['max' => Model::WIDTH_MAX, 'min' => 0, 'class' => 'model-coordinate']
])
->add('printZoneCoordinatesY', IntegerType::class, [
'label' => 'app.form.configurator.print_zone_coordinates_Y',
'attr' => ['max' => Model::WIDTH_MAX, 'min' => 0, 'class' => 'model-coordinate']
])
->add('scale', NumberType::class, [
'attr' => ['readonly' => true, 'class' => 'input-model-scale'],
'label' => 'app.form.configurator.scale',
'scale' => 15,
"required" => false
])
->add('printFormat', ChoiceType::class, [
'label' => 'app.form.configurator.print_format',
'choices' => [
Model::PRINT_FORMAT_PDF => Model::PRINT_FORMAT_PDF,
Model::PRINT_FORMAT_PNG => Model::PRINT_FORMAT_PNG,
Model::PRINT_FORMAT_JPG => Model::PRINT_FORMAT_JPG
]
])
->add('watermarkOnCartRendering', CheckboxType::class, [
'label' => 'app.form.configurator.watermark_on_cart_cendering',
])
->add('advanced', CheckboxType::class, [
'label' => 'app.form.configurator.advanced',
'help' => 'app.form.configurator.advanced_help',
'attr' => ['class' => 'help-text js-type-configurator']
])
->add('freeConfiguration', CheckboxType::class, [
'label' => 'app.form.configurator.free_configuration',
'help' => 'app.form.configurator.free_configuration_help',
'attr' => ['class' => 'help-text js-type-configurator']
])
->add('type', ChoiceType::class, [
'label' => 'app.form.configurator.model_type',
'choices' => [
'app.form.configurator.image_library' => types::TYPE_IMAGE_LIBRARY,
'app.form.configurator.image_upload' => types::TYPE_IMAGE_UPLOAD,
'app.form.configurator.text' => types::TYPE_TEXT,
],
'multiple' => true,
"expanded" => true,
])
->add('libraries', LibraryAutocompleteChoiceType::class, [
'placeholder' => 'app.ui.choose_an_option',
'required' => false,
'multiple' => true,
'label' => "app.ui.libraries"
])
->add('fonts', FontAutoCompleteChoiceType::class, [
'label' => 'app.form.configurator.fonts',
'required' => false,
'multiple' => true,
'placeholder' => "app.form.configurator.fonts",
])
->add('defaultFont', EntityType::class, [
'class' => Font::class,
'required' => false,
'label' => "app.form.configurator.default_font",
'choice_label' => 'name',
'placeholder' => 'app.form.configurator.choose_font'
])
->add('fontColors', FontColorAutoCompleteChoiceType::class, [
'label' => 'app.form.configurator.font_colors',
'required' => false,
'multiple' => true,
'placeholder' => "app.form.configurator.font_colors"
])
->add('defaultFontColor', EntityType::class, [
'class' => FontColor::class,
'label' => 'app.form.configurator.default_font_color',
'required' => false,
'choice_label' => function ($entity) {
return $entity->getTranslation()->getMetaTitle();
},
'placeholder' => 'app.form.configurator.choose_font_color'
])
->add('strokeColors', FontColorAutoCompleteChoiceType::class, [
'label' => 'app.form.configurator.stroke_colors',
'required' => false,
'multiple' => true,
'placeholder' => "app.form.configurator.stroke_colors"
])
->add('defaultStrokeColor', EntityType::class, [
'class' => FontColor::class,
'label' => 'app.form.configurator.default_stroke_color',
'required' => false,
'choice_label' => function ($entity) {
return $entity->getTranslation()->getMetaTitle();
},
'placeholder' => 'app.form.configurator.no_stroke_color'
])
->add('shadowColors', FontColorAutoCompleteChoiceType::class, [
'label' => 'app.form.configurator.shadow_colors',
'required' => false,
'multiple' => true,
'placeholder' => "app.form.configurator.shadow_colors"
])
->add('defaultShadowColor', EntityType::class, [
'class' => FontColor::class,
'label' => 'app.form.configurator.default_shadow_color',
'required' => false,
'choice_label' => function ($entity) {
return $entity->getTranslation()->getMetaTitle();
},
'placeholder' => 'app.form.configurator.no_shadow_color'
])
->add('textPersonalisation', CheckboxType::class, [
'label' => "app.form.configurator.allow_text_personalisation"
])
;
}
public function getBlockPrefix(): string
{
return 'app_configurator_model';
}
}