<?php
namespace DcSiteBundle\Form;
use CoreBundle\Entity\Forms;
use CoreBundle\Services\FileUploader;
use DcSiteBundle\Entity\VacancyForm;
use DcSiteBundle\Form\Transformer\VacancyDataFormTransformer;
use DcSiteBundle\Form\Transformer\VacancyIdToEntityTransformer;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\TelType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Contracts\Translation\TranslatorInterface;
class VacancyType extends AbstractType
{
/**
* @var VacancyIdToEntityTransformer
*/
private $entityTransformer;
/**
* @var FileUploader
*/
private $uploader;
/**
* VacancyType constructor.
* @param VacancyIdToEntityTransformer $entityTransformer
* @param FileUploader $uploader
*/
public function __construct(VacancyIdToEntityTransformer $entityTransformer, FileUploader $uploader)
{
$this->entityTransformer = $entityTransformer;
$this->uploader = $uploader;
}
/**
* @param FormBuilderInterface $builder
* @param array $options
* @return int|void
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
/** @var TranslatorInterface $Translator */
$Translator = $options['translator'];
$builder
->add('name', TextType::class, [
'label' => false,
'attr' => [
'class' => 'vacancy-name',
'maxlength' => '50',
'pattern' => "\S([a-zA-ZА-Яа-яёЁЇїІіЄєҐґ\s]{1,})$",
'title' => $Translator->trans('form.warning', [], 'dc_base'),
'placeholder' => $Translator->trans('form.name', [], 'dc_base')
],
])
->add('email', EmailType::class, [
'label' => false,
'required' => false,
'attr' => [
'class' => 'vacancy-email',
'placeholder' => 'E-mail',
],
])
->add('privacy', CheckboxType::class, [
'label' => false,
'required' => false,
'mapped' => false,
'attr' => [
'class' => 'js-privacy'
]
])
->add('phone', TelType::class, [
'label' => false,
'attr' => [
'class' => 'vacancy-phone phone form-control',
'placeholder' => $Translator->trans('form.phone', [], 'dc_base')
],
])
->add('cv', FileType::class, [
'label' => false,
'attr' => [
'class' => 'vacancy-cv',
],
])
->add('vacancy', HiddenType::class, [
'required' => false,
'attr' => [
'class' => 'vacancy-vacancy',
],
])
;
$builder->get('vacancy')->addModelTransformer($this->entityTransformer);
if ($options['vacancy']) {
$builder->get('vacancy')->setData($options['vacancy']);
}
}
/**
* @param OptionsResolver $resolver
*/
public function configureOptions(OptionsResolver $resolver)
{
parent::configureOptions($resolver);
$resolver->setDefaults([
'data_class' => VacancyForm::class,
])
->setRequired('translator')
->setDefined('vacancy')
->setDefined('dealer')
;
}
}