<?php
/**
* Created by Elements.at New Media Solutions GmbH
*
*/
namespace App\Controller;
use App\Service\FormService;
use Pimcore\Model\DataObject\FAQ;
use Pimcore\Model\DataObject\FAQCategory;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
class FaqController extends AbstractController
{
public function faqAction(Request $request, FormService $formService): Response
{
$faqs = [];
$conditions = [];
$params = [];
$isMobile = $request->get('is-mobile');
$selected = $isMobile ? $request->get('category-mobile') : $request->get('category');
$faqsListing = new FAQ\Listing();
$faqsListing->setOrderKey('O_key');
$faqsListing->setOrder('ASC');
if ($this->document->getEditable('categories') && !$this->document->getEditable('categories')->isEmpty() && method_exists($this->document->getEditable('categories'), 'getElements')) {
$categories = $this->document->getEditable('categories')->getElements();
foreach ($categories as $key => $category) {
$conditions[] = 'category__id = :mainCategoryId' . $key . ' OR categories LIKE :categoryId' . $key;
$params['mainCategoryId' . $key] = $category->getId();
$params['categoryId' . $key] = '%,' . $category->getId() . ',%';
}
} else {
$categories = $formService->getRelatedObjects($faqsListing, 'category');
}
if (FAQCategory::getById($selected) instanceof FAQCategory) {
$conditions = [ 'category__id = :categoryId' ];
$params['categoryId'] = $selected;
}
if ($conditions != [] && $params != []) {
$faqsListing->addConditionParam(implode(' OR ', $conditions), $params);
}
if ($searchString = $request->get('search')) {
$faqsListing->addConditionParam('question LIKE :search', [ 'search' => '%' . $searchString . '%' ]);
}
foreach ($faqsListing as $faq) {
if ($category = $faq->getCategory()) {
$faqs[$category->getName()][$faq->getId()] = $faq;
}
}
$returnArray = [
'categoryOptions' => array_map(function ($c) use ($selected, $isMobile) {
return [
'id' => $c->getId(),
'name' => $isMobile ? 'category-mobile' : 'category',
'value' => $c->getId(),
'label' => $c->getName(),
'selected' => $c->getId() == $selected,
'checked' => $c->getId() == $selected,
];
}, $categories),
'faqs' => $faqs,
'isMobile' => $isMobile,
];
if ($request->get('ajax')) {
$template = $this->renderTemplate('faq/partials/faq-result.html.twig', $returnArray);
return $this->json(['success' => true, 'html' => $template->getContent()], 200);
}
return $this->render('faq/faq.html.twig', $returnArray);
}
}