app/Plugin/PiaContact/Controller/RecruitController.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\FormRecruitType;
  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. class RecruitController extends AbstractController
  15. {
  16.     protected $piaContactMailService;
  17.     protected $piaContactSpreadsheetService;
  18.     protected $authorizationChecker;
  19.     protected $eventDispatcher;
  20.     public function __construct(
  21.         PiaContactMailService $piaContactMailService,
  22.         PiaContactSpreadsheetService $piaContactSpreadsheetService,
  23.         AuthorizationCheckerInterface $authorizationChecker,
  24.         EventDispatcherInterface $eventDispatcher
  25.     ) {
  26.         $this->piaContactMailService $piaContactMailService;
  27.         $this->piaContactSpreadsheetService $piaContactSpreadsheetService;
  28.         $this->authorizationChecker $authorizationChecker;
  29.         $this->eventDispatcher $eventDispatcher;
  30.     }
  31.     /**
  32.      * リクルート応募フォーム
  33.      *
  34.      * @Route("/form_recruit", name="plugin_pia_form_recruit")
  35.      * @Template("@PiaContact/default/form_recruit/index.twig")
  36.      */
  37.     public function index(Request $request)
  38.     {
  39.         $builder $this->formFactory->createBuilder(FormRecruitType::class);
  40.         // ログインユーザーの情報を設定(フォーム送信後にデータを取得)
  41.         $form $builder->getForm();
  42.         if ($this->authorizationChecker->isGranted('ROLE_USER')) {
  43.             /** @var \Eccube\Entity\Customer $user */
  44.             $user $this->getUser();
  45.             // NameTypeフィールドにデータを設定
  46.             $form->get('name')->get('name01')->setData($user->getName01());
  47.             $form->get('name')->get('name02')->setData($user->getName02());
  48.             // KanaTypeフィールドにデータを設定se
  49.             $form->get('kana')->get('kana01')->setData($user->getKana01());
  50.             $form->get('kana')->get('kana02')->setData($user->getKana02());
  51.             // 生年月日
  52.             if ($user->getBirth()) {
  53.                 $form->get('birth')->setData($user->getBirth());
  54.             }
  55.             // 性別
  56.             if ($user->getSex()) {
  57.                 $form->get('sex')->setData($user->getSex());
  58.             }
  59.             // PostalTypeフィールドにデータを設定
  60.             $form->get('zip')->setData($user->getPostalCode());
  61.             // AddressTypeフィールドにデータを設定
  62.             $form->get('address')->get('pref')->setData($user->getPref());
  63.             $form->get('address')->get('addr01')->setData($user->getAddr01());
  64.             $form->get('address')->get('addr02')->setData($user->getAddr02());
  65.             // PhoneNumberTypeフィールドにデータを設定
  66.             $form->get('tel')->setData($user->getPhoneNumber());
  67.             // メールアドレス
  68.             $form->get('email')->setData($user->getEmail());
  69.         }
  70.         // FRONT_CONTACT_INDEX_INITIALIZE
  71.         $event = new EventArgs(
  72.             [
  73.                 'builder' => $builder,
  74.             ],
  75.             $request
  76.         );
  77.         $this->eventDispatcher->dispatch($eventEccubeEvents::FRONT_CONTACT_INDEX_INITIALIZE);
  78.         $form->handleRequest($request);
  79.         if ($form->isSubmitted() && $form->isValid()) {
  80.             switch ($request->get('mode')) {
  81.                 case 'confirm':
  82.                     // 確認画面
  83.                     return $this->render('@PiaContact/default/form_recruit/confirm.twig', [
  84.                         'form' => $form->createView(),
  85.                     ]);
  86.                 case 'complete':
  87.                     // 完了処理
  88.                     $data $form->getData();
  89.                     $data["create_date"] = date("Y-m-d H:i:s");
  90.                     $data["name"] = $data["name01"]." ".$data["name02"];
  91.                     // イベントを実行してデータを保存
  92. //                    $event = new EventArgs(
  93. //                        [
  94. //                            'form' => $form,
  95. //                            'data' => $data,
  96. //                        ],
  97. //                        $request
  98. //                    );
  99. //                    $this->eventDispatcher->dispatch($event, EccubeEvents::FRONT_CONTACT_INDEX_COMPLETE);
  100. //                    $data = $event->getArgument('data');
  101.                     try {
  102.                         // スプレッドシートに保存
  103.                         $this->piaContactSpreadsheetService->saveRecruit($data);
  104.                         // メール送信
  105.                         $this->piaContactMailService->sendPiaRecruitMail($data);
  106.                         $this->addSuccess('リクルート応募を受け付けました。''front');
  107.                     } catch (\Exception $e) {
  108.                         $this->addError('申込処理中にエラーが発生しました: ' $e->getMessage(), 'front');
  109.                         error_log('Recruit Process Error: ' $e->getMessage());
  110.                         return $this->redirectToRoute('plugin_pia_form_recruit');
  111.                     }
  112.                     return $this->redirectToRoute('plugin_pia_form_recruit_complete');
  113.             }
  114.         }
  115.         return [
  116.             'form' => $form->createView(),
  117.         ];
  118.     }
  119.     /**
  120.      * リクルート応募完了画面
  121.      *
  122.      * @Route("/form_recruit/complete", name="plugin_pia_form_recruit_complete")
  123.      */
  124.     public function complete()
  125.     {
  126.         return $this->render('@PiaContact/default/form_recruit/complete.twig');
  127.     }
  128. }