src/Controller/ManageDeleteController.php line 220

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use ReflectionMethod;
  4. use Doctrine\ORM\EntityManagerInterface;
  5. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Symfony\Component\HttpFoundation\Response;
  8. use Symfony\Component\Routing\Annotation\Route;
  9. use App\Form\Filters\BannedIpFilter;
  10. use App\Form\Filters\MemberDeleteFilter;
  11. use App\Form\Filters\CompanyDeleteFilter;
  12. use App\Form\Filters\CompanyTrashFilter;
  13. use App\Repository\UsersDeleteRequestsRepository;
  14. use App\Repository\CompaniesRepository;
  15. use App\Repository\TrashItemsRepository;
  16. use App\Entity\User;
  17. use App\Entity\UserCrms;
  18. use App\Entity\TrashItems;
  19. #[Route('/trash')]
  20. class ManageDeleteController extends AbstractController
  21. {
  22.     #[Route('/user'defaults: ['page' => '1'], methods: ['GET'], name'user_manage_delete_index')]
  23.     #[Route('/user/page/{page<[1-9]\d*>}'methods: ['GET'], name'user_manage_delete_index_paginated')]
  24.     #[Cache(smaxage10)]
  25.     public function index(Request $request,int $page,EntityManagerInterface $entityManager,UsersDeleteRequestsRepository $usersDeleteRequestsRepository): Response
  26.     {
  27.         $params $request->query->all();
  28.         $filter = [];
  29.         $filterForm $this->createForm(MemberDeleteFilter::class);
  30.         
  31.         if(isset($params['name_email'])) {
  32.             $filterForm['name_email']->setData($params['name_email']);
  33.             $filter['name_email'] = $params['name_email'];
  34.         }
  35.         if(isset($params['crm'])) {
  36.             $filterForm['crm']->setData($params['crm']);
  37.             $filter['crm'] = $params['crm'];
  38.         }
  39.         if(isset($params['is_processing'])) {
  40.             $filterForm['is_processing']->setData($params['is_processing']);
  41.             $filter['is_processing'] = $params['is_processing'];
  42.         }
  43.         $data $usersDeleteRequestsRepository->adminPaginatorFetchAll($page$filter);
  44.         return $this->render('manage-delete/user-index.html.twig', [
  45.             'paginator' => $data,
  46.             'filter' => $filter,
  47.             'form' => $filterForm->createView(),
  48.         ]);
  49.     }
  50.     #[Route('/crm'defaults: ['page' => '1'], methods: ['GET'], name'company_manage_delete_index')]
  51.     #[Route('/crm/page/{page<[1-9]\d*>}'methods: ['GET'], name'company_manage_delete_index_paginated')]
  52.     #[Cache(smaxage10)]
  53.     public function companyIndex(Request $request,int $page,EntityManagerInterface $entityManager,CompaniesRepository $companiesRepository): Response
  54.     {
  55.         $params $request->query->all();
  56.         $filter = [];
  57.         $filterForm $this->createForm(CompanyDeleteFilter::class);
  58.         if(isset($params['crm'])) {
  59.             $filterForm['crm']->setData($params['crm']);
  60.             $filter['crm'] = $params['crm'];
  61.         }
  62.         
  63.         if(isset($params['name_email'])) {
  64.             $filterForm['name_email']->setData($params['name_email']);
  65.             $filter['name_email'] = $params['name_email'];
  66.         }
  67.         if(isset($params['is_processing'])) {
  68.             $filterForm['is_processing']->setData($params['is_processing']);
  69.             $filter['is_processing'] = $params['is_processing'];
  70.         }
  71.         $data $companiesRepository->adminDeletedPaginatorFetchAll($page$filter);
  72.         return $this->render('manage-delete/company-index.html.twig', [
  73.             'paginator' => $data,
  74.             'filter' => $filter,
  75.             'form' => $filterForm->createView(),
  76.         ]);
  77.     }
  78.     #[Route('/delete/{id}'name'user_manage_delete_index_delete'methods: ['POST','GET'])]
  79.     public function delete(Request $requestUser $userEntityManagerInterface $entityManager): Response
  80.     {
  81.         if ($this->isCsrfTokenValid('delete'.$user->getUserId(), $request->request->get('_token'))) {
  82.             $user->setPermanentDelete(1);
  83.             $entityManager->persist($user);
  84.             $entityManager->flush();
  85.             $this->addFlash('error''Delete successfully.');
  86.             return $this->redirectToRoute('user_manage_delete_index', [], Response::HTTP_SEE_OTHER);
  87.         }
  88.         return $this->renderForm('manage-delete/member_delete_form.html.twig', [
  89.             'user' => $user,
  90.         ]);
  91.     }
  92.     #[Route('/crm-delete/{id}'name'company_manage_delete_index_delete'methods: ['POST','GET'])]
  93.     public function companyDelete(Request $requestUserCrms $companiesEntityManagerInterface $entityManager): Response
  94.     {
  95.         if ($this->isCsrfTokenValid('delete'.$companies->getCrmId(), $request->request->get('_token'))) {
  96.             $companies->setPermanentDelete(1);
  97.             $entityManager->persist($companies);
  98.             $entityManager->flush();
  99.             $this->addFlash('error''Delete successfully.');
  100.             return $this->redirectToRoute('company_manage_delete_index', [], Response::HTTP_SEE_OTHER);
  101.         }
  102.         return $this->renderForm('manage-delete/company_delete_form.html.twig', [
  103.             'companies' => $companies,
  104.         ]);
  105.     }
  106.     #[Route('/dismiss-request/{id}'name'company_manage_delete_dismiss_request'methods: ['POST','GET'])]
  107.     public function dismissRequest(Request $requestUserCrms $companiesEntityManagerInterface $entityManager): Response
  108.     {
  109.         if ($this->isCsrfTokenValid('dismiss'.$companies->getCrmId(), $request->request->get('_token'))) {
  110.             $companies->setPermanentDelete(0);
  111.             $companies->setIsDelete(0);
  112.             $entityManager->persist($companies);
  113.             $entityManager->flush();
  114.             return $this->redirectToRoute('company_manage_delete_index', [], Response::HTTP_SEE_OTHER);
  115.         }
  116.         return $this->renderForm('manage-delete/company_dismiss_request_form.html.twig', [
  117.             'companies' => $companies,
  118.         ]);
  119.     }
  120.     #[Route('/user-dismiss-request/{id}'name'user_manage_delete_dismiss_request'methods: ['POST','GET'])]
  121.     public function userDismissRequest(Request $requestUser $userEntityManagerInterface $entityManager): Response
  122.     {
  123.         if ($this->isCsrfTokenValid('dismiss'.$user->getUserId(), $request->request->get('_token'))) {
  124.             $user->setPermanentDelete(0);
  125.             $user->setIsDeleted(0);
  126.             $entityManager->persist($user);
  127.             $entityManager->flush();
  128.             $companies $entityManager->getRepository(\App\Entity\UserCrms::class)->findOneBy(array('userId' => $user->getUserId()));
  129.             if($companies){
  130.                 $companies->setIsDelete(0);
  131.                 $entityManager->persist($companies);
  132.                 $entityManager->flush();
  133.             }
  134.             $usersDeleteRequests $entityManager->getRepository(\App\Entity\UsersDeleteRequests::class)->findOneBy(array('userId' => $user->getUserId()));
  135.             if($usersDeleteRequests){
  136.                 $entityManager->remove($usersDeleteRequests);
  137.                 $entityManager->flush();
  138.             }
  139.             $this->addFlash('error''Delete successfully.');
  140.             return $this->redirectToRoute('user_manage_delete_index', [], Response::HTTP_SEE_OTHER);
  141.         }
  142.         return $this->renderForm('manage-delete/member_dismiss_request_form.html.twig', [
  143.             'user' => $user,
  144.         ]);
  145.     }
  146.     #[Route('/'defaults: ['page' => '1'], methods: ['GET'], name'company_manage_trash_index')]
  147.     #[Route('/page/{page<[1-9]\d*>}'methods: ['GET'], name'company_manage_trash_index_paginated')]
  148.     #[Cache(smaxage10)]
  149.     public function companyTrash(Request $request,int $page,EntityManagerInterface $entityManagerTrashItemsRepository $trashHistoriesRepository): Response
  150.     {
  151.         $params $request->query->all();
  152.         $filter = [];
  153.         
  154.         $filterForm $this->createForm(CompanyTrashFilter::class);
  155.         if(isset($params['start_date'])) {
  156.             $filterForm['start_date']->setData($params['start_date']);
  157.             $filter['start_date'] = $params['start_date'];
  158.         }
  159.         if(isset($params['end_date'])) {
  160.             $filterForm['end_date']->setData($params['end_date']);
  161.             $filter['end_date'] = $params['end_date'];
  162.         }
  163.         
  164.         if(isset($params['crm'])) {
  165.             $filterForm['crm']->setData($params['crm']);
  166.             $filter['crm'] = $params['crm'];
  167.         }
  168.         if(isset($params['name'])) {
  169.             $filterForm['name']->setData($params['name']);
  170.             $filter['name'] = $params['name'];
  171.         }
  172.         if(isset($params['enquiry_id'])) {
  173.             $filterForm['enquiry_id']->setData($params['enquiry_id']);
  174.             $filter['enquiry_id'] = $params['enquiry_id'];
  175.         }
  176.         if(isset($params['badge'])) {
  177.             $filterForm['badge']->setData($params['badge']);
  178.             $filter['badge'] = $params['badge'];
  179.         }
  180.        
  181.         $data $trashHistoriesRepository->adminPaginatorFetchAll($page$filter);
  182.         return $this->render('manage-delete/trash-index.html.twig', [
  183.             'paginator' => $data,
  184.             'filter' => $filter,
  185.             'form' => $filterForm->createView(),
  186.         ]); 
  187.     }
  188.     #[Route('/resore/{id}'name'company_manage_delete_resore'methods: ['POST','GET'])]
  189.     public function resore(Request $requestTrashItems $trashHistoriesEntityManagerInterface $entityManager): Response
  190.     {
  191.         $params $request->query->all();
  192.         $crmId 0;
  193.         if(isset($params['crmId'])){
  194.             $crmId $params['crmId'];
  195.         }
  196.         if ($this->isCsrfTokenValid('restore'.$trashHistories->getId(), $request->request->get('_token'))) {
  197.             $trashId $trashHistories->getId();
  198.             $restoreData json_decode($trashHistories->getParams(), true);
  199.             if(isset($restoreData['items'])){
  200.                 foreach($restoreData['items'] as $key => $ids){
  201.                     $fetchEntityName "\App\Entity\Trash$key";
  202.                     $newEntity "\App\Entity\\".$key;
  203.                     $fetchEntity = new $fetchEntityName();
  204.                     $orgEntity = new $newEntity();
  205.                     foreach($ids as $id){
  206.                         if($id && $id != 'null' && $id != null){
  207.                             $fetchEntityData $entityManager->getRepository(get_class($fetchEntity))->find($id);
  208.                             $idPropName false;
  209.                             if($fetchEntityData){
  210.                                 $props $entityManager->getClassMetadata(get_class($fetchEntityData))->getColumnNames();
  211.                                 foreach($props as $propKey => $prop){
  212.                                     if($propKey == 0){
  213.                                         $idPropName $prop;
  214.                                     }
  215.                                     $propName ucfirst($prop);
  216.                                     if(str_contains($propName'_')){
  217.                                         $newPropName '';
  218.                                         $explodeValue explode("_",$propName);
  219.                                         foreach($explodeValue as $key => $dValue){
  220.                                             $newPropName .= ucfirst($dValue);
  221.                                         }
  222.                                         $propName $newPropName;
  223.                                         if($propKey == 0){
  224.                                             $idPropName $newPropName;
  225.                                         }
  226.                                     }
  227.                                     $reflectionMethod = new ReflectionMethod(get_class($fetchEntityData),'get'.$propName);
  228.                                     $value $reflectionMethod->invoke($fetchEntityData);
  229.                                     $reflectionMethod = new ReflectionMethod(get_class($orgEntity),'set'.$propName);
  230.                                     $reflectionMethod->invoke($orgEntity$value);
  231.                                 }
  232.                                 $idPropName lcfirst($idPropName);
  233.                                 $metadata $entityManager->getClassMetadata(get_class($orgEntity));
  234.                                 $metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_NONE);
  235.                                 $entityManager->persist($orgEntity);
  236.                                 $entityManager->flush(); 
  237.                                 $entityManager->clear();
  238.                                 $metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_AUTO);
  239.                                 if($idPropName){
  240.                                     $query $entityManager->createQueryBuilder()
  241.                                                 ->delete(get_class($fetchEntity),'c')
  242.                                                 ->where("c.{$idPropName} = {$id}")
  243.                                                 ->getQuery()->execute();
  244.                                 }
  245.                             }
  246.                         }
  247.                     }
  248.                 }
  249.             }
  250.             $query $entityManager->createQueryBuilder()
  251.                             ->delete('App:TrashItems','c')
  252.                             ->where("c.id = {$trashId}")
  253.                             ->getQuery()->execute();
  254.             $this->addFlash('success''Restore successfully.');
  255.             if($request->request->get('crmId')){
  256.                 if($request->request->get('redirect_page')){
  257.                     return $this->redirectToRoute('manage_account_recycle_bin_paginated', ['id'=> $request->request->get('crmId'), 'page'=> $request->request->get('redirect_page')], Response::HTTP_SEE_OTHER);
  258.                 }
  259.                 return $this->redirectToRoute('manage_account_recycle_bin', ['id'=> $request->request->get('crmId')], Response::HTTP_SEE_OTHER);
  260.             }
  261.             if($request->request->get('redirect_page')){
  262.                 return $this->redirectToRoute('company_manage_trash_index_paginated', ['page'=> $request->request->get('redirect_page')], Response::HTTP_SEE_OTHER);
  263.             }
  264.             return $this->redirectToRoute('company_manage_trash_index', [], Response::HTTP_SEE_OTHER);
  265.         }
  266.         return $this->renderForm('manage-delete/restore.html.twig', [
  267.             'trashHistories' => $trashHistories,
  268.             'crmId' => $crmId,
  269.             'redirect_page' => $request->query->get('redirect_page')
  270.         ]);
  271.     }
  272.     #[Route('/permanent-delete/{id}'name'company_manage_permanent_delete'methods: ['POST','GET'])]
  273.     public function permanentDelete(Request $requestTrashItems $trashHistoriesEntityManagerInterface $entityManager): Response
  274.     {
  275.         $params $request->query->all();
  276.         
  277.         $crmId 0;
  278.         if(isset($params['crmId'])){
  279.             $crmId $params['crmId'];
  280.         }
  281.         if ($this->isCsrfTokenValid('permanentDelete'.$trashHistories->getId(), $request->request->get('_token'))) {
  282.             $source json_decode($trashHistories->getParams(), true);
  283.             if(isset($source['items'])){
  284.                 foreach($source['items'] as $key => $items) {
  285.                     $fetchEntityName "\App\Entity\Trash$key";
  286.                     $fetchEntity = new $fetchEntityName();
  287.                     if($items){
  288.                         foreach($items as $item) {
  289.                             if($item != '' && $item != null && $item != 'null' && $item) {
  290.                                 $fetchEntityData $entityManager->getRepository(get_class($fetchEntity))->find($item);
  291.                                 if($fetchEntityData){
  292.                                     $entityManager->remove($fetchEntityData);
  293.                                     $entityManager->flush();
  294.                                 }
  295.                             }
  296.                         }
  297.                     }
  298.                 }
  299.             }
  300.             $entityManager->remove($trashHistories);
  301.             $entityManager->flush();
  302.             $this->addFlash('success''Permanent Delete successfully.');
  303.             if($request->request->get('crmId')){
  304.                 if($request->request->get('redirect_page')){
  305.                     return $this->redirectToRoute('manage_account_recycle_bin_paginated', ['id'=> $request->request->get('crmId'), 'page'=> $request->request->get('redirect_page')], Response::HTTP_SEE_OTHER);
  306.                 }
  307.                 return $this->redirectToRoute('manage_account_recycle_bin', ['id'=> $request->request->get('crmId')], Response::HTTP_SEE_OTHER);
  308.             }
  309.             if($request->request->get('redirect_page')){
  310.                 return $this->redirectToRoute('company_manage_trash_index_paginated', ['page'=> $request->request->get('redirect_page')], Response::HTTP_SEE_OTHER);
  311.             }
  312.             return $this->redirectToRoute('company_manage_trash_index', [], Response::HTTP_SEE_OTHER);
  313.         }
  314.         return $this->renderForm('manage-delete/permanent-delete.html.twig', [
  315.             'trashHistories' => $trashHistories,
  316.             'crmId' => $crmId,
  317.             'redirect_page' => $request->query->get('redirect_page')
  318.         ]);
  319.     }
  320. }