<?php
namespace App\Form;
use App\Entity\Contributor;
use App\Entity\Media;
use App\Service\Helpers;
use App\Service\SiteConfig;
use MeteoConcept\HCaptchaBundle\Form\HCaptchaType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\FileType;
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;
class ContributorType extends AbstractType
{
public function __construct(
private SiteConfig $config,
private Helpers $helpers,
)
{}
public function buildForm(FormBuilderInterface $builder, array $options): void
{
if($this->config->isField1()) $builder
->add('field1', TextType::class, [
'required' => $this->config->isField1Required() ?? false,
'attr' => [
'class' =>'form-control valid m-1',
'placeholder' => $this->config->getField1Label()
],
]);
if($this->config->isField2()) $builder
->add('field2', TextType::class, [
'required' => $this->config->isField2Required() ?? false,
'attr' => [
'class' =>'form-control valid m-1',
'placeholder' => $this->config->getField2Label()
],
]);
if($this->config->isField3()) $builder
->add('field3', TextType::class, [
'required' => $this->config->isField3Required() ?? false,
'attr' => [
'class' =>'form-control valid m-1',
'placeholder' => $this->config->getField3Label()
],
]);
if($this->config->isField4()) $builder
->add('field4', TextType::class, [
'required' => $this->config->isField4Required() ?? false,
'attr' => [
'class' =>'form-control valid m-1',
'placeholder' => $this->config->getField4Label()
],
]);
if($this->config->isField5()) $builder
->add('field5', TextType::class, [
'label' => false,
'required' => $this->config->isField5Required() ?? false,
'attr' => [
'class' =>'form-control valid m-1',
'placeholder' => $this->config->getField5Label()
],
]);
if($this->config->isField6()) $builder
->add('field6', TextType::class, [
'required' => $this->config->isField6Required() ?? false,
'attr' => [
'class' =>'form-control valid m-1',
'placeholder' => $this->config->getField6Label()
],
]);
if($this->config->isField7()) $builder
->add('field7', TextType::class, [
'label' => false,
'required' => $this->config->isField7Required() ?? false,
'attr' => [
'class' =>'form-control valid m-1',
'placeholder' => $this->config->getField7Label()
],
]);
if($this->config->isTextarea()) $builder
->add('textarea', TextareaType::class, [
'label' => $this->config->isTextareaRequired() ?? false,
'required' => true,
'attr' => [
'class' =>'form-control valid m-1',
'placeholder' => $this->config->getTextareaLabel()
],
]);
if($this->config->isMedia()) $builder->add('media', FileType::class,[
'label' => false,
'multiple' => true,
'mapped' => false,
'required' => false,
'help_html' => true,
'help' => $this->helpers->getMediaHelp(),
'attr' => [
'accept' => implode(',', Media::UPLOAD_MIMES),
],
'row_attr' => ['class' => 'mb-3'],
]);
if($this->config->isCaptcha()) $builder->add('captcha', HCaptchaType::class, [
'label' => 'Anti-bot test',
// optionally: use a different site key than the default one:
'hcaptcha_site_key' => 'f8a3c2c2-4a6c-40d4-944f-16bcc5bae7d2',
]);
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => Contributor::class
]);
}
}