src/Controller/Product/AjaxProductController.php line 28

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Product;
  3. use App\Entity\Product\Brand;
  4. use App\Entity\Product\ProductCategory;
  5. use App\Repository\ConfigurationRepository;
  6. use App\Repository\Product\ProductConfigRepository;
  7. use App\Repository\Product\ProductRepository;
  8. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  9. use Symfony\Component\HttpFoundation\JsonResponse;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. class AjaxProductController extends AbstractController
  13. {
  14.     #[Route('/ajax/product/activ'name'app_ajax_product_all')]
  15.     public function activ(ProductRepository $repository)
  16.     {
  17.         $products $repository->findBy(['is_activ' => true]);
  18.         $data $this->renderView('/product/public/_list.html.twig'compact('products'));
  19.         return new JsonResponse([
  20.             'content' => $data
  21.         ]);
  22.     }
  23.     #[Route('/ajax/product/parameters'name'app_ajax_product_parameters')]
  24.     public function parameters(ProductRepository $repositoryRequest $requestProductConfigRepository $productConfigRepository)
  25.     {
  26.         $productConfig $productConfigRepository->findOneBy([]);
  27.         $design $productConfig->getDesign();
  28.         if ($request->get('product-id')) {
  29.             $ids $request->query->all('product-id');
  30.             $products $repository->findBy(array('id' => $ids));
  31.         } else {
  32.             $template $request->query->get('template');
  33.             if ($template === '' || $template === null) {
  34.                 $template $productConfig->getTemplate();
  35.             }
  36.             $categories $request->query->all('categories') ?? null;
  37.             $brand $request->query->all('brand') ?? null;
  38.             $excludeCat $request->query->get('exclude') ?? null;
  39.             $limit $request->query->get('limit') ?? null;
  40.             $sort $request->query->get('sort') ?? null;
  41.             $order $request->query->get('order') ?? null;
  42.             $queryBuilder $repository->createQueryBuilder('p')
  43.                 ->andWhere('p.is_activ = :isActiv')
  44.                 ->setParameter('isActiv'true);
  45.             if ($categories) {
  46.                 $queryBuilder->leftJoin('p.categories''pc');
  47.                 $queryBuilder->andWhere('pc.id IN (:categories)')
  48.                     ->setParameter('categories'$categories);
  49.             }
  50.             if ($brand) {
  51.                 $queryBuilder->leftJoin('p.brand''b');
  52.                 $queryBuilder->andWhere('b.id IN (:brand)')
  53.                     ->setParameter('brand'$brand);
  54.             }
  55.             if ($excludeCat) {
  56.                 $queryBuilder->andWhere('p.category != :excludeCat')
  57.                     ->setParameter('excludeCat'$excludeCat);
  58.             }
  59.             if ($limit) {
  60.                 $queryBuilder->setMaxResults($limit);
  61.             }
  62.             if ($sort && $order) {
  63.                 $queryBuilder->orderBy('p.' $sort$order);
  64.             }
  65.             $products $queryBuilder->getQuery()->getResult();
  66.         }
  67.         $data $this->renderView('/product/public/_list.html.twig'compact('products''productConfig'));
  68.         return new JsonResponse([
  69.             'content' => $data
  70.         ]);
  71.     }
  72.     #[Route('/ajax/product/parameters/admin'name'app_ajax_product_parameters_admin')]
  73.     public function parametersAdmin(ProductRepository $repositoryRequest $requestConfigurationRepository $configurationRepository)
  74.     {
  75.         $config $configurationRepository->findOneBy([]);
  76.         $category $request->query->get('category') ?? null;
  77.         $brand $request->query->get('brand') ?? null;
  78.         $limit $request->query->get('limit') ?? null;
  79.         $sort $request->query->get('sort') ?? null;
  80.         $order $request->query->get('order') ?? null;
  81.         $active $request->query->get('active') ?? null;
  82.         $queryBuilder $repository->createQueryBuilder('p');
  83.         if ($active !== null) {
  84.             $queryBuilder->andWhere('p.is_activ = :isActiv')
  85.                 ->setParameter('isActiv'$active);
  86.         }
  87.         if ($category && $category !== 'null') {
  88.             $queryBuilder->leftJoin('p.categories''pc');
  89.             $queryBuilder->andWhere('pc.id IN (:productCategory)')
  90.                 ->setParameter('productCategory'$category);
  91.         }
  92.         if ($brand && $brand !== 'null') {
  93.             $queryBuilder->leftJoin('p.brand''b');
  94.             $queryBuilder->andWhere('b.id = :brand');
  95.             $queryBuilder->setParameter('brand'$brand);
  96.         }
  97.         if ($limit && $limit !== 'null') {
  98.             $queryBuilder->setMaxResults($limit);
  99.         }
  100.         if ($sort && $order && $sort !== 'null' && $order !== 'null') {
  101.             $queryBuilder->orderBy('p.' $sort$order);
  102.         }
  103.         $products $queryBuilder->getQuery()->getResult();
  104.         $data $this->renderView('/product/admin/product/_table.html.twig'compact('products''config'));
  105.         return new JsonResponse([
  106.             'content' => $data
  107.         ]);
  108.     }
  109.     #[Route('/ajax/product/category/{id}'name'app_ajax_product_cat')]
  110.     public function category(ProductRepository $repositoryProductCategory $productCategory)
  111.     {
  112.         $products $repository->searchByCategory($productCategory);
  113.         $title $productCategory->getName();
  114.         $data $this->renderView('/product/public/_list.html.twig'compact('products''title'));
  115.         return new JsonResponse([
  116.             'content' => $data
  117.         ]);
  118.     }
  119.     #[Route('/ajax/product/brand/{id}'name'app_ajax_product_brand')]
  120.     public function brand(ProductRepository $repositoryBrand $brand)
  121.     {
  122.         $products $repository->searchByBrand($brand);
  123.         $title $brand->getName();
  124.         $data $this->renderView('/product/public/_list.html.twig'compact('products''title'));
  125.         return new JsonResponse([
  126.             'content' => $data
  127.         ]);
  128.     }
  129. }