<?php
namespace App\Form\Technic;
use App\Entity\Technic;
use App\Entity\User\User;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\ButtonType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Validator\Constraints\Length;
use Symfony\Component\Validator\Constraints\NotNull;
class TechnicFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$labelAttr = [
'class' => 'text-gray-700 dark:text-gray-400'
];
$inputAttrCollection = [
'text' => [
'class' => 'block w-full mt-1 text-sm dark:text-gray-300 dark:border-gray-600 dark:bg-gray-700 form-textarea focus:border-purple-400 focus:outline-none focus:shadow-outline-purple dark:focus:shadow-outline-gray'
],
'choice' => [
'class' => 'block w-full mt-1 text-sm dark:text-gray-300 dark:border-gray-600 dark:bg-gray-700 form-select focus:border-purple-400 focus:outline-none focus:shadow-outline-purple dark:focus:shadow-outline-gray'
],
'button' => [
'delete' => [
'class' => 'buttonDelete block w-full py-3 font-medium leading-5 text-white transition-colors duration-150 bg-red-600 border border-transparent rounded-lg active:bg-red-600 hover:bg-red-700 focus:outline-none focus:shadow-outline-red'
],
'back' => [
'class' => 'buttonBack block w-full py-3 font-medium leading-5 text-white transition-colors duration-150 bg-purple-600 border border-transparent rounded-lg active:bg-purple-600 hover:bg-purple-700 focus:outline-none focus:shadow-outline-purple'
],
'edit' => [
'class' => 'buttonEdit block w-full py-3 font-medium leading-5 text-white transition-colors duration-150 bg-green-600 border border-transparent rounded-lg active:bg-green-600 hover:bg-green-700 focus:outline-none focus:shadow-outline-green'
],
'save' => [
'class' => 'block w-full py-3 font-medium leading-5 text-white transition-colors duration-150 bg-green-600 border border-transparent rounded-lg active:bg-green-600 hover:bg-green-700 focus:outline-none focus:shadow-outline-green'
],
'cancel' => [
'class' => 'block w-full py-3 font-medium leading-5 text-white transition-colors duration-150 bg-red-600 border border-transparent rounded-lg active:bg-red-600 hover:bg-red-700 focus:outline-none focus:shadow-outline-red',
'@click' => "openModal"
]
]
];
$disabled = $options['formStatus'] === 'view' ? true : false;
$builder
->add('personalNumber', TextType::class, [
'disabled' => $disabled,
'attr' => $inputAttrCollection['text'],
'label' => 'form.technic.personalNumber.label',
'label_attr' => $labelAttr,
'constraints' => [
new Length([
'max' => 25,
]),
],
])
->add('brand', TextType::class, [
'disabled' => $disabled,
'attr' => $inputAttrCollection['text'],
'label' => 'form.technic.brand.label',
'label_attr' => $labelAttr,
'constraints' => [
new Length([
'max' => 255,
]),
],
])
->add('model', TextType::class, [
'disabled' => $disabled,
'attr' => $inputAttrCollection['text'],
'label' => 'form.technic.model.label',
'label_attr' => $labelAttr,
'constraints' => [
new Length([
'max' => 255,
]),
],
])
->add('params', TextareaType::class, [
'disabled' => $disabled,
'attr' => $inputAttrCollection['text'],
'label' => 'form.technic.params.label',
'label_attr' => $labelAttr,
'constraints' => [
new Length([
'max' => 2048,
]),
],
])
->add('type', ChoiceType::class, [
'disabled' => $disabled,
'attr' => $inputAttrCollection['choice'],
'choices' => [
array_flip( Technic::TYPES)
],
'constraints' => [
new NotNull(),
],
'label' => 'form.technic.type.label',
'label_attr' => $labelAttr
])
->add('position', ChoiceType::class, [
'disabled' => $disabled,
'attr' => $inputAttrCollection['choice'],
'choices' => [
array_flip( Technic::DEPARTMENTS)
],
'label' => 'form.technic.position.label',
'label_attr' => $labelAttr
])
->add('user', EntityType::class, [
'disabled' => $disabled,
'class' => User::class,
'choice_label' => function(?User $user) {
return sprintf('%s %s', $user->getLastname(), $user->getFirstname());
},
'attr' => $inputAttrCollection['choice'],
'label' => 'form.technic.user.label',
'label_attr' => $labelAttr,
])
->add('networkName', TextType::class, [
'disabled' => $disabled,
'attr' => $inputAttrCollection['text'],
'label' => 'form.technic.networkName.label',
'label_attr' => $labelAttr,
'constraints' => [
new Length([
'max' => 50,
]),
],
])
->add('status', ChoiceType::class, [
'disabled' => $disabled,
'attr' => $inputAttrCollection['choice'],
'choices' => [
array_flip( Technic::STATUSES)
],
'constraints' => [
new NotNull(),
],
'label' => 'form.technic.status.label',
'label_attr' => $labelAttr
])
->add('comment', TextareaType::class, [
'disabled' => $disabled,
'attr' => $inputAttrCollection['text'],
'label' => 'form.technic.comment.label',
'label_attr' => $labelAttr,
'constraints' => [
new Length([
'max' => 2048,
]),
],
]);
if ($options['formStatus'] === 'view') {
$builder
->add('edit', ButtonType::class, [
'attr' => $inputAttrCollection['button']['edit'],
'label' => 'form.technic.button.edit.label'
])
->add('delete', ButtonType::class, [
'attr' => $inputAttrCollection['button']['delete'],
'label' => 'form.technic.button.delete.label'
])
->add('back', ButtonType::class, [
'attr' => $inputAttrCollection['button']['back'],
'label' => 'form.technic.button.back.label'
])
;
}
else {
$builder
->add('save', SubmitType::class, [
'attr' => $inputAttrCollection['button']['save'],
'label' => 'form.technic.button.save.label'
])
->add('cancel', ButtonType::class, [
'attr' => $inputAttrCollection['button']['cancel'],
'label' => 'form.technic.button.cancel.label'
])
;
}
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Technic::class,
'formStatus' => null
]);
}
}