src/Controller/FaqController.php line 18

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\Service\FormService;
  8. use Pimcore\Model\DataObject\FAQ;
  9. use Pimcore\Model\DataObject\FAQCategory;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\HttpFoundation\Response;
  12. class FaqController extends AbstractController
  13. {
  14.     public function faqAction(Request $requestFormService $formService): Response
  15.     {
  16.         $faqs = [];
  17.         $conditions = [];
  18.         $params = [];
  19.         $isMobile $request->get('is-mobile');
  20.         $selected $isMobile $request->get('category-mobile') : $request->get('category');
  21.         $faqsListing = new FAQ\Listing();
  22.         $faqsListing->setOrderKey('O_key');
  23.         $faqsListing->setOrder('ASC');
  24.         if ($this->document->getEditable('categories') && !$this->document->getEditable('categories')->isEmpty() && method_exists($this->document->getEditable('categories'), 'getElements')) {
  25.             $categories $this->document->getEditable('categories')->getElements();
  26.             foreach ($categories as $key => $category) {
  27.                 $conditions[] = 'category__id = :mainCategoryId' $key ' OR categories LIKE :categoryId' $key;
  28.                 $params['mainCategoryId' $key] = $category->getId();
  29.                 $params['categoryId' $key] = '%,' $category->getId() . ',%';
  30.             }
  31.         } else {
  32.             $categories $formService->getRelatedObjects($faqsListing'category');
  33.         }
  34.         if (FAQCategory::getById($selected) instanceof FAQCategory) {
  35.             $conditions = [ 'category__id = :categoryId' ];
  36.             $params['categoryId'] = $selected;
  37.         }
  38.         if ($conditions != [] && $params != []) {
  39.             $faqsListing->addConditionParam(implode(' OR '$conditions), $params);
  40.         }
  41.         if ($searchString $request->get('search')) {
  42.             $faqsListing->addConditionParam('question LIKE :search', [ 'search' => '%' $searchString '%' ]);
  43.         }
  44.         foreach ($faqsListing as $faq) {
  45.             if ($category $faq->getCategory()) {
  46.                 $faqs[$category->getName()][$faq->getId()] = $faq;
  47.             }
  48.         }
  49.         $returnArray = [
  50.             'categoryOptions' => array_map(function ($c) use ($selected$isMobile) {
  51.                 return [
  52.                     'id' => $c->getId(),
  53.                     'name' => $isMobile 'category-mobile' 'category',
  54.                     'value' => $c->getId(),
  55.                     'label' => $c->getName(),
  56.                     'selected' => $c->getId() == $selected,
  57.                     'checked' => $c->getId() == $selected,
  58.                 ];
  59.             }, $categories),
  60.             'faqs' => $faqs,
  61.             'isMobile' => $isMobile,
  62.         ];
  63.         if ($request->get('ajax')) {
  64.             $template $this->renderTemplate('faq/partials/faq-result.html.twig'$returnArray);
  65.             return $this->json(['success' => true'html' => $template->getContent()], 200);
  66.         }
  67.         return $this->render('faq/faq.html.twig'$returnArray);
  68.     }
  69. }