-use Symfony\Bundle\FrameworkBundle\Controller\Controller;
-
-class DefaultController extends Controller {
-       //Redirect on first supported language version
-       public function rootAction() {
-               //Set default locale
-               $locale = 'en';
-
-               //Supported application languages
-               //XXX: Array for route validation is not supported by default (rapsys patch)
-               $supportedLanguage = $this->getParameter('blog.locales');
-
-               //Language list
-               if (!empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
-                       //Init array
-                       $httpAcceptLanguage = [];
-
-                       //Extract languages
-                       foreach(explode(',',str_replace('-','_',$_SERVER['HTTP_ACCEPT_LANGUAGE'])) as $candidate) {
-                               //Extract candidate and optional weight
-                               @list($candidate, $weight) = explode(';', $candidate);
-                               if (!empty($candidate)) {
-                                       $httpAcceptLanguage[!empty($weight)?$weight:1][] = $candidate;
-                               }
-                       }
+use Symfony\Bridge\Twig\Mime\TemplatedEmail;
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\Response;
+use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
+use Symfony\Component\Mime\Address;
+
+use Rapsys\BlogBundle\Entity\Article;
+
+/**
+ * {@inheritdoc}
+ */
+class DefaultController extends AbstractController {
+       /**
+        * The about page
+        *
+        * Display the about informations
+        *
+        * @param Request $request The request instance
+        * @return Response The rendered view or redirection
+        */
+       public function about(Request $request): Response {
+               //Set page
+               $this->context['title'] = $this->translator->trans('About');
+
+               //Set description
+               $this->context['description'] = $this->translator->trans('Welcome to raphaël\'s developer diary about page');
+
+               //Set keywords
+               $this->context['keywords'] = $this->translator->trans('about');
+
+               //Create response
+               $response = new Response();
+
+               //Set etag
+               //XXX: only for public to force revalidation by last modified
+               $response->setEtag(md5(serialize($this->context)));
+
+               //Set last modified
+               $response->setLastModified((new \DateTime)->setTimestamp(getlastmod()));
+
+               //Set as public
+               $response->setPublic();
+
+               //Without role and modification
+               if ($response->isNotModified($request)) {
+                       //Return 304 response
+                       return $response;
+               }
+
+               //Render template
+               return $this->render('@RapsysBlog/about.html.twig', $this->context, $response);
+       }
+
+       /**
+        * The contact page
+        *
+        * Send a contact mail to configured contact
+        *
+        * @param Request $request The request instance
+        * @return Response The rendered view or redirection
+        */
+       public function contact(Request $request): Response {
+               //Set title
+               $this->context['title'] = $this->translator->trans('Contact');
+
+               //Set description
+               $this->context['description'] = $this->translator->trans('Welcome to raphaël\'s developer diary contact page');
+
+               //Set keywords
+               $this->context['keywords'] = $this->translator->trans('contact');
+
+               //Set data
+               $data = [];
+
+               //With user
+               if ($user = $this->security->getUser()) {
+                       //Set data
+                       $data = [
+                               'name' => $user->getRecipientName(),
+                               'mail' => $user->getMail()
+                       ];
+               }
+
+               //Create response
+               $response = new Response();
+
+               //Create the form according to the FormType created previously.
+               //And give the proper parameters
+               $form = $this->createForm('Rapsys\BlogBundle\Form\ContactType', $data, [
+                       'action' => $this->generateUrl('rapsys_blog_contact'),
+                       'method' => 'POST'
+               ]);
+
+               if ($request->isMethod('POST')) {
+                       // Refill the fields in case the form is not valid.
+                       $form->handleRequest($request);
+
+                       if ($form->isSubmitted() && $form->isValid()) {
+                               //Get data
+                               $data = $form->getData();
+
+                               //Set context
+                               $context = [
+                                       'subject' => $data['subject'],
+                                       'message' => strip_tags($data['message']),
+                               ]+$this->context;
+
+                               //Create message
+                               $message = (new TemplatedEmail())
+                                       //Set sender
+                                       ->from(new Address($data['mail'], $data['name']))
+                                       //Set recipient
+                                       ->to(new Address($this->config['contact']['address'], $this->config['contact']['name']))
+                                       //Set subject
+                                       ->subject($data['subject'])
+
+                                       //Set path to twig templates
+                                       ->htmlTemplate('@RapsysBlog/mail/contact.html.twig')
+                                       ->textTemplate('@RapsysBlog/mail/contact.text.twig')
+
+                                       //Set context
+                                       ->context($context);