<?php
namespace Customize\Controller;
use Customize\Entity\Advances;
use Customize\Form\Type\AdvanceType;
use Customize\Repository\AdvanceRepository;
use Customize\Service\AdvanceService;
use Doctrine\ORM\EntityManagerInterface;
use Eccube\Controller\AbstractController;
use Eccube\Entity\Customer;
use Eccube\Repository\CustomerRepository;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Core\Encoder\EncoderFactoryInterface;
use Eccube\Service\MailService; // 追加
class AdvanceController extends AbstractController{
/** @var EntityManagerInterface */
protected $entityManager;
/** @var AdvanceRepository */
protected $advanceRepository;
/** @var AdvanceService */
protected $advanceService;
/** @var EncoderFactoryInterface */
protected $encoderFactory;
/** @var CustomerRepository */
protected $customerRepository;
/** @var MailService */
protected $mailService; // 追加
public function __construct(
EntityManagerInterface $entityManager,
AdvanceRepository $advanceRepository,
AdvanceService $advanceService,
EncoderFactoryInterface $encoderFactory,
CustomerRepository $customerRepository,
MailService $mailService // 追加
) {
$this->entityManager = $entityManager;
$this->advanceRepository = $advanceRepository;
$this->advanceService = $advanceService;
$this->encoderFactory = $encoderFactory;
$this->customerRepository = $customerRepository;
$this->mailService = $mailService; // 追加
}
/**
* 事前申込画面
*
* @Route("/advance", name="advance_index", methods={"GET", "POST"})
*/
public function index(Request $request): Response
{
// ログイン状態のチェック
$isLoggedIn = $this->isGranted('ROLE_USER');
$customer = $isLoggedIn ? $this->getUser() : null;
$form = $this->createForm(AdvanceType::class, null, [
'is_logged_in' => $isLoggedIn,
]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
if (!$isLoggedIn) {
$customer = new Customer();
$encoder = $this->encoderFactory->getEncoder($customer);
$salt = $encoder->createSalt();
$password = $encoder->encodePassword($form->get('plain_password')->getData(), $salt);
$secretKey = $this->customerRepository->getUniqueSecretKey();
$customer
->setSalt($salt)
->setPassword($password)
->setSecretKey($secretKey)
->setPoint(0);
$customer
->setCompanyName($form->get('club_name')->getData())
->setName01($form->get('name01')->getData())
->setName02($form->get('name02')->getData())
->setKana01($form->get('kana01')->getData())
->setKana02($form->get('kana02')->getData())
->setEmail($form->get('email')->getData())
->setPostalCode($form->get('postal_code')->getData())
->setPref($form->get('pref')->getData())
->setAddr01($form->get('addr01')->getData())
->setAddr02($form->get('addr02')->getData())
->setPhoneNumber($form->get('phone_number')->getData());
$this->entityManager->persist($customer);
$this->entityManager->flush();
$advance = new Advances();
$advance->setCustomer($customer);
} else {
$advance = $form->getData();
$advance->setCustomer($customer);
}
$advance
->setToken($customer->getId() . "_" . strtoupper(bin2hex(random_bytes(3))))
->setCourses1($data['Courses1'])
->setCourses2($data['Courses2'])
->setCourses3($data['Courses3'])
->setHope1($data['hope_1'])
->setHope2($data['hope_2'])
->setHope3($data['hope_3'])
->setCourse1Use($data['course1_use'])
->setCourse2Use($data['course2_use'])
->setCourse3Use($data['course3_use'])
->setNote($data['note'])
->setIsAgreed($data['is_agreed']);
// 事前申込データを保存
$this->advanceService->create($advance);
// メール送信処理を追加
$this->advanceService->sendAdvanceMail($advance);
return $this->redirectToRoute('advance_complete');
}
return $this->render('Advance/index.twig', [
'form' => $form->createView(),
'is_logged_in' => $isLoggedIn,
'customer' => $customer,
'year' => date('Y'),
'year_next' => date('Y', strtotime('+1 year')),
]);
}
/**
* 事前申込完了画面
*
* @Route("/advance/complete", name="advance_complete", methods={"GET"})
*/
public function complete(Request $request): Response
{
return $this->render('Advance/complete.twig', [
'year' => date('Y'),
'year_next' => date('Y', strtotime('+1 year')),
]);
}
/**
* マイページ/事前予約一覧画面
*
* @Route("/mypage/advance", name="mypage_advance", methods={"GET"})
*/
public function mypage(Request $request): Response
{
$Customer = $this->getUser();
$advanceList = $this->advanceRepository->findBy(['Customer' => $Customer]);
return $this->render('Advance/mypage.twig', [
'advanceList' => $advanceList,
]);
}
/**
* 事前予約詳細画面
*
* @Route("/mypage/advance/{id}", name="mypage_advance_detail", requirements={"id" = "\d+"}, methods={"GET"})
*/
public function detail(Request $request, $id): Response
{
$Customer = $this->getUser();
$Advance = $this->advanceRepository->findOneBy([
'id' => $id,
'Customer' => $Customer,
]);
if (!$Advance) {
throw $this->createNotFoundException('事前予約が見つかりません。');
}
return $this->render('Advance/detail.twig', [
'Advance' => $Advance,
]);
}
}