<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Component\Mime\Email;
use Symfony\Component\Mime\Address;
use OlaSoft\Common;
use App\Entity\Subscribers;
use App\Repository\StructuresRepository;
use App\Entity\Services;
use App\Entity\Articles;
use App\Entity\ArticlesCategories;
use App\Entity\Structures;
use App\Entity\StructuresCategories;
use App\Entity\Resources;
use App\Entity\ResourcesCategories;
use App\Entity\Pages;
use App\Entity\Banners;
use App\Entity\Videos;
use App\Entity\Messages;
use App\Form\MessagesType;
use App\Form\SubscribersType;
use App\Entity\ServicesCategories;
use App\Entity\PartnersCategories;
use App\Entity\MembersCategories;
use App\Entity\Partners;
use App\Entity\Professions;
use App\Entity\Events;
use App\Repository\ServicesRepository;
use App\Repository\ProfessionsRepository;
use App\Repository\EventsRepository;
use App\Repository\MembersRepository;
/**
* @Route("", priority=1)
*/
class DefaultController extends AbstractController
{
public function landing()
{
return $this->render('Default/landing.html.twig',[]);
}
/**
* @Route("/home/")
*/
public function home()
{
return $this->redirectToRoute('home');
}
/**
* @Route("/", name="home")
*/
public function index()
{
$em = $this->getDoctrine()->getManager();
$banner = $em->getRepository(Banners::class)->findOneBy(['isEnabled'=>1], ['id'=>'desc']);
$articles = $em->getRepository(Articles::class)->createQueryBuilder('a')
->leftjoin('a.banner','b')
->leftjoin('a.category','c')
->leftjoin('a.type','t')
->leftjoin('a.album','aa')
->leftjoin('a.biblio','ab')
->orderBy('a.date','DESC')
->andWhere("a.date <= '".(new \DateTime())->format('Y-m-d H:i:s')."'")
->andWhere('a.isEnabled = 1')
->setMaxResults(3)
->getQuery()
->getResult();
$videos = $em->getRepository(Videos::class)->createQueryBuilder('a')
->leftjoin('a.banner','b')
->orderBy('a.date','DESC')
->andWhere("a.date <= '".(new \DateTime())->format('Y-m-d H:i:s')."'")
->andWhere('a.isEnabled = 1')
->setMaxResults(3)
->getQuery()
->getResult();
$partners = $em->getRepository(Partners::class)->findBy(['isEnabled' => 1], ['id'=>'asc']);
$servicesCats = $em->getRepository(ServicesCategories::class)->findBy([],['id'=>'asc']);
return $this->render('Default/index.html.twig',[
'banner' => $banner,
'articles' => $articles,
'videos' => $videos,
'partners' => $partners,
'servicesCats'=>$servicesCats,
]);
}
/**
* @Route("/sitemap.xml", name="sitemap", defaults={"xml"=true, "_format"="xml"}, priority=1)
*/
public function menu($activeMenu = null, $isFooter = false, $xml = false)
{
$em = $this->getDoctrine()->getManager();
$partnersCats = $em->getRepository(PartnersCategories::class)->findBy(['isEnabled'=>true],['id'=>'asc']);
$articlesCats = $em->getRepository(ArticlesCategories::class)->findBy([],['id'=>'asc']);
$servicesCats = $em->getRepository(ServicesCategories::class)->findBy([],['id'=>'asc']);
$membersCats = $em->getRepository(MembersCategories::class)->findBy([],['id'=>'asc']);
$services = $em->getRepository(Services::class)->findBy(['isEnabled'=>true],['id'=>'asc']);
return $this->render($xml ? 'Default/sitemap.xml.twig' : ($isFooter ? 'Default/footer.html.twig' : 'Default/menu.html.twig'),[
'partnersCats'=>$partnersCats,
'articlesCats'=>$articlesCats,
'servicesCats'=>$servicesCats,
'membersCats'=>$membersCats,
'activeMenu'=>$activeMenu,
]);
}
/**
* @Route("/formations/", name="formations", priority=1)
* @Route("/formations/{slug}/", name="formations-cat", priority=1)
*/
public function formations(ServicesRepository $repos, ServicesCategories $cat = null)
{
if($cat)
$list = $repos->findBy(['category'=>$cat->getId(), 'isEnabled'=>1]);
else
$list = $repos->findBy(['isEnabled'=>1]);
return $this->render('Default/formations.html.twig',[
'list'=>$list,
'cat'=>$cat
]);
}
/**
* @Route("/formation/{id}/{slug}/", name="service", requirements={"id": "\d+"})
* @Route("/formation/{id}/", requirements={"id": "\d+"})
*/
public function formation(Services $item)
{
return $this->render('Default/formation.html.twig',[
'item'=>$item,
]);
}
/**
* @Route("/professions/", name="professions", priority=1)
*/
public function professions(ProfessionsRepository $repos)
{
$list = $repos->findBy(['isEnabled'=>1],[]);
return $this->render('Default/professions.html.twig',['list'=>$list]);
}
/**
* @Route("/profession/{id}/{slug}/", name="profession", requirements={"id": "\d+"})
* @Route("/profession/{id}/", requirements={"id": "\d+"})
*/
public function profession(Professions $item, $slug = null)
{
$em = $this->getDoctrine()->getManager();
return $this->render('Default/profession.html.twig',[
'item'=>$item,
]);
}
/**
* @Route("/evenements/", name="events", priority=1)
*/
public function events(Request $request)
{
$em = $this->getDoctrine()->getManager();
$offset = $request->get('offset') ?? 1;
$offset--;
$keyword = $request->get('q');
$limit = 30;
$of = $offset*$limit;
$query = $em->getRepository(Events::class)->createQueryBuilder('p')->where('p.isEnabled = 1');
if($keyword)
$query = $query->andWhere('(p.name like :k or p.description like :k or p.details like :k or p.place like :k )')
->setParameter('k','%'.$keyword.'%');
$list = $query->select('p')
->orderby('p.startDate','desc')
->setMaxResults($limit)
->setFirstResult($of)
->getQuery()->getResult();
$count = $query->select('count(p.id) as c')->getQuery()->getOneOrNullResult()['c'];
return $this->render('Default/events.html.twig',[
'list'=>$list,
'count'=>$count,
'table_limit'=>$limit,
'offset'=>$offset,
]);
}
/**
* @Route("/evenement/{id}/{slug}/", name="event", requirements={"id": "\d+"})
* @Route("/evenement/{id}/", requirements={"id": "\d+"})
*/
public function event(Events $item, $slug = null)
{
$em = $this->getDoctrine()->getManager();
return $this->render('Default/event.html.twig',[
'item'=>$item,
]);
}
/**
* @Route("/articles/", name="articles")
* @Route("/articles/{offset}/", name="articles-page", requirements={"offset": "\d+"})
* @Route("/articles/{cat}/", name="articles-cat")
* @Route("/articles/{cat}/{offset}/", name="articles-cat-page", requirements={"offset": "\d+"})
*/
public function articles($offset = 1, $cat = null)
{
$offset--;
$limit = 30;
$of = $offset*$limit;
$params = [];
$em = $this->getDoctrine()->getManager();
$cat = $cat ? $em->getRepository(ArticlesCategories::class)->findOneBySlug($cat) : null;
$list = $em->getRepository(Articles::class)->createQueryBuilder('a')
->leftjoin('a.banner','b')
->leftjoin('a.category','c')
->leftjoin('a.type','t')
->leftjoin('a.album','aa')
->leftjoin('a.biblio','ab')
->orderBy('a.date','DESC')
->andWhere("a.date <= '".(new \DateTime())->format('Y-m-d H:i:s')."'")
->andWhere('a.isEnabled = 1')
;
if($cat) {
$list = $list->andWhere('c.id = '.$cat->getId());
$params['cat'] = $cat->getSlug();
}
$count = $list->select('count(distinct(a.id))')->getQuery()->getResult()[0][1];
$list = $list->select('a')
->setMaxResults($limit)
->setFirstResult($of)
->getQuery()->getResult();
return $this->render('Default/articles.html.twig',[
'articles'=>$list,
'cat'=>$cat,
'count'=>$count,
'table_limit'=>$limit,
'offset'=>$offset,
'params'=>$params
]);
}
/**
* @Route("/article/{id}/{slug}/", name="article", requirements={"id": "\d+"})
* @Route("/article/{id}/", requirements={"id": "\d+"})
*/
public function article(Articles $article, $slug = null)
{
if($article->getURL())
return $this->redirect($article->getURL());
$em = $this->getDoctrine()->getManager();
$list = $em->getRepository(Articles::class)->createQueryBuilder('a')
->leftjoin('a.banner','b')
->leftjoin('a.category','c')
->leftjoin('a.type','t')
->leftjoin('a.album','aa')
->leftjoin('a.biblio','ab')
->orderBy('a.date','DESC')
->andWhere('a.id <> '.$article->getId())
->andWhere("a.date <= '".(new \DateTime())->format('Y-m-d H:i:s')."'")
->andWhere('a.isEnabled = 1')
->setMaxResults(6)
->getQuery()
->getResult();
return $this->render('Default/article.html.twig',[
'article'=>$article,
'list'=>$list,
]);
}
/**
* @Route("/videos/", name="videos")
*/
public function videos()
{
$em = $this->getDoctrine()->getManager();
$videos = $em->getRepository(Videos::class)->createQueryBuilder('a')
->leftjoin('a.banner','b')
->orderBy('a.date','DESC')
->andWhere("a.date <= '".(new \DateTime())->format('Y-m-d H:i:s')."'")
->andWhere('a.isEnabled = 1')
->setMaxResults(30)
->getQuery()
->getResult();
return $this->render('Default/videos.html.twig',[
'videos'=>$videos
]);
}
/**
* @Route("/video/{id}/", name="video", requirements={"id": "\d+"})
*/
public function video(Videos $video)
{
return $this->render('Default/video.html.twig',[
'video'=>$video
]);
}
/**
* @Route("/documents/", name="resources", priority=1)
* @Route("/documents/{slug}/", name="resources-cat")
*/
public function resources(Request $request, ResourcesCategories $cat = null)
{
$keyword = $request->get('q');
$offset = $request->get('offset') ?? 1;
$offset--;
$limit = 50;
$of = $offset*$limit;
$em = $this->getDoctrine()->getManager();
$query = $em->getRepository(Resources::class)->createQueryBuilder('r')
->leftjoin('r.category','c')
->where('r.isEnabled = 1')
->orderBy('r.date','desc');
if($cat) $query = $query->andWhere('c.id = '.$cat->getId())->addOrderBy('r.date','desc');
if($keyword)
$query = $query->andWhere('(r.title like :k or r.description like :k or c.label like :k)')
->setParameter('k','%'.$keyword.'%');
$count = $query->select('count(r.id)')->getQuery()->getResult()[0][1];
$list = $query->select('r')->setMaxResults($limit)->setFirstResult($of)->getQuery()->getResult();
return $this->render('Default/resources.html.twig',[
'cat'=>$cat,
'list'=>$list,
'count'=>$count,
'table_limit'=>$limit,
'offset'=>$offset,
'keyword'=>$keyword
]);
}
/**
* @Route("/gouvernance/{slug}/", name="members", priority=1)
*/
public function members(MembersCategories $cat, MembersRepository $repos)
{
$list = $repos->findBy(['category'=>$cat->getId(), 'isEnabled'=>1],['position'=>'ASC']);
return $this->render('Default/members.html.twig',['cat'=>$cat, 'list'=>$list]);
}
/**
* @Route("/partenaires/", name="partners", defaults={"isEmbed"=false})
* @Route("/partenaires/{slug}/", name="partners-cat", defaults={"isEmbed"=false})
*/
public function partners(PartnersCategories $cat = null, $isEmbed = true)
{
$em = $this->getDoctrine()->getManager();
$list = $em->getRepository(Partners::class)->createQueryBuilder('p')
->andWhere('p.isEnabled = 1');
if($cat) $list = $list->andWhere('p.category = '.$cat->getId());
$list = $list->getQuery()->getResult();
return $this->render($isEmbed ? 'Default/partners-list.html.twig' : 'Default/partners.html.twig',[
'list'=>$list,
'cat'=>$cat,
]);
}
}