X-Git-Url: https://git.rapsys.eu/blogbundle/blobdiff_plain/06d85d868aa5a36bb83575d3cd9df95d3011320d..b51a2d32b23ee35f28bd29e7883d335007d1e8c1:/Controller/PageController.php

diff --git a/Controller/PageController.php b/Controller/PageController.php
index 32eddfd..2080f9f 100644
--- a/Controller/PageController.php
+++ b/Controller/PageController.php
@@ -2,27 +2,152 @@
 
 namespace Rapsys\BlogBundle\Controller;
 
-use Symfony\Bundle\FrameworkBundle\Controller\Controller;
-
-class PageController extends Controller {
-	/**
-	 * Localized homepage
-	 */
-	public function indexAction() {
-		return $this->render('RapsysBlogBundle::index.html.twig');
+use Rapsys\BlogBundle\Entity\Article;
+use Rapsys\BlogBundle\Entity\Keyword;
+use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
+
+class PageController extends \Symfony\Bundle\FrameworkBundle\Controller\Controller {
+	/// Localized homepage
+	//TODO: rewrite with canonical ?
+	public function indexAction($_locale) {
+		//Fetch articles list
+		$articles = $this->getDoctrine()->getRepository(Article::class)->findArticles($_locale);
+
+		//Set title
+		$title = $this->get('translator')->trans($this->getParameter('blog.welcome'));
+
+		//Render template
+		return $this->render('RapsysBlogBundle::index.html.twig', array('title' => $title, 'articles' => $articles));
 	}
 
-	/**
-	 * Legal informations
-	 */
+	/// Legal informations
 	public function aboutAction() {
-		return $this->render('RapsysBlogBundle::about.html.twig');
+		//Get translator
+		$trans = $this->get('translator');
+
+		//Set title
+		$title = $trans->trans('About').' - '.$trans->trans($this->getParameter('blog.title'));
+
+		//Render template
+		return $this->render('RapsysBlogBundle::page/about.html.twig', array('title' => $title));
+	}
+
+	/// Contact form
+	public function contactAction($_locale, \Symfony\Component\HttpFoundation\Request $request) {
+		//Get translator
+		$trans = $this->get('translator');
+
+		//Set title
+		$title = $trans->trans('Contact').' - '.$trans->trans($this->getParameter('blog.title'));
+
+		//Create the form according to the FormType created previously.
+		//And give the proper parameters
+		$form = $this->createForm('Rapsys\BlogBundle\Form\ContactType', null, array(
+			// To set the action use $this->generateUrl('route_identifier')
+			'action' => $this->generateUrl('contact'),
+			'method' => 'POST'
+		));
+
+		if ($request->isMethod('POST')) {
+			// Refill the fields in case the form is not valid.
+			$form->handleRequest($request);
+
+			if ($form->isValid()) {
+				$data = $form->getData();
+				$message = \Swift_Message::newInstance()
+					->setSubject($data['subject'])
+					->setFrom(array($data['email'] => $data['name']))
+					->setTo(array($this->getParameter('blog.contact_mail') => $this->getParameter('blog.contact_name')))
+					->setBody($data['message'])
+					->addPart(
+						$this->renderView(
+							'RapsysBlogBundle::mail/contact.html.twig',
+							array(
+								'blog_logo' => file_get_contents($this->getParameter('blog.logo'), false, null),
+								'blog_title' => $this->getParameter('blog.title'),
+								'blog_url' => $this->get('router')->generate('homepage', array('_locale' => $_locale), UrlGeneratorInterface::ABSOLUTE_URL),
+								'subject' => $data['subject'],
+								'contact_name' => $this->getParameter('blog.contact_name'),
+								'message' => $data['message']
+							)
+						),
+						'text/html'
+					);
+				//Send message
+				if ($this->get('mailer')->send($message)) {
+					//Redirect to cleanup the form
+					return $this->redirectToRoute('contact', array('sent' => 1));
+				}
+			}
+		}
+
+		//Render template
+		return $this->render('RapsysBlogBundle::page/contact.html.twig', array('title' => $title, 'form' => $form->createView(), 'sent' => $request->query->get('sent', 0)));
+	}
+
+	/// Article list
+	public function articleIndexAction($_locale) {
+		//Fetch articles list
+		$articles = $this->getDoctrine()->getRepository(Article::class)->findArticles($_locale);
+
+		//Get translator
+		$trans = $this->get('translator');
+
+		//Set title
+		$title = $trans->trans('Articles list').' - '.$trans->trans($this->getParameter('blog.title'));
+
+		//Render template
+		return $this->render('RapsysBlogBundle::article/index.html.twig', array('title' => $title, 'articles' => $articles));
+	}
+
+	/// Article read
+	public function articleReadAction($_locale, $_article) {
+		//Protect article fetching
+		try {
+			$article = $this->getDoctrine()->getRepository(Article::class)->findArticle($_locale, $_article);
+		//Catch no article case
+		} catch (\Doctrine\ORM\NoResultException $e) {
+			//Throw exception
+			throw new \Symfony\Component\HttpKernel\Exception\NotFoundHttpException('Not found!');
+		}
+
+		//Set title
+		$title = $article['title'].' - '.$this->get('translator')->trans($this->getParameter('blog.title'));
+
+		//Render template
+		return $this->render('RapsysBlogBundle::article/read.html.twig', array('title' => $title, 'article' => $article));
 	}
 
-	/**
-	 * Contact form
-	 */
-	public function contactAction() {
-		return $this->render('RapsysBlogBundle::contact.html.twig');
+	/// Keyword list
+	public function keywordIndexAction($_locale) {
+		//Fetch keywords list
+		$keywords = $this->getDoctrine()->getRepository(Keyword::class)->findKeywords($_locale);
+
+		//Get translator
+		$trans = $this->get('translator');
+
+		//Set title
+		$title = $trans->trans('Keywords list').' - '.$trans->trans($this->getParameter('blog.title'));
+
+		//Render template
+		return $this->render('RapsysBlogBundle::keyword/index.html.twig', array('title' => $title, 'keywords' => $keywords));
+	}
+
+	/// Keyword read
+	function keywordReadAction($_locale, $_keyword) {
+		//Protect keyword fetching
+		try {
+			$keyword = $this->getDoctrine()->getRepository(Keyword::class)->findKeyword($_locale, $_keyword);
+		//Catch no keyword case
+		} catch (\Doctrine\ORM\NoResultException $e) {
+			//Throw exception
+			throw new \Symfony\Component\HttpKernel\Exception\NotFoundHttpException('Not found!');
+		}
+
+		//Set title
+		$title = $keyword['title'].' - '.$this->get('translator')->trans($this->getParameter('blog.title'));
+
+		//Render template
+		return $this->render('RapsysBlogBundle::keyword/read.html.twig', array('title' => $title, 'keyword' => $keyword));
 	}
 }