app/Plugin/PiaContact/Controller/CoinsFromBarsController.php line 42

Open in your IDE?
  1. <?php
  2. namespace Plugin\PiaContact\Controller;
  3. use Eccube\Controller\AbstractController;
  4. use Eccube\Event\EventArgs;
  5. use Eccube\Event\EccubeEvents;
  6. use Plugin\PiaContact\Form\Type\CoinsFromBarsType;
  7. use Plugin\PiaContact\Service\PiaContactMailService;
  8. use Plugin\PiaContact\Service\PiaContactSpreadsheetService;
  9. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
  10. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
  13. use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
  14. use Plugin\PiaContact\Service\ReCaptchaService;
  15. class CoinsFromBarsController extends AbstractController
  16. {
  17.     protected $piaContactMailService;
  18.     protected $piaContactSpreadsheetService;
  19.     protected $authorizationChecker;
  20.     protected $eventDispatcher;
  21.     protected $reCaptchaService;
  22.     public function __construct(
  23.         PiaContactMailService $piaContactMailService,
  24.         PiaContactSpreadsheetService $piaContactSpreadsheetService,
  25.         AuthorizationCheckerInterface $authorizationChecker,
  26.         EventDispatcherInterface $eventDispatcher,
  27.         ReCaptchaService $reCaptchaService
  28.     ) {
  29.         $this->piaContactMailService $piaContactMailService;
  30.         $this->piaContactSpreadsheetService $piaContactSpreadsheetService;
  31.         $this->authorizationChecker $authorizationChecker;
  32.         $this->eventDispatcher $eventDispatcher;
  33.         $this->reCaptchaService $reCaptchaService;
  34.     }
  35.     /**
  36.      * バーからコインフォーム
  37.      *
  38.      * @Route("/coins_from_bars", name="plugin_pia_coins_from_bars")
  39.      * @Template("@PiaContact/default/coins_from_bars/index.twig")
  40.      */
  41.     public function index(Request $request)
  42.     {
  43.         $builder $this->formFactory->createBuilder(CoinsFromBarsType::class);
  44.         // ログインユーザーの情報を設定
  45.         if ($this->authorizationChecker->isGranted('ROLE_USER')) {
  46.             /** @var \Eccube\Entity\Customer $user */
  47.             $user $this->getUser();
  48.             $builder->setData([
  49.                 'name' => [
  50.                     'name01' => $user->getName01(),
  51.                     'name02' => $user->getName02(),
  52.                 ],
  53.                 'tel' => $user->getPhoneNumber(),
  54.                 'email' => $user->getEmail(),
  55.             ]);
  56.         }
  57.         // FRONT_CONTACT_INDEX_INITIALIZE
  58.         $event = new EventArgs(
  59.             [
  60.                 'builder' => $builder,
  61.             ],
  62.             $request
  63.         );
  64.         $this->eventDispatcher->dispatch($eventEccubeEvents::FRONT_CONTACT_INDEX_INITIALIZE);
  65.         $form $builder->getForm();
  66.         $form->handleRequest($request);
  67.         if ($form->isSubmitted() && $form->isValid()) {
  68.             switch ($request->get('mode')) {
  69.                 case 'confirm':
  70.                     // reCAPTCHA検証
  71.                     $recaptchaToken $request->request->get('g-recaptcha-response''');
  72.                     if (!$this->reCaptchaService->verify($recaptchaToken)) {
  73.                         $this->addError('reCAPTCHAの認証に失敗しました。もう一度お試しください。''front');
  74.                         break;
  75.                     }
  76.                     // 確認画面
  77.                     return $this->render('@PiaContact/default/coins_from_bars/confirm.twig', [
  78.                         'form' => $form->createView(),
  79.                     ]);
  80.                 case 'complete':
  81.                     // 完了処理
  82.                     $data $form->getData();
  83.                     $data["create_date"] = date("Y-m-d H:i:s");
  84.                     // イベントを実行してデータを保存
  85.                     $event = new EventArgs(
  86.                         [
  87.                             'form' => $form,
  88.                             'data' => $data,
  89.                         ],
  90.                         $request
  91.                     );
  92.                     $this->eventDispatcher->dispatch($eventEccubeEvents::FRONT_CONTACT_INDEX_COMPLETE);
  93.                     $data $event->getArgument('data');
  94.                     try {
  95.                         // スプレッドシートに保存
  96.                         $this->piaContactSpreadsheetService->saveCoinsFromBars($data);
  97.                         // メール送信
  98.                         $this->piaContactMailService->sendPiaCoinsFromBarsMail($data);
  99.                     } catch (\Exception $e) {
  100.                         $this->addError('申込処理中にエラーが発生しました: ' $e->getMessage(), 'front');
  101.                         error_log('CoinsFromBars Process Error: ' $e->getMessage());
  102.                         return [
  103.                             'form' => $form->createView(),
  104.                             'recaptcha_site_key' => $this->getParameter('recaptcha_site_key'),
  105.                         ];
  106.                     }
  107.                     return $this->redirectToRoute('plugin_pia_coins_from_bars_complete');
  108.             }
  109.         }
  110.         return [
  111.             'form' => $form->createView(),
  112.             'recaptcha_site_key' => $this->getParameter('recaptcha_site_key'),
  113.         ];
  114.     }
  115.     /**
  116.      * バーからコイン完了画面
  117.      *
  118.      * @Route("/coins_from_bars/complete", name="plugin_pia_coins_from_bars_complete")
  119.      */
  120.     public function complete()
  121.     {
  122.         return $this->render('@PiaContact/default/coins_from_bars/complete.twig');
  123.     }
  124. }