<?php
namespace Notaris\FrontendBundle\Controller;
use Eko\FeedBundle\Feed\FeedManager;
use Eko\FeedBundle\Field\Item\GroupItemField;
use Eko\FeedBundle\Field\Item\ItemField;
use Eko\FeedBundle\Field\Item\MediaItemField;
use Notaris\AdminBundle\Entity\Attachment;
use Notaris\AdminBundle\Entity\Faq;
use Notaris\AdminBundle\Entity\Newsletter;
use Notaris\AdminBundle\Entity\Subsite;
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;
use Symfony\Component\Security\Csrf\CsrfToken;
use Symfony\Component\Translation\Translator;
class NewsController extends AbstractController
{
private $feedManager;
public function indexAction($_locale, $page, $otype, $subsiteslug)
{
$localeService = $this->get('notaris.locale.listener');
$locale = $localeService->getLocale();
if($_locale != $locale){
return $this->redirect($this->generateUrl('notaris_frontend_news.'.$locale), 302);
}
if($locale == 'de'):
$locale = 'fr';
endif;
$manager = $this->getDoctrine()->getManager();
/** @var $news_repo \Notaris\AdminBundle\Entity\NewsRepository */
$news_repo = $manager->getRepository('Notaris\AdminBundle\Entity\News');
$section_repo = $manager->getRepository('Notaris\AdminBundle\Entity\Section');
$perpage = 25;
// if($otype == ''){
// $otype = 'desc';
// }
$subsite_repo = $manager->getRepository('Notaris\AdminBundle\Entity\Subsite');
$slug = 'nieuws-pers';
if($locale == 'fr'){
$slug = 'nouveautes';
}
if($subsiteslug == 'algemeen' || $subsiteslug == 'generales'){
$subsiteslug = '';
}
if($subsiteslug != ''){
$slug = $subsiteslug;
}
$subsite = $subsite_repo->getSubsiteBySlugAndLocale($slug, $locale);
if($subsiteslug == '') {
$news = $news_repo->getNewsGeneralPublic($locale, $perpage * $page, $perpage, $otype);
$totalnews = $news_repo->getNewsGeneralPublicCount($locale);
}else{
if(!$subsite or !$subsite->getIsActive()){
return $this->redirect($this->generateUrl('notaris_frontend_homepage'), 301);
}
$news = $news_repo->getNewsSubsitePublic($locale, $perpage * $page, $perpage, $otype, $subsite);
$totalnews = $news_repo->getNewsSubsitePublicCount($locale, $subsite);
}
$totalpages = ceil($totalnews / $perpage);
$section = $section_repo->getFirstSectionFromSubsite($subsite);
return $this->render('@NotarisFrontend/news/index.html.twig', [
'news' => $news, 'totalpages' => $totalpages, 'currentpage' => $page, 'subsite' => $subsite, 'totalnews' => $totalnews, 'ordertype' => $otype, 'subsiteslug' => $subsiteslug, 'section' => $section
]);
}
public function detailAction($_locale, $slug, $subsiteslug)
{
$localeService = $this->get('notaris.locale.listener');
$locale = $localeService->getLocale();
if($_locale != $locale){
return $this->redirect($this->generateUrl('notaris_frontend_news_detail.'.$locale, ['slug'=> $slug]), 302);
}
if($locale == 'de'):
$locale = 'fr';
endif;
$manager = $this->getDoctrine()->getManager();
$news_repo = $manager->getRepository('Notaris\AdminBundle\Entity\News');
$news = $news_repo->getNewsItem($locale,$slug);
if(!$news){
throw new NotFoundHttpException('Sorry not existing!');
}
$subsite_repo = $manager->getRepository('Notaris\AdminBundle\Entity\Subsite');
$slug = 'nieuws-pers';
if($locale == 'fr'){
$slug = 'nouveautes';
}
if($subsiteslug != ''){
$slug = $subsiteslug;
}
$subsite = $subsite_repo->getSubsiteBySlugAndLocale($slug, $locale);
if(!$subsite or !$subsite->getIsActive()){
return $this->redirect($this->generateUrl('notaris_frontend_homepage'), 301);
}
//image og
$shareImage = '';
if($news->getAsset() && sizeof($news->getAsset()->getAssetImages()) > 0){
foreach ($news->getAsset()->getAssetImages() as $image) {
$imagepath = "/uploads/" . $image->getImage()->getLocale() . $image->getImage()->getFilename();
$cacheManager = $this->container->get('liip_imagine.cache.manager');
$shareImage = $cacheManager->getBrowserPath($imagepath, 'facebook_share');
}
}
return $this->render('@NotarisFrontend/news/detail.html.twig', [
'newsitem' => $news, 'subsite' => $subsite, 'subsiteslug' => $subsiteslug, 'shareImage' => $shareImage
]);
}
public function clickAction($slug)
{
$manager = $this->getDoctrine()->getManager();
$job_repo = $manager->getRepository('Notaris\AdminBundle\Entity\News');
$news = $job_repo->findOneBySlug($slug);
$news->setCountClicked($news->getCountClicked()+1);
$manager->flush();
$response = new JsonResponse();
$response->setData(array(
'clicksaved' => true
));
return $response;
}
public function newsletterAction(Request $request, $page, $otype)
{
$localeService = $this->get('notaris.locale.listener');
$locale = $localeService->getLocale();
if($locale == 'de'):
$locale = 'fr';
endif;
$manager = $this->getDoctrine()->getManager();
//section newsletter ophalen met redirect url /nieuws-pers/nieuwsbrieven
// $uri = $request->getRequestUri();
$uri = '/nieuws-pers/nieuwsbrieven';
if($locale == 'fr'):
$uri = '/nouveautes/lettre-d-info';
endif;
$section_repo = $manager->getRepository('Notaris\AdminBundle\Entity\Section');
$section = $section_repo->findOneByRedirectUrl($uri);
$mailing_repo = $manager->getRepository('Notaris\AdminBundle\Entity\Mailing');
$perpage = 7;
$page = 0;
if($otype == ''){
$otype = 'desc';
}
$subsite_repo = $manager->getRepository('Notaris\AdminBundle\Entity\Subsite');
$slug = 'nieuws-pers';
$currentslug = 'nieuwsbrief';
if($locale == 'fr'){
$slug = 'nouveautes';
$currentslug = 'lettre-d-info-1';
}
$subsite = $subsite_repo->getSubsiteBySlugAndLocale($slug, $locale);
$newsletters = $mailing_repo->getNewsletters($locale, $perpage * $page, $perpage, $otype);
$totalnewsletter = $perpage; //$mailing_repo->getNewsletterTotal($locale);
$totalpages = ceil($totalnewsletter / $perpage);
$_token = $this->get('security.csrf.token_manager')->getToken('authenticate')->getValue();
return $this->render('@NotarisFrontend/news/newsletter.html.twig', [
'newsletters' => $newsletters, 'totalpages' => $totalpages, 'currentpage' => $page, 'subsite' => $subsite, 'totalnewsletter' => $totalnewsletter, 'ordertype' => $otype, 'section'=>$section, 'currentslug' => $currentslug, "_token"=> $_token
]);
}
public function newsletterDetailAction($newsletterId)
{
$localeService = $this->get('notaris.locale.listener');
$locale = $localeService->getLocale();
if($locale == 'de'):
$locale = 'fr';
endif;
$manager = $this->getDoctrine()->getManager();
$mailing_repo = $manager->getRepository('Notaris\AdminBundle\Entity\Mailing');
$newsletter = $mailing_repo->findOneBy(
array(
'id' => $newsletterId,
'locale' => $locale,
'type' => 'newsletter'
)
);
if(!$newsletter):
throw new NotFoundHttpException('Sorry not existing!');
endif;
$newsletter = str_replace("%%mailgroupID%%", '', $newsletter->getHtmlBrowser());
$newsletter = str_replace("%%emailID%%", '', $newsletter);
$newsletter = str_replace("%%email%%", '', $newsletter);
return $this->render('@NotarisFrontend/news/newsletter_detail.html.twig', [
'newsletter' => $newsletter
]);
}
public function mailingDetailAction($mailingId)
{
$manager = $this->getDoctrine()->getManager();
$repo_mailing = $manager->getRepository('Notaris\AdminBundle\Entity\Mailing');
/** @var $mailing \Notaris\AdminBundle\Entity\Mailing */
$mailing = $repo_mailing->findOneBySlug($mailingId);
if($mailing->getDateReadyToSend() == NULL):
return $this->redirectToRoute('notaris_frontend_homepage');
endif;
$mailarticles = $mailing->getArticles();
$articles = array();
foreach($mailarticles as $article):
$articles[] = $article->getArticle();
endforeach;
$mailnews = $mailing->getNews();
$newsItems = array();
foreach($mailnews as $news):
$newsItems[] = $news->getNews();
endforeach;
return $this->render('@NotarisFrontend/news/mailing_detail.html.twig', [
'mailing'=>$mailing, 'articles'=>$articles, 'newsItems'=>$newsItems
]);
}
//AJAX method
public function newsletterFormAction(Request $request){
$response = new \stdClass();
$response->success = false;
// $request = $this->container->get('request');
// $name = $request->get('name');
$email = $request->get('email');
$locale = $request->get('locale');
$token = $request->get('token');
//
// $name = 'lotje';
// $email = 'lotje@gmail.com';
// $locale = 'nl';
// $token = $request->request->get('_csrf_token');
$csrf_token = new CsrfToken('', $token);
if($this->get('security.csrf.token_manager')->isTokenValid($csrf_token)):
$manager = $this->getDoctrine()->getManager();
$repo_newsletter = $manager->getRepository('Notaris\AdminBundle\Entity\Newsletter');
$newsletter = $repo_newsletter->findOneBy(array(
'email' => $email,
'locale' => $locale
)
);
if(!$newsletter):
$newsletter = new Newsletter();
$newsletter->setLocale($locale);
$newsletter->setEmail($email);
// $newsletter->setName($name);
$manager->persist($newsletter);
endif;
$newsletter->setIsActive(true);
$manager->flush();
$response->success = true;
endif;
return new Response(json_encode($response));
}
public function unsubscribeAction(Request $request, $contact_id, $contact_email)
{
$localeService = $this->get('notaris.locale.listener');
$locale = $localeService->getLocale();
if($locale == 'de'):
$locale = 'fr';
endif;
$manager = $this->getDoctrine()->getManager();
//section newsletter ophalen met redirect url /nieuws-pers/nieuwsbrieven
// $uri = $request->getRequestUri();
$uri = '/nieuws-pers/nieuwsbrieven/uitschrijven';
if($locale == 'fr'):
$uri = '/nouveautes/lettre-d-info/unsubscribe';
endif;
$section_repo = $manager->getRepository('Notaris\AdminBundle\Entity\Section');
$section = $section_repo->findOneByRedirectUrl($uri);
$subsite_repo = $manager->getRepository('Notaris\AdminBundle\Entity\Subsite');
$slug = 'nieuws-pers';
if($locale == 'fr'){
$slug = 'nouveautes';
}
$subsite = $subsite_repo->getSubsiteBySlugAndLocale($slug, $locale);
return $this->render('@NotarisFrontend/news/unsubscribe.html.twig', [
'subsite' => $subsite, 'section'=>$section, 'contact_id'=>$contact_id, 'contact_email'=>$contact_email
]);
}
//AJAX method
public function unsubscribeFormAction(Request $request){
$response = new \stdClass();
$response->success = false;
// $request = $this->container->get('request');
$contactId = $request->get('contact_id'); //mailToId
$email = $request->get('email');
$locale = $request->get('locale');
//
$manager = $this->getDoctrine()->getManager();
/** @var $repo_mailTo \Notaris\AdminBundle\Entity\MailingToRepository */
$repo_mailTo = $manager->getRepository('Notaris\AdminBundle\Entity\MailingTo');
/** @var $mailingTo \Notaris\AdminBundle\Entity\MailingTo */
$mailingTo = $repo_mailTo->find($contactId);
if($mailingTo):
if($mailingTo->getNewsLetterUser()):
$newsletter = $mailingTo->getNewsLetterUser();
//newsletter contact
if($newsletter->getUser() == NULL and $newsletter->getPerson() == NULL AND $newsletter->getEmail() == $email):
$newsletter->setIsActive(false);
$manager->remove($newsletter);
elseif($newsletter->getUser() AND $newsletter->getUser()->getEmail() == $email):
$newsletter->setIsActive(false);
elseif($newsletter->getPerson() AND ($newsletter->getPerson()->getEmail() == $email OR $newsletter->getPerson()->getSecundairEmail() == $email )):
$newsletter->setIsActive(false);
endif;
$response->success = true;
else:
//kabinet contact
$mailingTo->getMailingContact()->setIsActive(false);
$response->success = true;
endif;
endif;
$manager->flush();
return new Response(json_encode($response));
}
/**
* Generate the article feed
*
* @return Response XML Feed
*/
public function rssfeedAction()
{
$localeService = $this->get('notaris.locale.listener');
$locale = $localeService->getLocale();
if($locale == 'de'):
$locale = 'fr';
endif;
$translator = $this->get('translator');
$translator->setLocale($locale);
$manager = $this->getDoctrine()->getManager();
$news_repo = $manager->getRepository('Notaris\AdminBundle\Entity\News');
$news = $news_repo->getAllNews($locale); //todo aantal aanpassen
$feed = $this->feedManager->get('news');
$feed->set('title', $translator->trans('mn_nieuws') . ' RSS ' . $translator->trans('alg_basetitle'));
$feed->set('description', $translator->trans('mn_nieuws') . ' RSS ' . $translator->trans('alg_basetitle'));
$feed->addFromArray($news);
return new Response($feed->render('rss')); // or 'atom'
// return array(); // or 'atom'
}
public function setFeedManager(FeedManager $feedManager)
{
$this->feedManager = $feedManager;
}
}