vendor/uvdesk/core-framework/Controller/AccountXHR.php line 35

Open in your IDE?
  1. <?php
  2. namespace Webkul\UVDesk\CoreFrameworkBundle\Controller;
  3. use Symfony\Component\HttpFoundation\Request;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\HttpFoundation\JsonResponse;
  6. use Symfony\Component\EventDispatcher\GenericEvent;
  7. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  8. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  9. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  10. use Symfony\Contracts\Translation\TranslatorInterface;
  11. use Symfony\Component\Filesystem\Filesystem as Fileservice;
  12. use Symfony\Component\DependencyInjection\ContainerInterface;
  13. use Webkul\UVDesk\CoreFrameworkBundle\Entity\User;
  14. use Webkul\UVDesk\CoreFrameworkBundle\Entity\SavedFilters;
  15. use Webkul\UVDesk\CoreFrameworkBundle\Workflow\Events as CoreWorkflowEvents;
  16. use Webkul\UVDesk\CoreFrameworkBundle\Services\UserService;
  17. class AccountXHR extends AbstractController
  18. {
  19.     private $eventDispatcher;
  20.     private $translator;
  21.     private $userService;
  22.     public function __construct(UserService $userServiceEventDispatcherInterface $eventDispatcherTranslatorInterface $translator)
  23.     {
  24.         $this->eventDispatcher $eventDispatcher;
  25.         $this->translator $translator;
  26.         $this->userService $userService;
  27.     }
  28.     public function listAgentsXHR(Request $requestContainerInterface $container)
  29.     {
  30.         if (!$this->userService->isAccessAuthorized('ROLE_AGENT_MANAGE_AGENT')) {
  31.             return $this->redirect($this->generateUrl('helpdesk_member_dashboard'));
  32.         }
  33.         if (true === $request->isXmlHttpRequest()) {
  34.             $userRepository $this->getDoctrine()->getRepository(User::class);
  35.             $agentCollection $userRepository->getAllAgents($request->query$container);
  36.             return new Response(json_encode($agentCollection), 200, ['Content-Type' => 'application/json']);
  37.         }
  38.         return new Response(json_encode([]), 404);
  39.     }
  40.     public function deleteAgent(Request $request)
  41.     {
  42.         if ($request->getMethod() != "DELETE") {
  43.             return new JsonResponse([
  44.                 'alertClass' => 'warning'
  45.                 'alertMessage' => $this->translator->trans("How did you land here?"), 
  46.             ], 404);
  47.         }
  48.         $id $request->query->get('id');
  49.         $entityManager $this->getDoctrine()->getManager();
  50.         /*
  51.             Original Code: $user = $em->getRepository('WebkulUserBundle:User')->findUserByCompany($id,$company->getId());
  52.             Using findUserByCompany() won't execute the UserListener, so user roles won't be set and user with ROLE_SUPER_ADMIN can be deleted as a result.
  53.             To trigger UserListener to set roles, you need to only select 'u' instead of both 'u, dt' in query select clause.
  54.             Doing this here instead of directly making changes to userRepository->findUserByCompany().
  55.          */
  56.         $user $entityManager->createQueryBuilder()
  57.             ->select('u')
  58.             ->from(User::class, 'u')
  59.             ->leftJoin('u.userInstance''userInstance')
  60.             ->where('u.id = :userId')->setParameter('userId'$id)
  61.             ->andWhere('userInstance.supportRole != :roles')->setParameter('roles'4)
  62.             ->getQuery()
  63.             ->getOneOrNullResult()
  64.         ;
  65.         if ($user) {
  66.             if ($user->getAgentInstance()->getSupportRole() != "ROLE_SUPER_ADMIN") {
  67.                 // Trigger agent delete event
  68.                 $event = new CoreWorkflowEvents\Agent\Delete();
  69.                 $event
  70.                     ->setUser($user)
  71.                 ;
  72.                 $this->eventDispatcher->dispatch($event'uvdesk.automation.workflow.execute');
  73.                 // Removing profile image from physical path
  74.                 $fileService = new Fileservice;
  75.                 if ($user->getAgentInstance()->getProfileImagePath()) {
  76.                     $fileService->remove($this->getParameter('kernel.project_dir'). '/public' $user->getAgentInstance()->getProfileImagePath());
  77.                 }
  78.                 $this->userService->removeAgent($user);
  79.                 $json['alertClass'] = 'success';
  80.                 $json['alertMessage'] = $this->translator->trans('Success ! Agent removed successfully.');
  81.             } else {
  82.                 $json['alertClass'] = 'warning';
  83.                 $json['alertMessage'] = $this->translator->trans("Warning ! You are allowed to remove account owner's account.");
  84.             }
  85.         } else {
  86.             $json['alertClass'] = 'danger';
  87.             $json['alertMessage'] = $this->translator->trans('Error ! Invalid user id.');
  88.         }
  89.         return new JsonResponse($json);
  90.     }
  91.     public function savedFiltersXHR(Request $request)
  92.     {
  93.         $json = array();
  94.         $em $this->getDoctrine()->getManager();
  95.         $user $this->userService->getCurrentUser();
  96.         $userData $user->getAgentInstance();
  97.         if($request->getMethod() == 'POST') {
  98.             $content $request->request->all();
  99.             $filter = new SavedFilters();
  100.             $filter->setName($content['name']);
  101.             $filter->setRoute($content['route']);
  102.             $filter->setUser($userData);
  103.             $em->persist($filter);
  104.             $em->flush();
  105.             if(isset($content['is_default'])) {
  106.                 $userData->setDefaultFiltering($filter->getId());
  107.                 $em->persist($userData);
  108.                 $em->flush();
  109.             }
  110.             $json['filter'] = ['id' => $filter->getId(), 'name' => $filter->getName(), 'route' => $filter->getRoute(), 'is_default' => isset($content['is_default'])];
  111.             $json['alertClass'] = 'success';
  112.             $json['alertMessage'] = $this->translator->trans('Success ! Filter has been saved successfully.');
  113.         } elseif($request->getMethod() == 'PUT' || $request->getMethod() == 'PATCH') {
  114.             $content $request->request->all();
  115.             $filter $em->getRepository(SavedFilters::class)->find($content['id']);
  116.             $filter->setName($content['name']);
  117.             $filter->setRoute($content['route']);
  118.             $em->flush();
  119.             if(isset($content['is_default']))
  120.                 $userData->setDefaultFiltering($filter->getId());
  121.             elseif($filter->getId() == $userData->getDefaultFiltering())
  122.                 $userData->setDefaultFiltering(0);
  123.             $em->persist($userData);
  124.             $em->flush();
  125.             $json['filter'] = ['id' => $filter->getId(), 'name' => $filter->getName(), 'route' => $filter->getRoute(), 'is_default' => isset($content['is_default']) ? ];
  126.             $json['alertClass'] = 'success';
  127.             $json['alertMessage'] = $this->translator->trans('Success ! Filter has been updated successfully.');
  128.         } elseif($request->getMethod() == 'DELETE') {
  129.             $id $request->attributes->get('filterId');
  130.             $filter $em->getRepository(SavedFilters::class)->find($id);
  131.             $em->remove($filter);
  132.             $em->flush();
  133.             // if($id == $userData->getDefaultFiltering())
  134.             //     $userData->setDefaultFiltering(0);
  135.             // $em->persist($userData);
  136.             // $em->flush();
  137.             $json['alertClass'] = 'success';
  138.             $json['alertMessage'] = $this->translator->trans('Success ! Filter has been removed successfully.');
  139.         }
  140.         $response = new Response(json_encode($json));
  141.         $response->headers->set('Content-Type''application/json');
  142.         return $response;
  143.     }
  144. }