vendor/uvdesk/core-framework/Services/UserService.php line 81

Open in your IDE?
  1. <?php
  2. namespace Webkul\UVDesk\CoreFrameworkBundle\Services;
  3. use Doctrine\ORM\EntityManagerInterface;
  4. use Doctrine\Common\Collections\Criteria;
  5. use Webkul\UVDesk\CoreFrameworkBundle\Entity\User;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Symfony\Component\HttpFoundation\Response;
  8. use Webkul\UVDesk\CoreFrameworkBundle\Entity\SupportRole;
  9. use Webkul\UVDesk\CoreFrameworkBundle\Entity\UserInstance;
  10. use Webkul\UVDesk\CoreFrameworkBundle\Entity\Ticket;
  11. use Webkul\UVDesk\CoreFrameworkBundle\Entity\SupportPrivilege;
  12. use Webkul\UVDesk\CoreFrameworkBundle\Entity\SupportGroup;    
  13. use Webkul\UVDesk\CoreFrameworkBundle\Entity\SupportTeam;
  14. use Webkul\UVDesk\CoreFrameworkBundle\Entity\SavedReplies;
  15. use Webkul\UVDesk\CoreFrameworkBundle\Entity\Website;
  16. use Symfony\Component\HttpFoundation\RequestStack;
  17. use Symfony\Component\EventDispatcher\GenericEvent;
  18. use Symfony\Component\DependencyInjection\ContainerInterface;
  19. use Webkul\UVDesk\CoreFrameworkBundle\Workflow\Events as CoreWorkflowEvents;
  20. use Symfony\Component\Translation\Translator;
  21. use Symfony\Component\Translation\Loader\YamlFileLoader;
  22. use Twig\Environment as TwigEnvironment;
  23. use Symfony\Component\Filesystem\Filesystem as Fileservice;
  24. use Webkul\UVDesk\SupportCenterBundle\Entity\KnowledgebaseWebsite;
  25. class UserService
  26. {
  27.     protected $container;
  28.     protected $requestStack;
  29.     protected $entityManager;
  30.     protected $twig;
  31.     public function __construct(ContainerInterface $containerRequestStack $requestStackEntityManagerInterface $entityManagerTwigEnvironment $twig)
  32.     {
  33.         $this->container $container;
  34.         $this->requestStack $requestStack;
  35.         $this->entityManager $entityManager;
  36.         $this->twig $twig;
  37.     }
  38.     public function getCustomFieldTemplateCustomer()
  39.     {
  40.         $request $this->requestStack->getCurrentRequest();
  41.         $ticket $this->entityManager->getRepository(Ticket::class)->findOneById($request->attributes->get('id'));
  42.         try {
  43.             if ($this->isfileExists('apps/uvdesk/custom-fields')) {
  44.                 $customFieldsService $this->container->get('uvdesk_package_custom_fields.service');
  45.                 $registeredBaseTwigPath '_uvdesk_extension_uvdesk_custom_fields';
  46.             } else if ($this->isfileExists('apps/uvdesk/form-component')) {
  47.                 $customFieldsService $this->container->get('uvdesk_package_form_component.service');
  48.                 $registeredBaseTwigPath '_uvdesk_extension_uvdesk_form_component';
  49.             }
  50.         } catch (\Exception $e) {
  51.             // @TODO: Log execption message
  52.         }
  53.         $customerCustomFieldSnippet = !empty($customFieldsService) ? $customFieldsService->getCustomerCustomFieldSnippet($ticket) : [];
  54.         if (!empty($registeredBaseTwigPath) && sizeof($customerCustomFieldSnippet["customFieldCollection"]) > ) {
  55.             return $this->twig->render('@' $registeredBaseTwigPath '/widgets/CustomFields/customFieldSnippetCustomer.html.twig'$customerCustomFieldSnippet);
  56.         }
  57.         return ;
  58.     }
  59.     public function isGranted($role) {
  60.         $securityContext $this->container->get('security.token_storage');
  61.        
  62.         try {
  63.             return (bool) ($role == $securityContext->getToken()->getRoles()[0]->getRole());
  64.         } catch (AuthenticationCredentialsNotFoundException $e) {
  65.             // @TODO: Handle Authentication Failure
  66.         }
  67.         return false;
  68.     }
  69.     
  70.     public function getSessionUser()
  71.     {
  72.         $user $this->container->get('security.token_storage')->getToken()->getUser();
  73.         return $user instanceof User $user null;
  74.     }
  75.     public function getCurrentUser()
  76.     {
  77.         if ($this->container->get('security.token_storage')->getToken()) {
  78.             return $this->container->get('security.token_storage')->getToken()->getUser();
  79.         } else {
  80.             return false;
  81.         }
  82.     }
  83.     
  84.     public function isAccessAuthorized($scopeUser $user null)
  85.     {
  86.         // Return false if no user is provided
  87.         if (empty($user) && !($user $this->getSessionUser())) {
  88.             return false;
  89.         }
  90.         try {
  91.             $userRole $user->getCurrentInstance()->getSupportRole()->getCode();
  92.         } catch (\Exception $error) {
  93.             $userRole '';
  94.         }
  95.         switch ($userRole) {
  96.             case 'ROLE_SUPER_ADMIN':
  97.             case 'ROLE_ADMIN':
  98.                 return true;
  99.             case 'ROLE_AGENT':
  100.                 $agentPrivileges $this->getUserPrivileges($this->getCurrentUser()->getId());
  101.                 $agentPrivileges array_merge($agentPrivileges, ['saved_filters_action''saved_replies']);
  102.                 
  103.                 return in_array($scope$agentPrivileges) ? true false;
  104.             case 'ROLE_CUSTOMER':
  105.             default:
  106.                 break;
  107.         }
  108.         return true;
  109.     }
  110.     public function getUserPrivileges($userId)
  111.     {
  112.         static $agentPrivilege = [];
  113.         
  114.         if (isset($agentPrivilege[$userId])) {
  115.             return $agentPrivilege[$userId];
  116.         }
  117.         
  118.         $userPrivileges = array();
  119.         $user $this->entityManager->getRepository(User::class)->find($userId);
  120.         $privileges $user->getAgentInstance()->getSupportPrivileges();  
  121.       
  122.         if ($privileges) {
  123.             foreach ($privileges as $privilege) {
  124.                 $userPrivileges array_merge($userPrivileges$privilege->getPrivileges());
  125.             }
  126.         }
  127.         
  128.         $agentPrivilege[$userId] = $this->agentPrivilege[$userId] = $userPrivileges;  
  129.         return $userPrivileges;
  130.     }
  131.     public function getSupportPrivileges()
  132.     {
  133.         $qb $this->entityManager->createQueryBuilder();
  134.         $qb->select("supportPrivilege")->from(SupportPrivilege::class, 'supportPrivilege');
  135.         
  136.         return $qb->getQuery()->getArrayResult();
  137.     }
  138.     public function getSupportGroups(Request $request null)
  139.     {
  140.         static $results;
  141.         if(null !== $results)
  142.             return $results;
  143.         $qb $this->entityManager->createQueryBuilder();
  144.         $qb->select('supportGroup.id, supportGroup.name')->from(SupportGroup::class, 'supportGroup')
  145.                 ->andwhere('supportGroup.isActive = 1');
  146.         if($request) {
  147.             $qb->andwhere("supportGroup.name LIKE :groupName");
  148.             $qb->setParameter('groupName''%'.urldecode($request->query->get('query')).'%');
  149.             $qb->andwhere("supportGroup.id NOT IN (:ids)");
  150.             $qb->setParameter('ids'explode(',',urldecode($request->query->get('not'))));
  151.         }
  152.         return $results $qb->getQuery()->getArrayResult();
  153.     }
  154.     public function getSupportTeams(Request $request null)
  155.     {
  156.         static $results;
  157.         if(null !== $results)
  158.             return $results;
  159.         $queryBuilder $this->entityManager->createQueryBuilder()
  160.             ->select("user.id, user.email, CONCAT(user.firstName, ' ', user.lastName) as name, userInstance.profileImagePath as smallThumbnail")
  161.             ->from(User::class, 'user')
  162.             ->leftJoin('user.userInstance''userInstance')
  163.             ->leftJoin('userInstance.supportRole''supportRole')
  164.             ->where('supportRole.code != :customerRole')->setParameter('customerRole''ROLE_CUSTOMER')
  165.             ->andWhere('userInstance.isActive = :isUserActive')->setParameter('isUserActive'true)
  166.             ->orderBy('name'Criteria::ASC);
  167.         if ($request && null != $request->query->get('query')) {
  168.             $queryBuilder
  169.                 ->andWhere("CONCAT(dt.firstName,' ', dt.lastName) LIKE :customerName")
  170.                 ->setParameter('customerName''%'.urldecode($request->query->get('query')).'%');
  171.         }
  172.         $qb $this->entityManager->createQueryBuilder();
  173.         $qb->select('supportTeam.id, supportTeam.name')
  174.            ->from(SupportTeam::class, 'supportTeam');
  175.         $qb->andwhere('supportTeam.isActive = 1');
  176.         
  177.         if($request) {
  178.             $qb->andwhere("supportTeam.name LIKE :subGroupName");
  179.             $qb->setParameter('subGroupName''%'.urldecode($request->query->get('query')).'%');
  180.             $qb->andwhere("supportTeam.id NOT IN (:ids)");
  181.             $qb->setParameter('ids'explode(',',urldecode($request->query->get('not'))));
  182.         }
  183.         return $results $qb->getQuery()->getResult();
  184.     }
  185.     public function createUserInstance($email$nameSupportRole $role, array $extras = [])
  186.     {
  187.         $user $this->entityManager->getRepository(User::class)->findOneByEmail($email) ?: new User();
  188.         
  189.         $website $this->entityManager->getRepository(Website::class)->findOneBy(['code' => 'knowledgebase']);
  190.         $timeZone $website->getTimezone();
  191.         $timeFormat $website->getTimeformat();
  192.         if (null == $user->getId()) {
  193.             $name explode(' 'trim($name));
  194.             
  195.             $user->setEmail($email);
  196.             $user->setFirstName(isset($extras['firstName']) ? $extras['firstName'] : array_shift($name));
  197.             $user->setLastName(trim(implode(' '$name)));
  198.             $user->setIsEnabled($extras['active']);
  199.             $user->setTimeZone($timeZone);
  200.             $user->setTimeFormat($timeFormat);
  201.             $this->entityManager->persist($user);
  202.             $this->entityManager->flush();
  203.         }
  204.         
  205.         $userInstance 'ROLE_CUSTOMER' == $role->getCode() ? $user->getCustomerInstance() : $user->getAgentInstance();
  206.         
  207.         if (empty($userInstance)) {
  208.             $userInstance = new UserInstance();
  209.                 
  210.             $userInstance->setUser($user);
  211.             $userInstance->setSupportRole($role);
  212.             $userInstance->setContactNumber(!empty($extras['contact']) ? $extras['contact'] : null);
  213.             $userInstance->setSkypeId(!empty($extras['skype']) ? $extras['skype'] : null);
  214.             $userInstance->setDesignation(!empty($extras['designation']) ? $extras['designation'] : null);
  215.             $userInstance->setSignature(!empty($extras['signature']) ? $extras['signature'] : null);
  216.             $userInstance->setSource(!empty($extras['source']) ? $extras['source'] : 'website');
  217.             $userInstance->setIsActive(!empty($extras['active']) ? (bool) $extras['active'] : false);
  218.             $userInstance->setIsVerified(!empty($extras['verified']) ? (bool) $extras['verified'] : false);
  219.             $userInstance->setIsStarred(!empty($extras['starred']) ? (bool) $extras['starred'] : false);
  220.             
  221.             if (!empty($extras['gstNumber'])) {
  222.             $userInstance->setGstNumber($extras['gstNumber']);
  223.         }
  224.         if (!empty($extras['panNumber'])) {
  225.             $userInstance->setPanNumber($extras['panNumber']);
  226.         }
  227.         if (!empty($extras['address'])) {
  228.             $userInstance->setAddress($extras['address']);
  229.         }
  230.             if (!empty($extras['image'])) {
  231.                 $assetDetails $this->container->get('uvdesk.core.file_system.service')->getUploadManager()->uploadFile($extras['image'], 'profile');
  232.                 if (!empty($assetDetails)) {
  233.                     $userInstance->setProfileImagePath($assetDetails['path']);
  234.                 }
  235.             }
  236.             $this->entityManager->persist($userInstance);
  237.             $this->entityManager->flush();
  238.             $user->addUserInstance($userInstance);
  239.             // Trigger user created event
  240.             $eventId 'ROLE_CUSTOMER' == $role->getCode() ? CoreWorkflowEvents\Customer\Create::getId() : CoreWorkflowEvents\Agent\Create::getId();
  241.             $event = new GenericEvent($eventId, ['entity' => $user]);
  242.             $this->container->get('event_dispatcher')->dispatch($event'uvdesk.automation.workflow.execute');
  243.         }
  244.         return $user;
  245.     }
  246.     public function getAgentPartialDataCollection(Request $request null)
  247.     {
  248.         $queryBuilder $this->entityManager->createQueryBuilder()
  249.             ->select("user.id, user.email, CONCAT(user.firstName, ' ', COALESCE(user.lastName, '')) as name, userInstance.profileImagePath as smallThumbnail")
  250.             ->from(User::class, 'user')
  251.             ->leftJoin('user.userInstance''userInstance')
  252.             ->leftJoin('userInstance.supportRole''supportRole')
  253.             ->where('supportRole.code != :customerRole')->setParameter('customerRole''ROLE_CUSTOMER')
  254.             ->andWhere('userInstance.isActive = :isUserActive')->setParameter('isUserActive'true)
  255.             ->orderBy('name'Criteria::ASC);
  256.         if ($request && null != $request->query->get('query')) {
  257.             $queryBuilder
  258.                 ->andWhere("CONCAT(user.firstName,' ', user.lastName) LIKE :customerName")
  259.                 ->setParameter('customerName''%'.urldecode($request->query->get('query')).'%');
  260.         }
  261.         if ($request && null != $request->query->get('not')) {
  262.             $queryBuilder
  263.                 ->andwhere("u.id NOT IN (:ids)")
  264.                 ->setParameter('ids'explode(','urldecode($request->query->get('not'))));
  265.         }
  266.         return $queryBuilder->getQuery()->getArrayResult();
  267.     }
  268.     public function getAgentsPartialDetails(Request $request null) {
  269.         static $agents;
  270.         if (null !== $agents)
  271.             return $agents;
  272.         $qb $this->entityManager->createQueryBuilder();
  273.         $qb->select("u.id, userInstance.id as udId,u.email,CONCAT(u.firstName,' ', u.lastName) AS name,userInstance.profileImagePath as smallThumbnail")->from(User::class, 'u')
  274.                 ->leftJoin('u.userInstance''userInstance')
  275.                 ->andwhere('userInstance.supportRole != :roles')
  276.                 ->setParameter('roles'4)
  277.                 ->andwhere('userInstance.isActive = 1')
  278.                 ->orderBy('name','ASC');
  279.         if($request) {
  280.             $qb->andwhere("CONCAT(u.firstName,' ', u.lastName) LIKE :customerName");
  281.             $qb->setParameter('customerName''%'.urldecode($request->query->get('query')).'%');
  282.             $qb->andwhere("u.id NOT IN (:ids)");
  283.             $qb->setParameter('ids'explode(',',urldecode($request->query->get('not'))));
  284.         }
  285.         $data $agents $qb->getQuery()->getArrayResult();
  286.         return $data;
  287.     }
  288.     public function getAgentDetailById($agentId) {
  289.         if(!$agentId) return;
  290.         $qb $this->entityManager->createQueryBuilder();
  291.         $qb->select("DISTINCT u.id,u.email,CONCAT(u.firstName,' ', COALESCE(u.lastName,'')) AS name,u.firstName,u.lastName,u.isEnabled,userInstance.profileImagePath,userInstance.profileImagePath as smallThumbnail,userInstance.isActive, userInstance.isVerified, userInstance.designation, userInstance.contactNumber,userInstance.signature,userInstance.ticketAccessLevel")
  292.             ->from(User::class, 'u')
  293.             ->leftJoin('u.userInstance''userInstance')
  294.             ->andwhere('userInstance.supportRole != :roles')
  295.             ->andwhere('u.id = :agentId')
  296.             ->setParameter('roles'4)
  297.             ->setParameter('agentId'$agentId);
  298.         $result $qb->getQuery()->getResult();
  299.         return isset($result[0]) ? $result[0] : null;
  300.     }
  301.     public function getUsersByGroupId($groupId)
  302.     {
  303.         $qb $this->entityManager->createQueryBuilder();
  304.         $qb->select("DISTINCT user.id, user.email, CONCAT(user.firstName, ' ', user.lastName) AS name, userInstance.profileImagePath as smallThumbnail")
  305.             ->from(User::class, 'user')
  306.             ->leftJoin('user.userInstance''userInstance')
  307.                 ->leftJoin('userInstance.supportGroups''supportGroup')
  308.                 ->andWhere('userInstance.supportRole != :roles')->setParameter('roles'4)
  309.                 ->andwhere('supportGroup.id = :groupId')->setParameter('groupId'$groupId)
  310.                 ->andwhere('userInstance.isActive = 1');
  311.         $data $qb->getQuery()->getArrayResult();
  312.         return $data;
  313.     }
  314.     public function getUsersBySubGroupId($subGroupId)
  315.     {
  316.         $qb $this->entityManager->createQueryBuilder();
  317.         $qb->select("DISTINCT user.id, supportTeam.id as udId,user.email,CONCAT(user.firstName,' ', user.lastName) AS name,userInstance.profileImagePath as smallThumbnail")
  318.                 ->from(User::class, 'user')
  319.                 ->leftJoin('user.userInstance''userInstance')
  320.                 ->leftJoin('userInstance.supportTeams''supportTeam')
  321.                 ->andwhere('userInstance.supportRole != :roles')
  322.                 ->andwhere('supportTeam.id = :subGroupId')
  323.                 ->setParameter('roles'4)
  324.                 ->setParameter('subGroupId'$subGroupId)
  325.                 ->andwhere('supportTeam.isActive = 1')
  326.                 ->andwhere('userInstance.isActive = 1');
  327.         $data $qb->getQuery()->getArrayResult();
  328.         return $data;
  329.     }
  330.     public function getCustomerDetailsById($customerId)
  331. {
  332.     $qb $this->entityManager->createQueryBuilder();
  333.     $qb->select("
  334.             user.id,
  335.             user.email,
  336.             CONCAT(user.firstName, ' ', COALESCE(user.lastName, '')) AS name,
  337.             user.firstName,
  338.             user.lastName,
  339.             user.isEnabled,
  340.             userInstance.contactNumber,
  341.             userInstance.profileImagePath,
  342.             userInstance.profileImagePath as smallThumbnail,
  343.             userInstance.isActive,
  344.             userInstance.isVerified,
  345.             userInstance.gstNumber,
  346.             userInstance.panNumber,
  347.             userInstance.address
  348.         ")
  349.         ->from(User::class, 'user')
  350.         ->leftJoin('user.userInstance''userInstance')
  351.         ->andWhere('userInstance.supportRole = :roles')
  352.         ->andWhere('user.id = :customerId')
  353.         ->setParameter('roles'4)
  354.         ->setParameter('customerId'$customerId);
  355.     $result $qb->getQuery()->getResult();
  356.     return ($result $result[0] : null);
  357. }
  358.     public function getCustomerPartialDetailById($customerId)
  359.     {
  360.         $qb $this->entityManager->createQueryBuilder();
  361.         $qb->select("u.id,u.email,CONCAT(u.firstName,' ', COALESCE(u.lastName,'')) AS name,u.firstName,u.lastName,userInstance.contactNumber,userInstance.profileImagePath,userInstance.profileImagePath as smallThumbnail")->from(User::class, 'u')
  362.             ->leftJoin('u.userInstance''userInstance')
  363.             ->andwhere('userInstance.supportRole = :roles')
  364.             ->andwhere('u.id = :customerId')
  365.             ->setParameter('roles'4)
  366.             ->setParameter('customerId'$customerId);
  367.         $result $qb->getQuery()->getResult();
  368.         return $result $result[0] : null;
  369.     }
  370.     public function getCustomersPartial(Request $request null)
  371.     {
  372.         $qb $this->entityManager->createQueryBuilder();
  373.         $qb->from(User::class, 'u');
  374.         $qb->select("DISTINCT u.id,CONCAT(u.firstName,' ', COALESCE(u.lastName,'')) AS name, userInstance.profileImagePath as smallThumbnail ")
  375.             ->leftJoin('u.userInstance''userInstance')
  376.             ->andwhere('userInstance.supportRole = :roles')
  377.             ->setParameter('roles'4)
  378.             ->orderBy('name','ASC');
  379.         
  380.         if ($request) {
  381.             if ($request->query->get('query')) {
  382.                 $qb->andwhere("CONCAT(u.firstName,' ', u.lastName) LIKE :customerName OR u.email LIKE :customerName");
  383.             } else {
  384.                 $qb->andwhere("CONCAT(u.firstName,' ', u.lastName) LIKE :customerName");
  385.             }
  386.             
  387.             $qb->setParameter('customerName''%'.urldecode($request->query->get('query')).'%')
  388.                 ->andwhere("u.id NOT IN (:ids)")
  389.                 ->setParameter('ids'explode(',',urldecode($request->query->get('not'))));
  390.         }
  391.         $query $qb->getQuery();
  392.         // $query->useResultCache(true, 3600, 'customer_list_'.$this->getCompany()->getId());
  393.         return $query->getScalarResult();
  394.     }
  395.     public function getCustomersCount()
  396.     {
  397.         $qb $this->entityManager->createQueryBuilder();
  398.         $qb->select($qb->expr()->countDistinct('c.id')."as customerCount")->from(Ticket::class, 't')
  399.                 ->leftJoin('t.customer''c');
  400.         $this->entityManager->getRepository(Ticket::class)->addPermissionFilter($qb$this->containerfalse);
  401.         return $qb->getQuery()->getSingleScalarResult();
  402.     }
  403.     public function getUserSubGroupIds($userId) {
  404.         $qb $this->entityManager->createQueryBuilder();
  405.         $qb->select('supportTeams.id')->from(User::class, 'user')
  406.                 ->leftJoin('user.userInstance','userInstance')
  407.                 ->leftJoin('userInstance.supportTeams','supportTeams')
  408.                 ->andwhere('user.id = :userId')
  409.                 ->andwhere('userInstance.supportRole != :agentRole')
  410.                 ->andwhere('supportTeams.isActive = 1')
  411.                 ->setParameter('userId'$userId)
  412.                 ->setParameter('agentRole''4'); 
  413.         return array_column($qb->getQuery()->getArrayResult(), 'id');
  414.     }
  415.     public function getUserGroupIds($userId) {
  416.         $qb $this->entityManager->createQueryBuilder();
  417.         $qb->select('supportGroup.id')->from(User::class, 'user')
  418.                 ->leftJoin('user.userInstance','userInstance')
  419.                 ->leftJoin('userInstance.supportGroups','supportGroup')
  420.                 ->andwhere('user.id = :userId')
  421.                 ->andwhere('supportGroup.isActive = 1')
  422.                 ->setParameter('userId'$userId);
  423.         return array_column($qb->getQuery()->getArrayResult(), 'id');
  424.     }
  425.     public function createUser($data)
  426.     {
  427.         $user = new User();
  428.         $user->setEmail($data['from']);
  429.         $user->setFirstName($data['firstName']);
  430.         $user->setLastName($data['lastName']);
  431.         $user->setIsEnabled($data['isActive']);
  432.         $this->entityManager->persist($user);
  433.         // $this->entityManager->flush();
  434.         $role $this->entityManager->getRepository(SupportRole::class)->find($data['role']);
  435.     
  436.         $userInstance = new UserInstance();
  437.         $userInstance->setSupportRole($role);
  438.         $userInstance->setUser($user);
  439.         $userInstance->setIsActive($data['isActive']);
  440.         $userInstance->setIsVerified(0);
  441.         if(isset($data['source']))
  442.             $userInstance->setSource($data['source']);
  443.         else
  444.             $userInstance->setSource('website');
  445.         if(isset($data['contactNumber'])) {
  446.             $userInstance->setContactNumber($data['contactNumber']);
  447.         }
  448.         if(isset($data['profileImage']) && $data['profileImage']) {
  449.                 $userInstance->setProfileImagePath($data['profileImage']);
  450.         }
  451.         $this->entityManager->persist($userInstance);
  452.         $this->entityManager->flush();
  453.         $user->addUserInstance($userInstance);
  454.         $this->entityManager->persist($user);
  455.         $this->entityManager->flush();
  456.         //$user->setUserName($userInstance->getName());
  457.         return $user;
  458.     }
  459.     public function getWebsiteConfiguration($code)
  460.     {
  461.         $enabled_bundles $this->container->getParameter('kernel.bundles');
  462.         
  463.         if (!in_array('UVDeskSupportCenterBundle'array_keys($enabled_bundles))) {
  464.             return [
  465.                 'id' =>  1,
  466.                 'website' =>  1,
  467.                 'status' =>  1,
  468.                 'brandColor' => '#7E91F0',
  469.                 'pageBackgroundColor' => '#FFFFFF',
  470.                 'headerBackgroundColor' => '#FFFFFF',
  471.                 'bannerBackgroundColor' => '#7085F4',
  472.                 'navTextColor' =>  '#7085F4',
  473.                 'navActiveColor' => '#7085F4',
  474.                 'linkColor' => '#7085F4',
  475.                 'linkHoverColor' => '#7085F4',
  476.                 'headerLinks' => null,
  477.                 'footerLinks' => null,
  478.                 'articleTextColor' => '#7085F4',
  479.                 'whiteList' => null,
  480.                 'blackList' => null,
  481.                 'siteDescritption' => 'Hi! how can i help you.',
  482.                 'metaDescription' => null,
  483.                 'metaKeywords' => null,
  484.                 'homepageContent' => null,
  485.                 'ticketCreateOption' =>  1,
  486.                 'createdAt' =>  '2018-09-21 16:20:01',
  487.                 'updatedat' =>  '2018-09-21 16:20:01',
  488.                 'broadcastMessage' => null,
  489.                 'removeCustomerLoginButton' => null,
  490.                 'disableCustomerlogin' =>  0,
  491.                 'removeBrandingContent' => null,
  492.                 'loginRequiredToCreate' => null,
  493.                 'script' => null,
  494.                 'customCss' => null,
  495.                 'isActive' => 1,
  496.             ];
  497.         }
  498.         
  499.         $website $this->entityManager->getRepository(Website::class)->findOneByCode($code);
  500.         if ($website) {
  501.             $configuration $this->entityManager->getRepository(KnowledgebaseWebsite::class)->findOneBy([
  502.                 'website' => $website->getId(), 
  503.                 'isActive' => 1
  504.             ]);
  505.         }
  506.         return !empty($configuration) ? $configuration false;
  507.     }
  508.     public function getWebsiteDetails($code)
  509.     {
  510.         $website $this->entityManager->getRepository(Website::class)->findOneByCode($code);
  511.         return !empty($website) ? $website false;
  512.     }
  513.     public function convertToTimezone($date$format "d-m-Y H:ia")
  514.     {
  515.         if(!$date)
  516.             return "N/A";
  517.         $currentUser $this->getCurrentUser();
  518.         $date date_format($date,$format);
  519.         $dateTime date('Y-m-d H:i:s',strtotime($date));
  520.         $scheduleDate = new \DateTime($dateTime, new \DateTimeZone(date_default_timezone_get()));
  521.         $this->domain $this->container->get('router')->getContext()->getHost();
  522.         $scheduleDate->setTimeZone(new \DateTimeZone('Asia/Kolkata'));
  523.         return $scheduleDate->format($format);
  524.     }
  525.     public function convertToDatetimeTimezoneTimestamp($date$format "d-m-Y h:ia")
  526.     {
  527.         if(!$date)
  528.             return "N/A";
  529.         $currentUser $this->getCurrentUser();
  530.         $date date_format($date$format);
  531.         $dateTime date('Y-m-d H:i:s',strtotime($date));
  532.         $scheduleDate = new \DateTime($dateTime, new \DateTimeZone(date_default_timezone_get()));
  533.         $this->domain $this->container->get('router')->getContext()->getHost();
  534.         $scheduleDate->setTimeZone(new \DateTimeZone('Asia/Kolkata'));
  535.         return $scheduleDate->getTimestamp();
  536.     }
  537.     public function removeCustomer($customer)
  538.     {
  539.         $userData $this->entityManager->getRepository(UserInstance::class)->findBy(array('user' => $customer->getId()));
  540.         $count count($userData);
  541.         $ticketData $this->entityManager->getRepository(Ticket::class)->findBy(array('customer' => $customer->getId()));
  542.         $fileService = new Fileservice();
  543.         // Delete all tickets attachments.
  544.         if($ticketData) {
  545.             foreach($ticketData as $ticket) {
  546.                 $threads $ticket->getThreads();
  547.                 if (count($threads) > 0) {
  548.                     foreach($threads as $thread) {
  549.                         if (!empty($thread)) {
  550.                             $fileService->remove($this->container->getParameter('kernel.project_dir').'/public/assets/threads/'.$thread->getId());
  551.                         }
  552.                     }
  553.                 }
  554.             }
  555.         }
  556.         // Remove profile.
  557.         foreach($userData as $user) {
  558.             if($user->getSupportRole()->getId() == && $user->getProfileImagePath()) {
  559.                 $fileService->remove($this->container->getParameter('kernel.project_dir').'/public'.$user->getProfileImagePath());
  560.             }
  561.         }
  562.         // getCustomerTickets
  563.         $qb $this->entityManager->createQueryBuilder();
  564.         $query $qb->delete(Ticket::class, 't')
  565.                     ->andwhere('t.customer = :customerId')
  566.                     ->setParameter('customerId'$customer->getId())
  567.                     ->getQuery();
  568.         $query->execute();
  569.         $qb $this->entityManager->createQueryBuilder();
  570.         $query $qb->delete(UserInstance::class, 'userInstance')
  571.                     ->andwhere('userInstance.user = :customerId')
  572.                     ->andwhere('userInstance.supportRole = :roleId')
  573.                     ->setParameter('customerId'$customer->getId())
  574.                     ->setParameter('roleId'4)
  575.                     ->getQuery();
  576.         $query->execute();
  577.         if($count == 1) {
  578.             $this->entityManager->remove($customer);
  579.             $this->entityManager->flush();
  580.         }
  581.     }
  582.     
  583.     public function removeAgent($user)
  584.     {
  585.         $userData $this->entityManager->getRepository(UserInstance::class)->findBy(array('user' => $user->getId()));
  586.         $count count($userData);
  587.         $qb $this->entityManager->createQueryBuilder();
  588.         $query $qb->delete(UserInstance::class, 'ud')
  589.                     ->andwhere('ud.user = :userId')
  590.                     ->andwhere('ud.supportRole = :roleId')
  591.                     ->setParameter('userId'$user->getId())
  592.                     ->setParameter('roleId'3)
  593.                     ->getQuery();
  594.         $query->execute();
  595.         
  596.         foreach ($user->getAgentInstance()->getSupportGroups() as $group) {
  597.                 $user->getAgentInstance()->removeSupportGroup($group);
  598.                 $this->entityManager->persist($group);
  599.                 $this->entityManager->flush();
  600.             
  601.         }
  602.         $qb $this->entityManager->createQueryBuilder();
  603.         $query $qb->update(Ticket::class, 't')
  604.                     ->set('t.agent'':nullAgent')
  605.                     ->andwhere('t.agent = :agentId')
  606.                     ->setParameter('agentId'$user->getId())
  607.                     ->setParameter('nullAgent'null)
  608.                     ->getQuery();
  609.         $query->execute();
  610.        
  611.         if($count == 1) {
  612.             $this->entityManager->remove($user);
  613.             $this->entityManager->flush();
  614.         }
  615.     }
  616.     public function getWebsiteView()
  617.     {
  618.         $website $this->entityManager->getRepository(Website::class)->findOneBy(['code'=>'knowledgebase']);
  619.         $layout  $this->entityManager->getRepository(KnowledgebaseWebsite::class)->findOneBy(['website'=>$website->getId()]);
  620.       
  621.         $homepageContent $layout->getHomepageContent();
  622.         return (!empty($homepageContent)) ? $homepageContent 'View' 'masonryView';
  623.     }
  624.     public function getUserDetailById($userId) {
  625.         $user $this->entityManager->getRepository(User::class)->find($userId);
  626.         foreach ($user->getUserInstance() as $row) {
  627.             if($row->getSupportRole()->getId() != 4)
  628.                 return $row;
  629.         }
  630.         return null;
  631.     }
  632.     public function getUserPrivilegeIds($userId
  633.     {
  634.         $qb $this->entityManager->createQueryBuilder();
  635.         $qb->select('supportPrivileges.id')->from(User::class, 'user')
  636.                 ->leftJoin('user.userInstance','userInstance')
  637.                 ->leftJoin('userInstance.supportPrivileges','supportPrivileges')
  638.                 ->andwhere('user.id = :userId')
  639.                 ->setParameter('userId'$userId);
  640.         return array_column($qb->getQuery()->getArrayResult(), 'id');
  641.     }
  642.     public function getWebsiteSpamDetails($websiteSpam
  643.     {
  644.         $blackList str_replace("\n"','str_replace("\r\n"','$websiteSpam->getBlackList()));
  645.         $whiteList str_replace("\n"','str_replace("\r\n"','$websiteSpam->getWhiteList()));
  646.         return [
  647.             'blackList' => $this->filterBlockSpam($blackList),
  648.             'whiteList' => $this->filterBlockSpam($whiteList),
  649.         ];
  650.     }
  651.     public function filterBlockSpam($str
  652.     {
  653.         $list = array();
  654.         foreach (explode(','$str) as $value) {
  655.             if (filter_var($valueFILTER_VALIDATE_EMAIL)) {
  656.                 if (!isset($list['email'])) {
  657.                     $list['email'] = array();
  658.                 }
  659.                 array_push($list['email'], strtolower($value));
  660.             } else if (filter_var($valueFILTER_VALIDATE_IP)) {
  661.                 if (!isset($list['ip'])) {
  662.                     $list['ip'] = array();
  663.                 }
  664.                 
  665.                 array_push($list['ip'], $value);
  666.             } else if (isset($value[0]) && $value[0] == '@') {
  667.                 if (!isset($list['domain'])) {
  668.                     $list['domain'] = array();
  669.                 }
  670.                 array_push($list['domain'], strtolower($value));
  671.             }
  672.         }
  673.         
  674.         return $list;
  675.     }
  676.     // @TODO: Refactor this - We can instead just use \DateTimeZone::listIdentifiers() wherever need be.
  677.     public function getTimezones()
  678.     {
  679.         return \DateTimeZone::listIdentifiers();
  680.     }
  681.     public function getUserSavedReplyReferenceIds()
  682.     {
  683.         // @TODO: Refactor this function
  684.         $savedReplyIds = [];
  685.         $groupIds = [];
  686.         $teamIds = []; 
  687.         $userId $this->getCurrentUser()->getAgentInstance()->getId();
  688.         // Get all the saved reply the current user has created.
  689.         $savedReplyRepo $this->entityManager->getRepository(SavedReplies::class)->findAll();
  690.         foreach ($savedReplyRepo as $sr) {
  691.             if ($userId == $sr->getUser()->getId()) {
  692.                 //Save the ids of the saved reply.
  693.                 array_push($savedReplyIds, (int)$sr->getId());
  694.             }
  695.         }
  696.         // Get the ids of the Group(s) the current user is associated with.
  697.         $query "select * from uv_user_support_groups where userInstanceId =".$userId;
  698.         $connection $this->entityManager->getConnection();
  699.         $stmt $connection->prepare($query);
  700.         $stmt->execute();
  701.         $result $stmt->fetchAll();
  702.         foreach ($result as $row) {
  703.             array_push($groupIds$row['supportGroupId']);
  704.         }
  705.         // Get all the saved reply's ids that is associated with the user's group(s).
  706.         $query "select * from uv_saved_replies_groups";
  707.         $stmt $connection->prepare($query);
  708.         $stmt->execute();
  709.         $result $stmt->fetchAll();
  710.         foreach ($result as $row) {
  711.             if (in_array($row['group_id'], $groupIds)) {
  712.                 array_push($savedReplyIds, (int) $row['savedReply_id']);
  713.             }
  714.         }
  715.         // Get the ids of the Team(s) the current user is associated with.
  716.         $query "select * from uv_user_support_teams";
  717.         $connection $this->entityManager->getConnection();
  718.         $stmt $connection->prepare($query);
  719.         $stmt->execute();
  720.         $result $stmt->fetchAll();
  721.         foreach($result as $row) {
  722.             if ($row['userInstanceId'] == $userId) {
  723.                 array_push($teamIds$row['supportTeamId']);
  724.             }
  725.         }
  726.         $query "select * from uv_saved_replies_teams";
  727.         $stmt $connection->prepare($query);
  728.         $stmt->execute();
  729.         $result $stmt->fetchAll();
  730.         foreach ($result as $row) {
  731.             if (in_array($row['subgroup_id'], $teamIds)) {
  732.                 array_push($savedReplyIds, (int)$row['savedReply_id']);
  733.             }
  734.         }
  735.         return $savedReplyIds;
  736.     }
  737.     
  738.     // Return formatted time on user preference basis
  739.     public function getLocalizedFormattedTime(\DateTime $timestamp$user null$format 'm-d-y h:i A')
  740.     {
  741.         $activeUserTimeZone $this->entityManager->getRepository(Website::class)->findOneBy(['code' => 'Knowledgebase']);
  742.         if (!empty($user) && $user != 'anon.' && $user->getTimezone() != null) {
  743.             $timestamp = clone $timestamp;
  744.             
  745.             $timestamp->setTimeZone(new \DateTimeZone($user->getTimeZone()));
  746.             $format $user->getTimeFormat();
  747.         }elseif (!empty($activeUserTimeZone) && $activeUserTimeZone != 'anon.' && $activeUserTimeZone->getTimezone() != null) {
  748.             $timestamp = clone $timestamp;
  749.             
  750.             $timestamp->setTimeZone(new \DateTimeZone($activeUserTimeZone->getTimeZone()));
  751.             $format $activeUserTimeZone->getTimeFormat();
  752.         }
  753.         
  754.         return $timestamp->format($format);
  755.     }
  756.     public function isfileExists($filePath)
  757.     {
  758.         $dir $this->container->get('kernel')->getProjectDir();
  759.         // $dirSplit = explode('vendor', $dir);
  760.         $file str_replace("\\",'/'$dir."/".$filePath);
  761.         if (is_dir($file)) { 
  762.             return true;
  763.         }
  764.         
  765.         return false;
  766.     }
  767.     public function getCustomersCountForKudos($container)
  768.     {
  769.         $qb $this->entityManager->createQueryBuilder();
  770.         $qb->select($qb->expr()->countDistinct('c.id')."as customerCount")->from(Ticket::class, 't')
  771.                 ->leftJoin('t.customer''c');
  772.         $container->get('report.service')->addPermissionFilter($qb$this->containerfalse);
  773.         return $qb->getQuery()->getSingleScalarResult();
  774.     }
  775. }