<?php
declare(strict_types=1);
namespace CoreBundle\Form\Areabrick;
use Pimcore\Model\DataObject\ContactFormRequest;
use Gregwar\CaptchaBundle\Type\CaptchaType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
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\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\Form\FormInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\Form\FormEvent;
class ContactForm extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options = ['allow_extra_fields' => true]): void
{
$builder
->add('gender', ChoiceType::class, [
'label' => 'Anrede',
'choices' => [
'Herr' => 'male',
'Frau' => 'female',
'Divers' => 'divers'
],
'choice_translation_domain' => false
])
->add('firstname', TextType::class, [
'label' => 'Vorname'
])
->add('lastname', TextType::class, [
'label' => 'Nachname'
])
->add('title', TextType::class, [
'label' => 'Titel',
'required' => false
])
->add('street', TextType::class, [
'label' => 'Straße',
'required' => false
])
->add('plz', TextType::class, [
'label' => 'Postleitzahl',
'required' => false
])
->add('city', TextType::class, [
'label' => 'Stadt',
'required' => false
])
->add('phone', TextType::class, [
'label' => 'Telefon',
'required' => false
])
->add('email', EmailType::class, [
'label' => 'Email'
])
->add('topic', ChoiceType::class, [
'label' => 'Bitte wählen Sie ein Thema:',
'choices' => $options['form_topic_selection'] ?: [],
'choice_translation_domain' => false,
'required' => true
])
->add('message', TextareaType::class, [
'label' => 'Ihre Nachricht',
'required' => true
])
->add('upload', FileType::class, [
'multiple' => true,
'label' => 'Dateiupload',
'required' => false,
/*'constraints' => [
new File([
'maxSize' => '10M',
'maxSizeMessage' => 'hallo'
])
]*/
])
->add('confirm', CheckboxType::class, [
'label' => false])
->add('code', HiddenType::class, [
'data' => 1,
])
->add('captcha', CaptchaType::class)
->add('submit', SubmitType::class, [
'label' => 'einsenden',
'attr' => [
'class' => 'button btn-default'
]
]);
$formModifier = function (FormInterface $form, $type = null) {
};
$builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) use ($formModifier) {
$data = $event->getData();
$form = $event->getForm();
$options = $event->getForm()->getConfig()->getOptions();
$form->remove('submit');
if ($data['topic'] == 'onlineshop') {
$form
->add('orderNumber', TextType::class, [
'label' => 'Bestellnummer',
'required' => false
])
->add('customerNumber', TextType::class, [
'label' => 'Kundennummer',
'required' => false
])
->add('retoure', TextType::class, [
'label' => 'Rücksendung/Versand',
'required' => false
]);
}
if ($data['topic'] == 'produktreklamation') {
$form
->add('product', TextType::class, [
'label' => 'Produktname',
'required' => true
])
->add('bestBeforeDate', TextType::class, [
'label' => 'MHD',
'required' => true
])
->add('lot_number', TextType::class, [
'label' => 'LOT Nummer',
'required' => false
])
->add('purchased', TextType::class, [
'label' => 'Gekauft bei',
'required' => false
])
->add('available', CheckboxType::class, [
'label' => 'Produkt noch vorhanden',
'required' => false
]);
}
if ($data['topic'] == 'produktverfuegbarkeit' && !empty($options['form_product_selection'])) {
/** Disabled. @See: https://blackbit.atlassian.net/browse/DEVELEY-132 */
/*$form
->add('product', ChoiceType::class, [
'label' => 'Welches Produkt suchen Sie',
'choices' => $options['form_product_selection'],
'choice_translation_domain' => false,
'required' => false
]);*/
}
$form
->add('captcha', CaptchaType::class)
->add('submit', SubmitType::class, [
'label' => 'einsenden',
'attr' => [
'class' => 'button btn-default'
]
]);
});
$builder->get('topic')->addEventListener(
FormEvents::PRE_SUBMIT,
function (FormEvent $event) use ($formModifier) {
$data = $event->getForm()->getData();
if ($data == 'Online-Shop') {
$formModifier($event->getForm()->getParent(), $data);
}
});
}
public function getBlockPrefix(): string
{
return '';
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver
->setDefined(['form_product_selection', 'form_topic_selection'])
->setDefaults(['data_class' => ContactFormRequest::class]);
}
}