src/Controller/CoreController.php line 32

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\RedirectResponse;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\HttpFoundation\Response;
  7. use Symfony\Component\HttpFoundation\Session\Session;
  8. use Symfony\Component\Routing\Annotation\Route;
  9. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  10. use FOS\ElasticaBundle\Manager\RepositoryManagerInterface;
  11. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  12. use App\Entity\User;
  13. use App\Entity\Suivi;
  14. use App\Entity\Contact;
  15. use App\Entity\Recherche;
  16. use App\Entity\Agenda;
  17. use App\Form\ContactType;
  18. class CoreController extends AbstractController {
  19.   private $resultsPerPage 30;
  20.   /**
  21.    * @Route("/", name="HomePage")
  22.    */
  23.   public function index(): Response {
  24.     $user $this->getUser();
  25.     if ( $user )
  26.     {
  27.       if ( in_array('ROLE_CLIENT'$user->getRoles()) )
  28.         return $this->redirectToRoute('rdv');
  29.       elseif ( in_array('ROLE_USER'$user->getRoles() ))
  30.         return $this->redirectToRoute('contactsHomePage');
  31.       else
  32.         return $this->redirectToRoute('app_login');
  33.     }
  34.     return $this->redirectToRoute('app_login');
  35.   }
  36.   /**
  37.    * @Route("/contacts", name="contactsHomePage")
  38.    */
  39.   public function contacts(): Response {
  40.     $user $this->getUser();
  41.     if ( $user->getAgenda() == null ) {
  42.       $em $this->getDoctrine()->getManager();
  43.       $agenda = new Agenda();
  44.       $agenda->setPraticien($user);
  45.       $agenda->setNom($user->displayName());
  46.       $em->persist($agenda);
  47.       $em->flush();
  48.     }
  49.     $licence $user->getLicence();
  50.     $praticiens $this->getDoctrine()->getRepository(User::class)->getPraticiens($licence);
  51.     return $this->render('core/index.html.twig', [ 'praticiens' => $praticiens ]);
  52.   }
  53.   /**
  54.    * @Route("/contacts/getMenu", methods={"GET"}, options={"expose"=true}, name="getMenu")
  55.    */
  56.   public function getMenu() {
  57.     $licence $this->getUser()->getLicence();
  58.     $praticiens $this->getDoctrine()->getRepository(User::class)->getPraticiens($licence);
  59.     return $this->render('core/praticiensForMenu.html.twig', ['praticiens' => $praticiens]);
  60.   }
  61.   /**
  62.    * @Route("/contacts/search", methods={"POST"}, options={"expose"=true}, name="search")
  63.    */
  64.   public function search(RepositoryManagerInterface $finderRequest $request): Response {
  65.     //  Initialisations
  66.     $em $this->getDoctrine()->getManager();
  67.     $request->request->get('page') ? $page $request->request->get('page') : $page 1;
  68.     $request->request->get('userId') ? $userId $request->request->get('userId') : $userId 'all';
  69.     $request->request->get('query') ? $query $request->request->get('query') : $query '';
  70.     $licence $this->getUser()->getLicence();
  71.     //  Filtre la requete
  72.     $query trim($query);
  73.     $originalQuery $query;
  74.     $unwanted_array = [
  75.       'Š'=>'S''š'=>'s''Ž'=>'Z''ž'=>'z''À'=>'A''Á'=>'A''Â'=>'A''Ã'=>'A''Ä'=>'A''Å'=>'A''Æ'=>'A''Ç'=>'C''È'=>'E''É'=>'E',
  76.       'Ê'=>'E''Ë'=>'E''Ì'=>'I''Í'=>'I''Î'=>'I''Ï'=>'I''Ñ'=>'N''Ò'=>'O''Ó'=>'O''Ô'=>'O''Õ'=>'O''Ö'=>'O''Ø'=>'O''Ù'=>'U',
  77.       'Ú'=>'U''Û'=>'U''Ü'=>'U''Ý'=>'Y''Þ'=>'B''ß'=>'Ss''à'=>'a''á'=>'a''â'=>'a''ã'=>'a''ä'=>'a''å'=>'a''æ'=>'a''ç'=>'c',
  78.       'è'=>'e''é'=>'e''ê'=>'e''ë'=>'e''ì'=>'i''í'=>'i''î'=>'i''ï'=>'i''ð'=>'o''ñ'=>'n''ò'=>'o''ó'=>'o''ô'=>'o''õ'=>'o',
  79.       'ö'=>'o''ø'=>'o''ù'=>'u''ú'=>'u''û'=>'u''ý'=>'y''þ'=>'b''ÿ'=>'y',
  80.     ];
  81.     $query strtr$query$unwanted_array );
  82.     $query preg_replace'/[\W]/'' '$query);
  83.     //  Enregistrement de la requête dans une variable de session
  84.     $this->get('session')->set('lastQuery'$query);
  85.     //  Initialisation de la requete Elasticsearch
  86.     $elasticaQuery = new \Elastica\Query\BoolQuery();
  87.     //  Recherche sur les mots saisis
  88.     if ( $query != "" ) {
  89.       $queryString = new \Elastica\Query\QueryString();
  90.       $queryString->setDefaultOperator('AND');
  91.       $queryString->setQuery($query);
  92.       $elasticaQuery->addMust($queryString);
  93.     }
  94.     //  Filtre sur un praticien
  95.     if ( $userId != "all") {
  96.       $queryUser = new \Elastica\Query\Term();
  97.       $queryUser->setTerm('getUsersIds'$userId );
  98.       $elasticaQuery->addMust($queryUser);
  99.       $user $em->getRepository(User::class)->find($userId);
  100.       $filtreLabel $user->getPrenom();
  101.     }
  102.     else {
  103.       $filtreLabel 'aucun';
  104.       $userId 'all';
  105.     }
  106.     //  Filtre sur la licence
  107.     $queryLicence = new \Elastica\Query\Term();
  108.     $queryLicence->setTerm('licenceId'$licence->getId() );
  109.     $elasticaQuery->addMust($queryLicence);
  110.     //  Recherche des résultats d'Elasticsearch et pagination avec un fantaPaginator
  111.     $contactsPaginator $finder->getRepository(Contact::class)->findPaginated($elasticaQuery);
  112.     $contactsPaginator->setMaxPerPage($this->resultsPerPage);
  113.     $contactsPaginator->setCurrentPage($page);
  114.     //  Définitions des variables pour twig
  115.     $nbResults $contactsPaginator->getNbResults();
  116.     $contacts $contactsPaginator->getCurrentPageResults();
  117.     $nbPages $contactsPaginator->getNbPages();
  118.     $em->flush();
  119.     //  Selon le nombre de résultats on fait un pager
  120.     $pager = array();
  121.     if ( $nbPages ) {
  122.       //  Calcul de la première et de la dernière page du Pager sur une base de 5 pages
  123.       if ( $nbPages <= 5) {
  124.         $firstPage 1;
  125.         $lastPage $nbPages;
  126.       }
  127.       elseif ( $page <= ) {
  128.         $firstPage 1;
  129.         $lastPage 5;
  130.       }
  131.       elseif ( $page >= $nbPages ) {
  132.         $firstPage $nbPages 4;
  133.         $lastPage $nbPages;
  134.       }
  135.       else {
  136.         $firstPage $page 2;
  137.         $lastPage $page 2;
  138.       }
  139.       //  Bouton previous
  140.       $pager[] = array(
  141.         'type'  => 'previousButton',
  142.         'state' => ($page == 1) ? 'disabled' '',
  143.         'page'  => $page 1,
  144.       );
  145.       //  Bouton des pages
  146.       for ( $i $firstPage$i <= $lastPage $i++ )
  147.         $pager[] = array(
  148.           'type'  => 'pageButton',
  149.           'state' => ($page == $i) ? 'active' '',
  150.           'page'  => $i,
  151.         );
  152.       //  Bouton next
  153.       $pager[] = array(
  154.         'type'  => 'nextButton',
  155.         'state' => ($page == $nbPages) ? 'disabled' '',
  156.         'page'  => $page 1,
  157.       );
  158.     } // Fin de la création du pager
  159.     //  Rendu
  160.     return $this->render('contact/contactsList.html.twig', [
  161.         'contacts'    => $contacts,
  162.         'nbResults'   => $nbResults,
  163.         'nbPages'     => $nbPages,
  164.         'pager'       => $pager,
  165.         'page'        => $page,
  166.         'query'       => $originalQuery,
  167.         'userId'      => $userId,
  168.         'filtreLabel' => $filtreLabel,
  169.     ]);
  170.   }
  171. }