src/Entrepreneurs/Bundle/Enseignant/Form/QuestionnaireType.php line 42

Open in your IDE?
  1. <?php
  2. namespace Entrepreneurs\Bundle\Enseignant\Form;
  3. use Entrepreneurs\Bundle\AppBundle\Propel\ActionHorsDesMurs;
  4. use Entrepreneurs\Bundle\AppBundle\Propel\ActionHorsDesMursQuery;
  5. use Entrepreneurs\Bundle\AppBundle\Propel\Civilite;
  6. use Entrepreneurs\Bundle\AppBundle\Propel\Departement;
  7. use Entrepreneurs\Bundle\AppBundle\Propel\DepartementQuery;
  8. use Entrepreneurs\Bundle\AppBundle\Propel\Enseignant;
  9. use Entrepreneurs\Bundle\AppBundle\Propel\Etablissement;
  10. use Entrepreneurs\Bundle\AppBundle\Propel\EtablissementQuery;
  11. use Entrepreneurs\Bundle\AppBundle\Propel\FonctionEnseignant;
  12. use Entrepreneurs\Bundle\AppBundle\Propel\FonctionEnseignantQuery;
  13. use Entrepreneurs\Bundle\AppBundle\Propel\PeriodeIntervention;
  14. use Entrepreneurs\Bundle\AppBundle\Propel\PeriodeInterventionQuery;
  15. use Entrepreneurs\Bundle\AppBundle\Propel\ProvenanceEnseignant;
  16. use Entrepreneurs\Bundle\AppBundle\Propel\ProvenanceEnseignantQuery;
  17. use Entrepreneurs\Bundle\AppBundle\Propel\TypeIntervention;
  18. use Entrepreneurs\Bundle\AppBundle\Propel\TypeInterventionQuery;
  19. use Entrepreneurs\Bundle\Enseignant\DTO\EpaDTO;
  20. use Propel\Bundle\PropelBundle\Form\Type\ModelType;
  21. use Propel\Runtime\ActiveQuery\Criteria;
  22. use Symfony\Component\Form\AbstractType;
  23. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  24. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  25. use Symfony\Component\Form\Extension\Core\Type\EmailType;
  26. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  27. use Symfony\Component\Form\Extension\Core\Type\TextareaType;
  28. use Symfony\Component\Form\Extension\Core\Type\TextType;
  29. use Symfony\Component\Form\FormBuilderInterface;
  30. use Symfony\Component\Form\FormEvent;
  31. use Symfony\Component\Form\FormEvents;
  32. use Symfony\Component\OptionsResolver\OptionsResolver;
  33. use Symfony\Component\Validator\Constraints\Blank;
  34. use Symfony\Component\Validator\Constraints\Email;
  35. use Symfony\Component\Validator\Constraints\IsTrue;
  36. use Symfony\Component\Validator\Constraints\Length;
  37. use Symfony\Component\Validator\Constraints\NotBlank;
  38. use Webmozart\Assert\Assert;
  39. class QuestionnaireType extends AbstractType
  40. {
  41.     public function buildForm(FormBuilderInterface $builder, array $options): FormBuilderInterface
  42.     {
  43.         $enseignant $options['enseignant'];
  44.         $isFromSignUp $options['isFromSignUp'];
  45.         /** @var ?EpaDTO $epaDTO */
  46.         $epaDTO $options['epaDTO'];
  47.         Assert::nullOrIsInstanceOf($epaDTOEpaDTO::class);
  48.         if (!$enseignant->getId()) {
  49.             if (!$isFromSignUp) {
  50.                 $builder->add('compte_existe'ChoiceType::class, [
  51.                     'label' => 'Avez-vous déjà un compte "enseignant" chez 100 000 entrepreneurs ?',
  52.                     'choices' => [
  53.                         'Non' => 'Non',
  54.                         'Oui' => 'Oui',
  55.                     ],
  56.                     'mapped' => false,
  57.                     'expanded' => true,
  58.                     'constraints' => new NotBlank(),
  59.                 ]);
  60.             }
  61.             $builder
  62.                 ->add('email'EmailType::class, [
  63.                     'label' => 'Email',
  64.                     'constraints' => [
  65.                         new NotBlank(),
  66.                         new Email([
  67.                             'mode' => Email::VALIDATION_MODE_HTML5,
  68.                         ]),
  69.                     ],
  70.                     'data' => $epaDTO?->enseignantDTO->email,
  71.                 ])
  72.             ;
  73.         }
  74.         $builder
  75.             ->add('civilite'ChoiceType::class, [
  76.                 'label' => 'Civilité',
  77.                 'choices' => array_flip(Civilite::getChoiceList()),
  78.                 'constraints' => new NotBlank(),
  79.                 'data' => in_array($epaDTO?->enseignantDTO->civilityCivilite::getChoiceList()) ? $epaDTO?->enseignantDTO->civility null,
  80.             ])
  81.             ->add('nom'TextType::class, [
  82.                 'label' => 'Nom',
  83.                 'constraints' => new NotBlank(),
  84.                 'data' => $epaDTO?->enseignantDTO->firstname,
  85.             ])
  86.             ->add('prenom'TextType::class, [
  87.                 'label' => 'Prénom',
  88.                 'constraints' => new NotBlank(),
  89.                 'data' => $epaDTO?->enseignantDTO->lastname,
  90.             ])
  91.             ->add('telephone_1'TextType::class, [
  92.                 'label' => 'Téléphone portable',
  93.                 'constraints' => [
  94.                     new NotBlank(),
  95.                     new Length([
  96.                         'min' => 10,
  97.                         'max' => 20,
  98.                     ]),
  99.                 ],
  100.                 'data' => $epaDTO?->enseignantDTO->phone,
  101.             ])
  102.             ->add('linkedin'TextType::class, [
  103.                 'label' => 'LinkedIn',
  104.                 'required' => false,
  105.             ])
  106.             ->add('etablissement'ModelType::class, [
  107.                 'label' => 'Établissement',
  108.                 'placeholder' => 'Veuillez entrer votre établissement, ville ou code postal',
  109.                 'property' => 'nomEtablissementAvecVille',
  110.                 'query' => EtablissementQuery::create()->leftJoinWithVille(),
  111.                 'class' => Etablissement::class,
  112.                 'constraints' => [
  113.                     new NotBlank(),
  114.                 ],
  115.                 'required' => true,
  116.                 'multiple' => false,
  117.                 'data' => $epaDTO?->etablissementDTO->etablissement,
  118.             ])
  119.             ->add('etablissement_non_reference'CheckboxType::class, [
  120.                 'label' => 'Je ne trouve pas mon établissement, je contacte l\'association',
  121.                 'required' => false,
  122.             ])
  123.             ->add('nom_etablissement_non_reference'TextType::class, [
  124.                 'label' => 'Quel est le nom de votre établissement/structure ?',
  125.                 'required' => true,
  126.             ])
  127.             ->add('departement_autre_structure'ModelType::class, [
  128.                 'label' => 'Département de votre établissement/structure',
  129.                 'placeholder' => 'Sélectionnez un département',
  130.                 'class' => Departement::class,
  131.                 'query' => DepartementQuery::create()->filterByActif(true)->orderByNumero()->filterByNumero('00'Criteria::NOT_EQUAL),
  132.                 'required' => false,
  133.                 'multiple' => false,
  134.             ])
  135.             ->add('fonction'ModelType::class, [
  136.                 'label' => "Quelle est votre fonction dans l'établissement ?",
  137.                 'placeholder' => 'Sélectionnez une fonction',
  138.                 'class' => FonctionEnseignant::class,
  139.                 'constraints' => new NotBlank(),
  140.                 'query' => FonctionEnseignantQuery::create()->filterByActif(true),
  141.             ])
  142.             ->add('matiere'TextType::class, [
  143.                 'label' => 'Quelle matière/domaine enseignez-vous ?',
  144.                 'required' => false,
  145.             ])
  146.             ->add('periode_interventions'ModelType::class, [
  147.                 'label' => "A quelle(s) période(s) de l'année scolaire envisagez-vous de faire intervenir 100 000 Entrepreneurs ?",
  148.                 'class' => PeriodeIntervention::class,
  149.                 'query' => PeriodeInterventionQuery::create()->filterByActif(true),
  150.                 'multiple' => true,
  151.                 'constraints' => new NotBlank(),
  152.             ])
  153.             ->add('type_interventions'ModelType::class, [
  154.                 'label' => "Sur quelle thématique souhaiteriez-vous orienter le témoignage de l'entrepreneur",
  155.                 'class' => TypeIntervention::class,
  156.                 'multiple' => true,
  157.                 'query' => TypeInterventionQuery::create()
  158.                     ->orderByPosition(),
  159.                 'constraints' => new NotBlank(),
  160.             ])
  161.             ->add('nombre_classe_interessees'ChoiceType::class, [
  162.                 'label' => 'Pour combien de classes ? (ou groupe si structure hors scolaire)',
  163.                 'required' => true,
  164.                 'placeholder' => '',
  165.                 'choices' => [
  166.                     '1' => '1',
  167.                     '2' => '2',
  168.                     '3' => '3',
  169.                     '4' => '4',
  170.                     '5' => '5',
  171.                     '6' => '6',
  172.                     '7' => '7',
  173.                     '8' => '8',
  174.                     '9' => '9',
  175.                     '10 et plus' => '10 et plus',
  176.                 ],
  177.                 'constraints' => new NotBlank(),
  178.             ])
  179.             ->add('equipement_visio'ChoiceType::class, [
  180.                 'label' => 'Etes-vous équipé (e) dans votre classe pour réaliser des interventions en visioconférence ?',
  181.                 'choices' => [
  182.                     'Non' => 'Non',
  183.                     'Oui' => 'Oui',
  184.                 ],
  185.                 'placeholder' => '',
  186.                 'constraints' => new NotBlank(),
  187.             ])
  188.             ->add('action_hors_des_murss'ModelType::class, [
  189.                 'label' => "Etes-vous intéressé(e) pour faire sortir vos jeunes de l'établissement pour diverses actions",
  190.                 'class' => ActionHorsDesMurs::class,
  191.                 'multiple' => true,
  192.                 'query' => ActionHorsDesMursQuery::create()->filterByActif(true),
  193.                 'constraints' => new NotBlank(),
  194.             ])
  195.             ->add('autre_structure'ChoiceType::class, [
  196.                 'label' => "Travaillez-vous avec d'autres structures sur le thème de l'orientation ou de l'entrepreneuriat ",
  197.                 'choices' => [
  198.                     'Non' => 'Non',
  199.                     'Oui' => 'Oui',
  200.                 ],
  201.                 'placeholder' => '',
  202.                 'constraints' => new NotBlank(),
  203.             ])
  204.             ->add('nom_autre_structure'TextType::class, [
  205.                 'label' => 'Si oui, lesquelles ?',
  206.                 'required' => false,
  207.             ])
  208.             ->add('participer_association'ChoiceType::class, [
  209.                 'label' => "Seriez-vous intéressé(e) pour participer à la communauté d’enseignants de l'association ?
  210.                  (par exemple ponctuellement partager des bonnes pratiques et valorisant vos compétences pro, ... ) ",
  211.                 'choices' => Enseignant::getParticipationCommunauteChoiceList(),
  212.                 'required' => false,
  213.                 'placeholder' => '',
  214.             ])
  215.         ;
  216.         if (!$enseignant->getId()) {
  217.             $builder
  218.                 ->add('provenance_enseignant'ModelType::class, [
  219.                     'label' => 'Comment avez-vous connu 100 000 entrepreneurs ?',
  220.                     'required' => false,
  221.                     'placeholder' => 'Faites un choix',
  222.                     'class' => ProvenanceEnseignant::class,
  223.                     'data' => $epaDTO ProvenanceEnseignantQuery::create()->findOneByLabel('Partenaire') : null,
  224.                 ])
  225.                 ->add('provenance_precision'TextType::class, [
  226.                     'label' => 'Précision',
  227.                     'required' => false,
  228.                     'attr' => ['placeholder' => "Précisez s'il vous plait"],
  229.                 ])
  230.                 ->add('provenance_commentaire'TextareaType::class, [
  231.                     'label' => 'Précision',
  232.                     'required' => false,
  233.                     'data' => $epaDTO 'Entreprendre pour Apprendre' null,
  234.                 ])
  235.                 ->add('reception_mailing_hebdo'CheckboxType::class, [
  236.                     'label' => 'Je confirme que je souhaite recevoir des mails de la part de 100 000 entrepreneurs',
  237.                     'required' => true,
  238.                     'mapped' => false,
  239.                     'constraints' => new IsTrue([
  240.                         'message' => 'Vous devez accepter de recevoir des mails de la part de 100 000 entrepreneurs',
  241.                     ]),
  242.                 ])
  243.                 ->add('politique_confidentialite'CheckboxType::class, [
  244.                     'required' => true,
  245.                     'mapped' => false,
  246.                     'constraints' => new IsTrue([
  247.                         'message' => 'Vous devez accepter la politique de confidentialité de 100 000 entrepreneurs',
  248.                     ]),
  249.                 ])
  250.             ;
  251.         }
  252.         $builder
  253.             ->add('don'ChoiceType::class, [
  254.                 'label' => "Accepteriez-vous de faire un don à l'association ?",
  255.                 'required' => false,
  256.                 'placeholder' => '',
  257.                 'choices' => [
  258.                     'Oui' => 'Oui',
  259.                     'Non' => 'Non',
  260.                 ],
  261.             ])
  262.             ->add('commentaire'TextType::class, [
  263.                 'label' => 'Auriez-vous des questions, suggestions ou commentaires pour améliorer notre action ?',
  264.                 'required' => false,
  265.             ])
  266.             ->add('enregistrer'SubmitType::class, [
  267.                 'label' => 'Valider',
  268.             ])
  269.         ;
  270.         $builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) {
  271.             $form $event->getForm();
  272.             $data $event->getData();
  273.             if (isset($data['etablissement_non_reference'])) {
  274.                 $form
  275.                     ->add('etablissement'ModelType::class, [
  276.                         'label' => 'Établissement',
  277.                         'placeholder' => 'Veuillez entrer votre établissement, ville ou code postal',
  278.                         'property' => 'nomEtablissementAvecVille',
  279.                         'query' => EtablissementQuery::create()->leftJoinWithVille(),
  280.                         'class' => Etablissement::class,
  281.                         'required' => false,
  282.                         'constraints' => new Blank(),
  283.                     ])
  284.                     ->add('nom_etablissement_non_reference'TextType::class, [
  285.                         'label' => 'Quel est le nom de votre établissement/structure ?',
  286.                         'required' => true,
  287.                         'constraints' => new NotBlank(),
  288.                     ])
  289.                     ->add('departement_autre_structure'ModelType::class, [
  290.                         'label' => 'Département de votre établissement/structure',
  291.                         'placeholder' => 'Sélectionnez un département',
  292.                         'class' => Departement::class,
  293.                         'query' => DepartementQuery::create()->filterByActif(true)->orderByNumero()->filterByNumero('00'Criteria::NOT_EQUAL),
  294.                         'required' => true,
  295.                         'constraints' => new NotBlank(),
  296.                         'multiple' => false,
  297.                     ])
  298.                 ;
  299.             }
  300.         });
  301.         return $builder;
  302.     }
  303.     public function configureOptions(OptionsResolver $resolver): void
  304.     {
  305.         $resolver->setDefaults([
  306.             'data_class' => Enseignant::class,
  307.             'isFromSignUp' => false,
  308.             'epaDTO' => EpaDTO::class,
  309.         ]);
  310.         $resolver->setRequired(['enseignant']);
  311.     }
  312.     public function getBlockPrefix(): string
  313.     {
  314.         return 'inscription';
  315.     }
  316. }