src/Controller/ManageUsersController.php line 38

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\SiteBannedIps;
  4. use App\Entity\CrmEnquiries;
  5. use App\Entity\UserCrms;
  6. use App\Entity\User;
  7. use App\Entity\UserProfiles;
  8. use App\Repository\CountriesRepository;
  9. use App\Form\ManageCompaniesForm;
  10. use App\Form\UserBillingForm;
  11. use App\Form\UserForm;
  12. use Doctrine\ORM\EntityManagerInterface;
  13. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\HttpFoundation\Response;
  16. use Symfony\Component\Routing\Annotation\Route;
  17. use App\Form\Filters\ManageCompaniesFilter;
  18. use App\Form\Filters\CrmRecycleBinFilter;
  19. use App\Form\Filters\ManageUsersFilter;
  20. use App\Repository\CompaniesRepository;
  21. use App\Service\ServiceStorage;
  22. use App\Service\ServiceEnquiry;
  23. use App\Repository\TrashItemsRepository;
  24. use App\Repository\EnquiriesRepository;
  25. use App\Repository\UserSubscriptionsRepository;
  26. use App\Repository\UserRepository;
  27. use App\Form\Filters\UserSubscriptionsFilter;
  28. #[Route('/manage/users')]
  29. class ManageUsersController extends AbstractController
  30. {
  31.     #[Route('/'defaults: ['page' => '1'], methods: ['GET'], name'manage_users_index')]
  32.     #[Route('/page/{page<[1-9]\d*>}'methods: ['GET'], name'manage_users_index_paginated')]
  33.     #[Cache(smaxage10)]
  34.     public function userIndex(Request $request,int $page,EntityManagerInterface $entityManager,UserRepository $usersRepository): Response
  35.     {
  36.         $params $request->query->all();
  37.         $filter = [];
  38.         $filterForm $this->createForm(ManageUsersFilter::class);
  39.         
  40.         if(isset($params['name'])) {
  41.             $filterForm['name']->setData($params['name']);
  42.             $filter['name'] = $params['name'];
  43.         }
  44.         if(isset($params['email'])) {
  45.             $filterForm['email']->setData($params['email']);
  46.             $filter['email'] = $params['email'];
  47.         }
  48.         if(isset($params['phone'])) {
  49.             $filterForm['phone']->setData($params['phone']);
  50.             $filter['phone'] = $params['phone'];
  51.         }
  52.         if(isset($params['role'])) {
  53.             $filterForm['role']->setData($params['role']);
  54.             $filter['role'] = $params['role'];
  55.         }
  56.         $data $usersRepository->adminPaginatorFetchAll($page$filter);
  57.         return $this->render('manage-users/index.html.twig', [
  58.             'paginator' => $data,
  59.             'filter' => $filter,
  60.             'form' => $filterForm->createView(),
  61.         ]);
  62.     }
  63.     #[Route('/edit-user/{id}'name'edit_user'methods: ['GET''POST'])]
  64.     public function editUser($id,Request $requestEntityManagerInterface $entityManagerUserRepository $usersRepositoryUser $user){
  65.        
  66.         $form $this->createForm(UserForm::class, $user);
  67.         $form->handleRequest($request);
  68.         if($request->getMethod() == 'POST' ){
  69.             $email $form->get('email')->getData();
  70.             $first_name $form->get('first_name')->getData();
  71.             $last_name $form->get('last_name')->getData();
  72.             $emailExist $usersRepository->loadUserByEmailIdentifier($email,$id);
  73.            
  74.                 if($emailExist) {
  75.                     return $this->renderForm('manage-users/edit-user.html.twig', [
  76.                         'form' => $form,
  77.                         'user'=> $user,
  78.                         'errors' => "This email address already exist" 
  79.                     ]);
  80.                 }
  81.                 else{
  82.                     if ($form->isSubmitted() && $form->isValid()) {
  83.                         $userProfile $entityManager->getRepository(\App\Entity\UserProfiles::class)->find($id);
  84.                         if($first_name || $last_name){
  85.                             $userProfile->setFirstName($first_name);
  86.                             $userProfile->setLastName($last_name);
  87.                             $user->setName($first_name);
  88.                             $entityManager->persist($userProfile);
  89.                         }
  90.                         $entityManager->persist($user);
  91.                         $entityManager->flush();
  92.                         $this->addFlash('success''Update successfully.');
  93.             
  94.                         return $this->redirectToRoute('manage_users_index', [], Response::HTTP_SEE_OTHER);
  95.                     }
  96.                 }
  97.         }
  98.         return $this->renderForm('manage-users/edit-user.html.twig', [
  99.             'form' => $form,
  100.             'user'=>$user,
  101.             'errors' => "" 
  102.         ]);
  103.     }
  104.     #[Route('/edit-user-billing-detail/{id}'name'edit_user_billing_detail'methods: ['GET''POST'])]
  105.     public function editUserBiilingDetails(Request $requestEntityManagerInterface $entityManagerUserRepository $usersRepositoryUserProfiles $userProfilesCountriesRepository $countriesRepository){
  106.        
  107.         $form $this->createForm(UserBillingForm::class, $userProfiles);
  108.         $form->handleRequest($request);
  109.             if ($form->isSubmitted() && $form->isValid()) {
  110.                 $entityManager->persist($userProfiles);
  111.                 $entityManager->flush();
  112.                 $this->addFlash('success''Update successfully.');
  113.                 return $this->redirectToRoute('manage_users_index', [], Response::HTTP_SEE_OTHER);
  114.             }
  115.     
  116.         return $this->renderForm('manage-users/edit-user-billing-detail.html.twig', [
  117.             'form' => $form,
  118.             'user_profiles'=>$userProfiles,
  119.         ]);
  120.     }
  121.     #[Route('/delete-user/{id}'name'delete_user'methods: ['POST','GET'])]
  122.     public function deleteUser(Request $requestEntityManagerInterface $entityManagerUser $user): Response
  123.     {
  124.         if ($this->isCsrfTokenValid('delete'.$user->getUserId(), $request->request->get('_token'))) {
  125.             if($request->isMethod('POST')){
  126.                 $user->setIsDeleted(1);
  127.                 $entityManager->persist($user);
  128.                 $entityManager->flush();
  129.                 $this->addFlash('error''Delete successfully.');
  130.                 if($request->request->get('redirect_page')){
  131.                     return $this->redirectToRoute('manage_users_index_paginated', ['page'=> $request->request->get('redirect_page')], Response::HTTP_SEE_OTHER);
  132.                 }
  133.                 return $this->redirectToRoute('manage_users_index', [], Response::HTTP_SEE_OTHER);
  134.             }
  135.         }
  136.         return $this->renderForm('manage-users/_delete_form.html.twig', [
  137.             'user' => $user,
  138.             'redirect_page' => $request->query->get('redirect_page')
  139.         ]);
  140.     }
  141.     #[Route('/view/{id}'name'manage_users_view'methods: ['GET'])]
  142.     public function userview($id,EntityManagerInterface $entityManager,User $user): Response
  143.     {
  144.         $query $entityManager->getRepository(\App\Entity\UserCrmRelationships::class)->createQueryBuilder('cm')
  145.                             ->andWhere('cm.userId = :userId')
  146.                             ->setParameter('userId'$id);
  147.         $companies $query->getQuery()->getResult(); 
  148.         $loginHistories $entityManager->getRepository(\App\Entity\UserOauths::class)->createQueryBuilder('cm')
  149.                         ->andWhere('cm.userId = :userId')
  150.                         ->setParameter('userId'$id)
  151.                         ->setMaxResults(10)
  152.                         ->orderBy('cm.createdAt','DESC')
  153.                         ->getQuery()->getResult(); 
  154.         $totalCount $entityManager->getRepository(\App\Entity\UserOauths::class)->createQueryBuilder('cm')
  155.                         ->select('COUNT(cm.oauthId)')
  156.                         ->andWhere('cm.userId = :userId')
  157.                         ->setParameter('userId'$id)
  158.                         ->getQuery()
  159.                         ->getSingleScalarResult();
  160.         if($loginHistories){
  161.             foreach($loginHistories as $histories){
  162.                 $histories->setAccessToken('');
  163.             }
  164.         }
  165.         return $this->render('manage-users/view.html.twig', [
  166.             'user' => $user,
  167.             'companies' => $companies,
  168.             'loginHistories' => $loginHistories,
  169.             'totalCount' => $totalCount,
  170.         ]);
  171.     }
  172.     #[Route('/disable-user/{id}'name'disable_user'methods: ['POST','GET'])]
  173.     public function disableUser(Request $requestEntityManagerInterface $entityManagerUser $user): Response
  174.     {
  175.         if ($this->isCsrfTokenValid('disable'.$user->getUserId(), $request->request->get('_token'))) {
  176.             if($request->isMethod('POST')){
  177.                 $user->setIsActive(0);
  178.                 $entityManager->persist($user);
  179.                 $entityManager->flush();
  180.                 $this->addFlash('error''Disable successfully.');
  181.                 if($request->request->get('redirect_page')){
  182.                     return $this->redirectToRoute('manage_users_index_paginated', ['page'=> $request->request->get('redirect_page')], Response::HTTP_SEE_OTHER);
  183.                 }
  184.                 return $this->redirectToRoute('manage_users_index', [], Response::HTTP_SEE_OTHER);
  185.             }
  186.         }
  187.         return $this->renderForm('manage-users/_disable.html.twig', [
  188.             'user' => $user,
  189.             'redirect_page' => $request->query->get('redirect_page')
  190.         ]);
  191.     }
  192.     #[Route('/enable-user/{id}'name'enable_user'methods: ['POST','GET'])]
  193.     public function enableUser(Request $requestEntityManagerInterface $entityManagerUser $user): Response
  194.     {
  195.         if ($this->isCsrfTokenValid('enable'.$user->getUserId(), $request->request->get('_token'))) {
  196.             if($request->isMethod('POST')){
  197.                 $user->setIsActive(1);
  198.                 $entityManager->persist($user);
  199.                 $entityManager->flush();
  200.                 $this->addFlash('success''Enable successfully.');
  201.                 if($request->request->get('redirect_page')){
  202.                     return $this->redirectToRoute('manage_users_index_paginated', ['page'=> $request->request->get('redirect_page')], Response::HTTP_SEE_OTHER);
  203.                 }
  204.                 return $this->redirectToRoute('manage_users_index', [], Response::HTTP_SEE_OTHER);
  205.             }
  206.         }
  207.         return $this->renderForm('manage-users/_enable.html.twig', [
  208.             'user' => $user,
  209.             'redirect_page' => $request->query->get('redirect_page')
  210.         ]);
  211.     }
  212.     #[Route('/delete-login/{id}'name'delete_login_devices'methods: ['POST','GET'])]
  213.     public function deleteLogin($idRequest $requestEntityManagerInterface $entityManagerUser $user): Response
  214.     {
  215.         if ($this->isCsrfTokenValid('delete_login_devices'.$user->getUserId(), $request->request->get('_token'))) {
  216.             if($request->isMethod('POST')){               
  217.                 $userOauths $entityManager->getRepository(\App\Entity\UserOauths::class)->createQueryBuilder('cm')
  218.                             ->andWhere('cm.userId = :userId')
  219.                             ->setParameter('userId'$id)
  220.                             ->getQuery()->getResult();
  221.                 if($userOauths){
  222.                     foreach($userOauths as $oathIds){
  223.                         $entityManager->remove($oathIds);
  224.                         $entityManager->flush();
  225.                     }
  226.                 }
  227.                 $this->addFlash('error''Logout form all devices successfully.');
  228.                 return $this->redirectToRoute('manage_users_view', ['id'=> $id], Response::HTTP_SEE_OTHER);
  229.             }
  230.         }
  231.         return $this->renderForm('manage-users/delete_login_devices.html.twig', [
  232.             'user' => $user,
  233.             'redirect_page' => $request->query->get('redirect_page')
  234.         ]);
  235.     }
  236.     #[Route('/user/logout-device/{id}/{uid}'name'logout_device'methods: ['POST','GET'])]
  237.     public function logoutDevice($id$uidRequest $requestEntityManagerInterface $entityManager): Response
  238.     {
  239.         if ($this->isCsrfTokenValid('logout_device'.$id$request->request->get('_token'))) {
  240.             if($request->isMethod('POST')){               
  241.                 $userOauths $entityManager->getRepository(\App\Entity\UserOauths::class)->find($id);
  242.     
  243.                 if($userOauths){
  244.                         $entityManager->remove($userOauths);
  245.                         $entityManager->flush();
  246.                 }
  247.                 $this->addFlash('error''Logout form this device successfully.');
  248.                 return $this->redirectToRoute('manage_users_view', ['id'=> $uid], Response::HTTP_SEE_OTHER);
  249.             }
  250.         }
  251.         return $this->renderForm('manage-users/logout_device.html.twig', [
  252.             'uid' => $uid,
  253.             'dId' => $id,
  254.             'redirect_page' => $request->query->get('redirect_page')
  255.         ]);
  256.     }
  257. }