src/Controller/Website/ProductFamilyController.php line 27

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Website;
  3. use App\Controller\Website\Trait\FiltrationTrait;
  4. use App\Entity\ProductFamily;
  5. use App\Facade\ProductFacade;
  6. use App\Facade\ProductFamilyFacade;
  7. use App\Filtration\FiltrationFactory;
  8. use App\Pagination\PaginationFactory;
  9. use App\Repository\ProductFamilyRepository;
  10. use App\Utils\SchemaManager;
  11. use App\Utils\SnippetManager;
  12. use Sulu\Bundle\MediaBundle\Api\Media;
  13. use Sulu\Component\Content\Compat\StructureInterface;
  14. use Sulu\Component\Webspace\Analyzer\Attributes\RequestAttributes;
  15. use Sulu\Component\Webspace\Webspace;
  16. use Symfony\Component\HttpFoundation\RedirectResponse;
  17. use Symfony\Component\HttpFoundation\Request;
  18. use Symfony\Component\HttpFoundation\Response;
  19. use App\Repository\ProductRepository;
  20. class ProductFamilyController extends SuluExtendController
  21. {
  22.     use FiltrationTrait;
  23.     public function viewAction(
  24.         ProductFamily   $productFamily,
  25.         ProductFamilyFacade         $productFamilyFacade,
  26.         ProductRepository     $productRepository,
  27.         ProductFacade            $productFacade,
  28.         SchemaManager $schemaManager,
  29.         FiltrationFactory $filtrationFactory,
  30.         PaginationFactory $paginationFactory,
  31.         SnippetManager $snippetManager,
  32.         Request     $request,
  33.                     $_sulu,
  34.                     $attributes = [],
  35.                     $preview false,
  36.                     $partial false,
  37.     ): Response
  38.     {
  39.         /** @var Webspace $webspace */
  40.         $webspace $request->attributes->get('_sulu')->getAttribute('webspace');
  41.         $limit 18;
  42.         $page $request->query->get('page'1);
  43.         $queryFilters $this->getQueryFilters($request);
  44.         $attributes $this->getAttributes($attributes);
  45.         $attributes['breadcrumbs'] = $this->getBreadcrumbs('product_family'$productFamily->getUuid());
  46.         $schema $schemaManager->getDefaultSchemas($attributes['breadcrumbs']);
  47.         $attributes['productFamily'] = $productFamily;
  48.         if(isset($attributes['content']['blocks'])) {
  49.             $blockList $this->resolveBlocks($attributes['content']['blocks'], $schema);
  50.             if($blockList instanceof RedirectResponse) {
  51.                 return $blockList;
  52.             }
  53.             $attributes['blocks'] = $blockList->getBlocks();
  54.             $schema $blockList->getSchema();
  55.         }
  56.         // ---------------------------------------
  57.         // Aside settings
  58.         // ---------------------------------------
  59.         $filtrationSettings $snippetManager->loadByArea('filtration_settings');
  60.         $filtration $filtrationFactory->createProductsFiltration(
  61.             webspace$webspace->getKey(),
  62.             locale$request->getLocale(),
  63.             families: [$productFamily],
  64.             filters$queryFilters,
  65.         );
  66.         $attributes['filtration'] = [
  67.             'variant' => 'inline',
  68.             'id' => 'category-filter-form-id',
  69.             'family_id' => $productFamily->getId(),
  70.             'form_list' => $filtration->render(
  71.                 settings$filtrationSettings['content'] ?? null,
  72.                 productFamily$productFamily,
  73.             ),
  74.         ];
  75.         $attributes['tags'] = [
  76.             'id' => 'category-filter-form-id',
  77.             'reset_btn' => [
  78.                 'title' => 'Smazat všechny filtry',
  79.                 'form' => 'category-filter-form-id',
  80.             ],
  81.         ];
  82.         $attributes['content_w_aside_props'] = [
  83.             'aside' => true,
  84.             'variant' => 'reverse',
  85.             'spacing' => 'top-md',
  86.             'extra_calss' => 'content-w-aside-category',
  87.         ];
  88.         // ---------------------------------------
  89.         // Product family section
  90.         // ---------------------------------------
  91.         $attributes['families_section'] = [
  92.             'header' => [
  93.                 'heading' => [
  94.                     'title' => $productFamily->getTitle(),
  95.                     'style' => 'h2',
  96.                 ],
  97.             ],
  98.             'spacing' => 'none',
  99.             'form' => [
  100.                 'cols' => 5,
  101.                 'items' => $productFamilyFacade->renderProductFamilies($productFamily->getUuid(), $productFamily->getCategory()),
  102.             ],
  103.         ];
  104.         // ---------------------------------------
  105.         // Products
  106.         // ---------------------------------------
  107.         $qb $productRepository->getProductsQueryBuilder(
  108.             webspace$webspace->getKey(),
  109.             locale$request->getLocale(),
  110.             families: [$productFamily],
  111.             types$queryFilters['types'],
  112.             fixations$queryFilters['fixations'],
  113.             minLuminousFlux$queryFilters['minLuminousFlux'],
  114.             maxLuminousFlux$queryFilters['maxLuminousFlux'],
  115.             cris$queryFilters['cris'],
  116.             chromaticities$queryFilters['chromaticities'],
  117.             dispersionVariants$queryFilters['dispersionVariants'],
  118.             ips$queryFilters['ips'],
  119.             radiationDirects$queryFilters['radiationDirects'],
  120.             shapes$queryFilters['shapes'],
  121.             minLength$queryFilters['minLength'],
  122.             maxLength$queryFilters['maxLength'],
  123.             minWidth$queryFilters['minWidth'],
  124.             maxWidth$queryFilters['maxWidth'],
  125.             minHeight$queryFilters['minHeight'],
  126.             maxHeight$queryFilters['maxHeight'],
  127.             colors$queryFilters['colors'],
  128.             usages$queryFilters['usages'],
  129.             maxTemperatures$queryFilters['maxTemperatures'],
  130.             minTemperatures$queryFilters['minTemperatures'],
  131.             minInputPower$queryFilters['minInputPower'],
  132.             maxInputPower$queryFilters['maxInputPower'],
  133.             minEfficiency$queryFilters['minEfficiency'],
  134.             maxEfficiency$queryFilters['maxEfficiency'],
  135.             elProtects$queryFilters['elProtects'],
  136.             powerMethods$queryFilters['powerMethods'],
  137.             resourceTypes$queryFilters['resourceTypes'],
  138. //            lightSources: $queryFilters['lightSources'],
  139.             statuses$queryFilters['statuses'],
  140.             mechanicalDurabilities$queryFilters['mechanicalDurabilities'],
  141.             dispersions$queryFilters['dispersions'],
  142.             drivers$queryFilters['drivers'],
  143.             accessories$queryFilters['accessories'],
  144.         );
  145.         $pagination $paginationFactory->create();
  146.         $pagination->setMaxPerPage($limit);
  147.         $pagination->setPage($page);
  148.         $pagination->queryBuilderInit($qb);
  149.         $products = [];
  150.         if ($pagination->hasPageResults()) {
  151.             foreach ($pagination->getPageResults() as $pageResult) {
  152.                 foreach ($pageResult as $product) {
  153.                     $products[] = $productFacade->renderProduct($product);
  154.                 }
  155.             }
  156.         }
  157.         $attributes['product_list_section']['group']['items'] = $products;
  158.         $attributes['product_list_section']['limit'] = $limit;
  159.         $attributes['product_list_section']['pagination'] = $pagination->renderPagination();
  160.         $attributes['product_list_section']['empty_title'] = 'Nebyly nalezeny žádné výsledky';
  161.         $attributes['_schema'] = implode(''$schema);
  162.         $this->setEntitySocialMeta($productFamily);
  163.         $this->setEntitySeoMeta($productFamily);
  164.         return $this->renderAll('pages/product-family.html.twig'$attributes$preview$partial);
  165.     }
  166.     public function listAction(
  167.         StructureInterface $structure,
  168.         ProductFamilyRepository $productFamilyRepository,
  169.         ProductFamilyFacade $productFamilyFacade,
  170.         PaginationFactory $paginationFactory,
  171.         SchemaManager $schemaManager,
  172.         Request     $request,
  173.         RequestAttributes $_sulu,
  174.         $attributes = [],
  175.         $preview false,
  176.         $partial false,
  177.     ): Response
  178.     {
  179.         $categoryId $request->query->get('c');
  180.         $category null;
  181.         $attributes $this->getAttributes([], $structure);
  182.         $attributes['breadcrumbs'] = $this->getBreadcrumbs('product_family'$attributes['uuid']);
  183.         $schema $schemaManager->getDefaultSchemas($attributes['breadcrumbs']);
  184.         $attributes['references']['header'] = [
  185.             'title' => [
  186.                 'first' => $attributes['content']['title_first'],
  187.                 'second' => $attributes['content']['title_second'],
  188.             ],
  189.             'overline' => [
  190.                 'title' => $attributes['content']['title_small'],
  191.                 'symbol' => $attributes['content']['symbol'],
  192.             ],
  193.             'perex' => $attributes['content']['description'],
  194.         ];
  195.         if($attributes['content']['image_pill'] instanceof Media) {
  196.             /** @var Media $imagePill */
  197.             $imagePill $attributes['content']['image_pill'];
  198.             $attributes['references']['header']['title']['pill'] = [
  199.                 'src' => $imagePill->getThumbnails()['240x240'],
  200.                 'srcset' => [
  201.                     $imagePill->getThumbnails()['240x240'] . ' 1x',
  202.                     $imagePill->getThumbnails()['480x480'] . ' 2x',
  203.                 ],
  204.                 'alt' => $imagePill->getTitle(),
  205.             ];
  206.         }
  207.         $limit $attributes['content']['limit'] ?? 6;
  208.         $qb $productFamilyRepository->prepareQueryBuilder(
  209.             $_sulu->getAttribute('webspace')->getKey(),
  210.             $_sulu->getAttribute('locale'),
  211.             $category?->getId()
  212.         );
  213.         $pagination $paginationFactory->create();
  214.         $pagination->setMaxPerPage($limit);
  215.         $pagination->setPage(1);
  216.         $pagination->queryBuilderInit($qb);
  217.         $productFamilies = [];
  218.         if($pagination->hasPageResults()) {
  219.             $wideCounter 0;
  220.             foreach($pagination->getPageResults() as $pageResult) {
  221.                 foreach($pageResult as $productFamily) {
  222.                     $wide false;
  223.                     $wideCounter++;
  224.                     if($wideCounter === 1) {
  225.                         $wide true;
  226.                     }
  227.                     elseif($wideCounter === 6) {
  228.                         $wideCounter 0;
  229.                         $wide true;
  230.                     }
  231.                     $productFamilies[] = $productFamilyFacade->renderProductFamilies();
  232.                 }
  233.             }
  234.         }
  235.         $attributes['references']['references'] = $productFamilies;
  236.         $attributes['references']['references_limit'] = $limit;
  237.         if($category) {
  238.             $attributes['references']['references_category'] = $category->getId();
  239.         }
  240.         if($pagination->hasNextPage()) {
  241.             $attributes['references']['references_load_more'] = true;
  242.         }
  243.         if(isset($attributes['content']['blocks'])) {
  244.             $blockList $this->resolveBlocks($attributes['content']['blocks'], $schema);
  245.             if($blockList instanceof RedirectResponse) {
  246.                 return $blockList;
  247.             }
  248.             $attributes['content']['blocks'] = $blockList->getBlocks();
  249.             $schema $blockList->getSchema();
  250.         }
  251.         $attributes['_schema'] = implode(''$schema);
  252.         return $this->renderAll('pages/reference-list.html.twig'$attributes$preview$partial);
  253.     }
  254. }