src/Controller/Front/AccountController.php line 249

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Front;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\Routing\Annotation\Route;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use App\Entity\Search;
  8. use App\Entity\Estate;
  9. use App\Entity\Agent;
  10. use App\Entity\TutorielCategory;
  11. use App\Entity\Tutoriel;
  12. use App\Entity\Progiciel;
  13. use App\Entity\SousType;
  14. use App\Filter\EstateFilterType;
  15. use App\Manager\SearchManager;
  16. use App\Form\UserFormType;
  17. use App\Entity\User;
  18. use App\Service\SoftDeleteFilter;
  19. use Symfony\Component\HttpFoundation\Session\Session;
  20. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  21. class AccountController extends AbstractController
  22. {
  23.     private $searchManager;
  24.     private $softDeleteFilter;
  25.     public function __construct(searchManager $searchManager, SoftDeleteFilter $softDeleteFilter)
  26.     {
  27.         $this->searchManager = $searchManager;
  28.         $this->softDeleteFilter = $softDeleteFilter;
  29.     }
  30.     /**
  31.      * @Route("/mon_compte", name="mon_compte")
  32.      */
  33.     public function index(): Response
  34.     {   
  35.         $datas = ['current_page' => 'mon_compte'];
  36.         return $this->render('front/account/index.html.twig', $datas );
  37.     }
  38.     /**
  39.      * @Route("/espace_conseiller_v1", name="espace_conseiller_v1")
  40.      */
  41.     public function espaceConseillerV1(): Response
  42.     {   
  43.         $datas = ['current_page' => 'espace_conseiller_v1'];
  44.         if($this->isGranted('ROLE_CONSEILLER')){
  45.             $user = $this->getUser();
  46.             $agent = $this->getDoctrine()->getRepository(Agent::class)->findOneByEmail($user->getEmail());
  47.             if(!is_null($agent)){
  48.                 $my_estates = $this->getDoctrine()->getRepository(Estate::class)->findAllByAgent($agent->getId());
  49.                 $datas['my_estates'] = $my_estates;
  50.                 $datas['encoded_my_estates'] = ['estates' => Estate::encode($my_estates)];
  51.                 $datas['with_map'] = true;
  52.             }
  53.             // // $ffprobe = FFMpeg\FFProbe::create();
  54.             // // foreach($tutoriels as $video){
  55.             // //     $duration = $ffprobe->format( $full_video_path )->get('duration');
  56.             // // }
  57.             // $tutoriels_by_categories = $this->getDoctrine()->getRepository(Tutoriel::class)->findAllByCategories();
  58.             // $datas['tutoriels_by_categories'] = $tutoriels_by_categories;
  59.             $datas['tutoriel_categories'] = $this->getDoctrine()->getRepository(TutorielCategory::class)->findAll();
  60.             $datas['tutoriels'] = $this->getDoctrine()->getRepository(Tutoriel::class)->findAll();
  61.             dump($datas['tutoriels']);
  62.             $progiciels = $this->getDoctrine()->getRepository(Progiciel::class)->findAll();
  63.             $datas['progiciels'] = $progiciels;
  64.         }
  65.         return $this->render('front/account/espace_conseiller_v1.html.twig', $datas );
  66.     }
  67.     /**
  68.      * @Route("/espace_conseiller", name="espace_conseiller")
  69.      */
  70.     public function espaceConseiller(): Response
  71.     {   
  72.         $datas = ['current_page' => 'espace_conseiller'];
  73.         if($this->isGranted('ROLE_CONSEILLER')){
  74.             $user = $this->getUser();
  75.             $agent = $this->getDoctrine()->getRepository(Agent::class)->findOneByEmail($user->getEmail());
  76.             if(!is_null($agent)){
  77.                 $my_estates = $this->getDoctrine()->getRepository(Estate::class)->findAllByAgent($agent->getId());
  78.                 $datas['my_estates'] = $my_estates;
  79.                 $datas['encoded_my_estates'] = ['estates' => Estate::encode($my_estates)];
  80.                 $datas['with_map'] = true;
  81.             }
  82.             $progiciels = $this->getDoctrine()->getRepository(Progiciel::class)->findAll();
  83.             $datas['progiciels'] = $progiciels;
  84.         }
  85.         return $this->render('front/account/espace_conseiller.html.twig', $datas );
  86.     }
  87.     /** 
  88.      * include userForm
  89.      */
  90.     public function userForm(): Response
  91.     {   
  92.         $user = $this->getUser();
  93.         $form = $this->createForm(UserFormType::class, $user);
  94.         return $this->render('front/account/_user_form.html.twig', ['form' => $form->createView()]);
  95.     }
  96.     /**
  97.      * @Route("/mon_compte/save_user", name="save_user")
  98.      */
  99.     public function saveUser(Request $request, UserPasswordEncoderInterface $userPasswordEncoderInterface): Response
  100.     {  
  101.         $user = $this->getUser();
  102.         $form = $this->createForm(UserFormType::class, $user);
  103.         $form->handleRequest($request);
  104.         if ($form->isSubmitted() && $form->isValid()) {
  105.             
  106.             $plainPassword = $form->get('plainPassword')->getData();
  107.             $msg = 'Votre compte a été modifié';
  108.             if(!is_null($plainPassword)){
  109.                 // encode the plain password
  110.                 $user->setPassword(
  111.                 $userPasswordEncoderInterface->encodePassword(
  112.                         $user,
  113.                         $plainPassword
  114.                     )
  115.                 );
  116.                 $msg .= ', et le mot de passe aussi';
  117.             }
  118.             $em = $this->getDoctrine()->getManager();
  119.             $em->flush();
  120.             $output =  [
  121.                 'success' => true,
  122.                 'msg' => $msg .'.',
  123.                 'profile' => $user->getProfile(),
  124.                 'form' => $this->renderView('front/account/_user_form.html.twig', ['form' => $form->createView()]),
  125.             ];
  126.         }      
  127.         else{
  128.             $output =  [
  129.                 'error' => true, 
  130.                 'form' => $this->renderView('front/account/_user_form.html.twig', ['form' => $form->createView()]),
  131.             ];
  132.         }  
  133.         return $this->json($output );
  134.     }
  135.     /**
  136.      * @Route("/mon_compte/delete_user", name="delete_user")
  137.      */
  138.     public function deleteUSer(Request $request): Response
  139.     {   
  140.         $user = $this->getUser();
  141.         $em = $this->getDoctrine()->getManager();
  142.         $this->softDeleteFilter->removeSoftDeleteFilter($em);
  143.         $em->remove($user);
  144.         $em->flush();
  145.         $this->softDeleteFilter->undoRemoveSoftDeleteFilter($em);
  146.         //Déconnection ...
  147.         $session = $this->get('session');
  148.         $session = new Session();
  149.         $session->invalidate();
  150.         $output =  [
  151.             'msg' => "Votre compte a été supprimé, vous allez être redirigé vers la page d'accueil",
  152.             'success' => true,
  153.         ];
  154.         return $this->json($output );
  155.     }
  156.     /**
  157.      * @Route("/mon_compte/save_search", name="save_search")
  158.      */
  159.     public function saveSearch(Request $request): Response
  160.     {
  161.         if ( $request->isXmlHttpRequest() ) {
  162.             $user = $this->getUser();
  163.             $page = $request->request->get('page');
  164.             $name = $request->request->get('name');
  165.             $alert = $request->request->get('alert');
  166.             $datas = $request->request->get('datas');
  167.             $savedSearchExist = $this->searchManager->savedSearchExist($datas, $user);
  168.             if($savedSearchExist){
  169.                 $output = ["warning" => true, "msg" => sprintf('Une Recherche similaire "%s" existe déjà dans vos sauvegardes', $savedSearchExist)];
  170.             }
  171.             else{
  172.                 $result = $this->searchManager->saveWithName($request, $datas, $page, $user, $name, $alert);
  173.                 if($result){
  174.                     $output = ["success" => true, "msg" =>'Recherche sauvegardée'];
  175.                 }
  176.                 else{
  177.                     $output = ["warning" => true, "msg" => sprintf('la recherche est vide')];
  178.                 }
  179.             }
  180.             return $this->json($output);
  181.         }
  182.         else{
  183.             throw new AccessDeniedHttpException("L'action demandée est impossible");
  184.         }
  185.     }
  186.     /**
  187.      * @Route("/mon_compte/manage_search", name="manage_search")
  188.      */
  189.     public function manageSearch(Request $request): Response
  190.     {
  191.         if ( $request->isXmlHttpRequest() ) {
  192.             $em = $this->getDoctrine()->getManager();
  193.             $search = $this->getDoctrine()->getRepository(Search::class)->find($request->request->get('id'));
  194.             $action = $request->request->get('action');
  195.             if($action == 'edit'){
  196.                 $search->setName($request->request->get('name'));
  197.                 $msg = 'Recherche sauvegardée';
  198.             }
  199.             if($action == 'alert'){
  200.                 $search->setAlert($request->request->get('alert'));
  201.                 $msg = 'Alerte modifiée';
  202.             }
  203.             elseif($action == 'delete'){
  204.                 $em->remove($search);
  205.                 $msg = 'Recherche supprimée';
  206.             }
  207.             
  208.             $em->flush();
  209.             $output = ["success" => true, "msg" => $msg];
  210.             return $this->json($output);
  211.         }
  212.         else{
  213.             throw new AccessDeniedHttpException("L'action demandée est impossible");
  214.         }
  215.     }
  216.     public function userNav(): Response
  217.     {   
  218.         return $this->render('front/account/_user_nav.html.twig', [
  219.             // 'username' => !is_null($this->getUser()) ? $this->getUser()->getEmail() : null
  220.             // 'user' => $this->getUser()
  221.         ]);
  222.     }
  223.     /** 
  224.      * include profil
  225.      */
  226.     public function getProfile(): Response
  227.     {
  228.         return $this->render('front/account/_profile.html.twig', [
  229.             'user' => $this->getUser()
  230.         ]);
  231.     }
  232.     /** 
  233.      * include searches
  234.      */
  235.     public function getSearches(): Response
  236.     {
  237.         $searches = $this->getDoctrine()->getRepository(Search::class)->findAllSavedByUser($this->getUser()->getId());
  238.         
  239.         // A bouger dans le manager dans le construct de la class Search
  240.         foreach ($searches as $search){
  241.             $familly_type = $search->getPage();
  242.             $sous_types = $this->getDoctrine()->getRepository(SousType::class)->getChoices();
  243.             $filter = $this->get('form.factory')->create(EstateFilterType::class, null, ['familly_type' => $familly_type, 'sous_types' => $sous_types]);
  244.             $filter->submit($search->getDatas());
  245.             $count = $this->getDoctrine()->getRepository(Estate::class)->countAllWithAgent($filter);
  246.             $search->setNbResult($count);
  247.         }
  248.         return $this->render('front/account/_searches.html.twig', [
  249.             'searches' => $searches
  250.         ]);
  251.     }
  252.     /** 
  253.      * include favorites
  254.      */
  255.     public function getFavorites(): Response
  256.     {
  257.         $user_favorites = $this->getDoctrine()->getRepository(Estate::class)->findAllSavedByUser($this->getUser()->getId());
  258.         return $this->render('front/account/_favorites.html.twig', [
  259.             'user_favorites' => $user_favorites,
  260.             'encoded_estates' =>  ['estates' => Estate::encode($user_favorites)],
  261.         ]);
  262.     }
  263.     /**
  264.      * @Route("/mon_compte/toggle_favorite/{refannonce}", name="toggle_favorite")
  265.      */
  266.     public function ToggleFavorite(Estate $estate, Request $request): Response
  267.     {   
  268.         $user = $this->getUser();
  269.         $has_favorite = $user->hasFavorite($estate);
  270.         if($has_favorite){
  271.             $user->removeFavorite($estate);
  272.             $msg = "Le bien ".$estate->getRefannonce()." a été supprimé de vos favoris";
  273.         }
  274.         else{
  275.             $user->addFavorite($estate);
  276.             $msg = "Le bien ".$estate->getRefannonce()." a été ajouté à vos favoris";
  277.         }
  278.         
  279.         ;
  280.         $em = $this->getDoctrine()->getManager();
  281.         $em->flush();
  282.         $user_favorites = $em->getRepository(Estate::class)->favoriteIds($user->getId());
  283.         $request->getSession()->set('user_favorites', $user_favorites);
  284.         $output = [
  285.             'has_favorite' => !$has_favorite,
  286.             'user_favorites' => $user_favorites,
  287.             'msg' => $msg
  288.         ];
  289.         die(json_encode($output));
  290.         return $this->json($output); //provoque une erreur que je ne comprends pass
  291.     }
  292. }