src/Form/FormConfigurator/ContactUsExtendedFormType.php line 35

Open in your IDE?
  1. <?php
  2. /**
  3.  * Pimcore Customer Management Framework Bundle
  4.  * Full copyright and license information is available in
  5.  * LICENSE.md which is distributed with this source code.
  6.  *
  7.  * @copyright  Copyright (C) Elements.at New Media Solutions GmbH
  8.  * @license    GPLv3
  9.  */
  10. namespace App\Form\FormConfigurator;
  11. use Pimcore;
  12. use Pimcore\Model\DataObject\Customer;
  13. use Symfony\Component\Form\AbstractType;
  14. use Symfony\Component\Form\Extension\Core\Type\ButtonType;
  15. use Symfony\Component\Form\Extension\Core\Type\EmailType;
  16. use Symfony\Component\Form\Extension\Core\Type\TextType;
  17. use Symfony\Component\Form\Extension\Core\Type\TextareaType;
  18. use Symfony\Component\Form\Extension\Core\Type\HiddenType;
  19. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  20. use Symfony\Component\Form\Extension\Core\Type\CountryType;
  21. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  22. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  23. use Symfony\Component\Form\FormBuilderInterface;
  24. use Symfony\Component\OptionsResolver\OptionsResolver;
  25. use Symfony\Component\Validator\Constraints\Count;
  26. use Symfony\Component\Validator\Constraints\NotBlank;
  27. use Symfony\Component\Form\Form;
  28. use Pimcore\Model\Document\Tag\Area\Info;
  29. use App\Document\Areabrick\AbstractAreabrick;
  30. use Symfony\Component\Validator\Constraints\Regex;
  31. class ContactUsExtendedFormType extends AbstractFormType
  32. {
  33.     protected $formLabel 'Contact Us (Neuroscience/AnyMaze)';
  34.     protected $emailDocumentPath '/emails/neuroscience/contact-us';
  35.     protected $recaptcha true;
  36.     protected function formatEmailData(array $data)
  37.     {
  38.         foreach ($data as $key => $item) {
  39.             if (is_array($item) && ($key == 'Prefference')) {
  40.                 $data[$key] = ucwords(implode(", "$item));
  41.             }
  42.         }
  43.         if ($data['Division'] != 'neuroscience') {
  44.             $this->emailDocumentPath '/emails/'.lcfirst($data['Division']).'/contact-us';
  45.         }
  46.         return $data;
  47.     }
  48.     /**
  49.      * @inheritDoc
  50.      */
  51.     public function buildForm(FormBuilderInterface $builder, array $options)
  52.     {
  53.         $translator Pimcore::getContainer()->get('translator');
  54.         $customer = new Customer();
  55.         $prefixes $customer->getClass()->getFieldDefinition('prefix');
  56.         $prefixOptions = [ $translator->trans('stoelting.forms.prefix.placeholder') => '' ];
  57.         foreach ($prefixes->getOptions() as $option) {
  58.             $prefixOptions[$option['key']] = $option['value'];
  59.         }
  60.         $builder
  61.             ->add('Division'ChoiceType::class, [
  62.                 'label' => $translator->trans('stoelting.forms.division'),
  63.                 'choices' => [
  64.                     'Neuroscience' => 'neuroscience',
  65.                     'ANY-maze' => 'any-maze',
  66.                 ],
  67.                 'constraints' => [
  68.                     new NotBlank([
  69.                         'message' => $translator->trans('stoelting.forms.division.required.message'),
  70.                     ])
  71.                 ]
  72.             ])
  73.             ->add(
  74.                 'Prefix',
  75.                 ChoiceType::class,
  76.                 [
  77.                     'label'    => $translator->trans('stoelting.forms.prefix'),
  78.                     'placeholder' => $translator->trans('stoelting.forms.prefix.placeholder'),
  79.                     'multiple' => false,
  80.                     'choices'  => $prefixOptions,
  81.                     'choice_attr' => function ($key$val$index) {
  82.                         return empty($key) ? ['disabled' => 'disabled'] : [];
  83.                     }
  84.                 ]
  85.             )
  86.             ->add('Firstname'TextType::class, [
  87.                 'label' => $translator->trans('stoelting.forms.firstname'),
  88.                 'attr'        => [
  89.                     'placeholder' => $translator->trans('stoelting.forms.firstname.placeholder'),
  90.                 ],
  91.                 'constraints' => [
  92.                     new NotBlank([
  93.                         'message' => $translator->trans('stoelting.forms.firstname.required.message'),
  94.                     ])
  95.                 ]
  96.             ])
  97.             ->add('Lastname'TextType::class, [
  98.                 'label' => $translator->trans('stoelting.forms.lastname'),
  99.                 'attr'        => [
  100.                     'placeholder' => $translator->trans('stoelting.forms.lastname.placeholder'),
  101.                 ],
  102.                 'constraints' => [
  103.                     new NotBlank([
  104.                         'message' => $translator->trans('stoelting.forms.lastname.required.message'),
  105.                     ])
  106.                 ]
  107.             ])
  108.             ->add('Company'TextType::class, [
  109.                 'label' => $translator->trans('stoelting.forms.institution_company'),
  110.                 'attr'        => [
  111.                     'placeholder' => $translator->trans('stoelting.forms.institution_company.placeholder'),
  112.                     'readonly' => false
  113.                 ]
  114.             ])
  115.             /*->add('Country', CountryType::class, [
  116.                 'label' => $translator->trans('stoelting.forms.country'),
  117.                 'data' => 'US',
  118.                 'attr'        => [
  119.                     'class' => 'country-select',
  120.                     'placeholder' => $translator->trans('stoelting.forms.country.placeholder'),
  121.                     'onchange' => 'javascript:$("#CountryName").val($(this).find("option:selected").text())',
  122.                     'readonly' => false
  123.                 ],
  124.                 'constraints' => [
  125.                     new NotBlank([
  126.                         'message' => $translator->trans('stoelting.forms.country.required.message'),
  127.                     ])
  128.                 ]
  129.             ])
  130.             ->add('CountryName', HiddenType::class, [
  131.                 'label' => false,
  132.                 'data' => 'United States',
  133.                 'attr' => [
  134.                     'class' => 'js-get-selected-label',
  135.                     'data-target' => 'country-select'
  136.                 ]
  137.             ])*/
  138.             ->add('Country'TextType::class, [
  139.                 'label' => $translator->trans('stoelting.forms.country'),
  140.                 'attr'        => [
  141.                     'placeholder' => $translator->trans('stoelting.forms.country.placeholder'),
  142.                     'readonly' => false
  143.                 ],
  144.                 'constraints' => [
  145.                     new NotBlank([
  146.                         'message' => $translator->trans('stoelting.forms.country.required.message'),
  147.                     ])
  148.                 ]
  149.             ])
  150.             ->add('Email'EmailType::class, [
  151.                 'label' => $translator->trans('stoelting.forms.email'),
  152.                 'attr'        => [
  153.                     'placeholder' => $translator->trans('stoelting.forms.email.placeholder'),
  154.                     'readonly' => false
  155.                 ],
  156.                 'constraints' => [
  157.                     new NotBlank([
  158.                         'message' => $translator->trans('stoelting.forms.email.required.message'),
  159.                     ]),
  160.                     new Regex(
  161.                         [
  162.                             'pattern' => '/[^@]+@[^\.]+\..+/',
  163.                             'message' => $translator->trans('stoelting.invalid-email-check'),
  164.                         ]
  165.                     )
  166.                 ]
  167.             ])
  168.             ->add('Phone'TextType::class, [
  169.                 'label' => $translator->trans('stoelting.forms.phone'),
  170.                 'attr'        => [
  171.                     'placeholder' => $translator->trans('stoelting.forms.phone.placeholder'),
  172.                     'readonly' => false
  173.                 ],
  174.                 'constraints' => [
  175.                     new NotBlank([
  176.                         'message' => $translator->trans('stoelting.forms.phone.required.message'),
  177.                     ])
  178.                 ]
  179.             ])
  180.             ->add('Prefference'ChoiceType::class, [
  181.                 'label' => $translator->trans('stoelting.forms.preffered_contact_method'),
  182.                 'choices' => [
  183.                     'Email' => 'email',
  184.                     'Phone' => 'telephone'
  185.                 ],
  186.                 'multiple' => true,
  187.                 'expanded' => true,
  188.                 'choice_label' => function ($choice$key$value) use ($translator){
  189.                     return $translator->trans('stoelting.forms.prefference_'.$value);
  190.                 },
  191.                 'constraints' => [
  192.                     new Count([
  193.                         'min' => 1,
  194.                         'minMessage' => $translator->trans('stoelting.forms.preffered_contact_method.required.message'),
  195.                     ])
  196.                 ]
  197.             ])
  198.             ->add('Message'TextareaType::class, [
  199.                 'label' => $translator->trans('stoelting.forms.message'),
  200.                 'attr'        => [
  201.                     'placeholder' => $translator->trans('stoelting.forms.message.placeholder'),
  202.                     'readonly' => false,
  203.                     'rows' => 5,
  204.                     'max' => 500
  205.                 ],
  206.                 'constraints' => [
  207.                     new NotBlank([
  208.                         'message' => $translator->trans('stoelting.forms.message.required.message'),
  209.                     ])
  210.                 ]
  211.             ])
  212.             ->add('g-recaptcha-response'HiddenType::class, [
  213.                 'attr' => [
  214.                     'id' => 'g-recaptcha-response'
  215.                 ],
  216.             ])
  217.             ->add('action'HiddenType::class, [
  218.                 'attr' => [
  219.                     'id' => 'validate_captcha'
  220.                 ],
  221.                 'data' => 'neuroscienceContactForm'
  222.             ])
  223.             ->add('_submit'ButtonType::class, [
  224.                 'label' => $translator->trans('stoelting.forms.send'),
  225.                 'attr' => [
  226.                     'class' => 'btn btn-primary',
  227.                     'onclick' => 'onSubmit()'
  228.                 ]
  229.             ]);
  230.     }
  231.     /**
  232.      * @inheritDoc
  233.      */
  234.     public function getBlockPrefix()
  235.     {
  236.         return '';
  237.     }
  238.     /**
  239.      * @inheritDoc
  240.      */
  241.     public function configureOptions(OptionsResolver $resolver)
  242.     {
  243.     }
  244.     protected function getDocumentPath(array $params)
  245.     {
  246.         if ($params['Division'] != 'neuroscience') {
  247.             return str_replace('/neuroscience/''/'.$params['Division'].'/'$this->emailDocumentPath);
  248.         }
  249.         return $this->emailDocumentPath;
  250.     }
  251. }