Example #1
0
 public function detail(Application $app, Request $request, $id)
 {
     $BaseInfo = $app['eccube.repository.base_info']->get();
     if ($BaseInfo->getNostockHidden() === Constant::ENABLED) {
         $app['orm.em']->getFilters()->enable('nostock_hidden');
     }
     /* @var $Product \Eccube\Entity\Product */
     $Product = $app['eccube.repository.product']->get($id);
     if (!$request->getSession()->has('_security_admin') && $Product->getStatus()->getId() !== 1) {
         throw new NotFoundHttpException();
     }
     if (count($Product->getProductClasses()) < 1) {
         throw new NotFoundHttpException();
     }
     /* @var $builder \Symfony\Component\Form\FormBuilderInterface */
     $builder = $app['form.factory']->createNamedBuilder('', 'add_cart', null, array('product' => $Product, 'id_add_product_id' => false));
     /* @var $form \Symfony\Component\Form\FormInterface */
     $form = $builder->getForm();
     if ($request->getMethod() === 'POST') {
         $form->handleRequest($request);
         if ($form->isValid()) {
             $addCartData = $form->getData();
             if ($addCartData['mode'] === 'add_favorite') {
                 if ($app->isGranted('ROLE_USER')) {
                     $Customer = $app->user();
                     $app['eccube.repository.customer_favorite_product']->addFavorite($Customer, $Product);
                     $app['session']->getFlashBag()->set('product_detail.just_added_favorite', $Product->getId());
                     return $app->redirect($app->url('product_detail', array('id' => $Product->getId())));
                 } else {
                     // 非会員の場合、ログイン画面を表示
                     //  ログイン後の画面遷移先を設定
                     $app->setLoginTargetPath($app->url('product_detail', array('id' => $Product->getId())));
                     $app['session']->getFlashBag()->set('eccube.add.favorite', true);
                     return $app->redirect($app->url('mypage_login'));
                 }
             } else {
                 try {
                     $app['eccube.service.cart']->addProduct($addCartData['product_class_id'], $addCartData['quantity'])->save();
                 } catch (CartException $e) {
                     $app->addRequestError($e->getMessage());
                 }
                 return $app->redirect($app->url('cart'));
             }
         }
     } else {
         $addFavorite = $app['session']->getFlashBag()->get('eccube.add.favorite');
         if (!empty($addFavorite)) {
             // お気に入り登録時にログインされていない場合、ログイン後にお気に入り追加処理を行う
             if ($app->isGranted('ROLE_USER')) {
                 $Customer = $app->user();
                 $app['eccube.repository.customer_favorite_product']->addFavorite($Customer, $Product);
                 $app['session']->getFlashBag()->set('product_detail.just_added_favorite', $Product->getId());
             }
         }
     }
     $is_favorite = false;
     if ($app->isGranted('ROLE_USER')) {
         $Customer = $app->user();
         $is_favorite = $app['eccube.repository.customer_favorite_product']->isFavorite($Customer, $Product);
     }
     return $app->render('Product/detail.twig', array('title' => $this->title, 'subtitle' => $Product->getName(), 'form' => $form->createView(), 'Product' => $Product, 'is_favorite' => $is_favorite));
 }