<?php
namespace Notaris\FrontendBundle\Controller;
use Notaris\AdminBundle\Entity\Attachment;
use Notaris\AdminBundle\Entity\Faq;
use Notaris\AdminBundle\Entity\Subsite;
use Pdp\Cache;
use Pdp\CurlHttpClient;
use Pdp\Parser;
use Pdp\Manager;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
class FaqController extends AbstractController
{
public function indexAction($subsiteSlug)
{
$localeService = $this->get('notaris.locale.listener');
$locale = $localeService->getLocale();
if($locale == 'de'):
$locale = 'fr';
endif;
$manager = $this->getDoctrine()->getManager();
$subsite_repo = $manager->getRepository('Notaris\AdminBundle\Entity\Subsite');
$subsite = $subsite_repo->findOneBySlug($subsiteSlug);
$faq_repo = $manager->getRepository('Notaris\AdminBundle\Entity\Faq');
$section_repo = $manager->getRepository('Notaris\AdminBundle\Entity\Section');
$faqs = [];
$generalfaq = [];
if($subsiteSlug == '') {
$subsite = $subsite_repo->getSubsiteBySlugAndLocale('faq', $locale);
/** @var $subsite_repo \Notaris\AdminBundle\Entity\SubsiteRepository */
$subsites = $subsite_repo->getSubsitesInNavFaq($locale);
$sub = new \stdClass();
$sub->subsite = new Subsite();
if($locale == 'nl') {
$sub->subsite->setName('Algemene vragen');
$sub->subsite->setSlug('algemeen');
}else{
$sub->subsite->setName('Questions générales');
$sub->subsite->setSlug('generales');
}
$sub->faqs = $faq_repo->getListFaqGeneralPublic($locale );
$generalfaq[] = $sub;
foreach($subsites as $s){
$sub = new \stdClass();
$sub->subsite = $s;
$sub->faqs = $faq_repo->getListFaqSubsitePublic($locale, $s->getId() );
if($sub->faqs):
$generalfaq[] = $sub;
endif;
}
}else{
if(!$subsite or !$subsite->getIsActive()){
return $this->redirect($this->generateUrl('notaris_frontend_homepage'), 301);
}
$faqs = $faq_repo->getListFaqSubsitePublic($locale, $subsite->getId() );
}
$section = $section_repo->getFirstSectionFromSubsite($subsite);
return $this->render('@NotarisFrontend/faq/index.html.twig', [
'faqgeneral' => $generalfaq, 'faqsubsites' => $faqs, 'subsite' => $subsite, 'section' => $section
]);
}
public function detailAction(Request $request, $subsiteSlug, $faqSlug)
{
$localeService = $this->get('notaris.locale.listener');
$locale = $localeService->getLocale();
if($locale == 'de'):
$locale = 'fr';
endif;
$manager = $this->getDoctrine()->getManager();
$subsite_repo = $manager->getRepository('Notaris\AdminBundle\Entity\Subsite');
$subsite = $subsite_repo->findOneBy(
array(
'slug' => $subsiteSlug,
'locale'=> $locale,
'isActive'=> true
)
);
$faq_repo = $manager->getRepository('Notaris\AdminBundle\Entity\Faq');
$faq = $faq_repo->findOneBySlug($faqSlug);
if(!$faq or !$subsite){
//check if it is a domain annex
$dynamic_url_repo = $manager->getRepository('Notaris\AdminBundle\Entity\DynamicUrl');
$dynamic_url = $dynamic_url_repo->findOneBy(
array(
'extension'=>$_SERVER['REQUEST_URI'],
'locale'=>$locale,
'isActive'=>1
)
);
if($dynamic_url):
return $this->redirect($dynamic_url->getDestination(), 301);
endif;
}
if(!$faq){
return $this->redirect($this->generateUrl('notaris_frontend_homepage'), 301);
}
if(!($faq->getIsActive() and $faq->getPublicationDate() <= new \DateTime('now'))) {
return $this->redirect($this->generateUrl('notaris_frontend_homepage'), 301);
}
$faqindex = 0;
$faqcount = 0;
$smallsidenav = false;
if($subsiteSlug != 'algemeen' && $subsiteSlug != 'generales') { // && $subsiteSlug != 'mybox'
if(!$subsite or !$subsite->getIsActive()){
return $this->redirect($this->generateUrl('notaris_frontend_homepage'), 301);
}
$faqs = $faq_repo->getListFaqSubsitePublic($locale, $subsite->getId());
}else{
$faqs = $faq_repo->getListFaqGeneralPublic($locale);
$smallsidenav = true;
}
if($faqs){
foreach($faqs as $f){
$faqindex++;
if($f->getSlug() == $faqSlug){
break;
}
}
$faqcount = count( $faqs );
}
if(!$subsite or $subsite->getSlug() == 'mybox'){
if($subsite and $subsite->getSlug() == 'mybox'):
$subsite = $subsite_repo->getSubsiteBySlugAndLocale('faq', $locale);
$subsite->setName('MyBox');
$subsite->setSlug('mybox');
else:
$subsite = $subsite_repo->getSubsiteBySlugAndLocale('faq', $locale);
if($locale == 'nl') {
$subsite->setName('Algemene Vragen');
$subsite->setSlug('faq');
}else{
$subsite->setName('Questions générales');
$subsite->setSlug('faq');
}
endif;
}
$backlink = $request->headers->get('referer');
$host = parse_url($backlink, PHP_URL_HOST);
if ($backlink == '') {
$backlink = '/faq';
} elseif($request->getHttpHost() != $host) {
// Check if referer has a sven domain
$repo_notary_domain = $manager->getRepository('Notaris\AdminBundle\Entity\NotaryDomain');
$pslManager = new Manager(new Cache(), new CurlHttpClient());
try {
$rules = $pslManager->getRules();
$url = $rules->resolve($host);
$domain = $repo_notary_domain->findNotaryByDomain($url->getRegistrableDomain());
if(!$domain) {
$backlink = '/faq';
}
} catch(\Exception $exception) {
$backlink = '/faq';
}
}
$modules_repo = $manager->getRepository('Notaris\AdminBundle\Entity\SubsiteModule');
$right_modules = $modules_repo->findAllRightFromSubsite($subsite, $locale);
$cleanDescription = $faq->getAnswer();
if ($cleanDescription !== null) {
// Remove hidden line breaks or whitespace characters
$cleanDescription = str_replace('\\"', '', $cleanDescription);
$cleanDescription = preg_replace('/\s+/', ' ', $cleanDescription);
$cleanDescription = str_replace('"', "'", $cleanDescription);
}
return $this->render('@NotarisFrontend/faq/detail.html.twig', [
'faq' => $faq, 'cleanDescription' => $cleanDescription, 'subsite' => $subsite, 'faqcount' => $faqcount, 'faqindex' => $faqindex, 'backlink' => $backlink, 'smallsidenav' => $smallsidenav, 'rightmodules' => $right_modules
]);
}
public function clickAction($faqId)
{
$manager = $this->getDoctrine()->getManager();
$faq_repo = $manager->getRepository('Notaris\AdminBundle\Entity\Faq');
$faq = $faq_repo->find($faqId);
$faq->setCountClicked($faq->getCountClicked() + 1);
$manager->flush();
$response = new JsonResponse();
$response->setData(array(
'clicksaved' => true
));
return $response;
}
}