<?php
namespace App\Form\Survey;
use App\Entity\Survey\Survey;
use App\Entity\Survey\SurveyResult;
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\CollectionType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
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\Extension\Core\Type\TimeType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Validator\Constraints\NotBlank;
class SurveyResultFormType 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'
],
'dateTime' => [
'class' => 'w-full pl-8 pr-2 text-sm text-gray-700 placeholder-gray-600 bg-gray-100 border-0 rounded-md dark:placeholder-gray-500 dark:focus:shadow-outline-gray dark:focus:placeholder-gray-600 dark:bg-gray-700 dark:text-gray-200 focus:placeholder-gray-500 focus:bg-white focus:border-purple-300 focus:outline-none focus:shadow-outline-purple form-input'
],
'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'
]
]
];
$disabled = $options['formStatus'] === 'view' ? true : false;
$builder
->add('id', IntegerType::class, [
'label' => 'form.surveyResult.id.label',
'label_attr' => $labelAttr,
'disabled' => $disabled,
'attr' => $inputAttrCollection['text']
])
->add('survey', EntityType::class, [
'label' => 'form.surveyResult.survey.label',
'label_attr' => $labelAttr,
'class' => Survey::class,
'choice_label' => function(?Survey $survey) {
return sprintf('[%d] %s', $survey->getId(), $survey->getTitle());
},
'disabled' => $disabled,
'attr' => $inputAttrCollection['choice']
])
->add('userIp', TextType::class, [
'label' => 'form.surveyResult.userIp.label',
'label_attr' => $labelAttr,
'attr' => $inputAttrCollection['text'],
'disabled' => $disabled
])
->add('userAgent', TextType::class, [
'label' => 'form.surveyResult.userAgent.label',
'label_attr' => $labelAttr,
'attr' => $inputAttrCollection['text'],
'disabled' => $disabled
])
->add('user', EntityType::class, [
'label' => 'form.surveyResult.user.label',
'label_attr' => $labelAttr,
'required' => false,
'class' => User::class,
'choice_label' => function(?User $user) {
return sprintf('[%d] %s %s (%s)', $user->getId(), $user->getLastname(), $user->getFirstname(), $user->getEmail());
},
'disabled' => $disabled,
'attr' => $inputAttrCollection['choice']
])
->add('email', EmailType::class, [
'label' => 'form.surveyResult.email.label',
'label_attr' => $labelAttr,
'attr' => $inputAttrCollection['text'],
'disabled' => $disabled
])
->add('travelTime', TimeType::class, [
'label' => 'form.surveyResult.travelTime.label',
'label_attr' => $labelAttr,
'input' => 'timestamp',
'with_seconds' => true,
'disabled' => $disabled,
'model_timezone' => 'UTC'
])
->add('progress', NumberType::class, [
'label' => 'form.surveyResult.progress.label',
'label_attr' => $labelAttr,
'attr' => $inputAttrCollection['text'],
'disabled' => $disabled
])
->add('surveyResultData', CollectionType::class, [
'label' => 'form.surveyResult.surveyResultData.label',
'label_attr' => $labelAttr,
'entry_type' => SurveyResultDataFormType::class
])
->add('delete', ButtonType::class, [
'attr' => $inputAttrCollection['button']['delete'],
'label' => 'form.surveyResult.button.delete.label'
])
->add('back', ButtonType::class, [
'attr' => $inputAttrCollection['button']['back'],
'label' => 'form.surveyResult.button.back.label'
])
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => SurveyResult::class,
'formStatus' => null
]);
}
}