src/Form/Payment/FundingType.php line 27

Open in your IDE?
  1. <?php
  2. namespace App\Form\Payment;
  3. use App\Entity\Account\User;
  4. use App\Entity\Scholar\Training\Training;
  5. use InvalidArgumentException;
  6. use Karser\Recaptcha3Bundle\Form\Recaptcha3Type;
  7. use Karser\Recaptcha3Bundle\Validator\Constraints\Recaptcha3;
  8. use Nellapp\Bundle\SDKBundle\ApiClientInterApp\Model\Crm\FundingContactRequestDTO;
  9. use Nellapp\Bundle\SDKBundle\Enum\ChannelUserData\ApplicantTypeEnum;
  10. use Nellapp\Bundle\SDKBundle\Enum\ChannelUserData\CursusCourseEnum;
  11. use Nellapp\Bundle\SDKBundle\Enum\ChannelUserData\CursusModalityEnum;
  12. use Nellapp\Bundle\SDKBundle\Enum\ChannelUserData\FounderTypeEnum;
  13. use Nellapp\Bundle\SDKBundle\Enum\ChannelUserData\RqthStatusEnum;
  14. use Symfony\Component\Form\AbstractType;
  15. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  16. use Symfony\Component\Form\Extension\Core\Type\HiddenType;
  17. use Symfony\Component\Form\Extension\Core\Type\TelType;
  18. use Symfony\Component\Form\Extension\Core\Type\TextareaType;
  19. use Symfony\Component\Form\Extension\Core\Type\TextType;
  20. use Symfony\Component\Form\FormBuilderInterface;
  21. use Symfony\Component\OptionsResolver\OptionsResolver;
  22. use Symfony\Component\Security\Core\Security;
  23. use Symfony\Contracts\Translation\TranslatorInterface;
  24. class FundingType extends AbstractType
  25. {
  26. public function __construct(
  27. private Security $security,
  28. private TranslatorInterface $translator,
  29. ) {}
  30. public function buildForm(FormBuilderInterface $builder, array $options): void
  31. {
  32. $user = $this->security->getUser();
  33. $training = $options['training'];
  34. if (!$training instanceof Training) {
  35. throw new InvalidArgumentException();
  36. }
  37. $builder
  38. ->add('trainingId', HiddenType::class, [
  39. 'data' => $training->getId(),
  40. 'attr' => [
  41. 'readonly' => true,
  42. ],
  43. 'required' => true,
  44. ])
  45. ->add('trainingPrice', HiddenType::class, [
  46. 'data' => $training->getPrice() * 100,
  47. 'attr' => [
  48. 'readonly' => true,
  49. ],
  50. 'required' => true,
  51. ])
  52. ->add('founderType', ChoiceType::class, [
  53. 'choices' => FounderTypeEnum::getFormChoices(),
  54. 'translation_domain' => 'NellappSDKBundle',
  55. 'label' => $this->translator->trans('funding.form.payment_meaning.label'),
  56. 'required' => true,
  57. ])
  58. ->add('status', ChoiceType::class, [
  59. 'choices' => ApplicantTypeEnum::getFormChoices(),
  60. 'translation_domain' => 'NellappSDKBundle',
  61. 'label' => $this->translator->trans('funding.form.status.label'),
  62. 'required' => true,
  63. ])
  64. ->add('lastName', TextType::class, [
  65. 'label' => 'funding.form.last_name.label',
  66. 'data' => $user instanceof User ? $user->getLastname() : '',
  67. 'attr' => [
  68. 'readonly' => $user instanceof User,
  69. ],
  70. 'required' => true,
  71. ])
  72. ->add('firstName', TextType::class, [
  73. 'label' => 'funding.form.first_name.label',
  74. 'data' => $user instanceof User ? $user->getFirstName() : '',
  75. 'attr' => [
  76. 'readonly' => $user instanceof User,
  77. ],
  78. 'required' => true,
  79. ])
  80. ->add('email', TextType::class, [
  81. 'label' => 'funding.form.mail.label',
  82. 'data' => $user instanceof User ? $user->getEmail() : '',
  83. 'attr' => [
  84. 'readonly' => $user instanceof User,
  85. ],
  86. 'required' => true,
  87. ])
  88. ->add('phone', TelType::class, [
  89. 'required' => true,
  90. 'label' => 'funding.form.phone.label',
  91. ])
  92. ->add('message', TextareaType::class, [
  93. 'label' => 'funding.form.message.label',
  94. 'required' => false,
  95. ])
  96. ->add('cursusModality', ChoiceType::class, [
  97. 'choices' => CursusModalityEnum::getOpportunityFormChoices(),
  98. 'placeholder' => "cursus.entity.cursusModality.no_preference.label",
  99. 'translation_domain' => 'NellappSDKBundle',
  100. 'label' => $this->translator->trans('funding.form.cursus_modality.label'),
  101. 'required' => false,
  102. ])
  103. ->add('cursusCourse', ChoiceType::class, [
  104. 'choices' => CursusCourseEnum::getFormChoices(),
  105. 'placeholder' => "cursus.entity.cursusCourse.no_preference.label",
  106. 'translation_domain' => 'NellappSDKBundle',
  107. 'label' => $this->translator->trans('funding.form.cursus_course.label'),
  108. 'required' => false,
  109. ])
  110. ->add('rqth', ChoiceType::class, [
  111. 'choices' => RqthStatusEnum::getFormChoices(),
  112. 'label' => $this->translator->trans("funding.form.rqth.label"),
  113. 'translation_domain' => 'NellappSDKBundle',
  114. 'required' => true,
  115. ])
  116. ->add('captcha', Recaptcha3Type::class, [
  117. 'mapped' => false,
  118. 'constraints' => new Recaptcha3([
  119. 'message' => 'karser_recaptcha3.message',
  120. ]),
  121. 'action_name' => 'funding_contact',
  122. 'locale' => $options['locale'],
  123. ])
  124. ;
  125. }
  126. public function configureOptions(OptionsResolver $resolver): void
  127. {
  128. $resolver->setDefaults([
  129. 'locale' => 'fr',
  130. 'data_class' => FundingContactRequestDTO::class,
  131. 'training' => null,
  132. ]);
  133. }
  134. }