app/Customize/Controller/Admin/Product/ProductPriorityController.php line 233

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of EC-CUBE
  4.  *
  5.  * Copyright(c) EC-CUBE CO.,LTD. All Rights Reserved.
  6.  *
  7.  * http://www.ec-cube.co.jp/
  8.  *
  9.  * For the full copyright and license information, please view the LICENSE
  10.  * file that was distributed with this source code.
  11.  */
  12. namespace Customize\Controller\Admin\Product;
  13. use Eccube\Controller\AbstractController;
  14. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. use Symfony\Component\HttpFoundation\Request;
  17. use Symfony\Component\HttpFoundation\Response;
  18. use Eccube\Common\EccubeConfig;
  19. use Customize\Constant;
  20. use Eccube\Event\EventArgs;
  21. use Eccube\Event\EccubeEvents;
  22. use Eccube\Repository\Master\PageMaxRepository;
  23. use Eccube\Repository\CategoryRepository;
  24. use Customize\Entity\Master\Disp;
  25. use Customize\Form\Type\Admin\SearchProductPriorityType;
  26. use Customize\Form\Type\Admin\ProductPriorityCategoryType;
  27. use Customize\Repository\ProductPriorityRepository;
  28. use Eccube\Repository\CustomerRepository;
  29. use Knp\Component\Pager\PaginatorInterface;
  30. use Eccube\Util\FormUtil;
  31. use Customize\Entity\ProductPriority;
  32. use Customize\Repository\SchoolRepository;
  33. use Customize\Repository\ProductSchoolRepository;
  34. use Eccube\Repository\ProductRepository;
  35. class ProductPriorityController extends AbstractController
  36.     /**
  37.      * @var pageMaxRepository
  38.      */
  39.     protected $pageMaxRepository;
  40.     /**
  41.      * @var EccubeConfig
  42.      */
  43.     protected $eccubeConfig;             
  44.     /**
  45.      * @var productPriorityRepository
  46.      */
  47.     protected $productPriorityRepository;   
  48.     /**
  49.      * @var customerRepository
  50.      */
  51.     protected $customerRepository;
  52.     /**
  53.      * @var categoryRepository
  54.      */
  55.     protected $categoryRepository;
  56.     /**
  57.      * @var schoolRepository
  58.      */
  59.     protected $schoolRepository
  60.     /**
  61.      * @var productSchoolRepository
  62.      */
  63.     protected $productSchoolRepository;
  64.     /**
  65.      * @var productRepository
  66.      */
  67.     protected $productRepository;    
  68.     public function __construct(
  69.         PageMaxRepository $pageMaxRepository,
  70.         EccubeConfig $eccubeConfig,
  71.         ProductPriorityRepository $productPriorityRepository,
  72.         CustomerRepository $customerRepository,
  73.         CategoryRepository $categoryRepository,
  74.         SchoolRepository $schoolRepository,
  75.         ProductSchoolRepository $productSchoolRepository,
  76.         ProductRepository $productRepository        
  77.     ) {
  78.         $this->pageMaxRepository $pageMaxRepository;
  79.         $this->eccubeConfig $eccubeConfig;
  80.         $this->productPriorityRepository $productPriorityRepository;
  81.         $this->customerRepository $customerRepository;
  82.         $this->categoryRepository $categoryRepository;
  83.         $this->schoolRepository $schoolRepository;
  84.         $this->productSchoolRepository $productSchoolRepository;
  85.         $this->productRepository $productRepository;
  86.     }   
  87.     /**
  88.      * 商品並び順の一覧表示.
  89.      *
  90.      * @param Request     $request
  91.      * @param null        $categoryId null: 全商品, 1~: カテゴリ表示
  92.      *
  93.      * @return array
  94.      */       
  95.     /**
  96.      * @Route("/%eccube_admin_route%/product/priority", name="admin_product_priority", methods={"GET", "POST"})
  97.      * @Route("/%eccube_admin_route%/product/priority/{schoolId}", name="admin_product_priority_edit", requirements={"schoolId" = "\d+"}, methods={"GET", "POST"})
  98.      * @Template("@admin/ProductPriority/index.twig")
  99.      */
  100.     public function index(Request $request$schoolId null)
  101.     {
  102.         // カテゴリの取得
  103.         // $Category = is_null($categoryId)
  104.         //     ? null
  105.         //     : $this->categoryRepository->find($categoryId);
  106.         // 商品並び順の取得
  107.         // $Priorities = $this->productPriorityRepository
  108.         //     ->getPrioritiesByCategoryAsArray($Category);
  109.         $School is_null($schoolId) ? $this->schoolRepository->findAll()[0] : $this->schoolRepository->find($schoolId);
  110.         $Priorities $this->productSchoolRepository->findProductRankBySchool($School);
  111.         // カテゴリ一覧プルダウンForm生成
  112.         $builder $this->formFactory
  113.             ->createBuilder(
  114.                 ProductPriorityCategoryType::class
  115.             );
  116.         $form $builder->getForm();
  117.         // モーダルの商品検索Form生成
  118.         // $builder = $this->formFactory
  119.         //     ->createBuilder(
  120.         //         SearchProductPriorityType::class,
  121.         //         array(
  122.         //             'category_name' => is_null($Category) ? '全ての商品' : $Category->getName(),
  123.         //         )
  124.         //     );
  125.         // $searchProductModalForm = $builder->getForm();
  126.         return array(
  127.                 'form' => $form->createView(),
  128.                 // 'searchProductModalForm' => $searchProductModalForm->createView(),
  129.                 'Priorities' => $Priorities,
  130.                 'School' => $School
  131.             );
  132.     }
  133.     /**
  134.      * 商品並び順の並び替えを行う.
  135.      * 
  136.      * @Route("/%eccube_admin_route%/product/priority/move/{schoolId}", name="admin_product_priority_move",  requirements={"schoolId" = "\d+"}, methods={"POST"})
  137.      *
  138.      * @param Request     $request
  139.      * @param $schoolId
  140.      *
  141.      * @return boolean
  142.      */
  143.     public function move(Request $request$schoolId)
  144.     {
  145.         if (!$request->isXmlHttpRequest()) {
  146.             throw new BadRequestHttpException();
  147.         }
  148.         $ranks $request->request->all();
  149.         foreach ($ranks as $productId => $rank) {
  150.             $Priority $this->productSchoolRepository
  151.                 ->findOneBy(array('Product' => $this->productRepository->find($productId), 'School' => $this->schoolRepository->find($schoolId)));
  152.             if($Priority){
  153.                 $Priority->setRank($rank);
  154.                 $this->entityManager->persist($Priority);
  155.             }
  156.         }
  157.         $this->entityManager->flush();
  158.         return new Response();
  159.     }
  160.     /**
  161.      * 商品並び順の一括削除.
  162.      *
  163.      * @Route("/%eccube_admin_route%/product/priority/delete/{categoryId}", name="admin_product_priority_delete",  requirements={"categoryId" = "\d+"}, methods={"POST"})
  164.      * 
  165.      * @param Request     $request
  166.      * @param $categoryId
  167.      *
  168.      * @return boolean
  169.      */
  170.     public function delete(Request $request$categoryId)
  171.     {
  172.         if (!$request->isXmlHttpRequest()) {
  173.             throw new BadRequestHttpException();
  174.         }
  175.         $productIds $request->request->all();
  176.         foreach ($productIds as $productId) {
  177.             $Priority $this->productPriorityRepository
  178.                 ->find(array('product_id' => $productId'category_id' => $categoryId));
  179.             $this->entityManager->remove($Priority);
  180.         }
  181.         $this->entityManager->flush();
  182.         // 並び順の振り直しを行う.
  183.         $Priorities $this->productPriorityRepository
  184.             ->findBy(array('category_id' => $categoryId), array('priority' => 'ASC'));
  185.         $i 1;
  186.         foreach ($Priorities as $Priority) {
  187.             $Priority->setPriority($i++);
  188.             $this->entityManager->persist($Priority);
  189.         }
  190.         $this->entityManager->flush();
  191.         $this->addSuccess('admin.delete.complete''admin');
  192.         return new Response();
  193.     }
  194.     /**
  195.      * モーダル:商品検索.
  196.      *
  197.      * @Route("/%eccube_admin_route%/product/priority/search", name="admin_product_priority_search", methods={"GET", "POST"})
  198.      *  @Template("@admin/ProductPriority/search_product.twig")
  199.      * 
  200.      * @param Request     $request
  201.      *
  202.      * @return Response
  203.      */
  204.     public function search(Request $request$page_no nullPaginatorInterface $paginator)
  205.     {
  206.         if (!$request->isXmlHttpRequest()) {
  207.             throw new BadRequestHttpException();
  208.         }
  209.         $search $request->get('search');
  210.         $Category null;
  211.         if ($categoryId $request->get('category_id')) {
  212.             $Category $this->categoryRepository->find($categoryId);
  213.         }
  214.         // 表示件数は順番で取得する、1.SESSION 2.設定ファイル
  215.         $page_count $this->session->get('eccube.admin.product_priority.search.page_count'$this->eccubeConfig['eccube_default_page_count']);
  216.         $qb $this->productPriorityRepository
  217.             ->getProductQueryBuilder($search$Category);
  218.         $pagination $paginator->paginate(
  219.             $qb,
  220.             $page_no $page_no 1,
  221.             $page_count,
  222.             array('wrap-queries' => true)
  223.         );   
  224.         return array(
  225.                 'pagination' => $pagination,
  226.             );
  227.     }
  228.     /**
  229.      * モーダル:商品並び順の登録.
  230.      *
  231.      * @Route("/%eccube_admin_route%/product/priority/register/{categoryId}", name="admin_product_priority_register", requirements={"categoryId" = "\d+"}, methods={"POST"})
  232.      *  
  233.      * @param Request     $request
  234.      * @param $categoryId
  235.      *
  236.      * @return bool
  237.      */
  238.     public function register(Request $request$categoryId)
  239.     {
  240.         if (!$request->isXmlHttpRequest()) {
  241.             throw new BadRequestHttpException();
  242.         }
  243.         $productIds $request->get('productIds');
  244.         foreach ($productIds as $productId) {
  245.             $count $this->productPriorityRepository
  246.                 ->countProductCategory($productId$categoryId);
  247.             // 別タブで商品やカテゴリが削除されているような場合は登録をスキップ.
  248.             if ($count 0) {
  249.                 continue;
  250.             }
  251.             $ProductPriority = new ProductPriority();
  252.             $ProductPriority->setProductId($productId);
  253.             $ProductPriority->setCategoryId($categoryId);
  254.             $max $this->productPriorityRepository
  255.                 ->getMaxPriorityByCategoryId($categoryId);
  256.             $ProductPriority->setPriority($max 1);
  257.             $this->entityManager->persist($ProductPriority);
  258.             $this->entityManager->flush();
  259.         }
  260.         $this->addSuccess('admin.register.complete''admin');
  261.         return new Response();
  262.     }
  263. }