<?php
namespace App\Controller\Front;
use App\Constant\ContactMessageStatus;
use App\Constant\ContactMessageType;
use App\Constant\NotificationType;
use App\Controller\AppController;
use App\Entity\Accommodation;
use App\Entity\ContactMessage;
use App\Entity\Page;
use App\Form\Front\ContactInvestorType;
use App\Form\Front\ContactRoomType;
use App\Form\Front\ContactType;
use App\Repository\AccommodationRepository;
use App\Repository\OptionRepository;
use App\Repository\QuestionAnswerRepository;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
/**
* @Route("", name="front_page_")
*/
class PageController extends AppController
{
public const HOMEPAGE_VERSION_OPTION_SLUG = 'homepage_version';
/**
* @Route("/", name="home")
*/
public function home(Request $request, OptionRepository $optionRepository, AccommodationRepository $accommodationRepository){
// ------------------------------------------------
// Find homepage template to use
$homepageTemplate = $optionRepository->findOneBy(['slug' => self::HOMEPAGE_VERSION_OPTION_SLUG]);
$templateName = "homepage-1";
if(!empty($homepageTemplate) && in_array($homepageTemplate->getValue(), [
"homepage-2", "homepage-3", "homepage-4", "homepage-5", "homepage-6", "homepage-7"
])) {
$templateName = $homepageTemplate->getValue();
}
$version = $request->query->get('version');
if (!empty($version)) {
switch($version) {
case "1":
case "2":
case "3":
case "4":
case "5":
case "6":
case "7":
$templateName = "homepage-$version";
break;
}
}
// ------------------------------------------------
// Get the featured accommodations
$accommodations = $accommodationRepository->searchAccommodations(["active" => true], 1, 9); // TODO - Filter the list
$totalAccommodations = $accommodationRepository->countAccommodations(["active" => true]);
// ------------------------------------------------
// Render the page
$page = new Page();
$page->setMetaTitle("Citizens");
return $this->render('front/homepage/'.$templateName.'.html.twig', [
'page' => $page,
'accommodations' => $accommodations,
'totalAccommodations' => $totalAccommodations,
]);
}
/**
* @Route("/home-5", name="home5")
*/
public function home5(AccommodationRepository $accommodationRepository){
$templateName = "homepage-5";
// ------------------------------------------------
// Get the featured accommodations
$accommodations = $accommodationRepository->searchAccommodations(["active" => true], 1, 9); // TODO - Filter the list
$totalAccommodations = $accommodationRepository->countAccommodations(["active" => true]);
// ------------------------------------------------
// Render the page
$page = new Page();
$page->setMetaTitle("Citizens");
return $this->render('front/homepage/'.$templateName.'.html.twig', [
'page' => $page,
'accommodations' => $accommodations,
'totalAccommodations' => $totalAccommodations,
]);
}
/**
* @Route("/membership", name="membership")
*/
public function membership(){
$page = new Page();
$page->setMetaTitle("Membres - Citizens");
return $this->render('front/pages/membership.html.twig', [
'page' => $page,
]);
}
/**
* @Route("/investisseurs", name="investors")
*/
public function investors(Request $request){
$message = new ContactMessage();
$form = $this->createForm(ContactInvestorType::class, $message);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$message->setType(ContactMessageType::INVESTOR);
$message->setStatus(ContactMessageStatus::TODO);
$this->em->persist($message);
$this->em->flush();
$this->notifier->admin(NotificationType::ADMIN_CONTACT, ["message" => $message]);
return $this->redirectToRoute('front_page_investors', ['success' => true]);
}
$page = new Page();
$page->setMetaTitle("Investir dans un bien coliving - Citizens");
switch($request->query->get('version', "2")) {
case "1":
$pageVersion = 'investors-1';
break;
default:
$pageVersion = 'investors-2';
}
return $this->render('front/pages/' . $pageVersion . '.html.twig', [
'page' => $page,
'form' => $form->createView(),
'form2' => $form->createView(),
'success' => !empty($request->query->get('success')),
]);
}
/**
* @Route("/proprietaires", name="owners")
*/
public function owners(Request $request){
$message = new ContactMessage();
$form = $this->createForm(ContactInvestorType::class, $message);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$message->setType(ContactMessageType::INVESTOR);
$message->setStatus(ContactMessageStatus::TODO);
$this->em->persist($message);
$this->em->flush();
$this->notifier->admin(NotificationType::ADMIN_CONTACT, ["message" => $message]);
return $this->redirectToRoute('front_page_owners', ['success' => true]);
}
$page = new Page();
$page->setMetaTitle("Transformer son bien en coliving - Citizens");
return $this->render('front/pages/owners.html.twig', [
'page' => $page,
'form' => $form->createView(),
'success' => !empty($request->query->get('success')),
]);
}
/**
* @Route("/membres", name="members")
*/
public function members(){
$page = new Page();
$page->setMetaTitle("Membres - Citizens");
return $this->render('front/pages/members.html.twig', [
'page' => $page,
]);
}
/**
* @Route("/loisirs", name="community")
*/
public function community(){
$page = new Page();
$page->setMetaTitle("Communautés - Citizens");
return $this->render('front/pages/community.html.twig', [
'page' => $page,
]);
}
/**
* @Route("/faq", name="faq")
*/
public function faq(QuestionAnswerRepository $questionAnswerRepository){
$faq = $questionAnswerRepository->searchQA([], 1, 100);
$page = new Page();
$page->setMetaTitle("FAQ - Citizens");
return $this->render('front/pages/faq.html.twig', [
'page' => $page,
'faq' => $faq,
]);
}
/**
* @Route("/contact", name="contact")
*/
public function contact(Request $request){
$message = new ContactMessage();
$form = $this->createForm(ContactType::class, $message);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$message->setType(ContactMessageType::CONTACT);
$message->setStatus(ContactMessageStatus::TODO);
$this->em->persist($message);
$this->em->flush();
$this->notifier->admin(NotificationType::ADMIN_CONTACT, ["message" => $message]);
return $this->redirectToRoute('front_page_contact', ['success' => true]);
}
$page = new Page();
$page->setMetaTitle("Contact - Citizens");
return $this->render('front/pages/contact.html.twig', [
'page' => $page,
'form' => $form->createView(),
'success' => !empty($request->query->get('success')),
]);
}
/**
* @Route("/contact/{id}", name="contact_room")
*/
public function contact_room(Request $request, Accommodation $accommodation){
$message = new ContactMessage();
$form = $this->createForm(ContactRoomType::class, $message);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$message->setAccommodation($accommodation);
// $message->setRoom($room);
$message->setType(ContactMessageType::ROOM);
$message->setStatus(ContactMessageStatus::TODO);
$this->em->persist($message);
$this->em->flush();
$this->notifier->admin(NotificationType::ADMIN_CONTACT, ["message" => $message]);
return $this->redirectToRoute('front_page_contact_room', ['success' => true, 'id' => $accommodation->getId()]);
}
$page = new Page();
$page->setMetaTitle("Contact - Citizens");
return $this->render('front/pages/contact_room.html.twig', [
'page' => $page,
'accommodation' => $accommodation,
'form' => $form->createView(),
'success' => !empty($request->query->get('success')),
]);
}
/**
* @Route("/concept/qualite", name="benefits_quality")
*/
public function benefits_quality(){
$page = new Page();
$page->setMetaTitle("100% Qualité - Avantages - Citizens");
return $this->render('front/pages/benefits/quality.html.twig', [
'page' => $page,
]);
}
/**
* @Route("/concept/services", name="benefits_service")
*/
public function benefits_service(){
$page = new Page();
$page->setMetaTitle("100% Service - Avantages - Citizens");
return $this->render('front/pages/benefits/service.html.twig', [
'page' => $page,
]);
}
/**
* @Route("/concept/citoyens", name="benefits_citizens")
*/
public function benefits_citizens(){
$page = new Page();
$page->setMetaTitle("100% Citoyens - Avantages - Citizens");
return $this->render('front/pages/benefits/citizens.html.twig', [
'page' => $page,
]);
}
/**
* @Route("/concept/plaisir", name="benefits_pleasure")
*/
public function benefits_pleasure(){
$page = new Page();
$page->setMetaTitle("100% Plaisir - Avantages - Citizens");
return $this->render('front/pages/benefits/pleasure.html.twig', [
'page' => $page,
]);
}
/**
* @Route("/organigramme", name="company_organizational_chart")
*/
public function organizational_chart(){
$page = new Page();
$page->setMetaTitle("Organigramme - Citizens");
throw $this->createNotFoundException('Not found');
/*return $this->render('front/pages/organizational-chart.html.twig', [
'page' => $page,
]);*/
}
/**
* @Route("/nos-metiers", name="company_our_jobs")
*/
public function our_jobs(){
$page = new Page();
$page->setMetaTitle("Nos métiers - Citizens");
return $this->render('front/pages/our-jobs.html.twig', [
'page' => $page,
]);
}
/**
* @Route("/a-propos-de-citizens", name="company_about")
*/
public function about(){
$page = new Page();
$page->setMetaTitle("À propos de CITIZENS - Citizens");
return $this->render('front/pages/about.html.twig', [
'page' => $page,
]);
}
/**
* @Route("/services", name="services")
*/
public function services(){
$page = new Page();
$page->setMetaTitle("Services - Citizens");
return $this->render('front/pages/services.html.twig', [
'page' => $page,
]);
}
/**
* @Route("/confort-5-etoiles", name="comfort")
*/
public function comfort(){
$page = new Page();
$page->setMetaTitle("Confort 5 étoiles - Citizens");
return $this->render('front/pages/comfort.html.twig', [
'page' => $page,
]);
}
/**
* @Route("/privacy", name="privacy")
*/
public function privacy(){
$page = new Page();
$page->setMetaTitle("Confidentialité - Citizens");
return $this->render('front/pages/privacy.html.twig', [
'page' => $page,
]);
}
/**
* @Route("/terms-conditions", name="terms_conditions")
*/
public function terms_conditions(){
$page = new Page();
$page->setMetaTitle("Conditions générales d'utilisation - Citizens");
return $this->render('front/pages/terms-conditions.html.twig', [
'page' => $page,
]);
}
}