app/Customize/Controller/Mypage/MypageController.php line 94

Open in your IDE?
  1. <?php
  2. namespace Customize\Controller\Mypage;
  3. use Eccube\Controller\Mypage\MypageController as BaseMypageController;
  4. use Eccube\Controller\AbstractController;
  5. use Eccube\Entity\BaseInfo;
  6. use Eccube\Entity\Customer;
  7. use Eccube\Entity\Order;
  8. use Eccube\Entity\OrderItem;
  9. use Eccube\Entity\Product;
  10. use Eccube\Event\EccubeEvents;
  11. use Eccube\Event\EventArgs;
  12. use Eccube\Exception\CartException;
  13. use Eccube\Form\Type\Front\CustomerLoginType;
  14. use Eccube\Repository\BaseInfoRepository;
  15. use Eccube\Repository\CustomerFavoriteProductRepository;
  16. use Eccube\Repository\OrderRepository;
  17. use Eccube\Repository\OrderItemRepository;
  18. use Eccube\Repository\ProductRepository;
  19. use Eccube\Service\CartService;
  20. use Eccube\Service\PurchaseFlow\PurchaseContext;
  21. use Eccube\Service\PurchaseFlow\PurchaseFlow;
  22. use Knp\Component\Pager\PaginatorInterface;
  23. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  24. use Symfony\Component\HttpFoundation\Request;
  25. use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
  26. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  27. use Symfony\Component\Routing\Annotation\Route;
  28. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  29. // use Symfony\Component\HttpFoundation\RequestStack;
  30. class MypageController extends BaseMypageController
  31. {
  32.     /**
  33.      * @var OrderItemRepository
  34.      */
  35.     protected $orderItemRepository;
  36.     // /**
  37.     //  * @var RequestStack
  38.     //  */
  39.     // protected $requestStack;
  40.     /**
  41.      * MypageController constructor.
  42.      *
  43.      * @param OrderRepository $orderRepository
  44.      * @param CustomerFavoriteProductRepository $customerFavoriteProductRepository
  45.      * @param CartService $cartService
  46.      * @param BaseInfoRepository $baseInfoRepository
  47.      * @param PurchaseFlow $purchaseFlow
  48.      * @param OrderItemRepository $orderItemRepository
  49.      */
  50.     // * @param RequestStack $requestStack
  51.     public function __construct(
  52.         OrderRepository $orderRepository,
  53.         CustomerFavoriteProductRepository $customerFavoriteProductRepository,
  54.         CartService $cartService,
  55.         BaseInfoRepository $baseInfoRepository,
  56.         PurchaseFlow $purchaseFlow,
  57.         OrderItemRepository $orderItemRepository
  58.         // RequestStack $requestStack
  59.     ) {
  60.         parent::__construct(
  61.             $orderRepository,
  62.             $customerFavoriteProductRepository,
  63.             $cartService,
  64.             $baseInfoRepository,
  65.             $purchaseFlow
  66.         );
  67.         $this->orderItemRepository $orderItemRepository;
  68.         // $this->requestStack = $requestStack;
  69.     }
  70.     /**
  71.      * ログイン画面(override).
  72.      *
  73.      * @Route("/mypage/login", name="mypage_login", methods={"GET", "POST"})
  74.      * @Template("Mypage/login.twig")
  75.      */
  76.     public function login(Request $requestAuthenticationUtils $utils)
  77.     {
  78.         if ($this->isGranted('IS_AUTHENTICATED_FULLY')) {
  79.             log_info('認証済のためログイン処理をスキップ');
  80.             return $this->redirectToRoute('mypage');
  81.         }
  82.         /* @var $form \Symfony\Component\Form\FormInterface */
  83.         $builder $this->formFactory
  84.             ->createNamedBuilder(''CustomerLoginType::class);
  85.         $builder->get('login_memory')->setData((bool) $request->getSession()->get('_security.login_memory'));
  86.         if ($this->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
  87.             $Customer $this->getUser();
  88.             if ($Customer instanceof Customer) {
  89.                 $builder->get('login_email')
  90.                     ->setData($Customer->getEmail());
  91.             }
  92.         }
  93.         $event = new EventArgs(
  94.             [
  95.                 'builder' => $builder,
  96.             ],
  97.             $request
  98.         );
  99.         $this->eventDispatcher->dispatch($eventEccubeEvents::FRONT_MYPAGE_MYPAGE_LOGIN_INITIALIZE);
  100.         $form $builder->getForm();
  101.         $error $utils->getLastAuthenticationError();
  102.         // ログイン前に指定したURLへ遷移(override範囲) ▼▼▼
  103.         // url: https://amidaike.hatenablog.com/entry/2019/01/29/202133
  104.         // ログイン前の画面へ戻す
  105.         /*
  106.         if (!$error) {
  107.             // ログインエラーがなければ戻り先をセット
  108.             $referer = $request->headers->get('referer');
  109.             if ($referer) {
  110.                 // refererチェック
  111.                 $referers = parse_url($referer);
  112.                 if ($referers['host'] == $request->getHost()) {
  113.                     // ホストが同一であればrefererをセット
  114.                     $requestStackUri = $this->requestStack->getMasterRequest()->getUri();
  115.                     if ($request->getUri() == $requestStackUri) {
  116.                         // ログイン画面遷移直前のuriをセット
  117.                         $this->setLoginTargetPath($referer);
  118.                     } else {
  119.                         // ログイン必須画面のuriをセット
  120.                         $this->setLoginTargetPath($requestStackUri);
  121.                     }
  122.                 }
  123.             }
  124.         }
  125.         */
  126.         // ログイン前に指定したURLへ遷移 ▲▲▲
  127.         return [
  128.             'error' => $error,
  129.             'form' => $form->createView(),
  130.         ];
  131.     }
  132.     /**
  133.      * 受取確認を行う.
  134.      *
  135.      * @Route("/mypage/uketori/{order_no}/{order_item_id}", name="mypage_uketori", methods={"PUT"})
  136.      */
  137.     public function uketori(Request $request$order_no$order_item_id)
  138.     {
  139.         $this->isTokenValid();
  140.         log_info('受取確認開始', [$order_no$order_item_id]);
  141.         $OrderItem $this->orderItemRepository->find($order_item_id);
  142.         if (!$OrderItem) {
  143.             log_info('対象の注文が見つかりません', [$order_no$order_item_id]);
  144.             if (!$request->isXmlHttpRequest()) {
  145.                 //注文詳細からの場合は例外
  146.                 throw new NotFoundHttpException();
  147.             } else {
  148.                 //注文履歴一覧からajaxでの場合は500エラーで
  149.                 return $this->json(['result' => false'message' => '対象の注文が見つかりません'], 500);
  150.             }
  151.         }
  152.         $this->entityManager->persist($OrderItem);
  153.         $OrderItem->setUketoriDate(new \DateTime());
  154.         $OrderItem->setUketoriKbn("0");    // 0:ユーザ本人/1:管理
  155.         $this->entityManager->flush();
  156.         log_info('受取確認完了', [$order_no$order_item_id]);
  157.         if (!$request->isXmlHttpRequest()) {
  158.             //注文詳細からの場合はredirect
  159.             return $this->redirect($this->generateUrl('mypage_history', ['order_no' => $order_no]));
  160.         } else {
  161.             //注文履歴一覧からajaxで
  162.             return $this->json(['result' => true]);
  163.         }
  164.     }
  165. }