<?php
namespace Entrepreneurs\Bundle\Enseignant\Form;
use Entrepreneurs\Bundle\AppBundle\Propel\ActionHorsDesMurs;
use Entrepreneurs\Bundle\AppBundle\Propel\ActionHorsDesMursQuery;
use Entrepreneurs\Bundle\AppBundle\Propel\Civilite;
use Entrepreneurs\Bundle\AppBundle\Propel\Departement;
use Entrepreneurs\Bundle\AppBundle\Propel\DepartementQuery;
use Entrepreneurs\Bundle\AppBundle\Propel\Enseignant;
use Entrepreneurs\Bundle\AppBundle\Propel\Etablissement;
use Entrepreneurs\Bundle\AppBundle\Propel\EtablissementQuery;
use Entrepreneurs\Bundle\AppBundle\Propel\FonctionEnseignant;
use Entrepreneurs\Bundle\AppBundle\Propel\FonctionEnseignantQuery;
use Entrepreneurs\Bundle\AppBundle\Propel\PeriodeIntervention;
use Entrepreneurs\Bundle\AppBundle\Propel\PeriodeInterventionQuery;
use Entrepreneurs\Bundle\AppBundle\Propel\ProvenanceEnseignant;
use Entrepreneurs\Bundle\AppBundle\Propel\ProvenanceEnseignantQuery;
use Entrepreneurs\Bundle\AppBundle\Propel\TypeIntervention;
use Entrepreneurs\Bundle\AppBundle\Propel\TypeInterventionQuery;
use Entrepreneurs\Bundle\Enseignant\DTO\EpaDTO;
use Propel\Bundle\PropelBundle\Form\Type\ModelType;
use Propel\Runtime\ActiveQuery\Criteria;
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\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\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Validator\Constraints\Blank;
use Symfony\Component\Validator\Constraints\Email;
use Symfony\Component\Validator\Constraints\IsTrue;
use Symfony\Component\Validator\Constraints\Length;
use Symfony\Component\Validator\Constraints\NotBlank;
use Webmozart\Assert\Assert;
class QuestionnaireType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): FormBuilderInterface
{
$enseignant = $options['enseignant'];
$isFromSignUp = $options['isFromSignUp'];
/** @var ?EpaDTO $epaDTO */
$epaDTO = $options['epaDTO'];
Assert::nullOrIsInstanceOf($epaDTO, EpaDTO::class);
if (!$enseignant->getId()) {
if (!$isFromSignUp) {
$builder->add('compte_existe', ChoiceType::class, [
'label' => 'Avez-vous déjà un compte "enseignant" chez 100 000 entrepreneurs ?',
'choices' => [
'Non' => 'Non',
'Oui' => 'Oui',
],
'mapped' => false,
'expanded' => true,
'constraints' => new NotBlank(),
]);
}
$builder
->add('email', EmailType::class, [
'label' => 'Email',
'constraints' => [
new NotBlank(),
new Email([
'mode' => Email::VALIDATION_MODE_HTML5,
]),
],
'data' => $epaDTO?->enseignantDTO->email,
])
;
}
$builder
->add('civilite', ChoiceType::class, [
'label' => 'Civilité',
'choices' => array_flip(Civilite::getChoiceList()),
'constraints' => new NotBlank(),
'data' => in_array($epaDTO?->enseignantDTO->civility, Civilite::getChoiceList()) ? $epaDTO?->enseignantDTO->civility : null,
])
->add('nom', TextType::class, [
'label' => 'Nom',
'constraints' => new NotBlank(),
'data' => $epaDTO?->enseignantDTO->firstname,
])
->add('prenom', TextType::class, [
'label' => 'Prénom',
'constraints' => new NotBlank(),
'data' => $epaDTO?->enseignantDTO->lastname,
])
->add('telephone_1', TextType::class, [
'label' => 'Téléphone portable',
'constraints' => [
new NotBlank(),
new Length([
'min' => 10,
'max' => 20,
]),
],
'data' => $epaDTO?->enseignantDTO->phone,
])
->add('linkedin', TextType::class, [
'label' => 'LinkedIn',
'required' => false,
])
->add('etablissement', ModelType::class, [
'label' => 'Établissement',
'placeholder' => 'Veuillez entrer votre établissement, ville ou code postal',
'property' => 'nomEtablissementAvecVille',
'query' => EtablissementQuery::create()->leftJoinWithVille(),
'class' => Etablissement::class,
'constraints' => [
new NotBlank(),
],
'required' => true,
'multiple' => false,
'data' => $epaDTO?->etablissementDTO->etablissement,
])
->add('etablissement_non_reference', CheckboxType::class, [
'label' => 'Je ne trouve pas mon établissement, je contacte l\'association',
'required' => false,
])
->add('nom_etablissement_non_reference', TextType::class, [
'label' => 'Quel est le nom de votre établissement/structure ?',
'required' => true,
])
->add('departement_autre_structure', ModelType::class, [
'label' => 'Département de votre établissement/structure',
'placeholder' => 'Sélectionnez un département',
'class' => Departement::class,
'query' => DepartementQuery::create()->filterByActif(true)->orderByNumero()->filterByNumero('00', Criteria::NOT_EQUAL),
'required' => false,
'multiple' => false,
])
->add('fonction', ModelType::class, [
'label' => "Quelle est votre fonction dans l'établissement ?",
'placeholder' => 'Sélectionnez une fonction',
'class' => FonctionEnseignant::class,
'constraints' => new NotBlank(),
'query' => FonctionEnseignantQuery::create()->filterByActif(true),
])
->add('matiere', TextType::class, [
'label' => 'Quelle matière/domaine enseignez-vous ?',
'required' => false,
])
->add('periode_interventions', ModelType::class, [
'label' => "A quelle(s) période(s) de l'année scolaire envisagez-vous de faire intervenir 100 000 Entrepreneurs ?",
'class' => PeriodeIntervention::class,
'query' => PeriodeInterventionQuery::create()->filterByActif(true),
'multiple' => true,
'constraints' => new NotBlank(),
])
->add('type_interventions', ModelType::class, [
'label' => "Sur quelle thématique souhaiteriez-vous orienter le témoignage de l'entrepreneur",
'class' => TypeIntervention::class,
'multiple' => true,
'query' => TypeInterventionQuery::create()
->orderByPosition(),
'constraints' => new NotBlank(),
])
->add('nombre_classe_interessees', ChoiceType::class, [
'label' => 'Pour combien de classes ? (ou groupe si structure hors scolaire)',
'required' => true,
'placeholder' => '',
'choices' => [
'1' => '1',
'2' => '2',
'3' => '3',
'4' => '4',
'5' => '5',
'6' => '6',
'7' => '7',
'8' => '8',
'9' => '9',
'10 et plus' => '10 et plus',
],
'constraints' => new NotBlank(),
])
->add('equipement_visio', ChoiceType::class, [
'label' => 'Etes-vous équipé (e) dans votre classe pour réaliser des interventions en visioconférence ?',
'choices' => [
'Non' => 'Non',
'Oui' => 'Oui',
],
'placeholder' => '',
'constraints' => new NotBlank(),
])
->add('action_hors_des_murss', ModelType::class, [
'label' => "Etes-vous intéressé(e) pour faire sortir vos jeunes de l'établissement pour diverses actions",
'class' => ActionHorsDesMurs::class,
'multiple' => true,
'query' => ActionHorsDesMursQuery::create()->filterByActif(true),
'constraints' => new NotBlank(),
])
->add('autre_structure', ChoiceType::class, [
'label' => "Travaillez-vous avec d'autres structures sur le thème de l'orientation ou de l'entrepreneuriat ",
'choices' => [
'Non' => 'Non',
'Oui' => 'Oui',
],
'placeholder' => '',
'constraints' => new NotBlank(),
])
->add('nom_autre_structure', TextType::class, [
'label' => 'Si oui, lesquelles ?',
'required' => false,
])
->add('participer_association', ChoiceType::class, [
'label' => "Seriez-vous intéressé(e) pour participer à la communauté d’enseignants de l'association ?
(par exemple ponctuellement partager des bonnes pratiques et valorisant vos compétences pro, ... ) ",
'choices' => Enseignant::getParticipationCommunauteChoiceList(),
'required' => false,
'placeholder' => '',
])
;
if (!$enseignant->getId()) {
$builder
->add('provenance_enseignant', ModelType::class, [
'label' => 'Comment avez-vous connu 100 000 entrepreneurs ?',
'required' => false,
'placeholder' => 'Faites un choix',
'class' => ProvenanceEnseignant::class,
'data' => $epaDTO ? ProvenanceEnseignantQuery::create()->findOneByLabel('Partenaire') : null,
])
->add('provenance_precision', TextType::class, [
'label' => 'Précision',
'required' => false,
'attr' => ['placeholder' => "Précisez s'il vous plait"],
])
->add('provenance_commentaire', TextareaType::class, [
'label' => 'Précision',
'required' => false,
'data' => $epaDTO ? 'Entreprendre pour Apprendre' : null,
])
->add('reception_mailing_hebdo', CheckboxType::class, [
'label' => 'Je confirme que je souhaite recevoir des mails de la part de 100 000 entrepreneurs',
'required' => true,
'mapped' => false,
'constraints' => new IsTrue([
'message' => 'Vous devez accepter de recevoir des mails de la part de 100 000 entrepreneurs',
]),
])
->add('politique_confidentialite', CheckboxType::class, [
'required' => true,
'mapped' => false,
'constraints' => new IsTrue([
'message' => 'Vous devez accepter la politique de confidentialité de 100 000 entrepreneurs',
]),
])
;
}
$builder
->add('don', ChoiceType::class, [
'label' => "Accepteriez-vous de faire un don à l'association ?",
'required' => false,
'placeholder' => '',
'choices' => [
'Oui' => 'Oui',
'Non' => 'Non',
],
])
->add('commentaire', TextType::class, [
'label' => 'Auriez-vous des questions, suggestions ou commentaires pour améliorer notre action ?',
'required' => false,
])
->add('enregistrer', SubmitType::class, [
'label' => 'Valider',
])
;
$builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) {
$form = $event->getForm();
$data = $event->getData();
if (isset($data['etablissement_non_reference'])) {
$form
->add('etablissement', ModelType::class, [
'label' => 'Établissement',
'placeholder' => 'Veuillez entrer votre établissement, ville ou code postal',
'property' => 'nomEtablissementAvecVille',
'query' => EtablissementQuery::create()->leftJoinWithVille(),
'class' => Etablissement::class,
'required' => false,
'constraints' => new Blank(),
])
->add('nom_etablissement_non_reference', TextType::class, [
'label' => 'Quel est le nom de votre établissement/structure ?',
'required' => true,
'constraints' => new NotBlank(),
])
->add('departement_autre_structure', ModelType::class, [
'label' => 'Département de votre établissement/structure',
'placeholder' => 'Sélectionnez un département',
'class' => Departement::class,
'query' => DepartementQuery::create()->filterByActif(true)->orderByNumero()->filterByNumero('00', Criteria::NOT_EQUAL),
'required' => true,
'constraints' => new NotBlank(),
'multiple' => false,
])
;
}
});
return $builder;
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => Enseignant::class,
'isFromSignUp' => false,
'epaDTO' => EpaDTO::class,
]);
$resolver->setRequired(['enseignant']);
}
public function getBlockPrefix(): string
{
return 'inscription';
}
}