src/Notaris/FrontendBundle/Controller/NewsController.php line 108

Open in your IDE?
  1. <?php
  2. namespace Notaris\FrontendBundle\Controller;
  3. use Eko\FeedBundle\Feed\FeedManager;
  4. use Eko\FeedBundle\Field\Item\GroupItemField;
  5. use Eko\FeedBundle\Field\Item\ItemField;
  6. use Eko\FeedBundle\Field\Item\MediaItemField;
  7. use Notaris\AdminBundle\Entity\Attachment;
  8. use Notaris\AdminBundle\Entity\Faq;
  9. use Notaris\AdminBundle\Entity\Newsletter;
  10. use Notaris\AdminBundle\Entity\Subsite;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. use Symfony\Component\HttpFoundation\BinaryFileResponse;
  13. use Symfony\Component\HttpFoundation\JsonResponse;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\HttpFoundation\Response;
  16. use Symfony\Component\HttpFoundation\ResponseHeaderBag;
  17. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  18. use Symfony\Component\Security\Csrf\CsrfToken;
  19. use Symfony\Component\Translation\Translator;
  20. class NewsController extends AbstractController
  21. {
  22.     private $feedManager;
  23.     public function indexAction($_locale, $page, $otype, $subsiteslug)
  24.     {
  25.         $localeService = $this->get('notaris.locale.listener');
  26.         $locale = $localeService->getLocale();
  27.         if($_locale != $locale){
  28.             return $this->redirect($this->generateUrl('notaris_frontend_news.'.$locale), 302);
  29.         }
  30.         if($locale == 'de'):
  31.             $locale = 'fr';
  32.         endif;
  33.         $manager = $this->getDoctrine()->getManager();
  34.         /** @var  $news_repo \Notaris\AdminBundle\Entity\NewsRepository */
  35.         $news_repo = $manager->getRepository('Notaris\AdminBundle\Entity\News');
  36.         $section_repo = $manager->getRepository('Notaris\AdminBundle\Entity\Section');
  37.         $perpage = 25;
  38. //        if($otype == ''){
  39. //            $otype = 'desc';
  40. //        }
  41.         $subsite_repo = $manager->getRepository('Notaris\AdminBundle\Entity\Subsite');
  42.         $slug = 'nieuws-pers';
  43.         if($locale == 'fr'){
  44.             $slug = 'nouveautes';
  45.         }
  46.         if($subsiteslug == 'algemeen' || $subsiteslug == 'generales'){
  47.             $subsiteslug = '';
  48.         }
  49.         if($subsiteslug != ''){
  50.             $slug = $subsiteslug;
  51.         }
  52.         $subsite = $subsite_repo->getSubsiteBySlugAndLocale($slug, $locale);
  53.         if($subsiteslug == '') {
  54.             $news = $news_repo->getNewsGeneralPublic($locale, $perpage * $page, $perpage, $otype);
  55.             $totalnews = $news_repo->getNewsGeneralPublicCount($locale);
  56.         }else{
  57.             if(!$subsite or !$subsite->getIsActive()){
  58.                 return $this->redirect($this->generateUrl('notaris_frontend_homepage'), 301);
  59.             }
  60.             $news = $news_repo->getNewsSubsitePublic($locale, $perpage * $page, $perpage, $otype, $subsite);
  61.             $totalnews = $news_repo->getNewsSubsitePublicCount($locale, $subsite);
  62.         }
  63.         $totalpages = ceil($totalnews / $perpage);
  64.         $section = $section_repo->getFirstSectionFromSubsite($subsite);
  65.         return $this->render('@NotarisFrontend/news/index.html.twig', [
  66.             'news' => $news, 'totalpages' => $totalpages, 'currentpage' => $page, 'subsite' => $subsite, 'totalnews' => $totalnews, 'ordertype' => $otype, 'subsiteslug' => $subsiteslug, 'section' => $section
  67.         ]);
  68.     }
  69.     public function detailAction($_locale, $slug, $subsiteslug)
  70.     {
  71.         $localeService = $this->get('notaris.locale.listener');
  72.         $locale = $localeService->getLocale();
  73.         if($_locale != $locale){
  74.             return $this->redirect($this->generateUrl('notaris_frontend_news_detail.'.$locale, ['slug'=> $slug]), 302);
  75.         }
  76.         if($locale == 'de'):
  77.             $locale = 'fr';
  78.         endif;
  79.         $manager = $this->getDoctrine()->getManager();
  80.         $news_repo = $manager->getRepository('Notaris\AdminBundle\Entity\News');
  81.         $news = $news_repo->getNewsItem($locale,$slug);
  82.         if(!$news){
  83.             throw new NotFoundHttpException('Sorry not existing!');
  84.         }
  85.         $subsite_repo = $manager->getRepository('Notaris\AdminBundle\Entity\Subsite');
  86.         $slug = 'nieuws-pers';
  87.         if($locale == 'fr'){
  88.             $slug = 'nouveautes';
  89.         }
  90.         if($subsiteslug != ''){
  91.             $slug = $subsiteslug;
  92.         }
  93.         $subsite = $subsite_repo->getSubsiteBySlugAndLocale($slug, $locale);
  94.         if(!$subsite or !$subsite->getIsActive()){
  95.             return $this->redirect($this->generateUrl('notaris_frontend_homepage'), 301);
  96.         }
  97.         //image og
  98.         $shareImage = '';
  99.         if($news->getAsset() && sizeof($news->getAsset()->getAssetImages()) > 0){
  100.             foreach ($news->getAsset()->getAssetImages() as $image) {
  101.                 $imagepath = "/uploads/" . $image->getImage()->getLocale() . $image->getImage()->getFilename();
  102.                 $cacheManager = $this->container->get('liip_imagine.cache.manager');
  103.                 $shareImage = $cacheManager->getBrowserPath($imagepath, 'facebook_share');
  104.             }
  105.         }
  106.         return $this->render('@NotarisFrontend/news/detail.html.twig', [
  107.             'newsitem' => $news, 'subsite' => $subsite, 'subsiteslug' => $subsiteslug, 'shareImage' => $shareImage
  108.         ]);
  109.     }
  110.     public function clickAction($slug)
  111.     {
  112.         $manager = $this->getDoctrine()->getManager();
  113.         $job_repo = $manager->getRepository('Notaris\AdminBundle\Entity\News');
  114.         $news = $job_repo->findOneBySlug($slug);
  115.         $news->setCountClicked($news->getCountClicked()+1);
  116.         $manager->flush();
  117.         $response = new JsonResponse();
  118.         $response->setData(array(
  119.             'clicksaved' => true
  120.         ));
  121.         return $response;
  122.     }
  123.     public function newsletterAction(Request $request, $page, $otype)
  124.     {
  125.         $localeService = $this->get('notaris.locale.listener');
  126.         $locale = $localeService->getLocale();
  127.         if($locale == 'de'):
  128.             $locale = 'fr';
  129.         endif;
  130.         $manager = $this->getDoctrine()->getManager();
  131.         //section newsletter ophalen met redirect url /nieuws-pers/nieuwsbrieven
  132. //        $uri = $request->getRequestUri();
  133.         $uri = '/nieuws-pers/nieuwsbrieven';
  134.         if($locale == 'fr'):
  135.             $uri = '/nouveautes/lettre-d-info';
  136.         endif;
  137.         $section_repo = $manager->getRepository('Notaris\AdminBundle\Entity\Section');
  138.         $section = $section_repo->findOneByRedirectUrl($uri);
  139.         $mailing_repo = $manager->getRepository('Notaris\AdminBundle\Entity\Mailing');
  140.         $perpage = 7;
  141.         $page = 0;
  142.         if($otype == ''){
  143.             $otype = 'desc';
  144.         }
  145.         $subsite_repo = $manager->getRepository('Notaris\AdminBundle\Entity\Subsite');
  146.         $slug = 'nieuws-pers';
  147.         $currentslug = 'nieuwsbrief';
  148.         if($locale == 'fr'){
  149.             $slug = 'nouveautes';
  150.             $currentslug = 'lettre-d-info-1';
  151.         }
  152.         $subsite = $subsite_repo->getSubsiteBySlugAndLocale($slug, $locale);
  153.         $newsletters = $mailing_repo->getNewsletters($locale, $perpage * $page, $perpage, $otype);
  154.         $totalnewsletter = $perpage; //$mailing_repo->getNewsletterTotal($locale);
  155.         $totalpages = ceil($totalnewsletter / $perpage);
  156.         $_token = $this->get('security.csrf.token_manager')->getToken('authenticate')->getValue();
  157.         return $this->render('@NotarisFrontend/news/newsletter.html.twig', [
  158.             'newsletters' => $newsletters, 'totalpages' => $totalpages, 'currentpage' => $page, 'subsite' => $subsite, 'totalnewsletter' => $totalnewsletter, 'ordertype' => $otype, 'section'=>$section, 'currentslug' => $currentslug, "_token"=> $_token
  159.         ]);
  160.     }
  161.     public function newsletterDetailAction($newsletterId)
  162.     {
  163.         $localeService = $this->get('notaris.locale.listener');
  164.         $locale = $localeService->getLocale();
  165.         if($locale == 'de'):
  166.             $locale = 'fr';
  167.         endif;
  168.         $manager = $this->getDoctrine()->getManager();
  169.         $mailing_repo = $manager->getRepository('Notaris\AdminBundle\Entity\Mailing');
  170.         $newsletter = $mailing_repo->findOneBy(
  171.             array(
  172.                 'id' => $newsletterId,
  173.                 'locale' => $locale,
  174.                 'type' => 'newsletter'
  175.             )
  176.         );
  177.         if(!$newsletter):
  178.             throw new NotFoundHttpException('Sorry not existing!');
  179.         endif;
  180.         $newsletter = str_replace("%%mailgroupID%%", '', $newsletter->getHtmlBrowser());
  181.         $newsletter = str_replace("%%emailID%%", '', $newsletter);
  182.         $newsletter = str_replace("%%email%%", '', $newsletter);
  183.         return $this->render('@NotarisFrontend/news/newsletter_detail.html.twig', [
  184.             'newsletter' => $newsletter
  185.         ]);
  186.     }
  187.     public function mailingDetailAction($mailingId)
  188.     {
  189.         $manager = $this->getDoctrine()->getManager();
  190.         $repo_mailing = $manager->getRepository('Notaris\AdminBundle\Entity\Mailing');
  191.         /** @var  $mailing \Notaris\AdminBundle\Entity\Mailing */
  192.         $mailing = $repo_mailing->findOneBySlug($mailingId);
  193.         if($mailing->getDateReadyToSend() == NULL):
  194.             return $this->redirectToRoute('notaris_frontend_homepage');
  195.         endif;
  196.         $mailarticles = $mailing->getArticles();
  197.         $articles = array();
  198.         foreach($mailarticles as $article):
  199.             $articles[] = $article->getArticle();
  200.         endforeach;
  201.         $mailnews = $mailing->getNews();
  202.         $newsItems = array();
  203.         foreach($mailnews as $news):
  204.             $newsItems[] = $news->getNews();
  205.         endforeach;
  206.         return $this->render('@NotarisFrontend/news/mailing_detail.html.twig', [
  207.             'mailing'=>$mailing, 'articles'=>$articles, 'newsItems'=>$newsItems
  208.         ]);
  209.     }
  210.     //AJAX method
  211.     public function newsletterFormAction(Request $request){
  212.         $response = new \stdClass();
  213.         $response->success = false;
  214. //        $request = $this->container->get('request');
  215. //        $name = $request->get('name');
  216.         $email = $request->get('email');
  217.         $locale = $request->get('locale');
  218.         $token = $request->get('token');
  219. //
  220. //        $name = 'lotje';
  221. //        $email = 'lotje@gmail.com';
  222. //        $locale = 'nl';
  223. //        $token = $request->request->get('_csrf_token');
  224.         $csrf_token = new CsrfToken('', $token);
  225.         if($this->get('security.csrf.token_manager')->isTokenValid($csrf_token)):
  226.             $manager = $this->getDoctrine()->getManager();
  227.             $repo_newsletter = $manager->getRepository('Notaris\AdminBundle\Entity\Newsletter');
  228.             $newsletter = $repo_newsletter->findOneBy(array(
  229.                     'email' => $email,
  230.                     'locale' => $locale
  231.                 )
  232.                );
  233.             if(!$newsletter):
  234.                 $newsletter = new Newsletter();
  235.                 $newsletter->setLocale($locale);
  236.                 $newsletter->setEmail($email);
  237. //                $newsletter->setName($name);
  238.                 $manager->persist($newsletter);
  239.             endif;
  240.             $newsletter->setIsActive(true);
  241.             $manager->flush();
  242.             $response->success = true;
  243.         endif;
  244.         return new Response(json_encode($response));
  245.     }
  246.     public function unsubscribeAction(Request $request, $contact_id, $contact_email)
  247.     {
  248.         $localeService = $this->get('notaris.locale.listener');
  249.         $locale = $localeService->getLocale();
  250.         if($locale == 'de'):
  251.             $locale = 'fr';
  252.         endif;
  253.         $manager = $this->getDoctrine()->getManager();
  254.         //section newsletter ophalen met redirect url /nieuws-pers/nieuwsbrieven
  255. //        $uri = $request->getRequestUri();
  256.         $uri = '/nieuws-pers/nieuwsbrieven/uitschrijven';
  257.         if($locale == 'fr'):
  258.             $uri = '/nouveautes/lettre-d-info/unsubscribe';
  259.         endif;
  260.         $section_repo = $manager->getRepository('Notaris\AdminBundle\Entity\Section');
  261.         $section = $section_repo->findOneByRedirectUrl($uri);
  262.         $subsite_repo = $manager->getRepository('Notaris\AdminBundle\Entity\Subsite');
  263.         $slug = 'nieuws-pers';
  264.         if($locale == 'fr'){
  265.             $slug = 'nouveautes';
  266.         }
  267.         $subsite = $subsite_repo->getSubsiteBySlugAndLocale($slug, $locale);
  268.         return $this->render('@NotarisFrontend/news/unsubscribe.html.twig', [
  269.             'subsite' => $subsite, 'section'=>$section, 'contact_id'=>$contact_id, 'contact_email'=>$contact_email
  270.         ]);
  271.     }
  272.     //AJAX method
  273.     public function unsubscribeFormAction(Request $request){
  274.         $response = new \stdClass();
  275.         $response->success = false;
  276. //        $request = $this->container->get('request');
  277.         $contactId = $request->get('contact_id');  //mailToId
  278.         $email = $request->get('email');
  279.         $locale = $request->get('locale');
  280. //
  281.         $manager = $this->getDoctrine()->getManager();
  282.         /** @var  $repo_mailTo \Notaris\AdminBundle\Entity\MailingToRepository */
  283.         $repo_mailTo = $manager->getRepository('Notaris\AdminBundle\Entity\MailingTo');
  284.         /** @var  $mailingTo \Notaris\AdminBundle\Entity\MailingTo */
  285.         $mailingTo = $repo_mailTo->find($contactId);
  286.         if($mailingTo):
  287.             if($mailingTo->getNewsLetterUser()):
  288.                 $newsletter = $mailingTo->getNewsLetterUser();
  289.                 //newsletter contact
  290.                 if($newsletter->getUser() == NULL and $newsletter->getPerson() == NULL AND $newsletter->getEmail() == $email):
  291.                     $newsletter->setIsActive(false);
  292.                     $manager->remove($newsletter);
  293.                 elseif($newsletter->getUser() AND $newsletter->getUser()->getEmail() == $email):
  294.                     $newsletter->setIsActive(false);
  295.                 elseif($newsletter->getPerson() AND ($newsletter->getPerson()->getEmail() == $email OR $newsletter->getPerson()->getSecundairEmail() == $email )):
  296.                     $newsletter->setIsActive(false);
  297.                 endif;
  298.                 $response->success = true;
  299.             else:
  300.                 //kabinet contact
  301.                 $mailingTo->getMailingContact()->setIsActive(false);
  302.                 $response->success = true;
  303.             endif;
  304.         endif;
  305.         $manager->flush();
  306.         return new Response(json_encode($response));
  307.     }
  308.     /**
  309.      * Generate the article feed
  310.      *
  311.      * @return Response XML Feed
  312.      */
  313.     public function rssfeedAction()
  314.     {
  315.         $localeService = $this->get('notaris.locale.listener');
  316.         $locale = $localeService->getLocale();
  317.         if($locale == 'de'):
  318.             $locale = 'fr';
  319.         endif;
  320.         $translator = $this->get('translator');
  321.         $translator->setLocale($locale);
  322.         $manager = $this->getDoctrine()->getManager();
  323.         $news_repo = $manager->getRepository('Notaris\AdminBundle\Entity\News');
  324.         $news = $news_repo->getAllNews($locale);  //todo aantal aanpassen
  325.         $feed = $this->feedManager->get('news');
  326.         $feed->set('title', $translator->trans('mn_nieuws') . ' RSS ' . $translator->trans('alg_basetitle'));
  327.         $feed->set('description', $translator->trans('mn_nieuws') . ' RSS ' . $translator->trans('alg_basetitle'));
  328.         $feed->addFromArray($news);
  329.         return new Response($feed->render('rss')); // or 'atom'
  330. //        return array(); // or 'atom'
  331.     }
  332.     public function setFeedManager(FeedManager $feedManager)
  333.     {
  334.         $this->feedManager = $feedManager;
  335.     }
  336. }