<?php
namespace Plugin\PiaContact\Controller;
use Eccube\Controller\AbstractController;
use Eccube\Event\EventArgs;
use Eccube\Event\EccubeEvents;
use Plugin\PiaContact\Form\Type\SellGoldBarsType;
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 SellGoldBarsController 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("/sell_gold_bars", name="plugin_pia_sell_gold_bars")
* @Template("@PiaContact/default/sell_gold_bars/index.twig")
*/
public function index(Request $request)
{
$builder = $this->formFactory->createBuilder(SellGoldBarsType::class);
// ログインユーザーの情報を設定
if ($this->authorizationChecker->isGranted('ROLE_USER')) {
/** @var \Eccube\Entity\Customer $user */
$user = $this->getUser();
$builder->setData([
'name' => [
'name01' => $user->getName01(),
'name02' => $user->getName02(),
],
'tel' => $user->getPhoneNumber(),
'email' => $user->getEmail(),
]);
}
// FRONT_CONTACT_INDEX_INITIALIZE
$event = new EventArgs(
[
'builder' => $builder,
],
$request
);
$this->eventDispatcher->dispatch($event, EccubeEvents::FRONT_CONTACT_INDEX_INITIALIZE);
$form = $builder->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
switch ($request->get('mode')) {
case 'confirm':
// 確認画面
return $this->render('@PiaContact/default/sell_gold_bars/confirm.twig', [
'form' => $form->createView(),
]);
case 'complete':
// 完了処理
$data = $form->getData();
$data["create_date"] = date("Y-m-d H:i:s");
// イベントを実行してデータを保存
$event = new EventArgs(
[
'form' => $form,
'data' => $data,
],
$request
);
$this->eventDispatcher->dispatch($event, EccubeEvents::FRONT_CONTACT_INDEX_COMPLETE);
$data = $event->getArgument('data');
try {
// スプレッドシートに保存
$this->piaContactSpreadsheetService->saveSellGoldBars($data);
// メール送信
$this->piaContactMailService->sendPiaSellGoldBarsMail($data);
$this->addSuccess('ゴールドバーお売りくださいのお問い合わせを受け付けました。', 'front');
} catch (\Exception $e) {
$this->addError('申込処理中にエラーが発生しました: ' . $e->getMessage(), 'front');
error_log('SellGoldBars Process Error: ' . $e->getMessage());
return [
'form' => $form->createView(),
];
}
return $this->redirectToRoute('plugin_pia_sell_gold_bars_complete');
}
}
return [
'form' => $form->createView(),
];
}
/**
* ゴールドバーお売りください完了画面
*
* @Route("/sell_gold_bars/complete", name="plugin_pia_sell_gold_bars_complete")
*/
public function complete()
{
return $this->render('@PiaContact/default/sell_gold_bars/complete.twig');
}
}