<?php
namespace App\Form\Type;
use App\Helpers\HelperFunctions;
use Karser\Recaptcha3Bundle\Form\Recaptcha3Type;
use Karser\Recaptcha3Bundle\Validator\Constraints\Recaptcha3;
use Pimcore\Model\Document;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
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\IsTrue;
use Symfony\Component\Validator\Constraints\NotBlank;
use Symfony\Component\Validator\Constraints\Regex;
class ContactType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$document = key_exists('document', $options) ? $options['document'] : null;
$aszf = null;
$adny = null;
if ($document instanceof Document) {
$aszf = HelperFunctions::getDefaultProperty($document, 'defaultAszfPage');
$adny = HelperFunctions::getDefaultProperty($document, 'defaultAdnyPage');
}
$aszfLabel = sprintf('Elfogadom a %sFelhasználási feltételeket%s',
$aszf ? "<a class=\"contact-checkbox-link\" href=\"$aszf\">" : '',
$aszf ? '</a>' : ''
);
$adnyLabel = sprintf('Megismertem és elfogadom az %sAdatkezelési nyilatkozatot%s',
$adny ? "<a class=\"contact-checkbox-link\" href=\"$adny\">" : '',
$adny ? '</a>' : ''
);
$builder
->add('lastname', TextType::class, [
'label' => 'Vezetéknév',
'required' => true,
'constraints' => [
new NotBlank([
'normalizer' => fn($value) => trim(strip_tags($value)),
'message' => 'A vezetéknév nem lehet üres!'
])
]
])
->add('firstname', TextType::class, [
'label' => 'Keresztnév',
'required' => true,
'constraints' => [
new NotBlank([
'normalizer' => fn($value) => trim(strip_tags($value)),
'message' => 'A keresztnév nem lehet üres!'
])
]
])
->add('email', EmailType::class, [
'label' => 'E-mail',
'required' => true,
'constraints' => [
new NotBlank([
'normalizer' => fn($value) => trim(strip_tags($value)),
'message' => 'Az email nem lehet üres!'
])
]
])
->add('subject', TextType::class, [
'label' => 'Tárgy',
'constraints' => []
])
->add('mobile', TextType::class, [
// 'attr' => [
// 'class' => 'address-phonenumber-input',
// ],
'label' => 'Telefonszám',
'constraints' => [
new Regex([
'normalizer' => fn($value) => trim(strip_tags($value)),
'pattern' => '/^\+36 (1|[2-9]\d) \d{3} \d{3,4}$/',
'message' => 'A megadott telefonszám nem megfelelő! (+36 20 123 4567)'
])
]
])
->add('message', TextareaType::class, [
'label' => 'Üzenet',
'required' => true,
'constraints' => [
new NotBlank([
'normalizer' => fn($value) => trim(strip_tags($value)),
'message' => 'Az üzenet nem lehet üres!'
])
]
])
->add('aszf', ContactCheckboxType::class, [
'label' => $aszfLabel,
'label_html' => true,
'required' => true,
'mapped' => false,
'constraints' => [
new IsTrue([
'message' => 'Felhasználási feltételek elfogadása kötelező!'
])]
])
->add('nyilatkozat', ContactCheckboxType::class, [
'label' => $adnyLabel,
'required' => true,
'label_html' => true,
'mapped' => false,
'constraints' => [
new IsTrue([
'message' => 'Adatkezelési nyilatkozat elfogadása kötelező!'
])
]
])
->add('submit', SubmitType::class, [
'label' => 'Elküldés',
])
->add('captcha', Recaptcha3Type::class, [
'constraints' => new Recaptcha3([
'message' => 'karser_recaptcha3.message',
'messageMissingValue' => 'karser_recaptcha3.message_missing_value',
]),
'locale' => 'hu'
]);
}
public function configureOptions(OptionsResolver $resolver): void
{
parent::configureOptions($resolver);
$resolver->setDefaults([
'csrf_protection' => true,
'allow_extra_fields' => false,
'document' => null
]);
}
}