<?php
namespace App\Controller;
use App\Entity\MessageSite;
use App\Entity\Pharmacy;
use App\Entity\Prestataire;
use App\Entity\User;
use App\Form\AccountRequestType;
use App\Form\MessageSiteType;
use App\Form\UserRemoveDataType;
use App\Manager\AccountRequestManager;
use App\Manager\AppUserManager;
use App\Manager\MessageSiteManager;
use App\Manager\PharmacyManager;
use App\Manager\OrderManager;
use App\Manager\PatientManager;
use App\Service\AppMailer;
use Http\Client\Common\Exception\HttpClientNotFoundException;
use Knp\Snappy\Pdf as SnappyPdf;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Config\Definition\Exception\Exception;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Security as CoreSecurity;
class DefaultController extends AbstractController
{
/** @var PharmacyManager */
private $pharmacyManager;
public function __construct(PharmacyManager $pharmacyManager)
{
$this->pharmacyManager = $pharmacyManager;
}
/**
* @Route("/redirect", name="redirect")
*
* @return RedirectResponse|Response
*/
public function redirectAction()
{
/** @var User|null $user */
$user = $this->getUser();
if (null === $user)
{
throw new HttpClientNotFoundException();
}
$route = 'homepage';
if ($user->hasRole('ROLE_ADMINISTRATOR')) {
$route = 'pharmacies';
} elseif (!$user->getTosRead()) {
$route = 'cgu_read';
} elseif ($this->isGranted('patient_autodiag')) {
$route = 'patient_auto_diag';
} elseif ($this->isGranted('order_delivery')) {
$route = 'orders_delivery';
} elseif ($this->isGranted('carer_launcher')) {
$route = 'launcher';
} elseif ($this->isGranted('order_admin') || $user->hasRole('ROLE_SUPER_ADMIN')) {
$route = 'orders';
}
return $this->redirectToRoute($route);
}
/**
* @Route("/", name="homepage")
*
* @return Response
*/
public function indexAction()
{
/** @var User|null $user */
$user = $this->getUser();
$formContact = $this->createForm(MessageSiteType::class);
if (null === $user)
{
return $this->render('default/index.html.twig', ['formContact' => $formContact->createView()]);
}
// During 5s redirection on homepage is banned, allow redirect after login
if (((new \DateTime())->getTimestamp() - $user->getLastLogin()->getTimestamp()) > 5)
{
return $this->render('default/index.html.twig', ['formContact' => $formContact->createView()]);
}
return $this->redirectToRoute('redirect');
}
/**
* @Route("/site/le-groupe/qui-sommes-nous", name="qui_sommes_nous")
* @IsGranted("outdated_routes")
*
* @return Response
*/
public function quiSommesNousAction()
{
$formContact = $this->createForm(MessageSiteType::class);
return $this->render('default/quiSommesNous.html.twig', ['formContact' => $formContact->createView()]);
}
/**
* @Route("/site/le-groupe/nos-engagements", name="nos_engagements")
* @IsGranted("outdated_routes")
*
* @return Response
*/
public function nosEngagementsAction()
{
$formContact = $this->createForm(MessageSiteType::class);
return $this->render('default/nosEngagements.html.twig', ['formContact' => $formContact->createView()]);
}
/**
* @Route("/site/supports-scientifiques/aide-prescription-antibiotiques", name="aide_antibio")
*
* @return Response
*/
public function aideAntibioAction()
{
$formContact = $this->createForm(MessageSiteType::class);
return $this->render('default/aideAntibio.html.twig', ['formContact' => $formContact->createView()]);
}
/**
* @Route("/site/supports-scientifiques/aide-prescription-nutrition", name="aide_nutrition")
*
* @return Response
*/
public function aideNutritionAction()
{
$formContact = $this->createForm(MessageSiteType::class);
return $this->render('default/aideNutrition.html.twig', ['formContact' => $formContact->createView()]);
}
/**
* @Route("/site/supports-scientifiques/disponibilite-antibiotiques-iv", name="dispo_antibio")
*
* @return Response
*/
public function dispoAntibioAction()
{
$formContact = $this->createForm(MessageSiteType::class);
return $this->render('default/dispoAntibio.html.twig', ['formContact' => $formContact->createView()]);
}
/**
* @Route("/site/supports-scientifiques/fiche-patient_antibiotique_iv", name="fiche_patient_antibio")
*
* @return Response
*/
public function fichePatientAntibioAction()
{
$formContact = $this->createForm(MessageSiteType::class);
return $this->render('default/fichePatientAntibio.html.twig', ['formContact' => $formContact->createView()]);
}
/**
* @Route("/site/supports-scientifiques/fiche-patient_sous-nutrition-parenterale", name="fiche_patient_nutrition")
*
* @return Response
*/
public function fichePatientNutritionAction()
{
$formContact = $this->createForm(MessageSiteType::class);
return $this->render('default/fichePatientNutrition.html.twig', ['formContact' => $formContact->createView()]);
}
/**
* @Route("/site/supports-scientifiques/aide-prescription-materiel-medical", name="aide_mat_med")
*
* @return Response
*/
public function aideMatMedAction()
{
$formContact = $this->createForm(MessageSiteType::class);
return $this->render('default/aideMatMed.html.twig', ['formContact' => $formContact->createView()]);
}
/**
* @Route("/site/supports-scientifiques/conditions-prescription-delivrance-medicaments-stupefiants", name="pres_stup")
*
* @return Response
*/
public function presStupAction()
{
$formContact = $this->createForm(MessageSiteType::class);
return $this->render('default/presStup.html.twig', ['formContact' => $formContact->createView()]);
}
/**
* @Route("/site/supports-scientifiques/conditions-delivrance-medicaments-medicaments-exception", name="med_exception")
*
* @return Response
*/
public function medExceptionAction()
{
$formContact = $this->createForm(MessageSiteType::class);
return $this->render('default/medException.html.twig', ['formContact' => $formContact->createView()]);
}
/**
* @Route("/site/supports-scientifiques/disponibilite-chimiotherapies-orales", name="chimio_orales")
*
* @return Response
*/
public function chimioOralesAction()
{
$formContact = $this->createForm(MessageSiteType::class);
return $this->render('default/chimioOrales.html.twig', ['formContact' => $formContact->createView()]);
}
/**
* @Route("/site/actualites/en-bref", name="en_bref")
* @IsGranted("outdated_routes")
*
* @return Response
*/
public function enBrefAction()
{
$formContact = $this->createForm(MessageSiteType::class);
return $this->render('default/enBref.html.twig', ['formContact' => $formContact->createView()]);
}
/**
* @Route("/site/actualites/point-reglementaire", name="point_reglementaire")
* @IsGranted("outdated_routes")
*
* @return Response
*/
public function pointReglementaireAction()
{
$formContact = $this->createForm(MessageSiteType::class);
return $this->render('default/pointReglementaire.html.twig', ['formContact' => $formContact->createView()]);
}
/**
* @Route("/site/actualites/demarche-qualite", name="demarche_qualite")
* @IsGranted("outdated_routes")
*
* @return Response
*/
public function demarcheQualiteAction()
{
$formContact = $this->createForm(MessageSiteType::class);
return $this->render('default/demarcheQualite.html.twig', ['formContact' => $formContact->createView()]);
}
/**
* @Route("/site/actualites/newsletters", name="newsletters")
* @IsGranted("outdated_routes")
*
* @return Response
*/
public function newslettersAction()
{
$formContact = $this->createForm(MessageSiteType::class);
return $this->render('default/newsletters.html.twig', ['formContact' => $formContact->createView()]);
}
/**
* @Route("/site/actualites/epu-bonnes-pratiques", name="epu")
*
* @return Response
*/
public function epuAction()
{
$formContact = $this->createForm(MessageSiteType::class);
return $this->render('default/epu.html.twig', ['formContact' => $formContact->createView()]);
}
/**
* @Route("/site/le-groupe/notre-organisation", name="notre_organisation")
* @IsGranted("outdated_routes")
*
* @return Response
*/
public function notreOrganisationAction()
{
$formContact = $this->createForm(MessageSiteType::class);
return $this->render('default/notreOrganisation.html.twig', ['formContact' => $formContact->createView()]);
}
/**
* @Route("/site/nos-services/tracabilite-des-medicaments", name="tracabilite_medicaments")
* @IsGranted("outdated_routes")
*
* @return Response
*/
public function tracabiliteMedicamentsAction()
{
$formContact = $this->createForm(MessageSiteType::class);
return $this->render('default/tracabiliteDesMedicaments.html.twig',
['formContact' => $formContact->createView()]);
}
/**
* @Route("/site/nos-services/tracabilite-des-soins", name="tracabilite_soins")
* @IsGranted("outdated_routes")
*
* @return Response
*/
public function tracabiliteSoinsAction()
{
$formContact = $this->createForm(MessageSiteType::class);
return $this->render('default/tracabiliteDesSoins.html.twig', ['formContact' => $formContact->createView()]);
}
/**
* @Route("/site/nos-services/depot-securise-ordonnances", name="depot_ordonnances")
* @IsGranted("outdated_routes")
*
* @return Response
*/
public function depotOrdonnancesAction()
{
$formContact = $this->createForm(MessageSiteType::class);
return $this->render('default/depotOrdonnances.html.twig', ['formContact' => $formContact->createView()]);
}
/**
* @Route("/site/nos-services/suivi-patient-temps-reel", name="suivi_temps_reel")
* @IsGranted("outdated_routes")
*
* @return Response
*/
public function suiviTempsReelAction()
{
$formContact = $this->createForm(MessageSiteType::class);
return $this->render('default/suiviTempsReel.html.twig', ['formContact' => $formContact->createView()]);
}
/**
* @Route("/site/nos-services/edition-automatisee-compte-rendu", name="edition_auto")
* @IsGranted("outdated_routes")
*
* @return Response
*/
public function editionAutoAction()
{
$formContact = $this->createForm(MessageSiteType::class);
return $this->render('default/editionAuto.html.twig', ['formContact' => $formContact->createView()]);
}
/**
* @Route("/site/nos-services/pharmacovigilance", name="pharmacovigilance")
* @IsGranted("outdated_routes")
*
* @return Response
*/
public function pharmacovigilanceOrdonnancesAction()
{
$formContact = $this->createForm(MessageSiteType::class);
return $this->render('default/pharmacovigilance.html.twig', ['formContact' => $formContact->createView()]);
}
/**
* @Route("/new", name="new")
*
* @return Response
*/
public function newAction()
{
return $this->redirectToRoute('homepage');
}
/**
* @Route("/login-pro", name="login_pro")
*
* @param Request $request
*
* @return Response
*/
public function loginProAction(Request $request)
{
$session = $request->getSession();
$session->set('type', 'pro');
return $this->redirectToRoute('fos_user_security_login');
}
/**
* @Route("/login-patient", name="login_patient")
* @IsGranted("outdated_routes")
*
* @param Request $request
*
* @return Response
*/
public function loginPatientAction(Request $request)
{
$session = $request->getSession();
$session->set('type', 'patient');
return $this->redirectToRoute('fos_user_security_login');
}
/**
* @Route("/sitemap.xml", name="sitemap")
*
* @param Request $request
*
* @return RedirectResponse
*/
public function sitemapAction(Request $request)
{
return $this->redirect('/sitemap.xml');
}
/**
* @Route("contact/send", name="contact_send", options={"expose"=true}, methods={"POST"})
*
* @param Request $request
* @param MessageSiteManager $messageSiteManager
* @param AppMailer $appMailer
*
* @return JsonResponse
*/
public function messageTypeAction(Request $request, MessageSiteManager $messageSiteManager, AppMailer $appMailer)
{
$data = $request->request->get('appbundle_message_site');
$messageSite = $messageSiteManager->create(
$data['name'],
$data['email'],
$data['message']
);
if ($messageSite instanceof MessageSite)
{
$appMailer->sendMessageSite($this->getParameter('contact_email'), $messageSite);
}
return new JsonResponse('success');
}
/**
* @Route("/account/request", name="account_request")
*
* @param Request $request
* @param AccountRequestManager $accountRequestManager
* @param AppMailer $appMailer
*
* @return Response
*/
public function accountRequestAction(Request $request,
AccountRequestManager $accountRequestManager,
AppMailer $appMailer)
{
$ended = false;
$form = $this->createForm(AccountRequestType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid())
{
$accountRequest = $form->getData();
$accountRequestManager->create($accountRequest);
$appMailer->sendAccountRequest($accountRequest);
// Clear form
$form = $this->createForm(AccountRequestType::class);
$ended = true;
}
return $this->render('default/account_request.html.twig', [
'form' => $form->createView(),
'ended' => $ended,
]);
}
/**
* @Route("cgu_read", name="cgu_read")
*
* @return RedirectResponse|Response
*/
public function tosReadAction()
{
/** @var User $user */
$user = $this->getUser();
if ($user->getTosRead())
{
$this->redirectToRoute('redirect');
}
return $this->render('user/cgu_read.html.twig');
}
/**
* @Route("cgu_accept", name="cgu_accept")
*
* @param AppUserManager $appUserManager
*
* @return RedirectResponse
*/
public function cguAcceptAction(AppUserManager $appUserManager)
{
/** @var User $user */
$user = $this->getUser();
$appUserManager->acceptTos($user, $this->getParameter('cgu_file'));
return $this->redirectToRoute('redirect');
}
/**
* @Route("launcher", name="launcher")
* @IsGranted("carer_launcher")
*
* @param Request $request
* @param PatientManager $patientManager
* @param OrderManager $orderManager
*
* @return Response
*/
public function launcherAction(Request $request, PatientManager $patientManager, OrderManager $orderManager)
{
/** @var User $user */
$user = $this->getUser();
$pharmacy = !empty($request->get('pharmacy')) ? $request->get('pharmacy') : null;
$patients = [];
$pendingOrders = [];
if (($user->hasRole('ROLE_HEALTH_PROVIDER') || $user->hasRole('ROLE_HOSPITAL')) && $user->getPrestataire() instanceof Prestataire)
{
$patients = $patientManager->getByPrestataire($user->getPrestataire(), $pharmacy);
$pendingOrders = $orderManager->getByPrestataire($user->getPrestataire(),
false,
false,
'ASC',
false,
$pharmacy);
} elseif ($user->hasRole('ROLE_NURSE'))
{
$patients = $patientManager->getByNurseUser($user, $pharmacy);
$pendingOrders = $orderManager->getByNurseUser($user, false, false, $pharmacy);
}
$pharmacies = $this->pharmacyManager->getCurrentUserPharmacyList();
return $this->render(
'default/launcher.html.twig',
[
'pharmacies' => $pharmacies,
'patients' => $patients,
'pendingOrders' => $pendingOrders,
'selectedPharmacy' => $pharmacy,
]
);
}
/**
* @Route("/site/le-groupe/documentation-rgpd", name="documentation_rgpd")
* @IsGranted("outdated_routes")
*
* @return Response
*/
public function rgpdDocumentation()
{
$formContact = $this->createForm(MessageSiteType::class);
return $this->render('default/rgpdDocumentation.html.twig', ['formContact' => $formContact->createView()]);
}
/**
* @Route("/user/disabled", name="user_disabled")
*
* @return Response
*/
public function userDisabledAction()
{
$formContact = $this->createForm(MessageSiteType::class);
return $this->render('default/userDisabled.html.twig', ['formContact' => $formContact->createView()]);
}
/**
* @Route("/user/password/expired", name="user_password_expired")
*
* @return Response
*/
public function userPasswordExpiredAction()
{
$formContact = $this->createForm(MessageSiteType::class);
return $this->render('default/passwordExpire.html.twig', ['formContact' => $formContact->createView()]);
}
/**
* @Route("/user/remove/data", name="user_remove_data")
*
* @param Request $request
* @param AppMailer $appMailer
*
* @return Response
*/
public function userRemoveDataAction(Request $request, AppMailer $appMailer)
{
$form = $this->createForm(UserRemoveDataType::class);
$formContact = $this->createForm(MessageSiteType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid())
{
$userRemoveData = $form->getData();
$appMailer->sendUserRemoveData($this->getParameter('contact_email'), $userRemoveData);
return $this->render('default/userRemoveDataConfirmation.html.twig',
['formContact' => $formContact->createView()]);
}
return $this->render('default/userRemoveData.html.twig', [
'form' => $form->createView(),
'formContact' => $formContact->createView()
]);
}
/**
* @Route("qui-sommes-nous", name="vh_qui_sommes_nous")
*
* @return Response
*/
public function vhQuiSommesNousAction()
{
$formContact = $this->createForm(MessageSiteType::class);
return $this->render('default/vhQuiSommesNous.html.twig', ['formContact' => $formContact->createView()]);
}
}