src/Form/QuizRegisterationFormType.php line 20

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Form;
  4. use Pimcore\Model\DataObject;
  5. use Symfony\Component\Form\AbstractType;
  6. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  7. use Symfony\Component\Form\Extension\Core\Type\EmailType;
  8. use Symfony\Component\Form\Extension\Core\Type\HiddenType;
  9. use Symfony\Component\Form\Extension\Core\Type\PasswordType;
  10. use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
  11. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  12. use Symfony\Component\Form\Extension\Core\Type\TextType;
  13. use Symfony\Component\Form\FormBuilderInterface;
  14. use Symfony\Component\OptionsResolver\OptionsResolver;
  15. use Symfony\Component\Validator\Constraints as Assert;
  16. class QuizRegisterationFormType extends AbstractType
  17. {
  18.     private function getBodyTypes()
  19.     {
  20.         $listing = new DataObject\BodyTypeMap\Listing();
  21.         $listing->setOrder('DESC');
  22.         $listing->setOrderKey('o_id');
  23.         return $listing->load();
  24.     }
  25.     /**
  26.      * @inheritDoc
  27.      */
  28.     public function buildForm(FormBuilderInterface $builder, array $options)
  29.     {
  30.         $class DataObject\ClassDefinition::getByName('User');
  31.         $bodyTypes $this->getBodyTypes();
  32.         $builder
  33.             ->setMethod('POST')
  34.             ->add('planCategoryId'HiddenType::class)
  35.             ->add('sourceDocumentId'HiddenType::class)
  36.             ->add('firstname'TextType::class, [
  37.                 'label' => 'First Name',
  38.                 'required' => true,
  39.                 'trim' => true,
  40.                 'attr' => ['placeholder' => 'First Name']
  41.             ])
  42.             ->add('lastname'TextType::class, [
  43.                 'label' => 'Last Name',
  44.                 'required' => false,
  45.                 'trim' => true,
  46.                 'attr' => ['placeholder' => 'Last Name']
  47.             ])
  48.             ->add('password'RepeatedType::class, [
  49.                 'type' => PasswordType::class,
  50.                 'invalid_message' => 'The password fields must match.',
  51.                 'options' => ['attr' => ['class' => 'password-field''placeholder' => 'Password']],
  52.                 'required' => true,
  53.                 'first_options' => ['label' => 'Password'],
  54.                 'second_options' => ['label' => 'Repeat Password'],
  55.                 'constraints' => new Assert\Length(['min' => '8''minMessage' => 'Password length is too small. It should be atleast {{ limit }} characters long.'])
  56.             ])
  57.             ->add('email'EmailType::class, [
  58.                 'constraints' => [new Assert\Email(['message' => 'Please enter a valid email address'])],
  59.                 'label' => 'Email',
  60.                 'trim' => true,
  61.                 'attr' => ['placeholder' => 'E-Mail Address']
  62.             ])
  63.             ->add('gender'ChoiceType::class, [
  64.                 'label' => 'Gender''expanded' => true'required' => true'choices' => $this->getGenderList()
  65.             ])
  66.             ->add('ageRange'ChoiceType::class, [
  67.                 'label' => 'Age''expanded' => true'required' => true'choices' => self::getOptionList('ageRange'$class)
  68.             ])
  69.             ->add('height'ChoiceType::class, [
  70.                 'label' => 'Height''expanded' => true'required' => true'choices' => self::getOptionList('height'$class)
  71.             ])
  72.             ->add('bodyweight'ChoiceType::class, [
  73.                 'label' => 'Age''expanded' => true'required' => true'choices' => self::getOptionList('weight'$class)
  74.             ])
  75.             ->add('experience'ChoiceType::class, [
  76.                 'label' => 'Experience''required' => true'expanded' => true'choices' => self::getOptionList('experience'$class)
  77.             ])
  78.             ->add('bmi'ChoiceType::class, [
  79.                 'label' => 'BMI''required' => true'expanded' => true'choices' => self::getOptionList('bmi'$class)
  80.             ])
  81.             ->add('frequency'ChoiceType::class, [
  82.                 'label' => 'Frequency''required' => true'expanded' => true'choices' => self::getOptionList('frequency'$class)
  83.             ])
  84.             ->add('bodyTypeMale'ChoiceType::class, [
  85.                 'label' => 'Male Body Type',
  86.                 'required' => true,
  87.                 'expanded' => true,
  88.                 'choices' => $this->getBodyTypesList($bodyTypes'male'),
  89.                 'attr' => ['bodyTypeData' => $this->getBodyTypesData($bodyTypes'male')]
  90.             ])
  91.             ->add('bodyTypeFemale'ChoiceType::class, [
  92.                 'label' => 'Female Body Type',
  93.                 'required' => true,
  94.                 'expanded' => true,
  95.                 'choices' => $this->getBodyTypesList($bodyTypes'female'),
  96.                 'attr' => ['bodyTypeData' => $this->getBodyTypesData($bodyTypes'female')]
  97.             ])
  98.             ->add('timezone'ChoiceType::class, [
  99.                 'required' => true,
  100.                 'choices' => self::getOptionList('timezone'$class),
  101.             ])
  102.             ->add('submit'SubmitType::class, [
  103.                 'label' => 'Save & Signup'
  104.             ]);
  105.     }
  106.     private function getBodyTypesData($bodyTypes$genderName)
  107.     {
  108.         $items = [];
  109.         //numbers are used in css class to render background images on quiz popups
  110.         $numbers = [
  111.             'male' => [
  112.                 'ectomorph-male' => '5',
  113.                 'ecto-mesomorph-male' => '4',
  114.                 'mesomorph-male' => '3',
  115.                 'endomorph-male' => '2',
  116.                 'endo-mesomorph-male' => '1',
  117.             ],
  118.             'female' => [
  119.                 'mesomorph-female' => '1',
  120.                 'endomorph-female' => '2',
  121.                 'endo-mesomorph-female' => '3',
  122.                 'ectomorph-female' => '4',
  123.                 'ecto-mesomorph-female' => '5',
  124.             ]
  125.         ];
  126.         foreach ($bodyTypes as $bodyType) {
  127.             if (strtolower($bodyType->getGender()->getName()) == $genderName) {
  128.                 $items[$bodyType->getId()] = [
  129.                     'id' => $bodyType->getId(),
  130.                     'name' => $bodyType->getName(),
  131.                     'description' => $bodyType->getDescription(),
  132.                     'number' => $numbers[strtolower($genderName)][strtolower($bodyType->getOfficialName())],
  133.                 ];
  134.             }
  135.         }
  136.         return $items;
  137.     }
  138.     private function getBodyTypesList($bodyTypes$genderName)
  139.     {
  140.         $items = [];
  141.         foreach ($bodyTypes as $bodyType) {
  142.             if (strtolower($bodyType->getGender()->getName()) == $genderName) {
  143.                 $items[$bodyType->getName()] = $bodyType->getId();
  144.             }
  145.         }
  146.         return $items;
  147.     }
  148.     private function getGenderList()
  149.     {
  150.         $listing = new DataObject\Gender\Listing();
  151.         $listing->setOrder('ASC');
  152.         $listing->setOrderKey('o_id');
  153.         $items = [];
  154.         foreach ($listing as $gender) {
  155.             $items[$gender->getName()] = $gender->getId();
  156.         }
  157.         return $items;
  158.     }
  159.     private static function getOptionList($keyDataObject\ClassDefinition $class)
  160.     {
  161.         $options $class->getFieldDefinition($key)->getOptions();
  162.         $items = [];
  163.         foreach ($options as $option) {
  164.             $items[$option['key']] = $option['value'];
  165.         }
  166.         return $items;
  167.     }
  168.     /**
  169.      * @inheritDoc
  170.      */
  171.     public function getBlockPrefix()
  172.     {
  173.         return '';
  174.     }
  175.     /**
  176.      * @inheritDoc
  177.      */
  178.     public function configureOptions(OptionsResolver $resolver)
  179.     {
  180.     }
  181. }