src/Controller/UsersController.php line 46

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\Routing\Annotation\Route;
  5. use Symfony\Component\Routing\Annotation\ParamConverter;
  6. use Symfony\Component\HttpFoundation\Response;
  7. use Symfony\Component\HttpFoundation\RedirectResponse;
  8. use Symfony\Component\HttpFoundation\Cookie;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
  11. use Symfony\Component\Mailer\MailerInterface;
  12. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  13. use Symfony\Component\Mime\Email;
  14. use OlaSoft\Common;
  15. use App\Entity\Users;
  16. use App\Entity\Profiles;
  17. use App\Entity\UsersActivities;
  18. use App\Form\UsersType;
  19. /**
  20.  * @Route("/os-admin", name="users-")
  21.  */
  22. class UsersController extends AbstractController
  23. {
  24.     /**
  25.      * @Route("/users/page/{offset}", name="admin-page")
  26.      * @Route("/users/", name="admin")
  27.      * @Route("/users/search/{keywords}/page/{offset}/",name="search-admin-page")
  28.      * @Route("/users/search/{keywords}/",name="search-admin")
  29.      *
  30.      * @Route("/users-disabled/page/{offset}", name="disabled-admin-page", defaults={"isEnabled"=0})
  31.      * @Route("/users-disabled/", name="disabled-admin", defaults={"isEnabled"=0})
  32.      * @Route("/users-disabled/search/{keywords}/page/{offset}/", name="disabled-search-admin-page"), defaults={"isEnabled"=0}
  33.      * @Route("/users-disabled/search/{keywords}/", name="disabled-search-admin", defaults={"isEnabled"=0})
  34.      *
  35.      * @Route("/users-enabled/page/{offset}", name="enabled-admin-page", defaults={"isEnabled"=1})
  36.      * @Route("/users-enabled/", name="enabled-admin", defaults={"isEnabled"=1})
  37.      * @Route("/users-enabled/search/{keywords}/page/{offset}/", name="enabled-search-admin-page"), defaults={"isEnabled"=1}
  38.      * @Route("/users-enabled/search/{keywords}/", name="v-search-admin", defaults={"isEnabled"=1})
  39.      */
  40.     public function admin($keywords=null$offset=1$isEnabled null)
  41.     {
  42.         $em $this->getDoctrine()->getManager();
  43.         $request $this->get('request_stack')->getCurrentRequest();
  44.         $offset--;
  45.         $limit 20;
  46.         $of=$offset*$limit;
  47.         $list$em->getRepository(Users::class)->getAll($limit,$of,$isEnabled,$keywords?$keywords:null);
  48.         $count=$em->getRepository(Users::class)->getCount();
  49.         $ajax $request->isXmlHttpRequest();
  50.         $response $this->render('Admin\index.html.twig',[
  51.             'list'=>$list,
  52.             'ajax'=>$ajax,
  53.             'count'=>$count,
  54.             'offset'=>$offset,
  55.             "title"=>"Gestion des utilisateurs ",
  56.             "subtitle"=>"Utilisateurs ".($isEnabled 'activés' 'désactivés')
  57.         ]);
  58.         return $ajax ?
  59.             new Response(\json_encode([
  60.                 'content'=>$response->getContent(),
  61.                 "title"=>"Gestion des utilisateurs",
  62.                 "subtitle"=>"Liste de tous les utilisateurs".($isEnabled 'activés' 'désactivés')
  63.             ]))
  64.         : $response;
  65.     }
  66.     /**
  67.      * @Route("/users/add", name="new")
  68.      * @Route("/users/edit/{id}/", name="edit")
  69.      * @Route("/account/edit/", name="account-edit", defaults={"currentUser":true})
  70.      */
  71.     public function edit(Users $user null$currentUser false)
  72.     {
  73.         if($user === null){
  74.             $user $currentUser $this->getUser() : new Users;
  75.         }
  76.         $request $this->get('request_stack')->getCurrentRequest();
  77.         $em $this->getDoctrine()->getManager();
  78.         $form $this->createForm(UsersType::class,$user);
  79.         $form->remove('password');
  80.         $form->remove('npassword');
  81.         if($currentUser)
  82.             $form->remove('profile');
  83.         $form->handleRequest($request);
  84.         if($form->isSubmitted() && $form->isValid()){
  85.             $em->persist($user);
  86.             $em->flush();
  87.             Common::trackChange(new UsersActivities$em$user$this->getUser(), 'edit''Modification '.($currentUser 'de' 'd\'un').' compte');
  88.             $this->addFlash("notice","Enregistrement effectué avec succès");
  89.             return $currentUser $this->redirectToRoute('users-account') : $this->redirectToRoute('users-admin');
  90.         }
  91.         $ajax $request->isXmlHttpRequest();
  92.         $response $this->render('Admin\edit.html.twig',[
  93.             'form'=>$form->createView(),
  94.             'ajax'=>$ajax,
  95.             'redirect'=> $currentUser $this->generateURL('users-account') : $this->generateURL('users-admin'),
  96.             'title'=> $currentUser 'Gestion de compte' 'Gestion des utilisateurs',
  97.             'subtitle'=> $currentUser 'Mise à jour d\'informations personnelles' 'Edition d\'un compte'
  98.         ]);
  99.         return $ajax ?
  100.             new Response(\json_encode([
  101.                 'content'=>$response->getContent(),
  102.                 'title'=> $currentUser 'Gestion de compte' 'Gestion des utilisateurs',
  103.                 'subtitle'=> $currentUser 'Mise à jour d\'informations personnelles' 'Edition d\'un compte'
  104.             ]))
  105.         : $response;
  106.     }
  107.     /**
  108.      * @Route("/account/password-edit/", name="password-edit")
  109.      */
  110.     public function passwordEdit()
  111.     {
  112.         $request $this->get('request_stack')->getCurrentRequest();
  113.         $em $this->getDoctrine()->getManager();
  114.         if($this->getUser())
  115.             $user $this->getUser();
  116.         $form $this->createForm(UsersType::class,$user);
  117.         $form->remove('fName');
  118.         $form->remove('lName');
  119.         $form->remove('phone');
  120.         $form->remove('sex');
  121.         $form->remove('profile');
  122.         $form->handleRequest($request);
  123.         if($form->isSubmitted()){
  124.             if($form->isValid()){
  125.                 if(password_verify($form->get('password')->getData(),$user->getPassword())){
  126.                     if($form->get('npassword')->get('first')->getData()==$form->get('npassword')->get('second')->getData())
  127.                         $user->setPassword($form->get('npassword')->get('first')->getData());
  128.                     $em->persist($user);
  129.                     $em->flush();
  130.                     $this->addFlash("notice","Enregistrement effectué avec succès.");
  131.                 }
  132.                 else
  133.                     $this->addFlash("error","Le mot de passe saisi n'est pas correct.");
  134.             }
  135.             else{
  136.                 foreach ($form->getErrors(true) as $error)
  137.                     $this->addFlash("error",$error->getMessage());
  138.             }
  139.         }
  140.         $ajax $request->isXmlHttpRequest();
  141.         $response $this->render('Users\password.html.twig',[
  142.             'form'=>$form->createView(),
  143.             'ajax'=>$ajax,
  144.             'title'=>'Gestion de compte',
  145.             'subtitle'=>'Mise à jour de mot de passe'
  146.         ]);
  147.         return $ajax ?
  148.             new Response(\json_encode([
  149.                 'content'=>$response->getContent(),
  150.                 'title'=>'Gestion de compte',
  151.                 'subtitle'=>'Mise à jour de mot de passe'
  152.             ]))
  153.         : $response;
  154.     }
  155.     /**
  156.      * @Route("/users/enabled/{id}/", name="enable")
  157.      */
  158.     public function enable(MailerInterface $mailerUsers $user)
  159.     {
  160.         $request $this->get('request_stack')->getCurrentRequest();
  161.         $em $this->getDoctrine()->getManager();
  162.         if($user->getIsEnabled()){
  163.             $user->setIsEnabled(false);
  164.             $user->setPassword(null);
  165.         }
  166.         else{
  167.             $user->setIsEnabled(true);
  168.             if(!$user->getPassword()){
  169.                 $user->setToken(Common::generateToken());
  170.                 $email = (new TemplatedEmail())
  171.                     ->from('noreply@olasoft.net')
  172.                     ->to($user->getEmail())
  173.                     //->cc('cc@example.com')
  174.                     //->bcc('bcc@example.com')
  175.                     ->replyTo('technique@olasoft.net')
  176.                     ->priority(Email::PRIORITY_HIGH)
  177.                     ->subject('OS Admin > Activation de votre compte')
  178.                     ->htmlTemplate('Users/first-connexion.html.twig')
  179.                     ->context([
  180.                         'user' => $user,
  181.                     ]);
  182.                 $mailer->send($email);
  183.             }
  184.         }
  185.         $em->persist($user);
  186.         $em->flush();
  187.         $ajax $request->isXmlHttpRequest();
  188.         if(!$ajax)
  189.             $this->addFlash('notice','Activation / Désactivation effctuée avec succès.');
  190.         return $ajax
  191.             ? new Response(\json_encode(['status'=>$user->getIsEnabled(), 'notice'=>'Activation / Désactivation effectuée avec succès.']))
  192.             : $this->redirectToRoute('users-admin');
  193.     }
  194.     /**
  195.      * @Route("/users/reset/{id}/", name="reset")
  196.      * @Route("/reset-password/", name="reset-password")
  197.      */
  198.     public function reset(MailerInterface $mailerUsers $user null)
  199.     {
  200.         $request $this->get('request_stack')->getCurrentRequest();
  201.         $em $this->getDoctrine()->getManager();
  202.         $isAdmin true;
  203.         if($user === null)
  204.             if($request->getMethod() == 'POST'){
  205.                 $email $request->request->get('_username');
  206.                 $user $em->getRepository(Users::class)->findOneByEmail($email);
  207.                 $isAdmin false;
  208.             }
  209.         if ($user){
  210.             $user->setToken(Common::generateToken());
  211.             $user->setPassword(null);
  212.             $email = (new TemplatedEmail())
  213.                 ->from('noreply@olasoft.net')
  214.                 ->to($user->getEmail())
  215.                 //->cc('cc@example.com')
  216.                 //->bcc('bcc@example.com')
  217.                 ->replyTo('technique@olasoft.net')
  218.                 ->priority(Email::PRIORITY_HIGH)
  219.                 ->subject('OS Admin > Réinitialisation de votre compte')
  220.                 ->htmlTemplate('Users/first-connexion.html.twig')
  221.                 ->context([
  222.                     'user' => $user,
  223.                 ]);
  224.             $mailer->send($email);
  225.             $em->persist($user);
  226.             $em->flush();
  227.             $this->addFlash('notice''Demande de réinitialisation effectuée avec succès.'.($isAdmin '' '\nVeuillez consulter votre boîte e-mail.'));
  228.             return $this->redirectToRoute($isAdmin 'users-admin' 'login');
  229.         }
  230.         else
  231.             return $this->redirectToRoute($isAdmin 'users-admin' 'forgot-password');
  232.     }
  233.     /**
  234.      * @Route("/first-login/{token}/{email}/", name="first-login")
  235.      */
  236.     public function fLogin($token,$email)
  237.     {
  238.         if($this->getUser())
  239.             return $this->redirectToRoute('os-admin-home');
  240.         $request $this->get('request_stack')->getCurrentRequest();
  241.         $em $this->getDoctrine()->getManager();
  242.         $user $em->getRepository(Users::class)->findOneBy(['email'=>$email,'token'=>$token]);
  243.         if($request->getMethod() == 'POST'){
  244.             if($user){
  245.                 $pwd $request->request->get('new-password');
  246.                 $cpwd $request->request->get('confirmed-password');
  247.                 if($pwd == $cpwd){
  248.                         $user->setPassword($pwd);
  249.                         $user->setToken(null);
  250.                         $em->persist($user);
  251.                         $em->flush();
  252.                         $this->addFlash('notice''Changement de mot de passe effectué avec succès. Vous pouvez maintenant vous connecter.');
  253.                         return $this->redirectToRoute('login');
  254.                 }
  255.                 else
  256.                     $this->addFlash('error''Les deux mots de passe ne sont pas conformes. Veuillez réessayer svp.');
  257.             }
  258.             else
  259.                 $this->addFlash('error''Votre identifiant n\'est pas valide et / ou votre token a expiré. ');
  260.         }
  261.         return $this->render('Admin/login.html.twig', array(
  262.             'token' => $token,'email' => $email,'type' => 'flogin'
  263.         ));
  264.     }
  265.     /**
  266.      * @Route("/users/view/{id}/", name="view")
  267.      * @Route("/account/", name="account")
  268.      */
  269.     public function user(Users $item null)
  270.     {
  271.         if (!$item$item $this->getUser();
  272.         $request $this->get('request_stack')->getCurrentRequest();
  273.         $ajax $request->isXmlHttpRequest();
  274.         $response $this->render('Users\view.html.twig',[
  275.             'item' => $item,
  276.             'ajax'=>$ajax,
  277.             'title'=>'Gestion de compte',
  278.             'subtitle'=>'Mon profil utilisateur'
  279.         ]);
  280.         return $ajax ?
  281.             new Response(\json_encode([
  282.                 'content'=>$response->getContent(),
  283.                 'title'=>'Profil | '.$item->getLName().' '.$item->getFName(),
  284.                 'subtitle'=>null
  285.             ]))
  286.             : $response;
  287.     }
  288.     /**
  289.      * @Route("/dashbord/", name="my-dashbord")
  290.      * @Route("/dashbord/page/{offset}/", name="my-dashbord-page")
  291.      * @Route("/dashbord/search/{offset}/", name="my-dashbord-search")
  292.      * @Route("/users/dashbord/{id}/", name="dashbord")
  293.      * @Route("/users/dashbord/{id}/page/{offset}/", name="dashbord-page")
  294.      * @Route("/users/dashbord/{id}/search/{offset}/", name="dashbord-search")
  295.      * @Route("/users/activities/", name="dashbords", defaults={"isOneUser":false})
  296.      * @Route("/users/activities/page/{offset}/", name="dashbords-page", defaults={"isOneUser":false})
  297.      * @Route("/users/activities/search/{keywords}/", name="dashbords-search", defaults={"isOneUser":false})
  298.      */
  299.     public function activities(Users $user null$offset 1$isOneUser true$keywords null)
  300.     {
  301.         $request $this->get('request_stack')->getCurrentRequest();
  302.         $offset--;
  303.         $limit 100;
  304.         $of=$offset*$limit;
  305.         $user $user ?? $this->getUser();
  306.         $em $this->getDoctrine()->getManager();
  307.         $list$em->getRepository(UsersActivities::class)->getAll($limit$of$user->getId(), $keywords);
  308.         $count=$em->getRepository(UsersActivities::class)->getCount();
  309.         $ajax $request->isXmlHttpRequest();
  310.         $response $this->render('Admin\index.html.twig',[
  311.             'list'=>$list,
  312.             'view'=>'Users\dashbord.html.twig',
  313.             'isOneUser'=>$isOneUser,
  314.             'ajax'=>$ajax,
  315.             'count'=>$count,
  316.             'noAddBtn'=>true,
  317.             'table_limit'=>$limit,
  318.             'offset'=>$of,
  319.             'params'=>['id'=>$user->getId()],
  320.             'title'=>'Tableau de bord',
  321.             'subtitle'=> $user $user->getFName().' '.$user->getLName() : 'Mes dernières actions'
  322.         ]);
  323.         return $ajax ?
  324.             new Response(\json_encode([
  325.                 'content'=>$response->getContent(),
  326.                 'title'=>'Tableau de bord',
  327.                 'subtitle'=> $user $user->getFName().' '.$user->getLName() : 'Mes dernières actions'
  328.             ]))
  329.         : $response;
  330.     }
  331. }