src/Controller/ProductController.php line 37

Open in your IDE?
  1. <?php
  2. /**
  3.  * Created by Elements.at New Media Solutions GmbH
  4.  *
  5.  */
  6. namespace App\Controller;
  7. use App\Twig\ConfigHelper;
  8. use Pimcore\Model\DataObject\Product;
  9. use Symfony\Component\HttpFoundation\JsonResponse;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\HttpFoundation\Response;
  12. class ProductController extends AbstractController
  13. {
  14.     /**
  15.      *
  16.      * @param Request $request
  17.      *
  18.      * @return Response
  19.      */
  20.     public function categoryAction(Request $request): Response
  21.     {
  22.         return $this->renderTemplate('product/category.html.twig');
  23.     }
  24.     /**
  25.      *
  26.      * @param Request $request
  27.      *
  28.      * @return JsonResponse|Response
  29.      *
  30.      * @throws \Exception
  31.      */
  32.     public function overviewAction(Request $requestConfigHelper $configHelper): Response
  33.     {
  34.         $sortingArray = [
  35.             "KomatsuPlanierraupen" => "operatingWeight",
  36.             "KomatsuBaggerlader" => "operatingWeight",
  37.             "KomatsuIMCHydraulikbagger" => "operatingWeight",
  38.             "KomatsuHybridHydraulikbagger" => "operatingWeight",
  39.             "KomatsuKurzheckbagger" => "operatingWeight",
  40.             "KomatsuAbbruchbagger" => "operatingWeight",
  41.             "KomatsuSLFHydraulikbagger" => "operatingWeight",
  42.             "KomatsuMinibagger" => "operatingWeight",
  43.             "KomatsuMobilbagger" => "enginePower",
  44.             "KomatsuKompaktMobilbagger" => "operatingWeight",
  45.             "KomatsuKompaktbagger" => "operatingWeight",
  46.             "KomatsuMiningbagger" => "operatingWeight",
  47.             "KomatsuKompaktlader" => "operatingWeight",
  48.             "KomatsuHydraulikbagger" => "operatingWeight",
  49.             "KomatsuKompaktradlader" => "bucketCapacity",
  50.             "KomatsuRadlader" => "bucketCapacity",
  51.             "KomatsuElektrischeMuldenkipper" => "ratedPayload",
  52.             "KomatsuMuldenkipper" => "ratedPayload",
  53.             "KomatsuKnickgelenkteMuldenkipper" => "ratedPayload",
  54.             "Mitsubishi" => "loadCapacity",
  55.             "Powerscreen" => "throughput",
  56.             "PowerscreenTws" => "throughput",
  57.             "Frd" => "baseMachineWeight",
  58.             "PalfingerLoaderCrane" => "maxLiftCapacity",
  59.         ];
  60.         $siteConfig $configHelper->getSiteConfig();
  61.         $categories $this->getDocumentEditable('relations''categories')->getElements();
  62.         $categoryIds = [];
  63.         $products = [];
  64.         $orderKeyBrick = [];
  65.         $orderKeyBrickCases = [];
  66.         $orderKeyCategory = [];
  67.         $orderKeyCategoryCases = [];
  68.         if ($categories) {
  69.             $products = new Product\Listing();
  70.             foreach ($categories as $index => $category) {
  71.                 $categoryIds[] = $category->getId();
  72.                 $orderKeyCategoryCases[] = "WHEN category__id = " $category->getId() . " THEN " $index;
  73.                 $brick $category->getObjectBrick();
  74.                 if ($brick) {
  75.                     $products->addObjectbrick($brick);
  76.                     if (isset($sortingArray[$brick])) {
  77.                         $orderKeyBrickCases[] = "WHEN " $brick "." $sortingArray[$brick] . " IS NOT NULL THEN CAST(REPLACE(SUBSTRING_INDEX(" $brick "." $sortingArray[$brick] . ", '-', 1), ',', '.') AS DECIMAL(10,2))";
  78.                         $orderKeyBrickCases[] = "WHEN " $brick "." $sortingArray[$brick] . " IS NULL THEN 1000000";
  79.                     }
  80.                 }
  81.             }
  82.             if (count($orderKeyCategoryCases)) {
  83.                 $orderKeyCategory[] = "CASE " implode(" "$orderKeyCategoryCases) . " END ASC";
  84.             }
  85.             if (count($orderKeyBrickCases)) {
  86.                 $orderKeyBrick[] = "CASE " implode(" "$orderKeyBrickCases) . " END ASC";
  87.             }
  88.             $products->addConditionParam("title != '' OR title IS NOT NULL");
  89.             $products->addConditionParam('category__id IN (' implode(','$categoryIds) . ')');
  90.             if ($siteConfig) {
  91.                 $products->addConditionParam('config LIKE :config', ['config' => '%,' $siteConfig->getId() . ',%']);
  92.             }
  93.             $brandId $this->document->getProperty('hasBrand') ? $this->document->getProperty('hasBrand')->getId() : null;
  94.             if ($brandId != null) {
  95.                 $products->addConditionParam('brand__id = :brand'value: ['brand' => $brandId]);
  96.             }
  97.             if ($request->get('categories', [])) {
  98.                 $products->addConditionParam('category__id IN (' implode(','$request->get('categories', [])) . ')');
  99.             }
  100.             if ($request->get('search')) {
  101.                 $products->addConditionParam('title LIKE :search OR shortText LIKE :search OR description LIKE :search', ['search' => '%' $request->get('search') . '%']);
  102.             }
  103.             if ($request->get('q')) {
  104.                 $products->addConditionParam('title LIKE :q OR shortText LIKE :q OR description LIKE :q', ['q' => '%' $request->get('q') . '%']);
  105.             }
  106.             $products->setOrderKey(array_merge($orderKeyCategory$orderKeyBrick, ['title']), false);
  107.         }
  108.         $returnArray = [
  109.             'products' => $products,
  110.             'categories' => $categories,
  111.         ];
  112.         if ($request->isXmlHttpRequest() && $request->get('ajax')) {
  113.             return $this->json([
  114.                 'success' => true,
  115.                 'html' => $this->render('includes/product/product-content.html.twig'$returnArray)->getContent(),
  116.             ]);
  117.         }
  118.         return $this->renderTemplate('product/overview.html.twig'$returnArray);
  119.     }
  120.     /**
  121.      *
  122.      * @param Request $request
  123.      *
  124.      * @return Response
  125.      */
  126.     public function detailAction(Request $requestProduct $id): Response
  127.     {
  128.         $product $id;
  129.         return $this->renderTemplate('product/detail.html.twig', [
  130.             'product' => $product,
  131.         ]);
  132.     }
  133. }