src/Controller/UsersController.php line 58
<?phpnamespace App\Controller;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;use Symfony\Component\Routing\Annotation\Route;use Symfony\Component\Routing\Annotation\ParamConverter;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\HttpFoundation\RedirectResponse;use Symfony\Component\HttpFoundation\Cookie;use Doctrine\Persistence\ManagerRegistry;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;use Symfony\Component\Mailer\MailerInterface;use Symfony\Bridge\Twig\Mime\TemplatedEmail;use Symfony\Component\Mime\Email;use OlaSoft\Common;use App\Entity\Users;use App\Entity\Profiles;use App\Entity\UsersActivities;use App\Form\UsersType;/*** @Route("/os-admin", name="users-")*/class UsersController extends AbstractController{public function __construct(ManagerRegistry $doctrine){$this->doctrine = $doctrine;}private $doctrine;public function getDoctrine(){return $this->doctrine;}/*** @Route("/users/page/{offset}", name="admin-page")* @Route("/users/", name="admin")* @Route("/users/search/{keywords}/page/{offset}/",name="search-admin-page")* @Route("/users/search/{keywords}/",name="search-admin")** @Route("/users-disabled/page/{offset}", name="disabled-admin-page", defaults={"isEnabled"=0})* @Route("/users-disabled/", name="disabled-admin", defaults={"isEnabled"=0})* @Route("/users-disabled/search/{keywords}/page/{offset}/", name="disabled-search-admin-page"), defaults={"isEnabled"=0}* @Route("/users-disabled/search/{keywords}/", name="disabled-search-admin", defaults={"isEnabled"=0})** @Route("/users-enabled/page/{offset}", name="enabled-admin-page", defaults={"isEnabled"=1})* @Route("/users-enabled/", name="enabled-admin", defaults={"isEnabled"=1})* @Route("/users-enabled/search/{keywords}/page/{offset}/", name="enabled-search-admin-page"), defaults={"isEnabled"=1}* @Route("/users-enabled/search/{keywords}/", name="v-search-admin", defaults={"isEnabled"=1})*/public function admin(Request $request, $keywords=null, $offset=1, $isEnabled = null){$em = $this->getDoctrine()->getManager();$offset--;$limit = 20;$of=$offset*$limit;$list= $em->getRepository(Users::class)->getAll($limit,$of,$isEnabled,$keywords?$keywords:null);$count=$em->getRepository(Users::class)->getCount();$ajax = $request->isXmlHttpRequest();$response = $this->render('Admin\index.html.twig',['list'=>$list,'ajax'=>$ajax,'count'=>$count,'offset'=>$offset,"title"=>"Gestion des utilisateurs ","subtitle"=>"Utilisateurs ".($isEnabled ? 'activés' : 'désactivés')]);return $ajax ?new Response(\json_encode(['content'=>$response->getContent(),"title"=>"Gestion des utilisateurs","subtitle"=>"Liste de tous les utilisateurs".($isEnabled ? 'activés' : 'désactivés')])): $response;}/*** @Route("/users/add", name="new")* @Route("/users/edit/{id}/", name="edit")* @Route("/account/edit/", name="account-edit", defaults={"currentUser":true})*/public function edit(Request $request, Users $user = null, $currentUser = false){if($user === null){$user = $currentUser ? $this->getUser() : new Users;}$em = $this->getDoctrine()->getManager();$form = $this->createForm(UsersType::class,$user);$form->remove('password');$form->remove('npassword');if($currentUser)$form->remove('profile');$form->handleRequest($request);if($form->isSubmitted() && $form->isValid()){$em->persist($user);$em->flush();Common::trackChange($em, $user, $this->getUser(), 'edit', 'Modification '.($currentUser ? 'de' : 'd\'un').' compte');$this->addFlash("notice","Enregistrement effectué avec succès");return $currentUser ? $this->redirectToRoute('users-account') : $this->redirectToRoute('users-admin');}$ajax = $request->isXmlHttpRequest();$response = $this->render('Admin\edit.html.twig',['form'=>$form->createView(),'ajax'=>$ajax,'redirect'=> $currentUser ? $this->generateURL('users-account') : $this->generateURL('users-admin'),'title'=> $currentUser ? 'Gestion de compte' : 'Gestion des utilisateurs','subtitle'=> $currentUser ? 'Mise à jour d\'informations personnelles' : 'Edition d\'un compte']);return $ajax ?new Response(\json_encode(['content'=>$response->getContent(),'title'=> $currentUser ? 'Gestion de compte' : 'Gestion des utilisateurs','subtitle'=> $currentUser ? 'Mise à jour d\'informations personnelles' : 'Edition d\'un compte'])): $response;}/*** @Route("/account/password-edit/", name="password-edit")*/public function passwordEdit(Request $request){$em = $this->getDoctrine()->getManager();if($this->getUser())$user = $this->getUser();$form = $this->createForm(UsersType::class,$user);$form->remove('fName');$form->remove('lName');$form->remove('phone');$form->remove('sex');$form->remove('profile');$form->handleRequest($request);if($form->isSubmitted() && $form->isValid()){if(password_verify($form->get('password')->getData(),$user->getPassword())){if($form->get('npassword')->get('first')->getData()==$form->get('npassword')->get('second')->getData())$user->setPassword($form->get('npassword')->get('first')->getData());$em->persist($user);$em->flush();Common::trackChange($em, $user, $this->getUser(), 'password', "Changement de mot de passe");$this->addFlash("notice","Enregistrement effectué avec succès.");}else$this->addFlash("error","Le mot de passe saisi n'est pas correct.");}$ajax = $request->isXmlHttpRequest();$response = $this->render('Users\password.html.twig',['form'=>$form->createView(),'ajax'=>$ajax,'title'=>'Gestion de compte','subtitle'=>'Mise à jour de mot de passe']);return $ajax ?new Response(\json_encode(['content'=>$response->getContent(),'title'=>'Gestion de compte','subtitle'=>'Mise à jour de mot de passe'])): $response;}/*** @Route("/users/enabled/{id}/", name="enable")*/public function enable(Request $request, MailerInterface $mailer, Users $user){$em = $this->getDoctrine()->getManager();if($user->getIsEnabled()){$user->setIsEnabled(false);$user->setPassword(null);}else{$user->setIsEnabled(true);if(!$user->getPassword()){$user->setToken(Common::generateToken());$email = (new TemplatedEmail())->from('noreply@olasoft.net')->to($user->getEmail())->replyTo('technique@olasoft.net')->priority(Email::PRIORITY_HIGH)->subject('OS Admin > Activation de votre compte')->htmlTemplate('Users/first-connexion.html.twig')->context(['user' => $user,]);$mailer->send($email);}}$em->persist($user);$em->flush();Common::trackChange($em, $user, $this->getUser(), 'edit', "Activation / Désactivation d'un compte utilisateur");$ajax = $request->isXmlHttpRequest();if(!$ajax)$this->addFlash('notice','Activation / Désactivation effectuée avec succès.');return $ajax? new Response(\json_encode(['status'=>$user->getIsEnabled(), 'notice'=>'Activation / Désactivation effectuée avec succès.'])): $this->redirectToRoute('users-admin');}/*** @Route("/users/reset/{id}/", name="reset")* @Route("/reset-password/", name="reset-password")*/public function reset(Request $request, MailerInterface $mailer, Users $user = null){$em = $this->getDoctrine()->getManager();$isAdmin = true;if($user === null && $request->getMethod() == 'POST'){$email = $request->request->get('_username');$user = $em->getRepository(Users::class)->findOneByEmail($email);$isAdmin = false;}if ($user){$user->setToken(Common::generateToken());$user->setPassword(null);$email = (new TemplatedEmail())->from('noreply@olasoft.net')->to($user->getEmail())->replyTo('technique@olasoft.net')->priority(Email::PRIORITY_HIGH)->subject('OS Admin > Réinitialisation de votre compte')->htmlTemplate('Users/first-connexion.html.twig')->context(['user' => $user,]);$mailer->send($email);$em->persist($user);$em->flush();Common::trackChange($em, $user, $isAdmin ? $this->getUser() : $user, 'reset', "Réinitialisation d'un compte utilisateur");$this->addFlash('notice', 'Demande de réinitialisation effectuée avec succès.'.($isAdmin ? '' : '\nVeuillez consulter votre boîte e-mail.'));return $this->redirectToRoute($isAdmin ? 'users-admin' : 'login');}elsereturn $this->redirectToRoute($isAdmin ? 'users-admin' : 'forgot-password');}/*** @Route("/first-login/{token}/{email}/", name="first-login")*/public function fLogin(Request $request, $token,$email){if($this->getUser())return $this->redirectToRoute('admin-home');$em = $this->getDoctrine()->getManager();$user = $em->getRepository(Users::class)->findOneBy(['email'=>$email,'token'=>$token]);if($request->getMethod() == 'POST'){if($user){$pwd = $request->request->get('new-password');$cpwd = $request->request->get('confirmed-password');if($pwd == $cpwd){$user->setPassword($pwd);$user->setToken(null);$em->persist($user);$em->flush();Common::trackChange($em, $user, $user, 'password', "Changement de mot de passe");$this->addFlash('notice', 'Changement de mot de passe effectué avec succès. Vous pouvez maintenant vous connecter.');return $this->redirectToRoute('login');}else$this->addFlash('error', 'Les deux mots de passe ne sont pas conformes. Veuillez réessayer svp.');}else$this->addFlash('error', 'Votre identifiant n\'est pas valide et / ou votre token a expiré. ');}return $this->render('Admin/login.html.twig', array('token' => $token,'email' => $email,'type' => 'flogin'));}/*** @Route("/users/view/{id}/", name="view")* @Route("/account/", name="account")*/public function user(Request $request, Users $item = null){if (!$item) $item = $this->getUser();$ajax = $request->isXmlHttpRequest();$response = $this->render('Users\view.html.twig',['item' => $item,'ajax'=>$ajax,'title'=>'Gestion de compte','subtitle'=>'Mon profil utilisateur']);return $ajax ?new Response(\json_encode(['content'=>$response->getContent(),'title'=>'Profil | '.$item->getLName().' '.$item->getFName(),'subtitle'=>null])): $response;}/*** @Route("/dashbord/", name="my-dashbord")* @Route("/dashbord/page/{offset}/", name="my-dashbord-page")* @Route("/dashbord/search/{offset}/", name="my-dashbord-search")* @Route("/users/dashbord/{id}/", name="dashbord")* @Route("/users/dashbord/{id}/page/{offset}/", name="dashbord-page")* @Route("/users/dashbord/{id}/search/{offset}/", name="dashbord-search")* @Route("/users/activities/", name="dashbords", defaults={"isOneUser":false})* @Route("/users/activities/page/{offset}/", name="dashbords-page", defaults={"isOneUser":false})* @Route("/users/activities/search/{keywords}/", name="dashbords-search", defaults={"isOneUser":false})*/public function activities(Request $request, Users $user = null, $offset = 1, $isOneUser = true, $keywords = null){$offset--;$limit = 100;$of=$offset*$limit;$user = $user ?? $this->getUser();$em = $this->getDoctrine()->getManager();$list= $em->getRepository(UsersActivities::class)->getAll($limit, $of, $user ? $user->getId() : null, $keywords);$count=$em->getRepository(UsersActivities::class)->getCount();$ajax = $request->isXmlHttpRequest();$response = $this->render('Admin\index.html.twig',['list'=>$list,'view'=>'Users\dashbord.html.twig','isOneUser'=>$isOneUser,'ajax'=>$ajax,'count'=>$count,'noAddBtn'=>true,'table_limit'=>$limit,'offset'=>$of,'params'=>['id'=>$user ? $user->getId() : null],'title'=>'Tableau de bord','subtitle'=> $user ? $user->getFName().' '.$user->getLName() : 'Mes dernières actions']);return $ajax ?new Response(\json_encode(['content'=>$response->getContent(),'title'=>'Tableau de bord','subtitle'=> $user ? $user->getFName().' '.$user->getLName() : 'Mes dernières actions'])): $response;}}