src/Notaris/FrontendBundle/Controller/FaqController.php line 91

Open in your IDE?
  1. <?php
  2. namespace Notaris\FrontendBundle\Controller;
  3. use Notaris\AdminBundle\Entity\Attachment;
  4. use Notaris\AdminBundle\Entity\Faq;
  5. use Notaris\AdminBundle\Entity\Subsite;
  6. use Pdp\Cache;
  7. use Pdp\CurlHttpClient;
  8. use Pdp\Parser;
  9. use Pdp\Manager;
  10. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  11. use Symfony\Component\HttpFoundation\BinaryFileResponse;
  12. use Symfony\Component\HttpFoundation\JsonResponse;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\HttpFoundation\Response;
  15. use Symfony\Component\HttpFoundation\ResponseHeaderBag;
  16. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  17. class FaqController extends AbstractController
  18. {
  19.     public function indexAction($subsiteSlug)
  20.     {
  21.         $localeService = $this->get('notaris.locale.listener');
  22.         $locale = $localeService->getLocale();
  23.         if($locale == 'de'):
  24.             $locale = 'fr';
  25.         endif;
  26.         $manager = $this->getDoctrine()->getManager();
  27.         $subsite_repo = $manager->getRepository('Notaris\AdminBundle\Entity\Subsite');
  28.         $subsite = $subsite_repo->findOneBySlug($subsiteSlug);
  29.         $faq_repo = $manager->getRepository('Notaris\AdminBundle\Entity\Faq');
  30.         $section_repo = $manager->getRepository('Notaris\AdminBundle\Entity\Section');
  31.         $faqs = [];
  32.         $generalfaq = [];
  33.         if($subsiteSlug == '') {
  34.             $subsite = $subsite_repo->getSubsiteBySlugAndLocale('faq', $locale);
  35.             /** @var $subsite_repo \Notaris\AdminBundle\Entity\SubsiteRepository */
  36.             $subsites = $subsite_repo->getSubsitesInNavFaq($locale);
  37.             $sub = new \stdClass();
  38.             $sub->subsite = new Subsite();
  39.             if($locale == 'nl') {
  40.                 $sub->subsite->setName('Algemene vragen');
  41.                 $sub->subsite->setSlug('algemeen');
  42.             }else{
  43.                 $sub->subsite->setName('Questions générales');
  44.                 $sub->subsite->setSlug('generales');
  45.             }
  46.             $sub->faqs = $faq_repo->getListFaqGeneralPublic($locale  );
  47.             $generalfaq[] = $sub;
  48.             foreach($subsites as $s){
  49.                 $sub = new \stdClass();
  50.                 $sub->subsite = $s;
  51.                 $sub->faqs = $faq_repo->getListFaqSubsitePublic($locale, $s->getId()   );
  52.                 if($sub->faqs):
  53.                     $generalfaq[] = $sub;
  54.                 endif;
  55.             }
  56.         }else{
  57.             if(!$subsite or !$subsite->getIsActive()){
  58.                 return $this->redirect($this->generateUrl('notaris_frontend_homepage'), 301);
  59.             }
  60.             $faqs = $faq_repo->getListFaqSubsitePublic($locale, $subsite->getId()   );
  61.         }
  62.         $section = $section_repo->getFirstSectionFromSubsite($subsite);
  63.         return $this->render('@NotarisFrontend/faq/index.html.twig', [
  64.             'faqgeneral' => $generalfaq, 'faqsubsites' => $faqs, 'subsite' => $subsite, 'section' => $section
  65.         ]);
  66.     }
  67.     public function detailAction(Request $request, $subsiteSlug, $faqSlug)
  68.     {
  69.         $localeService = $this->get('notaris.locale.listener');
  70.         $locale = $localeService->getLocale();
  71.         if($locale == 'de'):
  72.             $locale = 'fr';
  73.         endif;
  74.         $manager = $this->getDoctrine()->getManager();
  75.         $subsite_repo = $manager->getRepository('Notaris\AdminBundle\Entity\Subsite');
  76.         $subsite = $subsite_repo->findOneBy(
  77.              array(
  78.                  'slug' => $subsiteSlug,
  79.                  'locale'=> $locale,
  80.                  'isActive'=> true
  81.              )
  82.         );
  83.         $faq_repo = $manager->getRepository('Notaris\AdminBundle\Entity\Faq');
  84.         $faq = $faq_repo->findOneBySlug($faqSlug);
  85.         if(!$faq or !$subsite){
  86.             //check if it is a domain annex
  87.             $dynamic_url_repo = $manager->getRepository('Notaris\AdminBundle\Entity\DynamicUrl');
  88.             $dynamic_url = $dynamic_url_repo->findOneBy(
  89.                 array(
  90.                     'extension'=>$_SERVER['REQUEST_URI'],
  91.                     'locale'=>$locale,
  92.                     'isActive'=>1
  93.                 )
  94.             );
  95.             if($dynamic_url):
  96.                 return $this->redirect($dynamic_url->getDestination(), 301);
  97.             endif;
  98.         }
  99.         if(!$faq){
  100.             return $this->redirect($this->generateUrl('notaris_frontend_homepage'), 301);
  101.         }
  102.         if(!($faq->getIsActive() and $faq->getPublicationDate() <= new \DateTime('now'))) {
  103.             return $this->redirect($this->generateUrl('notaris_frontend_homepage'), 301);
  104.         }
  105.         $faqindex = 0;
  106.         $faqcount = 0;
  107.         $smallsidenav = false;
  108.         if($subsiteSlug != 'algemeen' && $subsiteSlug != 'generales') { // && $subsiteSlug != 'mybox'
  109.             if(!$subsite or !$subsite->getIsActive()){
  110.                 return $this->redirect($this->generateUrl('notaris_frontend_homepage'), 301);
  111.             }
  112.             $faqs = $faq_repo->getListFaqSubsitePublic($locale, $subsite->getId());
  113.         }else{
  114.             $faqs = $faq_repo->getListFaqGeneralPublic($locale);
  115.             $smallsidenav = true;
  116.         }
  117.         if($faqs){
  118.             foreach($faqs as $f){
  119.                 $faqindex++;
  120.                 if($f->getSlug() == $faqSlug){
  121.                     break;
  122.                 }
  123.             }
  124.             $faqcount = count( $faqs );
  125.         }
  126.         if(!$subsite or $subsite->getSlug() == 'mybox'){
  127.             if($subsite and $subsite->getSlug() == 'mybox'):
  128.                 $subsite = $subsite_repo->getSubsiteBySlugAndLocale('faq', $locale);
  129.                 $subsite->setName('MyBox');
  130.                 $subsite->setSlug('mybox');
  131.             else:
  132.                 $subsite = $subsite_repo->getSubsiteBySlugAndLocale('faq', $locale);
  133.                 if($locale == 'nl') {
  134.                     $subsite->setName('Algemene Vragen');
  135.                     $subsite->setSlug('faq');
  136.                 }else{
  137.                     $subsite->setName('Questions générales');
  138.                     $subsite->setSlug('faq');
  139.                 }
  140.             endif;
  141.         }
  142.         $backlink = $request->headers->get('referer');
  143.         $host = parse_url($backlink, PHP_URL_HOST);
  144.         if ($backlink == '') {
  145.             $backlink = '/faq';
  146.         } elseif($request->getHttpHost() != $host) {
  147.             // Check if referer has a sven domain
  148.             $repo_notary_domain = $manager->getRepository('Notaris\AdminBundle\Entity\NotaryDomain');
  149.             $pslManager = new Manager(new Cache(), new CurlHttpClient());
  150.             try {
  151.                 $rules = $pslManager->getRules();
  152.                 $url = $rules->resolve($host);
  153.                 $domain = $repo_notary_domain->findNotaryByDomain($url->getRegistrableDomain());
  154.                 if(!$domain) {
  155.                     $backlink = '/faq';
  156.                 }
  157.             } catch(\Exception $exception) {
  158.                 $backlink = '/faq';
  159.             }
  160.         }
  161.         $modules_repo = $manager->getRepository('Notaris\AdminBundle\Entity\SubsiteModule');
  162.         $right_modules = $modules_repo->findAllRightFromSubsite($subsite, $locale);
  163.         $cleanDescription = $faq->getAnswer();
  164.         if ($cleanDescription !== null) {
  165.             // Remove hidden line breaks or whitespace characters
  166.             $cleanDescription = str_replace('\\"', '', $cleanDescription);
  167.             $cleanDescription = preg_replace('/\s+/', ' ', $cleanDescription);
  168.             $cleanDescription = str_replace('"', "'", $cleanDescription);
  169.         }
  170.         return $this->render('@NotarisFrontend/faq/detail.html.twig', [
  171.             'faq' => $faq, 'cleanDescription' => $cleanDescription, 'subsite' => $subsite, 'faqcount' => $faqcount, 'faqindex' => $faqindex, 'backlink' => $backlink, 'smallsidenav' => $smallsidenav, 'rightmodules' => $right_modules
  172.         ]);
  173.     }
  174.     public function clickAction($faqId)
  175.     {
  176.         $manager = $this->getDoctrine()->getManager();
  177.         $faq_repo = $manager->getRepository('Notaris\AdminBundle\Entity\Faq');
  178.         $faq = $faq_repo->find($faqId);
  179.         $faq->setCountClicked($faq->getCountClicked() + 1);
  180.         $manager->flush();
  181.         $response = new JsonResponse();
  182.         $response->setData(array(
  183.             'clicksaved' => true
  184.         ));
  185.         return $response;
  186.     }
  187. }