namespace Rapsys\AirBundle\Controller;
-use Rapsys\AirBundle\Entity\Application;
-use Rapsys\AirBundle\Entity\Location;
-use Rapsys\AirBundle\Entity\Session;
-use Rapsys\AirBundle\Entity\Slot;
-use Rapsys\AirBundle\Entity\User;
-use Rapsys\AirBundle\Pdf\DisputePdf;
-use Rapsys\UserBundle\Utils\Slugger;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
-use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
-use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\Form\FormError;
use Symfony\Component\HttpFoundation\Request;
-use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Address;
-use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
-use Symfony\Component\Routing\RouterInterface;
-use Symfony\Component\Translation\TranslatorInterface;
-use Symfony\Bundle\FrameworkBundle\Controller\ControllerTrait;
-use Symfony\Component\DependencyInjection\ContainerAwareTrait;
-
-
-class DefaultController {
- use ControllerTrait {
- //Rename render as _render
- render as protected _render;
- }
-
- ///Config array
- protected $config;
- ///Context array
- protected $context;
-
- ///Router instance
- protected $router;
-
- ///Translator instance
- protected $translator;
-
- /**
- * @var ContainerInterface
- */
- protected $container;
+use Rapsys\AirBundle\Entity\Location;
+use Rapsys\AirBundle\Entity\Session;
+use Rapsys\AirBundle\Pdf\DisputePdf;
+class DefaultController extends AbstractController {
/**
- * Inject container and translator interface
+ * The about page
+ *
+ * @desc Display the about informations
*
- * @param ContainerInterface $container The container instance
- * @param RouterInterface $router The router instance
- * @param TranslatorInterface $translator The translator instance
+ * @param Request $request The request instance
+ * @return Response The rendered view
*/
- public function __construct(ContainerInterface $container, RouterInterface $router, RequestStack $requestStack, TranslatorInterface $translator) {
- //Retrieve config
- $this->config = $container->getParameter($this->getAlias());
-
- //Set the container
- $this->container = $container;
-
- //Set the router
- $this->router = $router;
-
- //Set the translator
- $this->translator = $translator;
-
- //Set the context
- $this->context = [
- 'copy' => [
- 'by' => $translator->trans($this->config['copy']['by']),
- 'link' => $this->config['copy']['link'],
- 'long' => $translator->trans($this->config['copy']['long']),
- 'short' => $translator->trans($this->config['copy']['short']),
- 'title' => $this->config['copy']['title']
- ],
- 'site' => [
- 'ico' => $this->config['site']['ico'],
- 'logo' => $this->config['site']['logo'],
- 'png' => $this->config['site']['png'],
- 'svg' => $this->config['site']['svg'],
- 'title' => $translator->trans($this->config['site']['title']),
- 'url' => $router->generate($this->config['site']['url']),
- ],
- 'canonical' => null,
- 'alternates' => [],
- 'forms' => []
- ];
-
- //Get current locale
- #$currentLocale = $router->getContext()->getParameters()['_locale'];
- $currentLocale = $requestStack->getCurrentRequest()->getLocale();
+ public function about(Request $request): Response {
+ //Set page
+ $this->context['title'] = $this->translator->trans('About');
- //Set translator locale
- //XXX: allow LocaleSubscriber on the fly locale change for first page
- $this->translator->setLocale($currentLocale);
+ //Set description
+ $this->context['description'] = $this->translator->trans('Libre Air about');
- //Iterate on locales excluding current one
- foreach($this->config['locales'] as $locale) {
- //Set titles
- $titles = [];
+ //Set keywords
+ $this->context['keywords'] = [
+ $this->translator->trans('about'),
+ $this->translator->trans('Libre Air')
+ ];
- //Iterate on other locales
- foreach(array_diff($this->config['locales'], [$locale]) as $other) {
- $titles[$other] = $translator->trans($this->config['languages'][$locale], [], null, $other);
- }
+ //Render template
+ $response = $this->render('@RapsysAir/default/about.html.twig', $this->context);
+ $response->setEtag(md5($response->getContent()));
+ $response->setPublic();
+ $response->isNotModified($request);
- //Get context path
- $path = $router->getContext()->getPathInfo();
-
- //Retrieve route matching path
- $route = $router->match($path);
-
- //Get route name
- $name = $route['_route'];
-
- //Unset route name
- unset($route['_route']);
-
- //With current locale
- if ($locale == $currentLocale) {
- //Set locale locales context
- $this->context['canonical'] = $router->generate($name, ['_locale' => $locale]+$route, UrlGeneratorInterface::ABSOLUTE_URL);
- } else {
- //Set locale locales context
- $this->context['alternates'][] = [
- 'lang' => $locale,
- 'absolute' => $router->generate($name, ['_locale' => $locale]+$route, UrlGeneratorInterface::ABSOLUTE_URL),
- 'relative' => $router->generate($name, ['_locale' => $locale]+$route),
- 'title' => implode('/', $titles),
- 'translated' => $translator->trans($this->config['languages'][$locale], [], null, $locale)
- ];
- }
- }
+ //Return response
+ return $response;
}
/**
* @return Response The rendered view or redirection
*/
public function contact(Request $request, MailerInterface $mailer): Response {
- //Set section
- $section = $this->translator->trans('Contact');
+ //Set page
+ $this->context['title'] = $this->translator->trans('Contact');
//Set description
$this->context['description'] = $this->translator->trans('Contact Libre Air');
$this->translator->trans('calendar')
];
- //Set title
- $title = $this->translator->trans($this->config['site']['title']).' - '.$section;
-
//Create the form according to the FormType created previously.
//And give the proper parameters
$form = $this->createForm('Rapsys\AirBundle\Form\ContactType', null, [
//Set sender
->from(new Address($data['mail'], $data['name']))
//Set recipient
- //XXX: remove the debug set in vendor/symfony/mime/Address.php +46
- ->to(new Address($this->config['contact']['mail'], $this->config['contact']['name']))
+ ->to(new Address($this->context['contact']['mail'], $this->context['contact']['title']))
//Set subject
->subject($data['subject'])
} catch(TransportExceptionInterface $e) {
if ($message = $e->getMessage()) {
//Add error message mail unreachable
- $form->get('mail')->addError(new FormError($this->translator->trans('Unable to contact: %mail%: %message%', ['%mail%' => $this->config['contact']['mail'], '%message%' => $this->translator->trans($message)])));
+ $form->get('mail')->addError(new FormError($this->translator->trans('Unable to contact: %mail%: %message%', ['%mail%' => $this->context['contact']['mail'], '%message%' => $this->translator->trans($message)])));
} else {
//Add error message mail unreachable
- $form->get('mail')->addError(new FormError($this->translator->trans('Unable to contact: %mail%', ['%mail%' => $this->config['contact']['mail']])));
+ $form->get('mail')->addError(new FormError($this->translator->trans('Unable to contact: %mail%', ['%mail%' => $this->context['contact']['mail']])));
}
}
}
}
//Render template
- return $this->render('@RapsysAir/form/contact.html.twig', ['title' => $title, 'section' => $section, 'form' => $form->createView(), 'sent' => $request->query->get('sent', 0)]+$this->context);
+ return $this->render('@RapsysAir/form/contact.html.twig', ['form' => $form->createView(), 'sent' => $request->query->get('sent', 0)]+$this->context);
}
-
/**
* The dispute page
*
public function dispute(Request $request, MailerInterface $mailer): Response {
//Prevent non-guest to access here
$this->denyAccessUnlessGranted('ROLE_USER', null, $this->translator->trans('Unable to access this page without role %role%!', ['%role%' => $this->translator->trans('User')]));
- //Set section
- $section = $this->translator->trans('Dispute');
+
+ //Set page
+ $this->context['title'] = $this->translator->trans('Dispute');
//Set description
$this->context['description'] = $this->translator->trans('Libre Air dispute');
$this->translator->trans('calendar')
];
- //Set title
- $title = $this->translator->trans($this->config['site']['title']).' - '.$section;
-
//Create the form according to the FormType created previously.
//And give the proper parameters
$form = $this->createForm('Rapsys\AirBundle\Form\DisputeType', ['court' => 'Paris', 'abstract' => 'Pour constater cette prétendue infraction, les agents verbalisateurs ont pénétré dans un jardin privatif, sans visibilité depuis la voie publique, situé derrière un batiment privé, pour ce faire ils ont franchi au moins un grillage de chantier ou des potteaux métalliques séparant le terrain privé de la voie publique de l\'autre côté du batiment.'], [
# ->from(new Address($data['mail'], $data['name']))
# //Set recipient
# //XXX: remove the debug set in vendor/symfony/mime/Address.php +46
-# ->to(new Address($this->config['contact']['mail'], $this->config['contact']['name']))
+# ->to(new Address($this->config['contact']['mail'], $this->config['contact']['title']))
# //Set subject
# ->subject($data['subject'])
#
}
//Render template
- return $this->render('@RapsysAir/form/dispute.html.twig', ['title' => $title, 'section' => $section, 'form' => $form->createView(), 'sent' => $request->query->get('sent', 0)]+$this->context);
+ return $this->render('@RapsysAir/default/dispute.html.twig', ['form' => $form->createView(), 'sent' => $request->query->get('sent', 0)]+$this->context);
}
/**
* @desc Display all granted sessions with an application or login form
*
* @param Request $request The request instance
- *
* @return Response The rendered view
*/
public function index(Request $request): Response {
//Fetch doctrine
$doctrine = $this->getDoctrine();
- //Set section
- $section = $this->translator->trans('Argentine Tango in Paris');
+ //Set page
+ $this->context['title'] = $this->translator->trans('Argentine Tango in Paris');
//Set description
$this->context['description'] = $this->translator->trans('Outdoor Argentine Tango session calendar in Paris');
$this->translator->trans('Libre Air')
];
- //Set title
- $title = $this->translator->trans($this->config['site']['title']).' - '.$section;
+ //Set facebook type
+ //XXX: only valid for home page
+ $this->context['facebook']['metas']['og:type'] = 'website';
//Compute period
$period = new \DatePeriod(
);
//Fetch calendar
- $calendar = $doctrine->getRepository(Session::class)->fetchCalendarByDatePeriod($this->translator, $period, null, $request->get('session'), !$this->isGranted('IS_AUTHENTICATED_REMEMBERED'));
+ $calendar = $doctrine->getRepository(Session::class)->fetchCalendarByDatePeriod($this->translator, $period, null, $request->get('session'), !$this->isGranted('IS_AUTHENTICATED_REMEMBERED'), $request->getLocale());
//Fetch locations
//XXX: we want to display all active locations anyway
$locations = $doctrine->getRepository(Location::class)->findTranslatedSortedByPeriod($this->translator, $period);
//Render the view
- return $this->render('@RapsysAir/default/index.html.twig', ['title' => $title, 'section' => $section, 'calendar' => $calendar, 'locations' => $locations]+$this->context);
+ return $this->render('@RapsysAir/default/index.html.twig', ['calendar' => $calendar, 'locations' => $locations]+$this->context);
//Set Cache-Control must-revalidate directive
//TODO: add a javascript forced refresh after 1h ? or header refresh ?
*
* @desc Display the organizer regulation policy
*
+ * @param Request $request The request instance
* @return Response The rendered view
*/
- public function organizerRegulation(): Response {
- //Set section
- $section = $this->translator->trans('Organizer regulation');
+ public function organizerRegulation(Request $request): Response {
+ //Set page
+ $this->context['title'] = $this->translator->trans('Organizer regulation');
//Set description
$this->context['description'] = $this->translator->trans('Libre Air organizer regulation');
$this->translator->trans('Libre Air')
];
- //Set title
- $title = $this->translator->trans($this->config['site']['title']).' - '.$section;
-
//Render template
- return $this->render('@RapsysAir/default/organizer_regulation.html.twig', ['title' => $title, 'section' => $section]+$this->context);
+ $response = $this->render('@RapsysAir/default/organizer_regulation.html.twig', $this->context);
+
+ //Set as cachable
+ $response->setEtag(md5($response->getContent()));
+ $response->setPublic();
+ $response->isNotModified($request);
+
+ //Return response
+ return $response;
}
/**
*
* @desc Display the terms of service policy
*
+ * @param Request $request The request instance
* @return Response The rendered view
*/
- public function termsOfService(): Response {
- //Set section
- $section = $this->translator->trans('Terms of service');
+ public function termsOfService(Request $request): Response {
+ //Set page
+ $this->context['title'] = $this->translator->trans('Terms of service');
//Set description
$this->context['description'] = $this->translator->trans('Libre Air terms of service');
$this->translator->trans('Libre Air')
];
- //Set title
- $title = $this->translator->trans($this->config['site']['title']).' - '.$section;
-
//Render template
- return $this->render('@RapsysAir/default/terms_of_service.html.twig', ['title' => $title, 'section' => $section]+$this->context);
+ $response = $this->render('@RapsysAir/default/terms_of_service.html.twig', $this->context);
+
+ //Set as cachable
+ $response->setEtag(md5($response->getContent()));
+ $response->setPublic();
+ $response->isNotModified($request);
+
+ //Return response
+ return $response;
}
/**
*
* @desc Display the frequently asked questions
*
+ * @param Request $request The request instance
* @return Response The rendered view
*/
- public function frequentlyAskedQuestions(): Response {
- //Set section
- $section = $this->translator->trans('Frequently asked questions');
+ public function frequentlyAskedQuestions(Request $request): Response {
+ //Set page
+ $this->context['title'] = $this->translator->trans('Frequently asked questions');
//Set description
$this->context['description'] = $this->translator->trans('Libre Air frequently asked questions');
$this->translator->trans('Libre Air')
];
- //Set title
- $title = $this->translator->trans($this->config['site']['title']).' - '.$section;
-
//Render template
- return $this->render('@RapsysAir/default/frequently_asked_questions.html.twig', ['title' => $title, 'section' => $section]+$this->context);
- }
+ $response = $this->render('@RapsysAir/default/frequently_asked_questions.html.twig', $this->context);
- /**
- * Return the bundle alias
- *
- * {@inheritdoc}
- */
- public function getAlias(): string {
- return 'rapsys_air';
+ //Set as cachable
+ $response->setEtag(md5($response->getContent()));
+ $response->setPublic();
+ $response->isNotModified($request);
+
+ //Return response
+ return $response;
}
/**
*
* {@inheritdoc}
*/
- protected function render(string $view, array $parameters = [], Response $response = null): Response {
- //Create application form for role_guest
- if ($this->isGranted('ROLE_GUEST')) {
- //Without application form
- if (empty($parameters['forms']['application'])) {
- //Fetch doctrine
- $doctrine = $this->getDoctrine();
-
- //Create ApplicationType form
- $application = $this->createForm('Rapsys\AirBundle\Form\ApplicationType', null, [
- //Set the action
- 'action' => $this->generateUrl('rapsys_air_application_add'),
- //Set the form attribute
- 'attr' => [ 'class' => 'col' ],
- //Set admin
- 'admin' => $this->isGranted('ROLE_ADMIN'),
- //Set default user to current
- 'user' => $this->getUser()->getId(),
- //Set default slot to evening
- //XXX: default to Evening (3)
- 'slot' => $doctrine->getRepository(Slot::class)->findOneById(3)
- ]);
-
- //Add form to context
- $parameters['forms']['application'] = $application->createView();
- }
- //Create login form for anonymous
- } elseif (!$this->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
- //Create ApplicationType form
- $login = $this->createForm('Rapsys\UserBundle\Form\LoginType', null, [
- //Set the action
- 'action' => $this->generateUrl('rapsys_user_login'),
- //Set the form attribute
- 'attr' => [ 'class' => 'col' ]
- ]);
-
- //Add form to context
- $parameters['forms']['login'] = $login->createView();
- }
-
- //Call parent method
- return $this->_render($view, $parameters, $response);
- }
+ /*protected function render(string $view, array $parameters = [], Response $response = null): Response {
+ //Call parent render
+ return parent::render($view, $parameters, $response);
+ }*/
}