src/StartPlatz/Bundle/StartupBundle/Form/ApplicationType.php line 18

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace App\StartPlatz\Bundle\StartupBundle\Form;
  3. use App\StartPlatz\Bundle\StartupBundle\Entity\Batch;
  4. use Eckinox\TinymceBundle\Form\Type\TinymceType;
  5. use Symfony\Component\Form\AbstractType;
  6. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  7. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  8. use Symfony\Component\Form\Extension\Core\Type\EmailType;
  9. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  10. use Symfony\Component\Form\Extension\Core\Type\TextareaType;
  11. use Symfony\Component\Form\Extension\Core\Type\TextType;
  12. use Symfony\Component\Form\Extension\Core\Type\UrlType;
  13. use Symfony\Component\Form\FormBuilderInterface;
  14. use Symfony\Component\OptionsResolver\OptionsResolver;
  15. class ApplicationType extends AbstractType
  16. {
  17.     /**
  18.      * @param FormBuilderInterface $builder
  19.      * @param array $options
  20.      */
  21.     public function buildForm(FormBuilderInterface $builder, array $options): void
  22.     {
  23.         $data $builder->getData();
  24.         $settings $options['settings'];
  25.         $program $options['program'];
  26.         /** @var Batch $batch */
  27.         $batch   $options['batch'];
  28.         switch ($batch->getTemplate()) {
  29.             case "membership":
  30.             case "membership-per-api":
  31.                 $builder $this->setBuilderProgramMembership($builder$options);
  32.                 break;
  33.             case "startup-tools":
  34.                 $builder $this->setBuilderProgramStartupTools($builder);
  35.                 break;
  36.             case "accelerator":
  37.                 $builder $this->setBuilderProgramAccelerator($builder$options);
  38.                 break;
  39.             case "rheinland-pitch":
  40.                 $builder $this->setBuilderProgramRheinlandPitch($builder$options);
  41.                 break;
  42.             case "rheinland-pitch-web3":
  43.                 $builder $this->setBuilderProgramRheinlandPitchWeb3($builder$options);
  44.                 break;
  45.             case "gruenderstipendium":
  46.                 if (isset($options['settings']['extraFields'])) {
  47.                     $builder $this->setBuilderExtraFields($builder$options);
  48.                 }
  49.                 break;
  50.             case "registration":
  51.             case "businessclub":
  52.             case "event":
  53.             case "tiktok":
  54.             case "extraFields":
  55.             case "speed-networking":
  56.                 $builder $this->setBuilderProgramAccelerator($builder$options);
  57.                 $builder $this->setBuilderTemplateRegistration($builder$options);
  58.                 if (isset($settings['applicantTypes']) && $settings['applicantTypes']) {
  59.                     $builder $this->setBuilderApplicantTypes($builder$settings['applicantTypes']);
  60.                 }
  61.                 break;
  62.             case "nft":
  63.                 $builder $this->setBuilderNftRegistration($builder$options);
  64.                 break;
  65.             default:
  66.                 if ($batch->getAccess() == 'anonymous' or $options['settings']['template'] == 'registration') {
  67.                     $builder $this->setBuilderProgramAccelerator($builder$options);
  68.                     $builder $this->setBuilderTemplateRegistration($builder$options);
  69.                 } elseif ($options['settings']['isSignUp']) {
  70.                     $builder
  71.                         ->add('firstName'TextType::class, ['required' => false'attr' => ['placeholder' => 'first name']])
  72.                         ->add('lastName'TextType::class, ['required' => false'attr' => ['placeholder' => 'last name']])
  73.                         ->add('person'TextType::class)
  74.                         ->add('email'EmailType::class)
  75.                         ->add('phone'TextType::class)
  76.                     ;
  77.                 } elseif (isset($options['settings']['isEffzeh'])) {
  78.                     $builder->add('ideaPitch'TextareaType::class, [
  79.                         'label' => 'Content',
  80.                         'required' => false,
  81.                     ]);
  82.                 } else {
  83.                     $builder $this->setBuilderProgramRheinlandPitch($builder$options);
  84.                 }
  85.                 break;
  86.         }
  87.         if (isset($options['settings']['extraFields'])) {
  88.             $builder $this->setBuilderExtraFields($builder$options);
  89.         }
  90.         $builder $this->setBuilderSettingsIsPitchdeckRequired($builder$options);
  91.         $builder $this->setBuilderDefault($builder$options$batch);
  92.         $builder
  93.             ->add('finish'SubmitType::class, ['label'=>'Apply now'])
  94.         ;
  95.     }
  96.     private function setBuilderDefault(FormBuilderInterface $builder$options$batch)
  97.     {
  98.         if ($batch->getAskForTeam()) {
  99.             $builder
  100.                 ->add('startupName'TextType::class, ['required' => false'attr' => ['placeholder' => 'startupName']])
  101.             ;
  102.         }
  103.         if ($batch->getHasIncludeLinkedIn()) {
  104.             $builder
  105.                 ->add('linkedin'UrlType::class, ['required' => false'default_protocol' => 'https''attr' => ['placeholder' => 'LinkedIn Url']])
  106.             ;
  107.         }
  108.         if ($batch->getHasIncludeNewsletterPermission()) {
  109.             $builder
  110.                 ->add('hasNewsletterPermissionGiven'CheckboxType::class, ['required'=> false])
  111.             ;
  112.         }
  113.         if (isset($options['settings']['hasIncludeVolunteerConsent']) && $options['settings']['hasIncludeVolunteerConsent']) {
  114.             $builder
  115.                 ->add('hasVolunteerAgreed'CheckboxType::class, ['required'=> false])
  116.             ;
  117.         }
  118.         return $builder;
  119.     }
  120.     private function setBuilderProgramMembership(FormBuilderInterface $builder$options)
  121.     {
  122.         $builder
  123.             ->add('firstName'TextType::class, ['required' => false'attr' => ['placeholder' => 'first name']])
  124.             ->add('lastName'TextType::class, ['required' => false'attr' => ['placeholder' => 'last name']])
  125.             ->add('person'TextType::class, ['required' => false'attr' => ['placeholder' => 'name']])
  126.             ->add('email'EmailType::class, ['required' => true'attr' => ['placeholder' => 'email']])
  127.             ->add('recommendedBy'TextType::class, ['required'=> false])
  128.         ;
  129.         return $builder;
  130.     }
  131.     private function setBuilderProgramStartupTools(FormBuilderInterface $builder)
  132.     {
  133.         $builder
  134.             ->add('teamSize'TextType::class)
  135.         ;
  136.         $builder->add('startupStage'ChoiceType::class, ['choices' => ['idea'       => 'idea''seed' => 'seed''post-seed'  => 'post-seed'], 'required'    => true'empty_data'  => 'idea']);
  137.         $builder->add('ideaPitch'TinymceType::class, [
  138.             'label' => 'Content',
  139.             'required' => false,
  140.         ]);
  141.         return $builder;
  142.     }
  143.     private function setBuilderTemplateRegistration(FormBuilderInterface $builder$options)
  144.     {
  145.         $builder
  146.             ->add('firstName'TextType::class, ['required' => true'attr' => ['placeholder' => 'first name']])
  147.             ->add('lastName'TextType::class, ['required' => true'attr' => ['placeholder' => 'last name']])
  148.             ->add('email'EmailType::class, ['required' => true'attr' => ['placeholder' => 'email']])
  149.         ;
  150.         return $builder;
  151.     }
  152.     private function setBuilderApplicantTypes(FormBuilderInterface $builder$applicantTypes)
  153.     {
  154.         $choices array_combine($applicantTypes$applicantTypes);
  155.         $builder
  156.             //->add('applicantType', ChoiceType::class, ['choices' => $choices,'mapped' => false, 'required' => false, 'placeholder' => 'applicantType' ])
  157.             ->add('applicantType'TextType::class, ['required' => true'attr' => ['placeholder' => implode(' or '$applicantTypes)]])
  158.         ;
  159.         return $builder;
  160.     }
  161.     private function setBuilderExtraFields(FormBuilderInterface $builder$options)
  162.     {
  163.         $extraFields $options['settings']['extraFields'];
  164.         foreach ($extraFields as $extraField) {
  165.             $required $extraField['required'] == 'true' ' *' '';
  166.             if ($extraField['type'] == 'choice') {
  167.                 $choices array_flip($extraField['choices']);
  168.                 $builder
  169.                     ->add($extraField['field'], ChoiceType::class, ['choices' => $choices,'mapped' => false'required' => false'placeholder' => $extraField['label'] . $required ])
  170.                 ;
  171.             } elseif ($extraField['type'] == 'checkbox') {
  172.                 $builder
  173.                     ->add($extraField['field'], CheckboxType::class, ['required' => false,'mapped' => false'attr' => ['placeholder' => $extraField['label'] . $required ]])
  174.                 ;
  175.             } elseif ($extraField['type'] == 'textarea') {
  176.                 $builder
  177.                     ->add($extraField['field'], TextareaType::class, ['required' => false,'mapped' => false'attr' => ['placeholder' => $extraField['label'] . $required ]])
  178.                 ;
  179.             } else {
  180.                 $builder
  181.                     ->add($extraField['field'], TextType::class, ['required' => false,'mapped' => false'attr' => ['placeholder' => $extraField['label'] . $required ]])
  182.                 ;
  183.             }
  184.         }
  185.         return $builder;
  186.     }
  187.     private function setBuilderNftRegistration(FormBuilderInterface $builder$options)
  188.     {
  189.         $builder
  190.             ->add('firstName'TextType::class, ['required' => true'attr' => ['placeholder' => 'first name']])
  191.             ->add('lastName'TextType::class, ['required' => true'attr' => ['placeholder' => 'last name']])
  192.             ->add('email'TextType::class, ['required' => true'attr' => ['placeholder' => 'email']])
  193.             ->add('linkedin'UrlType::class, ['required' => true'default_protocol' => 'https''attr' => ['placeholder' => 'linkedin']])
  194.             ->add('wallet'TextType::class, ['required' => true'attr' => ['placeholder' => 'wallet']])
  195.         ;
  196.         return $builder;
  197.     }
  198.     private function setBuilderProgramRheinlandPitch(FormBuilderInterface $builder$options)
  199.     {
  200.         $builder
  201.             ->add('firstName'TextType::class, ['required' => true'attr' => ['placeholder' => 'first name']])
  202.             ->add('lastName'TextType::class, ['required' => true'attr' => ['placeholder' => 'last name']])
  203.             ->add('email'EmailType::class, ['required' => true'attr' => ['placeholder' => 'email']])
  204.             ->add('phone'TextType::class, ['required' => true'attr' => ['placeholder' => 'phone number']])
  205.             ->add('teamSize'TextType::class)
  206.             ->add('city'TextType::class)
  207.             ->add('websiteUrl'TextType::class, ['required'=> true])
  208.         ;
  209.         $builder->add('startupStage'ChoiceType::class, ['choices' => ['idea'       => 'idea''seed' => 'seed''post-seed'  => 'post-seed'], 'required'    => true'empty_data'  => 'idea']);
  210.         $builder->add('ideaPitch'TextareaType::class,
  211.             [
  212.                 'attr' => ['rows' => '34''cols' => '180'],
  213.                 'required' => true,
  214.             ]
  215.         );
  216.         /*
  217.                 'plugins' => "blocks advlist autolink link image media table lists code format",
  218.                 'toolbar' => "blocks bold italic underline | bullist numlist | table quickimage link code format",
  219.         $builder->add('ideaPitch',TextareaType::class, ['required' => true, 'attr' => ['placeholder' => 'one sentence pitch']])
  220.         ;
  221.         */
  222.         $builder->add('industry'ChoiceType::class, array(
  223.             'choices'     => array_flip($options['settings']['industries']),
  224.             'required'    => true,
  225.             'placeholder' => 'Choose an option',
  226.             'empty_data'  => 'Other',
  227.         ));
  228.         /*
  229.          * [
  230.                 'Female Founders' => 'Female Founders',
  231.                 'EdTech' => 'EdTech',
  232.                 'Digital Health' => 'Digital Health',
  233.             ]
  234.          [
  235.                 'Generative AI' => 'Generative AI',
  236.                 'Climate Tech' => 'Climate Tech',
  237.                 'Digital Health' => 'Digital Health',
  238.                 ]
  239.          */
  240.         //
  241.         return $builder;
  242.     }
  243.     private function setBuilderProgramRheinlandPitchWeb3(FormBuilderInterface $builder$options)
  244.     {
  245.         $builder
  246.             ->add('firstName'TextType::class, ['required' => true'attr' => ['placeholder' => 'first name']])
  247.             ->add('lastName'TextType::class, ['required' => true'attr' => ['placeholder' => 'last name']])
  248.             ->add('email'EmailType::class, ['required' => true'attr' => ['placeholder' => 'email']])
  249.             ->add('phone'TextType::class, ['required' => true'attr' => ['placeholder' => 'phone number']])
  250.             ->add('teamSize'TextType::class)
  251.             ->add('city'TextType::class)
  252.             ->add('linkedin'UrlType::class, ['required'=> true'default_protocol' => 'https'])
  253.             ->add('telegram'TextType::class, ['required'=> false])
  254.             ->add('discord'TextType::class, ['required'=> false])
  255.             ->add('websiteUrl'TextType::class, ['required'=> true])
  256.         ;
  257.         $builder->add('startupStage'ChoiceType::class, ['choices' => ['idea'       => 'idea''seed' => 'seed''post-seed'  => 'post-seed'], 'required'    => true'empty_data'  => 'idea']);
  258.         $builder->add('ideaPitch'TinymceType::class, [
  259.             'label' => 'Content',
  260.             'width' => '100%',
  261.             'required' => false,
  262.         ]);
  263.         /*
  264.         $builder->add('ideaPitch',TextareaType::class, ['required' => true, 'attr' => ['placeholder' => 'one sentence pitch']])
  265.         ;
  266.         */
  267.         $builder->add('industry'ChoiceType::class, ['choices'     => array_flip($options['settings']['industries']), 'required'    => true'placeholder' => 'Choose an option''empty_data'  => 'Other']);
  268.         $builder->add('projectCategory'ChoiceType::class, ['choices'     => array_flip($options['settings']['project-category']), 'required'    => true'placeholder' => 'Choose an option''empty_data'  => 'Other']);
  269.         $builder->add('blockchain'ChoiceType::class, ['choices'     => array_flip($options['settings']['blockchain']), 'required'    => true'placeholder' => 'Choose an option''empty_data'  => 'Other']);
  270.         return $builder;
  271.     }
  272.     private function setBuilderProgramAccelerator(FormBuilderInterface $builder$options)
  273.     {
  274.         $builder
  275.             ->add('firstName'TextType::class, ['required' => true'attr' => ['placeholder' => 'first name (*)']])
  276.             ->add('lastName'TextType::class, ['required' => true'attr' => ['placeholder' => 'last name (*)']])
  277.             ->add('email'EmailType::class, ['required' => true'attr' => ['placeholder' => 'email (*)']])
  278.             ->add('phone'TextType::class, ['required' => true'attr' => ['placeholder' => 'phone number (*)']])
  279.             ->add('teamSize'TextType::class)
  280.             ->add('city'TextType::class)
  281.             ->add('websiteUrl'TextType::class, ['required'=> true])
  282.             ->add('fulltime'TextType::class, ['required'=> true])
  283.             ->add('language'ChoiceType::class, [
  284.                 'choices' => [
  285.                     "Deutsch" => "Deutsch",
  286.                     "English" => "English",
  287.                 ],
  288.                 'placeholder' => 'Choose an option',
  289.                 'empty_data'  => "Deutsch",
  290.                 'required'    => true,
  291.             ])
  292.             ->add('mvpStatus'ChoiceType::class, [
  293.                 'choices' => [
  294.                     "Yes" => "Yes",
  295.                     "Almost, it will be ready when the program starts" => "Almost, it will be ready when the program starts",
  296.                     "No" => "No",
  297.                 ],
  298.                 'placeholder' => 'Choose an option',
  299.                 'empty_data'  => "Yes",
  300.                 'required'    => true,
  301.             ])
  302.         ;
  303.         $builder
  304.             ->add('dealroomUrl'TextType::class, ['required' => false'attr' => ['placeholder' => 'dealroom url']])
  305.         ;
  306.         $builder->add('ideaPitch'TextareaType::class, ['required' => true'attr' => ['placeholder' => 'one sentence pitch']])
  307.         ;
  308.         /*
  309.         $builder->add('ideaPitch', TinymceType::class, [
  310.             'label' => 'Content',
  311.             'required' => false
  312.         ]);
  313.         */
  314.         $builder->add('industry'ChoiceType::class, ['choices'     => array_flip($options['settings']['industries']), 'required'    => true'placeholder' => 'Choose an option''empty_data'  => 'Other']);
  315.         return $builder;
  316.     }
  317.     private function setBuilderSettingsIsPitchdeckRequired(FormBuilderInterface $builder$options)
  318.     {
  319.         if ($options['settings']['isPitchDeckRequired']) {
  320.             $builder
  321.                 ->add('uploadImage'SubmitType::class, ['label' => 'Upload pitch deck']);
  322.             $builder->add('save'SubmitType::class, ['label' => 'save']);
  323.         }
  324.         return $builder;
  325.     }
  326.     /**
  327.      * @param OptionsResolver $resolver
  328.      */
  329.     public function configureOptions(OptionsResolver $resolver): void
  330.     {
  331.         $resolver->setDefaults(['data_class' => \App\StartPlatz\Bundle\StartupBundle\Entity\Application::class, 'settings' => false'program'  => false'batch'    => false]);
  332.     }
  333.     /**
  334.      * @return string
  335.      */
  336.     public function getBlockPrefix()
  337.     {
  338.         return 'startplatz_bundle_startupbundle_application';
  339.     }
  340. }