app/Plugin/Paid4/Form/Type/PaidEntryType.php line 51

Open in your IDE?
  1. <?php
  2. /*
  3.  * Copyright(c) 2020 RACCOON HOLDINGS, Inc. All rights reserved.
  4.  * https://paid.jp/
  5.  */
  6. namespace Plugin\Paid4\Form\Type;
  7. use Eccube\Common\EccubeConfig;
  8. use Eccube\Form\Type\AddressType;
  9. use Eccube\Form\Type\PostalType;
  10. use Eccube\Form\Validator\Email;
  11. use Plugin\Paid4\Service\AddFormOptionService;
  12. use Symfony\Component\Form\AbstractType;
  13. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  14. use Symfony\Component\Form\Extension\Core\Type\EmailType;
  15. use Symfony\Component\Form\Extension\Core\Type\TextType;
  16. use Symfony\Component\Form\FormBuilderInterface;
  17. use Symfony\Component\Form\FormEvent;
  18. use Symfony\Component\Form\FormEvents;
  19. use Symfony\Component\OptionsResolver\OptionsResolver;
  20. use Symfony\Component\Validator\Constraints as Assert;
  21. use Symfony\Component\Validator\Constraints\NotBlank;
  22. class PaidEntryType extends AbstractType
  23. {
  24.     /**
  25.      * @var EccubeConfig
  26.      */
  27.     protected $eccubeConfig;
  28.     /**
  29.      * @var AddFormOptionService
  30.      */
  31.     public $addFormOptionService;
  32.     /**
  33.      * EntryType constructor.
  34.      * EntryType constructor.
  35.      *
  36.      * @param EccubeConfig $eccubeConfig
  37.      * @param AddFormOptionService $addFormOptionService
  38.      */
  39.     public function __construct(
  40.         EccubeConfig $eccubeConfig,
  41.         AddFormOptionService $addFormOptionService
  42.     )
  43.     {
  44.         $this->eccubeConfig $eccubeConfig;
  45.         $this->addFormOptionService $addFormOptionService;
  46.     }
  47.     /**
  48.      * @param FormBuilderInterface $builder
  49.      * @param array $options
  50.      */
  51.     public function buildForm(FormBuilderInterface $builder, array $options)
  52.     {
  53.         $required $options['newPaidCustomer'];
  54.         $prefClass '';
  55.         $keyupEvent 'setZipCode()';
  56.         $blurEvent 'getAddress()';
  57.         $zipClass '';
  58.         $address01Class'';
  59.         $address02Class '';
  60.         if($required) {
  61.             $prefClass 'p-region-id';
  62.             $keyupEvent '';
  63.             $blurEvent '';
  64.             $zipClass 'p-postal-code';
  65.             $address01Class 'p-locality p-street-address';
  66.             $address02Class 'p-extended-address';
  67.         }
  68.         $builder
  69.             ->add('company_name'TextType::class, [
  70.                 'required' => $required,
  71.                 'constraints' => [],
  72.             ])
  73.             ->add('company_name_kana'PaidTextKanaType::class, [
  74.                 'required' => $required,
  75.                 'constraints' => [],
  76.             ])
  77.             ->add('representative'PaidNameType::class, [
  78.                 'required' => $required,
  79.             ])
  80.             ->add('representative_kana'PaidNameKanaType::class, [
  81.                 'required' => $required,
  82.                 'lastname_name' => 'representative_sei_kana',
  83.                 'firstname_name' => 'representative_mei_kana',
  84.             ])
  85.             ->add('zip_code'PostalType::class, [
  86.                 'required' => $required,
  87.                 'constraints' => [new Assert\Length(['max' => $this->eccubeConfig['eccube_postal_code']-1])],
  88.                 'attr' => [
  89.                     'class' => $zipClass,
  90.                     'placeholder' => 'common.postal_code_sample',
  91.                     'onkeyup' => $keyupEvent,
  92.                     'onblur' => $blurEvent,
  93.                 ],
  94.             ])
  95.             ->add('address'AddressType::class, [
  96.                 'required' => $required,
  97.                 'pref_name' => 'prefecture',
  98.                 'addr01_name' => 'address1',
  99.                 'addr02_name' => 'address2',
  100.                 'pref_options' => ['constraints' => [], 'attr' => ['class' => $prefClass]],
  101.                 'addr01_options' => [
  102.                     'constraints' => [
  103.                         new Assert\Length(['max' => $this->eccubeConfig['paid4.stext_len']]),
  104.                     ],
  105.                     'attr' => [
  106.                         'class' => $address01Class,
  107.                         'placeholder' => 'common.address_sample_01',
  108.                     ],
  109.                 ],
  110.                 'addr02_options' => [
  111.                     'constraints' => [
  112.                         new Assert\Length(['max' => $this->eccubeConfig['paid4.stext_len']]),
  113.                     ],
  114.                     'attr' => [
  115.                         'class' => $address02Class,
  116.                         'placeholder' => 'common.address_sample_02',
  117.                     ],
  118.                 ],
  119.             ])
  120.             ->add('clerk'PaidNameType::class, [
  121.                 'required' => $required,
  122.             ])
  123.             ->add('clerk_kana'PaidNameKanaType::class, [
  124.                 'required' => $required,
  125.                 'lastname_name' => 'clerk_sei_kana',
  126.                 'firstname_name' => 'clerk_mei_kana',
  127.             ])
  128.             ->add('tell'PaidTellType::class, [
  129.                 'required' => $required,
  130.                 'attr' => [
  131.                     'placeholder' => '例:111-222-333',
  132.                 ],
  133.             ])
  134.             ->add('email'PaidRepeatedEmailType::class, [
  135.                 'required' => $required,
  136.             ]);
  137.         // 管理画面->paid登録用フォーム設定
  138.         if ($options['admin_mode']) {
  139.             $builder
  140.                 ->add('company_name'TextType::class, [
  141.                     'required' => $required,
  142.                     'constraints' => [
  143.                         new Assert\Length([
  144.                             'max' => $this->eccubeConfig['paid4.stext_len'],
  145.                         ]),
  146.                         new NotBlank(),
  147.                     ],
  148.                 ])
  149.                 ->add('company_name_kana'PaidTextKanaType::class, [
  150.                     'required' => $required,
  151.                     'constraints' => [
  152.                         new Assert\Length([
  153.                             'max' => $this->eccubeConfig['paid4.stext_len'],
  154.                         ]),
  155.                         new NotBlank(),
  156.                     ],
  157.                 ])
  158.                 ->add('email'EmailType::class, [
  159.                     'required' => true,
  160.                     'constraints' => [
  161.                         new Assert\NotBlank(),
  162.                         //new Email(['strict' => $this->eccubeConfig['eccube_rfc_email_check']]),
  163.                         new Email(['mode' => $this->eccubeConfig['eccube_rfc_email_check'] ? 'strict' 'loose']),
  164.                         new Assert\Length(['max' => $this->eccubeConfig['paid4.email_len']]),
  165.                     ],
  166.                     'attr' => [
  167.                         'placeholder' => 'common.mail_address_sample',
  168.                     ],
  169.                 ]);
  170.             $builder->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) use ($options$required) {
  171.                 $form $event->getForm();
  172.                 $this->addFormOptionService->setTellNotHyphenMessage($form'tell');
  173.             });
  174.         }
  175.         // フロント->paid登録用フォーム設定
  176.         if (!$options['admin_mode']) {
  177.             $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) use ($required) {
  178.                 $form $event->getForm();
  179.                 $form->add('user_policy_check'CheckboxType::class, [
  180.                     'required' => $required,
  181.                     'label' => null,
  182.                     'mapped' => false,
  183.                 ]);
  184.             });
  185.             $builder->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) use ($options$required) {
  186.                 if ($required) {
  187.                     $form $event->getForm();
  188.                     $this->addFormOptionService->setFormOption($form'company_name', [
  189.                         new Assert\Length([
  190.                             'max' => $this->eccubeConfig['paid4.stext_len'],
  191.                         ]),
  192.                         new NotBlank(),
  193.                     ]);
  194.                     $this->addFormOptionService->setFormOption($form'company_name_kana', [
  195.                         new Assert\Length([
  196.                             'max' => $this->eccubeConfig['paid4.stext_len'],
  197.                         ]),
  198.                         new NotBlank(),
  199.                     ]);
  200.                     $this->addFormOptionService->setFormOption($form'user_policy_check', [new NotBlank()]);
  201.                     $email $form->get('email');
  202.                     $this->addFormOptionService->setFormOption($email'first', [new NotBlank(),]);
  203.                     $this->addFormOptionService->setFormOption($email'second', [new NotBlank(),]);
  204.                     $this->addFormOptionService->setTellNotHyphenMessage($form'tell');
  205.                 }
  206.             });
  207.         }
  208.     }
  209.     /**
  210.      * @param OptionsResolver $resolver
  211.      */
  212.     public function configureOptions(OptionsResolver $resolver)
  213.     {
  214.         $resolver->setDefaults([
  215.             'data_class' => 'Plugin\Paid4\Entity\PaidCustomer',
  216.             'newPaidCustomer' => true,
  217.             'admin_mode' => false,
  218.         ]);
  219.     }
  220.     /**
  221.      * {@inheritdoc}
  222.      */
  223.     public function getBlockPrefix()
  224.     {
  225.         return 'paid_entry';
  226.     }
  227. }