vendor/uvdesk/core-framework/Controller/Customer.php line 230

Open in your IDE?
  1. <?php
  2. namespace Webkul\UVDesk\CoreFrameworkBundle\Controller;
  3. use Webkul\UVDesk\CoreFrameworkBundle\Entity\Note;
  4. use Webkul\UVDesk\CoreFrameworkBundle\Entity\User;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\HttpFoundation\Response;
  7. use Symfony\Component\EventDispatcher\GenericEvent;
  8. use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  9. use Webkul\UVDesk\CoreFrameworkBundle\Workflow\Events as CoreWorkflowEvents;
  10. use Symfony\Component\HttpFoundation\JsonResponse;
  11. class Customer extends Controller
  12. {
  13.     public function listCustomers(Request $request)
  14.     {
  15.         if (!$this->get('user.service')->isAccessAuthorized('ROLE_AGENT_MANAGE_CUSTOMER')){
  16.             return $this->redirect($this->generateUrl('helpdesk_member_dashboard'));
  17.         }
  18.         return $this->render('@UVDeskCoreFramework/Customers/listSupportCustomers.html.twig');
  19.     }
  20.     public function saveNote(Request $request)
  21.     {
  22.         $entityManager $this->getDoctrine()->getEntityManager();
  23.         $agent $this->getUser();
  24.         $customer $entityManager->getRepository('UVDeskCoreFrameworkBundle:User')->findOneBy(array('id' => $request->request->get('customer')));
  25.         $nota = new Note();
  26.         $nota->setAgent($agent);
  27.         $nota->setCustomer($customer);
  28.         $nota->setNote($request->request->get('note'));
  29.         $nota->setCreatedAt(new \DateTime('now'));
  30.         $nota->setUpdatedAt(new \DateTime('now'));
  31.         $entityManager->persist($nota);
  32.         $entityManager->flush();
  33.         $this->addFlash('success'$this->get('translator')->trans('Success ! Note saved successfully.'));
  34.     return $this->redirect($this->generateUrl('helpdesk_member_manage_customer_account', array('customerId' => $request->request->get('customer'))), 301);
  35.         
  36.     }
  37.    public function deleteNote(Request $request)
  38.     {
  39.         $noteId $request->request->get('note');
  40.         $entityManager $this->getDoctrine()->getManager();
  41.         $customer $entityManager->getRepository('UVDeskCoreFrameworkBundle:User')->findOneBy(array('id' => $request->request->get('customer')));
  42.         $note $entityManager->getRepository(Note::class)->findOneBy(array('id' => $noteId));
  43.         $entityManager->remove($note);
  44.         $entityManager->flush();
  45.         $this->addFlash('success'$this->get('translator')->trans('Success ! Note moved to trash successfully.'));
  46.         return $this->redirect($this->generateUrl('helpdesk_member_manage_customer_account', array('customerId' => $request->request->get('customer'))), 301);
  47.     }
  48.  public function createCustomer(Request $request)
  49.     {
  50.         if (!$this->get('user.service')->isAccessAuthorized('ROLE_AGENT_MANAGE_CUSTOMER')){
  51.           return $this->redirect($this->generateUrl('helpdesk_member_dashboard'));
  52.         }
  53.         if ($request->getMethod() == "POST") {
  54.             $entityManager $this->getDoctrine()->getManager();
  55.             $formDetails $request->request->all();
  56.             $formDetails $request->request->get('customer_form');
  57.             $uploadedFiles $request->files->get('customer_form');
  58.             // Profile upload validation
  59.             $validMimeType = ['image/jpeg''image/png''image/jpg'];
  60.             if(isset($uploadedFiles['profileImage'])){
  61.                   if(!in_array($uploadedFiles['profileImage']->getMimeType(), $validMimeType)){
  62.                       $this->addFlash('warning'$this->get('translator')->trans('Error ! Profile image is not valid, please upload a valid format'));
  63.                       return $this->redirect($this->generateUrl('helpdesk_member_create_customer_account'));
  64.                   }
  65.             }
  66.          if (!filter_var($formDetails['email'], FILTER_VALIDATE_EMAIL)) {
  67.                 // invalid emailaddress
  68.                 return new JsonResponse(array(
  69.                     'status' => false,
  70.                     'message' => $this->get('translator')->trans('Error ! Email address is invalid')
  71.                 ));
  72.             }
  73.             $user $entityManager->getRepository('UVDeskCoreFrameworkBundle:User')->findOneBy(array('email' => $formDetails['email']));
  74.             $customerInstance = !empty($user) ? $user->getCustomerInstance() : null;
  75.             if (empty($customerInstance)){
  76.                 if (!empty($formDetails)) {
  77.                     $fullname trim(implode(' ', [$formDetails['firstName'], $formDetails['lastName']]));
  78.                     $supportRole $entityManager->getRepository('UVDeskCoreFrameworkBundle:SupportRole')->findOneByCode('ROLE_CUSTOMER');
  79.                     $user $this->container->get('user.service')->createUserInstance($formDetails['email'], $fullname$supportRole, [
  80.                         'contact' => $formDetails['contactNumber'],
  81.                         'source' => 'website',
  82.                         'active' => !empty($formDetails['isActive']) ? true false,
  83.                         'image' => $uploadedFiles['profileImage'],
  84.                     ],$formDetails['password']['first'],$formDetails['timezone']);
  85.                     return new Response($this->get('translator')->trans('Success ! Customer saved successfully.'));
  86.                      $this->addFlash('success'$this->get('translator')->trans('Success ! Customer saved successfully.'));
  87.                      return $this->redirect($this->generateUrl('helpdesk_member_manage_customer_account_collection'));
  88.                 }
  89.             } else {
  90.                 return new Response($this->get('translator')->trans('Error ! User with same email already exist.'));
  91.                 $this->addFlash('warning'$this->get('translator')->trans('Error ! User with same email already exist.'));
  92.             }
  93.         }
  94.          return $this->render('@UVDeskCoreFramework/Customers/createSupportCustomer.html.twig', [
  95.              'user' => new User(),
  96.              'errors' => json_encode([])
  97.          ]);
  98.     }
  99.      public function createCustomerSeries(Request $request)
  100.     {
  101.         //if (!$this->get('user.service')->isAccessAuthorized('ROLE_AGENT_MANAGE_CUSTOMER')){
  102.         //  return $this->redirect($this->generateUrl('helpdesk_member_dashboard'));
  103.         //}
  104.         if ($request->getMethod() == "POST") {
  105.             $entityManager $this->getDoctrine()->getManager();
  106.             $formDetails $request->request->all();
  107.             //$formDetails = $request->request->get('customer_form');
  108.             //$uploadedFiles = $request->files->get('customer_form');
  109.             // Profile upload validation
  110.             /*  $validMimeType = ['image/jpeg', 'image/png', 'image/jpg'];
  111.               if(isset($uploadedFiles['profileImage'])){
  112.                   if(!in_array($uploadedFiles['profileImage']->getMimeType(), $validMimeType)){
  113.                       $this->addFlash('warning', $this->get('translator')->trans('Error ! Profile image is not valid, please upload a valid format'));
  114.                       return $this->redirect($this->generateUrl('helpdesk_member_create_customer_account'));
  115.                   }
  116.               }*/
  117.         if (!filter_var($formDetails['email'], FILTER_VALIDATE_EMAIL)) {
  118.                 // invalid emailaddress
  119.                 return new JsonResponse(array(
  120.                     'status' => false,
  121.                     'message' => $this->get('translator')->trans('Error ! Email address is invalid')
  122.                 ));
  123.             }
  124.             $user $entityManager->getRepository('UVDeskCoreFrameworkBundle:User')->findOneBy(array('email' => $formDetails['email']));
  125.             $customerInstance = !empty($user) ? $user->getCustomerInstance() : null;
  126.             if (empty($customerInstance)){
  127.                 if (!empty($formDetails)) {
  128.                     $fullname trim(implode(' ', [$formDetails['firstName'], $formDetails['lastName']]));
  129.                     $supportRole $entityManager->getRepository('UVDeskCoreFrameworkBundle:SupportRole')->findOneByCode('ROLE_CUSTOMER');
  130.                     $user $this->container->get('user.service')->createUserInstance($formDetails['email'], $fullname$supportRole, [
  131.                         'contact' => $formDetails['contactNumber'],
  132.                         'source' => 'website',
  133.                         'active' => !empty($formDetails['isActive']) ? true false,
  134.                         //'image' => $uploadedFiles['profileImage'],
  135.                     ],$formDetails['password']['first'],$formDetails['timezone']);
  136.                     
  137.                     return new JsonResponse(array(
  138.                         'user_id' => $user->getId(),
  139.                         'status' => true,
  140.                         'message' => $this->get('translator')->trans('Success ! Customer saved successfully.')
  141.                     ));
  142.                     // $this->addFlash('success', $this->get('translator')->trans('Success ! Customer saved successfully.'));
  143.                     // return $this->redirect($this->generateUrl('helpdesk_member_manage_customer_account_collection'));
  144.                 }
  145.             } else {
  146.                 return new JsonResponse(array(
  147.                     'status' => false,
  148.                     'message' => $this->get('translator')->trans('Error ! User with same email already exist.')
  149.                 ));
  150.                 //$this->addFlash('warning', $this->get('translator')->trans('Error ! User with same email already exist.'));
  151.             }
  152.         }
  153.         /* return $this->render('@UVDeskCoreFramework/Customers/createSupportCustomer.html.twig', [
  154.              'user' => new User(),
  155.              'errors' => json_encode([])
  156.          ]);*/
  157.     }
  158.     
  159.         
  160.         
  161.     public function editCustomer(Request $request)
  162.     {
  163.         if (!$this->get('user.service')->isAccessAuthorized('ROLE_AGENT_MANAGE_CUSTOMER')) {
  164.             return $this->redirect($this->generateUrl('helpdesk_member_dashboard'));
  165.         }
  166.         $em $this->getDoctrine()->getManager();
  167.         $repository $em->getRepository('UVDeskCoreFrameworkBundle:User');
  168.         if($userId $request->attributes->get('customerId')) {
  169.             $user $repository->findOneBy(['id' =>  $userId]);
  170.             if(!$user)
  171.                 $this->noResultFound();
  172.         }
  173.         if ($request->getMethod() == "POST") {
  174.             $contentFile $request->files->get('customer_form');
  175.             // Customer Profile upload validation
  176.             $validMimeType = ['image/jpeg''image/png''image/jpg'];
  177.             if(isset($contentFile['profileImage'])){
  178.                 if(!in_array($contentFile['profileImage']->getMimeType(), $validMimeType)){
  179.                     $this->addFlash('warning'$this->get('translator')->trans('Error ! Profile image is not valid, please upload a valid format'));
  180.                     return $this->render('@UVDeskCoreFramework/Customers/updateSupportCustomer.html.twig', ['user' => $user,'errors' => json_encode([])]);
  181.                 }
  182.             }
  183.             if($userId) {
  184.                 $data $request->request->all();
  185.                 $data $data['customer_form'];
  186.                 $checkUser $em->getRepository('UVDeskCoreFrameworkBundle:User')->findOneBy(array('email' => $data['email']));
  187.                 $errorFlag 0;
  188.                 if($checkUser) {
  189.                     if($checkUser->getId() != $userId)
  190.                         $errorFlag 1;
  191.                 }
  192.                 if(!$errorFlag && 'hello@uvdesk.com' !== $user->getEmail()) {
  193.                     $password $user->getPassword();
  194.                     $email $user->getEmail();
  195.                     $user->setFirstName($data['firstName']);
  196.                     $user->setLastName($data['lastName']);
  197.                     $user->setEmail($data['email']);
  198.                     $user->setTimezone($data['timezone']);
  199.                     $user->setIsEnabled(isset($data['isActive']) ? 0);
  200.                     $user->setIsUltra(isset($data['esUltra']) ? 0);
  201.                     $em->persist($user);
  202.                     // User Instance
  203.                     $userInstance $em->getRepository('UVDeskCoreFrameworkBundle:UserInstance')->findOneBy(array('user' => $user->getId()));
  204.                     $userInstance->setUser($user);
  205.                     $userInstance->setIsActive(isset($data['isActive']) ? 0);
  206.                     $userInstance->setIsVerified(0);
  207.                     if(isset($data['source']))
  208.                         $userInstance->setSource($data['source']);
  209.                     else
  210.                         $userInstance->setSource('website');
  211.                     if(isset($data['contactNumber'])) {
  212.                         $userInstance->setContactNumber($data['contactNumber']);
  213.                     }
  214.                     if(isset($contentFile['profileImage'])){
  215.                         $assetDetails $this->container->get('uvdesk.core.file_system.service')->getUploadManager()->uploadFile($contentFile['profileImage'], 'profile');
  216.                         $userInstance->setProfileImagePath($assetDetails['path']);
  217.                     }
  218.                     $em->persist($userInstance);
  219.                     $em->flush();
  220.                     $user->addUserInstance($userInstance);
  221.                     $em->persist($user);
  222.                     $em->flush();
  223.                     // Trigger customer created event
  224.                     $event = new GenericEvent(CoreWorkflowEvents\Customer\Update::getId(), [
  225.                         'entity' => $user,
  226.                     ]);
  227.                     $this->get('event_dispatcher')->dispatch('uvdesk.automation.workflow.execute'$event);
  228.                     $this->addFlash('success'$this->get('translator')->trans('Success ! Customer information updated successfully.'));
  229.                     return $this->redirect($this->generateUrl('helpdesk_member_manage_customer_account_collection'));
  230.                 } else {
  231.                     $this->addFlash('warning'$this->get('translator')->trans('Error ! User with same email is already exist.'));
  232.                 }
  233.             }
  234.         } elseif($request->getMethod() == "PUT") {
  235.             $content json_decode($request->getContent(), true);
  236.             $userId  $content['id'];
  237.             $user $repository->findOneBy(['id' =>  $userId]);
  238.             if (!$user)
  239.                 $this->noResultFound();
  240.             $checkUser $em->getRepository('UVDeskCoreFrameworkBundle:User')->findOneBy(array('email' => $content['email']));
  241.             $errorFlag 0;
  242.             if ($checkUser) {
  243.                 if($checkUser->getId() != $userId)
  244.                     $errorFlag 1;
  245.             }
  246.             if (!$errorFlag && 'hello@uvdesk.com' !== $user->getEmail()) {
  247.                 $name explode(' '$content['name']);
  248.                 $lastName = isset($name[1]) ? $name[1] : ' ';
  249.                 $user->setFirstName($name[0]);
  250.                 $user->setLastName($lastName);
  251.                 $user->setEmail($content['email']);
  252.                 $user->setIsEnabled(isset($content['isActive']) ? 0);
  253.                 $em->persist($user);
  254.                 //user Instance
  255.                 $userInstance $em->getRepository('UVDeskCoreFrameworkBundle:UserInstance')->findOneBy(array('user' => $user->getId()));
  256.                 if(isset($content['contactNumber'])){
  257.                     $userInstance->setContactNumber($content['contactNumber']);
  258.                 }
  259.                 $em->persist($userInstance);
  260.                 $em->flush();
  261.                 $json['alertClass']      = 'success';
  262.                 $json['alertMessage']    = $this->get('translator')->trans('Success ! Customer updated successfully.');
  263.             } else {
  264.                 $json['alertClass']      = 'error';
  265.                 $json['alertMessage']    = $this->get('translator')->trans('Error ! Customer with same email already exist.');
  266.             }
  267.             return new Response(json_encode($json), 200, []);
  268.         }
  269.         return $this->render('@UVDeskCoreFramework/Customers/updateSupportCustomer.html.twig', [
  270.             'user' => $user,
  271.             'errors' => json_encode([])
  272.         ]);
  273.     }
  274.     protected function encodePassword(User $user$plainPassword)
  275.     {
  276.         $encoder $this->container->get('security.encoder_factory')
  277.             ->getEncoder($user);
  278.         return $encoder->encodePassword($plainPassword$user->getSalt());
  279.     }
  280.     public function bookmarkCustomer(Request $request)
  281.     {
  282.         if (!$this->get('user.service')->isAccessAuthorized('ROLE_AGENT_MANAGE_CUSTOMER')) {
  283.             return $this->redirect($this->generateUrl('helpdesk_member_dashboard'));
  284.         }
  285.         $json = array();
  286.         $em $this->getDoctrine()->getManager();
  287.         $data json_decode($request->getContent(), true);
  288.         $id $request->attributes->get('id') ? : $data['id'];
  289.         $user $em->getRepository('UVDeskCoreFrameworkBundle:User')->findOneBy(['id' => $id]);
  290.         if(!$user)  {
  291.             $json['error'] = 'resource not found';
  292.             return new JsonResponse($jsonResponse::HTTP_NOT_FOUND);
  293.         }
  294.         $userInstance $em->getRepository('UVDeskCoreFrameworkBundle:UserInstance')->findOneBy(array(
  295.                 'user' => $id,
  296.                 'supportRole' => 4
  297.             )
  298.         );
  299.         if($userInstance->getIsStarred()) {
  300.             $userInstance->setIsStarred(0);
  301.             $em->persist($userInstance);
  302.             $em->flush();
  303.             $json['alertClass'] = 'success';
  304.             $json['message'] = 'unstarred Action Completed successfully';
  305.         } else {
  306.             $userInstance->setIsStarred(1);
  307.             $em->persist($userInstance);
  308.             $em->flush();
  309.             $json['alertClass'] = 'success';
  310.             $json['message'] = 'starred Action Completed successfully';
  311.         }
  312.         $response = new Response(json_encode($json));
  313.         $response->headers->set('Content-Type''application/json');
  314.         return $response;
  315.     }
  316.  public function getRealEntities($entities){
  317.         foreach ($entities as $entity){
  318.             $realEntities[$entity->getId()] = $entity->getFirstName(). ' - email: ' $entity->getEmail();
  319.         }
  320.         return $realEntities;
  321.     }
  322.     public function searchCustomerByName(Request $request)
  323.     {
  324.         $em $this->getDoctrine()->getManager();
  325.         $requestString $request->get('q');
  326.         $entities =  $em->getRepository('UVDeskCoreFrameworkBundle:User')->findCustomerByName($requestString);
  327.         if(!$entities) {
  328.             $result['entities']['error'] = "Sin resultados";
  329.         } else {
  330.             $result['entities'] = $this->getRealEntities($entities);
  331.         }
  332.         return new Response(json_encode($result));
  333.     }
  334.     public function searchCustomerByEmail(Request $request)
  335.     {
  336.         $em $this->getDoctrine()->getManager();
  337.         $requestString $request->get('q');
  338.         $entities =  $em->getRepository('UVDeskCoreFrameworkBundle:User')->findCustomerByEmail($requestString);
  339.         if(!$entities) {
  340.             $result['entities']['error'] = "Sin resultados";
  341.         } else {
  342.             $result['entities'] = $this->getRealEntities($entities);
  343.         }
  344.         return new Response(json_encode($result));
  345.     }
  346. }