src/Controller/ReferenceController.php line 35

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Services\Cache\ReferenceFilterCacheService;
  4. use App\Services\ReferenceFilterService;
  5. use App\Templating\Helper\ConfigHelper;
  6. use App\Templating\Helper\UrlHelper;
  7. use App\Tools\SelectOptionsHelper;
  8. use App\Tools\IndexHelper;
  9. use App\Twig\LinkGenerator;
  10. use Knp\Component\Pager\PaginatorInterface;
  11. use Pimcore\Bundle\EcommerceFrameworkBundle\Factory;
  12. use Pimcore\Bundle\EcommerceFrameworkBundle\FilterService\ListHelper;
  13. use Pimcore\Bundle\EcommerceFrameworkBundle\IndexService\ProductList\ProductListInterface;
  14. use Pimcore\Log\ApplicationLogger;
  15. use Pimcore\Model\DataObject\AbstractObject;
  16. use Pimcore\Model\DataObject\Application;
  17. use Pimcore\Model\DataObject\ApplicationArea;
  18. use Pimcore\Model\DataObject\Decor;
  19. use Pimcore\Model\DataObject\Fieldcollection\Data\ReferenceCollaborator;
  20. use Pimcore\Model\DataObject\MaterialGroup;
  21. use Pimcore\Model\DataObject\Reference;
  22. use Pimcore\Model\DataObject\Reference\Listing;
  23. use Pimcore\Model\DataObject\SiteConfig;
  24. use Pimcore\Model\DataObject\Surface;
  25. use Pimcore\Translation\Translator;
  26. use Symfony\Component\HttpFoundation\JsonResponse;
  27. use Symfony\Component\HttpFoundation\Request;
  28. use Symfony\Component\HttpFoundation\Response;
  29. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  30. use Symfony\Component\Intl\Countries;
  31. use Symfony\Component\Stopwatch\Stopwatch;
  32. class ReferenceController extends AbstractController
  33. {
  34.     protected const MAPPING_OBJECT_TITLE = [
  35.         'applicationArea' => 'title',
  36.         'application' => 'title',
  37.         'materialGroup' => 'title',
  38.         'surface' => 'title',
  39.         'decor' => 'title',
  40.     ];
  41.     protected Translator $translator;
  42.     protected SiteConfig $siteConfig;
  43.     public function __construct(ApplicationLogger $applicationLoggerTranslator $translatorConfigHelper $configHelper)
  44.     {
  45.         $this->applicationLogger $applicationLogger;
  46.         $this->translator $translator;
  47.         $this->siteConfig $configHelper->getSiteConfig();
  48.     }
  49.     public function overviewAction(Request $requestPaginatorInterface $paginatorReferenceFilterCacheService $cacheServiceReferenceFilterService $referenceFilterServiceFactory $factoryListHelper $listHelper): JsonResponse|Response
  50.     {
  51.         $viewParams = [];
  52.         $params array_merge($request->query->all(), $request->request->all());
  53.         $filterDefinition $this->getDocumentEditable('relation''filterDefinition')->getElement();
  54.         if (empty($filterDefinition)) {
  55.             $filterDefinition \Pimcore\Config::getWebsiteConfig()->fallbackFilterdefinition;
  56.         }
  57.         $viewParams['filterDefinition'] = $filterDefinition;
  58.         $referenceListing $factory->getIndexService()->getProductListForCurrentTenant();
  59.         $referenceListing->setVariantMode(ProductListInterface::VARIANT_MODE_HIDE);
  60.         $referenceListing->addCondition(IndexHelper::INDEX_O_CLASS_ID .' = "Reference"');
  61.         $viewParams['productListing'] = $referenceListing;
  62.         $references $factory->getIndexService()->getProductListForCurrentTenant();
  63.         $references->setVariantMode(ProductListInterface::VARIANT_MODE_HIDE);
  64.         $references->addCondition(IndexHelper::INDEX_O_CLASS_ID .' = "Reference"');
  65.         $filterService $factory->getFilterService();
  66.         $listHelper->setupProductList($filterDefinition$references$params$filterServicetrue);
  67.         $viewParams['filterService'] = $filterService;
  68.         $viewParams['currentFilter'] = $params['currentFilter'];
  69.         $paging $paginator->paginate($references$request->get('page'1), $filterDefinition->getPageLimit());
  70.         $viewParams['references'] = $paging;
  71.         // Needs get all filter types and values selected
  72.         $gtm = (object) array(
  73.             "gtm" => [
  74.                 "datalayer" => [
  75.                     "event" => "select_reference_filter",
  76.                     "filter_type" => "application",
  77.                     "filter_value" => "doors",
  78.                 ]
  79.             ]
  80.         );
  81.         // Return Json-Response for Ajax Form
  82.         if ($request->isXmlHttpRequest()) {
  83.             return $this->json([
  84.                 'success' => true,
  85.                 'html' => $this->renderTemplate('references/includes/reference-grid-container.html.twig'$viewParams)->getContent(),
  86.                 'responseTrackingData' => $gtm,
  87.             ]);
  88.         }
  89.         return $this->render('references/overview.html.twig'$viewParams);
  90.     }
  91.     public function detailAction(Request $requestLinkGenerator $linkGeneratorUrlHelper $urlHelper): Response
  92.     {
  93.         $reference =  $this->getValidDetailObject($requestReference::class);
  94.         $keyValues = [];
  95.         if ($reference->getArchitects()) {
  96.             $key $this->translator->trans('reference-detail.architects');
  97.             $value '<p>';
  98.             foreach ($reference->getArchitects() as $architect) {
  99.                 $value .= $architect->get('name');
  100.                 if ($architect->get('company')) {
  101.                     $value .= " ({$architect->get('company')})";
  102.                 }
  103.                 if ($architect->get('website')) {
  104.                     $value .= "<br /><a href='{$urlHelper->getValidUrl($architect->get('website'))}'>{$architect->get('website')}</a>";
  105.                 }
  106.             }
  107.             $value .= '</p>';
  108.             $keyValues[] = [
  109.                 'key' => $key,
  110.                 'value' => $value
  111.             ];
  112.         }
  113.         if ($reference->getPhotographer()) {
  114.             $keyValues[] = [
  115.                 'key' => $this->translator->trans('reference-detail.photographer'),
  116.                 'value' => $reference->getPhotographer()
  117.             ];
  118.         }
  119.         if ($reference->getCollaborators() && !empty($reference->getCollaborators()->getItems())) {
  120.             $key $this->translator->trans('reference-detail.collaborators');
  121.             $value '<p>';
  122.             $collabs = [];
  123.             foreach ($reference->getCollaborators() as $collaborator) {
  124.                 /** @var ReferenceCollaborator $collaborator */
  125.                 $collabValue $collaborator->getName();
  126.                 if ($collaborator->getRole()) {
  127.                     $collabValue .= " ({$collaborator->getRole()})";
  128.                 }
  129.                 $collabs[] = $collabValue;
  130.             }
  131.             $value .= implode(', '$collabs);
  132.             $value .= '</p>';
  133.             $keyValues[] = [
  134.                 'key' => $key,
  135.                 'value' => $value
  136.             ];
  137.         }
  138.         if ($reference->getCity() || $reference->getCountry()) {
  139.             $value '';
  140.             if ($reference->getCity()) {
  141.                 $value .= $reference->getCity();
  142.                 if ($reference->getCountry()) {
  143.                     $value .= ', ';
  144.                 }
  145.             }
  146.             if ($reference->getCountry()) {
  147.                 $value .= Countries::getName($reference->getCountry());
  148.             }
  149.             $keyValues[] = [
  150.                 'key' => $this->translator->trans('reference-detail.location'),
  151.                 'value' => $value
  152.             ];
  153.         }
  154.         if ($reference->getSize()) {
  155.             $keyValues[] = [
  156.                 'key' => $this->translator->trans('reference-detail.size'),
  157.                 'value' => $reference->getSize()
  158.             ];
  159.         }
  160.         if ($reference->getClient()) {
  161.             $keyValues[] = [
  162.                 'key' => $this->translator->trans('reference-detail.client'),
  163.                 'value' => $reference->getClient()
  164.             ];
  165.         }
  166.         $references = new Listing();
  167.         $references->addConditionParam(IndexHelper::INDEX_O_PUBLISHED ' = 1');
  168.         $references->addConditionParam('o_id != ' $reference->getId());
  169.         $references->setLimit(3);
  170.         $teasers = [];
  171.         foreach ($references as $item) {
  172.             $teasers[] = [
  173.                 'title' => $item->getTitle(),
  174.                 'image' => $item->getMainImage(),
  175.                 'href' => $linkGenerator->generate($item)
  176.             ];
  177.         }
  178.         $teasers[] = [
  179.             'title' => $this->translator->trans('reference-detail.references overview'),
  180.             'textOnly' => true,
  181.             'href' => $this->siteConfig->getReferenceOverview()
  182.         ];
  183.         $returnArray = [
  184.             'reference' => $reference,
  185.             'heroKeyValues' => $keyValues,
  186.             'referenceTeasers' => $teasers,
  187.         ];
  188.         return $this->render('references/detail.html.twig'$returnArray);
  189.     }
  190. }