<?php
namespace Plugin\PiaContact\Controller;
use Eccube\Controller\AbstractController;
use Eccube\Event\EventArgs;
use Eccube\Event\EccubeEvents;
use Plugin\PiaContact\Form\Type\FormRecruitType;
use Plugin\PiaContact\Service\PiaContactMailService;
use Plugin\PiaContact\Service\PiaContactSpreadsheetService;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
class RecruitController extends AbstractController
{
protected $piaContactMailService;
protected $piaContactSpreadsheetService;
protected $authorizationChecker;
protected $eventDispatcher;
public function __construct(
PiaContactMailService $piaContactMailService,
PiaContactSpreadsheetService $piaContactSpreadsheetService,
AuthorizationCheckerInterface $authorizationChecker,
EventDispatcherInterface $eventDispatcher
) {
$this->piaContactMailService = $piaContactMailService;
$this->piaContactSpreadsheetService = $piaContactSpreadsheetService;
$this->authorizationChecker = $authorizationChecker;
$this->eventDispatcher = $eventDispatcher;
}
/**
* リクルート応募フォーム
*
* @Route("/form_recruit", name="plugin_pia_form_recruit")
* @Template("@PiaContact/default/form_recruit/index.twig")
*/
public function index(Request $request)
{
$builder = $this->formFactory->createBuilder(FormRecruitType::class);
// ログインユーザーの情報を設定(フォーム送信後にデータを取得)
$form = $builder->getForm();
if ($this->authorizationChecker->isGranted('ROLE_USER')) {
/** @var \Eccube\Entity\Customer $user */
$user = $this->getUser();
// NameTypeフィールドにデータを設定
$form->get('name')->get('name01')->setData($user->getName01());
$form->get('name')->get('name02')->setData($user->getName02());
// KanaTypeフィールドにデータを設定se
$form->get('kana')->get('kana01')->setData($user->getKana01());
$form->get('kana')->get('kana02')->setData($user->getKana02());
// 生年月日
if ($user->getBirth()) {
$form->get('birth')->setData($user->getBirth());
}
// 性別
if ($user->getSex()) {
$form->get('sex')->setData($user->getSex());
}
// PostalTypeフィールドにデータを設定
$form->get('zip')->setData($user->getPostalCode());
// AddressTypeフィールドにデータを設定
$form->get('address')->get('pref')->setData($user->getPref());
$form->get('address')->get('addr01')->setData($user->getAddr01());
$form->get('address')->get('addr02')->setData($user->getAddr02());
// PhoneNumberTypeフィールドにデータを設定
$form->get('tel')->setData($user->getPhoneNumber());
// メールアドレス
$form->get('email')->setData($user->getEmail());
}
// FRONT_CONTACT_INDEX_INITIALIZE
$event = new EventArgs(
[
'builder' => $builder,
],
$request
);
$this->eventDispatcher->dispatch($event, EccubeEvents::FRONT_CONTACT_INDEX_INITIALIZE);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
switch ($request->get('mode')) {
case 'confirm':
// 確認画面
return $this->render('@PiaContact/default/form_recruit/confirm.twig', [
'form' => $form->createView(),
]);
case 'complete':
// 完了処理
$data = $form->getData();
$data["create_date"] = date("Y-m-d H:i:s");
$data["name"] = $data["name01"]." ".$data["name02"];
// イベントを実行してデータを保存
// $event = new EventArgs(
// [
// 'form' => $form,
// 'data' => $data,
// ],
// $request
// );
// $this->eventDispatcher->dispatch($event, EccubeEvents::FRONT_CONTACT_INDEX_COMPLETE);
// $data = $event->getArgument('data');
try {
// スプレッドシートに保存
$this->piaContactSpreadsheetService->saveRecruit($data);
// メール送信
$this->piaContactMailService->sendPiaRecruitMail($data);
$this->addSuccess('リクルート応募を受け付けました。', 'front');
} catch (\Exception $e) {
$this->addError('申込処理中にエラーが発生しました: ' . $e->getMessage(), 'front');
error_log('Recruit Process Error: ' . $e->getMessage());
return $this->redirectToRoute('plugin_pia_form_recruit');
}
return $this->redirectToRoute('plugin_pia_form_recruit_complete');
}
}
return [
'form' => $form->createView(),
];
}
/**
* リクルート応募完了画面
*
* @Route("/form_recruit/complete", name="plugin_pia_form_recruit_complete")
*/
public function complete()
{
return $this->render('@PiaContact/default/form_recruit/complete.twig');
}
}