app/Customize/Controller/AdvanceController.php line 54

Open in your IDE?
  1. <?php
  2. namespace Customize\Controller;
  3. use Customize\Entity\Advances;
  4. use Customize\Form\Type\AdvanceType;
  5. use Customize\Repository\AdvanceRepository;
  6. use Customize\Service\AdvanceService;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Eccube\Controller\AbstractController;
  9. use Eccube\Entity\Customer;
  10. use Eccube\Repository\CustomerRepository;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\Security\Core\Encoder\EncoderFactoryInterface;
  15. use Eccube\Service\MailService// 追加
  16. class AdvanceController extends AbstractController{
  17.     /** @var EntityManagerInterface */
  18.     protected $entityManager;
  19.     /** @var AdvanceRepository */
  20.     protected $advanceRepository;
  21.     /** @var AdvanceService */
  22.     protected $advanceService;
  23.     /** @var EncoderFactoryInterface */
  24.     protected $encoderFactory;
  25.     /** @var CustomerRepository */
  26.     protected $customerRepository;
  27.     /** @var MailService */
  28.     protected $mailService// 追加
  29.     public function __construct(
  30.         EntityManagerInterface  $entityManager,
  31.         AdvanceRepository       $advanceRepository,
  32.         AdvanceService          $advanceService,
  33.         EncoderFactoryInterface $encoderFactory,
  34.         CustomerRepository      $customerRepository,
  35.         MailService             $mailService // 追加
  36.     ) {
  37.         $this->entityManager        $entityManager;
  38.         $this->advanceRepository    $advanceRepository;
  39.         $this->advanceService       $advanceService;
  40.         $this->encoderFactory       $encoderFactory;
  41.         $this->customerRepository   $customerRepository;
  42.         $this->mailService          $mailService// 追加
  43.     }
  44.     /**
  45.      * 事前申込画面
  46.      * 
  47.      * @Route("/advance", name="advance_index", methods={"GET", "POST"})
  48.      */
  49.     public function index(Request $request): Response
  50.     {
  51.         // ログイン状態のチェック
  52.         $isLoggedIn $this->isGranted('ROLE_USER');
  53.         $customer $isLoggedIn $this->getUser() : null;
  54.         $form $this->createForm(AdvanceType::class, null, [
  55.             'is_logged_in' => $isLoggedIn,
  56.         ]);
  57.         $form->handleRequest($request);
  58.         if ($form->isSubmitted() && $form->isValid()) {
  59.             $data $form->getData();
  60.             if (!$isLoggedIn) {
  61.                 $customer = new Customer();
  62.                 $encoder $this->encoderFactory->getEncoder($customer);
  63.                 $salt $encoder->createSalt();
  64.                 $password $encoder->encodePassword($form->get('plain_password')->getData(), $salt);
  65.                 $secretKey $this->customerRepository->getUniqueSecretKey();
  66.                 $customer
  67.                     ->setSalt($salt)
  68.                     ->setPassword($password)
  69.                     ->setSecretKey($secretKey)
  70.                     ->setPoint(0);
  71.                 $customer
  72.                     ->setCompanyName($form->get('club_name')->getData())
  73.                     ->setName01($form->get('name01')->getData())
  74.                     ->setName02($form->get('name02')->getData())
  75.                     ->setKana01($form->get('kana01')->getData())
  76.                     ->setKana02($form->get('kana02')->getData())
  77.                     ->setEmail($form->get('email')->getData())
  78.                     ->setPostalCode($form->get('postal_code')->getData())
  79.                     ->setPref($form->get('pref')->getData())
  80.                     ->setAddr01($form->get('addr01')->getData())
  81.                     ->setAddr02($form->get('addr02')->getData())
  82.                     ->setPhoneNumber($form->get('phone_number')->getData());
  83.                 $this->entityManager->persist($customer);
  84.                 $this->entityManager->flush();
  85.                 $advance = new Advances();
  86.                 $advance->setCustomer($customer);
  87.             } else {
  88.                 $advance $form->getData();
  89.                 $advance->setCustomer($customer);
  90.             }
  91.             $advance
  92.                 ->setToken($customer->getId() . "_" strtoupper(bin2hex(random_bytes(3))))
  93.                 ->setCourses1($data['Courses1'])
  94.                 ->setCourses2($data['Courses2'])
  95.                 ->setCourses3($data['Courses3'])
  96.                 ->setHope1($data['hope_1'])
  97.                 ->setHope2($data['hope_2'])
  98.                 ->setHope3($data['hope_3'])
  99.                 ->setCourse1Use($data['course1_use'])
  100.                 ->setCourse2Use($data['course2_use'])
  101.                 ->setCourse3Use($data['course3_use'])
  102.                 ->setNote($data['note'])
  103.                 ->setIsAgreed($data['is_agreed']);
  104.             // 事前申込データを保存
  105.             $this->advanceService->create($advance);
  106.             // メール送信処理を追加
  107.             $this->advanceService->sendAdvanceMail($advance);
  108.             return $this->redirectToRoute('advance_complete');
  109.         }
  110.         return $this->render('Advance/index.twig', [
  111.             'form'              => $form->createView(),
  112.             'is_logged_in'      => $isLoggedIn,
  113.             'customer'          => $customer,
  114.             'year'              => date('Y'),
  115.             'year_next'         => date('Y'strtotime('+1 year')),
  116.         ]);
  117.     }
  118.     /**
  119.      * 事前申込完了画面
  120.      * 
  121.      * @Route("/advance/complete", name="advance_complete", methods={"GET"})
  122.      */
  123.     public function complete(Request $request): Response
  124.     {
  125.         return $this->render('Advance/complete.twig', [
  126.             'year'      => date('Y'),
  127.             'year_next' => date('Y'strtotime('+1 year')),
  128.         ]);
  129.     }
  130.     /**
  131.      * マイページ/事前予約一覧画面
  132.      *
  133.      * @Route("/mypage/advance", name="mypage_advance", methods={"GET"})
  134.      */
  135.     public function mypage(Request $request): Response
  136.     {
  137.         $Customer $this->getUser();
  138.         $advanceList $this->advanceRepository->findBy(['Customer' => $Customer]);
  139.         return $this->render('Advance/mypage.twig', [
  140.             'advanceList' => $advanceList,
  141.         ]);
  142.     }
  143.     /**
  144.      * 事前予約詳細画面
  145.      *
  146.      * @Route("/mypage/advance/{id}", name="mypage_advance_detail", requirements={"id" = "\d+"}, methods={"GET"})
  147.      */
  148.     public function detail(Request $request$id): Response
  149.     {
  150.         $Customer $this->getUser();
  151.         $Advance $this->advanceRepository->findOneBy([
  152.             'id' => $id,
  153.             'Customer' => $Customer,
  154.         ]);
  155.         if (!$Advance) {
  156.             throw $this->createNotFoundException('事前予約が見つかりません。');
  157.         }
  158.         return $this->render('Advance/detail.twig', [
  159.             'Advance' => $Advance,
  160.         ]);
  161.     }
  162. }