vendor/uvdesk/core-framework/Controller/Account.php line 178

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 Webkul\UVDesk\CoreFrameworkBundle\Entity\User;
  6. use Webkul\UVDesk\CoreFrameworkBundle\Entity\Recaptcha;
  7. use Symfony\Component\EventDispatcher\GenericEvent;
  8. use Webkul\UVDesk\CoreFrameworkBundle\Form\UserAccount;
  9. use Webkul\UVDesk\CoreFrameworkBundle\Form\UserProfile;
  10. use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  11. use Webkul\UVDesk\CoreFrameworkBundle\Entity\UserInstance;
  12. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  13. use Webkul\UVDesk\CoreFrameworkBundle\Workflow\Events as CoreWorkflowEvents;
  14. class Account extends Controller
  15. {
  16.     private function encodePassword(User $user$plainPassword)
  17.     {
  18.         $encodedPassword $this->container->get('security.password_encoder')->encodePassword($user$plainPassword);
  19.     }
  20.     public function loadDashboard(Request $request)
  21.     {
  22.           if (!$this->get('user.service')->isAccessAuthorized('ROLE_ADMIN')){          
  23.             return $this->redirect($this->generateUrl('helpdesk_member_ticket_collection'));
  24.         }
  25.         return $this->render('@UVDeskCoreFramework//dashboard.html.twig', []);
  26.     }
  27.     public function loadHome(Request $request)
  28.     {
  29.         return $this->render('@UVDeskCoreFramework//home.html.twig', []);
  30.     }
  31.     public function listAgents(Request $request)
  32.     {
  33.         if (!$this->get('user.service')->isAccessAuthorized('ROLE_AGENT_MANAGE_AGENT')){          
  34.             return $this->redirect($this->generateUrl('helpdesk_member_dashboard'));
  35.         }
  36.         return $this->render('@UVDeskCoreFramework/Agents/listSupportAgents.html.twig');
  37.     }
  38.     
  39.     public function loadProfile(Request $request)
  40.     {
  41.         
  42.         // @TODO: Refactor
  43.         $em $this->getDoctrine()->getManager();
  44.         $user $this->getUser();
  45.         $originalUser = clone $user;
  46.         $errors = [];
  47.         $dataFiles $request->files->get('user_form');
  48.         if ($request->getMethod() == "POST") {
  49.             $data     $request->request->all();
  50.             $dataFiles $request->files->get('user_form');
  51.             // Profile upload validation
  52.             $validMimeType = ['image/jpeg''image/png''image/jpg'];
  53.             if(isset($dataFiles['profileImage'])){
  54.                 if(!in_array($dataFiles['profileImage']->getMimeType(), $validMimeType)){
  55.                     $this->addFlash('warning'$this->get('translator')->trans('Error ! Profile image is not valid, please upload a valid format'));
  56.                     return $this->redirect($this->generateUrl('helpdesk_member_profile'));
  57.                 }
  58.             }
  59.             $data $data['user_form'];
  60.             $checkUser $em->getRepository('UVDeskCoreFrameworkBundle:User')->findOneBy(array('email' => $data['email']));
  61.             $errorFlag 0;
  62.             if ($checkUser) {
  63.                 if($checkUser->getId() != $user->getId())
  64.                     $errorFlag 1;
  65.             }
  66.             if (!$errorFlag) {
  67.                 $password $user->getPassword();
  68.                 $form $this->createForm(UserProfile::class, $user);
  69.                 $form->handleRequest($request);
  70.                 $form->submit($data);
  71.                 
  72.                 if ($form->isValid()) {
  73.                     if ($data != null) {
  74.                         $submittedPassword $data['password']['first'];
  75.                         $encoder $this->container->get('security.password_encoder');
  76.                         // save previous password if password is blank or null provided
  77.                         $encodedPassword = empty($submittedPassword) ? $password $encoder->encodePassword($user$submittedPassword);
  78.                         if (!empty($encodedPassword) ) {
  79.                             $user->setPassword($encodedPassword);
  80.                         } else {
  81.                             $this->addFlash('warning'$this->get('translator')->trans('Error! Given current password is incorrect.'));
  82.                             return $this->redirect($this->generateUrl('helpdesk_member_profile'));
  83.                         }
  84.                     }
  85.                     $user->setFirstName($data['firstName']);
  86.                     $user->setLastName($data['lastName']);
  87.                     $user->setEmail($data['email']);
  88.                     $user->setTimezone($data['timezone']);
  89.                     $user->setTimeformat($data['timeformat']);
  90.                     $em->persist($user);
  91.                     $em->flush();
  92.                     $userInstance $em->getRepository('UVDeskCoreFrameworkBundle:UserInstance')->findOneBy(array('user' => $user->getId()));
  93.                     $userInstance $this->container->get('user.service')->getUserDetailById($user->getId());
  94.                     if (isset($dataFiles['profileImage'])) {
  95.                         $assetDetails $this->container->get('uvdesk.core.file_system.service')->getUploadManager()->uploadFile($dataFiles['profileImage'], 'profile');
  96.                         $userInstance->setProfileImagePath($assetDetails['path']);
  97.                     }
  98.                     $userInstance  $userInstance->setContactNumber($data['contactNumber']);
  99.                     $userInstance  $userInstance->setSignature($data['signature']);
  100.                     $em->persist($userInstance);
  101.                     $em->flush();
  102.                     $roleId $user->getAgentInstance()->getSupportRole()->getId();
  103.                     if(in_array($roleId,  [1,2])) {
  104.                         // Recaptcha Setting
  105.                         $recaptchaSetting $em->getRepository('UVDeskCoreFrameworkBundle:Recaptcha')->findOneBy(['id' => 1]);
  106.                         if($recaptchaSetting) {
  107.                             $recaptchaSetting->setSiteKey($data['recaptcha_site_key']);
  108.                             $recaptchaSetting->setSecretKey($data['recaptcha_secret_key']);
  109.                             if(isset($data['recaptcha_status'])) {
  110.                                 $recaptchaSetting->setIsActive(true);
  111.                             } else {
  112.                                 $recaptchaSetting->setIsActive(false);
  113.                             }
  114.                             $em->persist($recaptchaSetting);
  115.                             $em->flush();
  116.                         } else {
  117.                             $recaptchaNew = new Recaptcha;
  118.                             $recaptchaNew->setSiteKey($data['recaptcha_site_key']);
  119.                             $recaptchaNew->setSecretKey($data['recaptcha_secret_key']);
  120.                             if(isset($data['recaptcha_status'])) {
  121.                                 $recaptchaNew->setIsActive(true);
  122.                             } else {
  123.                                 $recaptchaNew->setIsActive(false);
  124.                             }
  125.                             $em->persist($recaptchaNew);
  126.                             $em->flush();
  127.                         }
  128.                     }
  129.                     $this->addFlash('success'$this->get('translator')->trans('Success ! Profile update successfully.'));
  130.                     return $this->redirect($this->generateUrl('helpdesk_member_profile'));
  131.                 } else {
  132.                     $errors $form->getErrors();
  133.                     dump($errors);
  134.                     die;
  135.                     $errors $this->getFormErrors($form);
  136.                 }
  137.             } else {
  138.                 $this->addFlash('warning'$this->get('translator')->trans('Error ! User with same email is already exist.'));
  139.                 return $this->redirect($this->generateUrl('helpdesk_member_profile'));
  140.             }
  141.         }
  142.         return $this->render('@UVDeskCoreFramework//profile.html.twig', array(
  143.             'user' => $user,
  144.             'errors' => json_encode($errors)
  145.         ));
  146.     }
  147.     public function editAgent($agentId)
  148.     {
  149.         if (!$this->get('user.service')->isAccessAuthorized('ROLE_AGENT_MANAGE_AGENT')) {
  150.             return $this->redirect($this->generateUrl('helpdesk_member_dashboard'));
  151.         }
  152.             // @TODO: Refactor
  153.         $em $this->getDoctrine()->getManager();
  154.         $request $this->container->get('request_stack')->getCurrentRequest();
  155.         $activeUser $this->get('user.service')->getSessionUser();
  156.         $user $em->getRepository('UVDeskCoreFrameworkBundle:User')->find($agentId);
  157.         $instanceRole $user->getAgentInstance()->getSupportRole()->getCode();
  158.         if (empty($user)) {
  159.             dump('Not found');die;
  160.         }
  161.         switch (strtoupper($request->getMethod())) {
  162.             case 'POST':
  163.                 $formErrors = [];
  164.                 $data      $request->request->get('user_form');
  165.                 $dataFiles $request->files->get('user_form');
  166.                 // Agent Profile upload validation
  167.                 $validMimeType = ['image/jpeg''image/png''image/jpg'];
  168.                 if(isset($dataFiles['profileImage'])){
  169.                     if(!in_array($dataFiles['profileImage']->getMimeType(), $validMimeType)){
  170.                         $this->addFlash('warning'$this->get('translator')->trans('Error ! Profile image is not valid, please upload a valid format'));
  171.                         $response $this->render('@UVDeskCoreFramework/Agents/updateSupportAgent.html.twig', [
  172.                             'user'         => $user,
  173.                             'instanceRole' => $instanceRole,
  174.                             'errors'       => json_encode([])
  175.                         ]);
  176.                         break;
  177.                     }
  178.                 }
  179.                 $checkUser $em->getRepository('UVDeskCoreFrameworkBundle:User')->findOneBy(array('email'=> $data['email']));
  180.                 $errorFlag 0;
  181.                 if ($checkUser && $checkUser->getId() != $agentId) {
  182.                     $errorFlag 1;
  183.                 }
  184.                 if (!$errorFlag) {
  185.                     if (
  186.                         isset($data['password']['first']) && !empty(trim($data['password']['first'])) 
  187.                         && isset($data['password']['second'])  && !empty(trim($data['password']['second'])) 
  188.                         && trim($data['password']['first']) == trim($data['password']['second'])) {
  189.                         $encodedPassword $this->container->get('security.password_encoder')->encodePassword($user$data['password']['first']);
  190.                         $user->setPassword($encodedPassword);
  191.                     }
  192.                     $user->setFirstName($data['firstName']);
  193.                     $user->setLastName($data['lastName']);
  194.                     $user->setEmail($data['email']);
  195.                     $user->setIsEnabled(true);
  196.                     
  197.                     $userInstance $em->getRepository('UVDeskCoreFrameworkBundle:UserInstance')->findOneBy(['user' => $agentId]);
  198.                     $oldSupportTeam = ($supportTeamList $userInstance->getSupportTeams()) ? $supportTeamList->toArray() : [];
  199.                     $oldSupportGroup  = ($supportGroupList $userInstance->getSupportGroups()) ? $supportGroupList->toArray() : [];
  200.                     $oldSupportedPrivilege = ($supportPrivilegeList $userInstance->getSupportPrivileges())? $supportPrivilegeList->toArray() : [];
  201.                     if(isset($data['role'])) {
  202.                         $role $em->getRepository('UVDeskCoreFrameworkBundle:SupportRole')->findOneBy(array('code' => $data['role']));
  203.                         $userInstance->setSupportRole($role);
  204.                     }
  205.                     if (isset($data['ticketView'])) {
  206.                         $userInstance->setTicketAccessLevel($data['ticketView']);
  207.                     }
  208.                     $userInstance->setDesignation($data['designation']);
  209.                     $userInstance->setContactNumber($data['contactNumber']);
  210.                     $userInstance->setSource('website');
  211.                     if (isset($dataFiles['profileImage'])) {
  212.                         $assetDetails $this->container->get('uvdesk.core.file_system.service')->getUploadManager()->uploadFile($dataFiles['profileImage'], 'profile');
  213.                         $userInstance->setProfileImagePath($assetDetails['path']);
  214.                     }
  215.                     $userInstance->setSignature($data['signature']);
  216.                     $userInstance->setIsActive((bool) isset($data['isActive']));
  217.                     if(isset($data['userSubGroup'])){
  218.                         foreach ($data['userSubGroup'] as $userSubGroup) {
  219.                             if($userSubGrp $this->get('uvdesk.service')->getEntityManagerResult(
  220.                                 'UVDeskCoreFrameworkBundle:SupportTeam',
  221.                                 'findOneBy', [
  222.                                     'id' => $userSubGroup
  223.                                 ]
  224.                             )
  225.                             )
  226.                                 if(!$oldSupportTeam || !in_array($userSubGrp$oldSupportTeam)){
  227.                                     $userInstance->addSupportTeam($userSubGrp);
  228.                                 }elseif($oldSupportTeam && ($key array_search($userSubGrp$oldSupportTeam)) !== false)
  229.                                     unset($oldSupportTeam[$key]);
  230.                         }
  231.                         foreach ($oldSupportTeam as $removeteam) {
  232.                             $userInstance->removeSupportTeam($removeteam);
  233.                             $em->persist($userInstance);
  234.                         }
  235.                     }
  236.                     if(isset($data['groups'])){
  237.                         foreach ($data['groups'] as $userGroup) {
  238.                             if($userGrp $this->get('uvdesk.service')->getEntityManagerResult(
  239.                                 'UVDeskCoreFrameworkBundle:SupportGroup',
  240.                                 'findOneBy', [
  241.                                     'id' => $userGroup
  242.                                 ]
  243.                             )
  244.                             )
  245.                                 if(!$oldSupportGroup || !in_array($userGrp$oldSupportGroup)){
  246.                                     $userInstance->addSupportGroup($userGrp);
  247.                                 }elseif($oldSupportGroup && ($key array_search($userGrp$oldSupportGroup)) !== false)
  248.                                     unset($oldSupportGroup[$key]);
  249.                         }
  250.                         foreach ($oldSupportGroup as $removeGroup) {
  251.                             $userInstance->removeSupportGroup($removeGroup);
  252.                             $em->persist($userInstance);
  253.                         }
  254.                     }
  255.                     if(isset($data['agentPrivilege'])){
  256.                         foreach ($data['agentPrivilege'] as $supportPrivilege) {
  257.                             if($supportPlg $this->get('uvdesk.service')->getEntityManagerResult(
  258.                                 'UVDeskCoreFrameworkBundle:SupportPrivilege',
  259.                                 'findOneBy', [
  260.                                     'id' => $supportPrivilege
  261.                                 ]
  262.                             )
  263.                             )
  264.                                 if(!$oldSupportedPrivilege || !in_array($supportPlg$oldSupportedPrivilege)){
  265.                                     $userInstance->addSupportPrivilege($supportPlg);
  266.                                 }elseif($oldSupportedPrivilege && ($key array_search($supportPlg$oldSupportedPrivilege)) !== false)
  267.                                     unset($oldSupportedPrivilege[$key]);
  268.                         }
  269.                         foreach ($oldSupportedPrivilege as $removeGroup) {
  270.                             $userInstance->removeSupportPrivilege($removeGroup);
  271.                             $em->persist($userInstance);
  272.                         }
  273.                     }
  274.                     $userInstance->setUser($user);
  275.                     $user->addUserInstance($userInstance);
  276.                     $em->persist($user);
  277.                     $em->persist($userInstance);
  278.                     $em->flush();
  279.                     // Trigger customer Update event
  280.                     $event = new GenericEvent(CoreWorkflowEvents\Agent\Update::getId(), [
  281.                         'entity' => $user,
  282.                     ]);
  283.                     $this->get('event_dispatcher')->dispatch('uvdesk.automation.workflow.execute'$event);
  284.                     $this->addFlash('success'$this->get('translator')->trans('Success ! Agent updated successfully.'));
  285.                     return $this->redirect($this->generateUrl('helpdesk_member_account_collection'));
  286.                 } else {
  287.                     $this->addFlash('warning'$this->get('translator')->trans('Error ! User with same email is already exist.'));
  288.                 }
  289.                 $response $this->render('@UVDeskCoreFramework/Agents/updateSupportAgent.html.twig', [
  290.                     'user' => $user,
  291.                     'instanceRole' => $instanceRole,
  292.                     'errors' => json_encode([])
  293.                 ]);
  294.                 break;
  295.             default:
  296.                 $response $this->render('@UVDeskCoreFramework/Agents/updateSupportAgent.html.twig', [
  297.                     'user'         => $user,
  298.                     'instanceRole' => $instanceRole,
  299.                     'errors'       => json_encode([])
  300.                 ]);
  301.                 break;
  302.         }
  303.         return $response;
  304.     }
  305.     public function createAgent(Request $request)
  306.     {
  307.         // @TODO: Refactor
  308.         if(!$this->get('user.service')->isAccessAuthorized('ROLE_AGENT_MANAGE_AGENT')){          
  309.             return $this->redirect($this->generateUrl('helpdesk_member_dashboard'));
  310.         }
  311.         $user = new User();
  312.         $userServiceContainer $this->get('user.service');
  313.         if ('POST' == $request->getMethod()) {
  314.             $formDetails $request->request->get('user_form');
  315.             $uploadedFiles $request->files->get('user_form');
  316.             $entityManager $this->getDoctrine()->getManager();
  317.             // Profile upload validation
  318.             $validMimeType = ['image/jpeg''image/png''image/jpg'];
  319.             if(isset($uploadedFiles['profileImage'])){
  320.                 if(!in_array($uploadedFiles['profileImage']->getMimeType(), $validMimeType)){
  321.                     $this->addFlash('warning'$this->get('translator')->trans('Error ! Profile image is not valid, please upload a valid format'));
  322.                     return $this->redirect($this->generateUrl('helpdesk_member_create_account'));
  323.                 }
  324.             }
  325.             $user $entityManager->getRepository('UVDeskCoreFrameworkBundle:User')->findOneByEmail($formDetails['email']);
  326.             $agentInstance = !empty($user) ? $user->getAgentInstance() : null;
  327.             if (empty($agentInstance)) {
  328.                 if (!empty($formDetails)) {
  329.                     $fullname trim(implode(' ', [$formDetails['firstName'], $formDetails['lastName']]));
  330.                     $supportRole $entityManager->getRepository('UVDeskCoreFrameworkBundle:SupportRole')->findOneByCode($formDetails['role']);
  331.                     $user $this->container->get('user.service')->createUserInstance($formDetails['email'], $fullname$supportRole, [
  332.                         'contact' => $formDetails['contactNumber'],
  333.                         'source' => 'website',
  334.                         'active' => !empty($formDetails['isActive']) ? true false,
  335.                         'image' => $uploadedFiles['profileImage'],
  336.                         'signature' => $formDetails['signature'],
  337.                         'designation' => $formDetails['designation'],
  338.                     ],$formDetails['password']['first'],0);
  339.                     $userInstance $user->getAgentInstance();
  340.                     if (isset($formDetails['ticketView'])) {
  341.                         $userInstance->setTicketAccessLevel($formDetails['ticketView']);
  342.                     }
  343.                     // Map support team
  344.                     if (!empty($formDetails['userSubGroup'])) {
  345.                         $supportTeamRepository $entityManager->getRepository('UVDeskCoreFrameworkBundle:SupportTeam');
  346.                         foreach ($formDetails['userSubGroup'] as $supportTeamId) {
  347.                             $supportTeam $supportTeamRepository->findOneById($supportTeamId);
  348.                             if (!empty($supportTeam)) {
  349.                                 $userInstance->addSupportTeam($supportTeam);
  350.                             }
  351.                         }
  352.                     }
  353.                     // Map support group
  354.                     if (!empty($formDetails['groups'])) {
  355.                         $supportGroupRepository $entityManager->getRepository('UVDeskCoreFrameworkBundle:SupportGroup');
  356.                         foreach ($formDetails['groups'] as $supportGroupId) {
  357.                             $supportGroup $supportGroupRepository->findOneById($supportGroupId);
  358.                             if (!empty($supportGroup)) {
  359.                                 $userInstance->addSupportGroup($supportGroup);
  360.                             }
  361.                         }
  362.                     }
  363.                     // Map support privileges
  364.                     if (!empty($formDetails['agentPrivilege'])) {
  365.                         $supportPrivilegeRepository $entityManager->getRepository('UVDeskCoreFrameworkBundle:SupportPrivilege');
  366.                         foreach($formDetails['agentPrivilege'] as $supportPrivilegeId) {
  367.                             $supportPrivilege $supportPrivilegeRepository->findOneById($supportGroupId);
  368.                             if (!empty($supportPrivilege)) {
  369.                                 $userInstance->addSupportPrivilege($supportPrivilege);
  370.                             }
  371.                         }
  372.                     }
  373.                     $entityManager->persist($userInstance);
  374.                     $entityManager->flush();
  375.                     $this->addFlash('success'$this->get('translator')->trans('Success ! Agent added successfully.'));
  376.                     return $this->redirect($this->generateUrl('helpdesk_member_account_collection'));
  377.                 }
  378.             } else {
  379.                 $this->addFlash('warning'$this->get('translator')->trans('Error ! User with same email already exist.'));
  380.             }
  381.         }
  382.         return $this->render('@UVDeskCoreFramework/Agents/createSupportAgent.html.twig', [
  383.             'user' => $user,
  384.             'errors' => json_encode([])
  385.         ]);
  386.     }
  387. }