vendor/uvdesk/core-framework/Repository/UserRepository.php line 281

Open in your IDE?
  1. <?php
  2. namespace Webkul\UVDesk\CoreFrameworkBundle\Repository;
  3. use Doctrine\ORM\Query;
  4. use Doctrine\Common\Collections\Criteria;
  5. use Webkul\UVDesk\CoreFrameworkBundle\Entity\User;
  6. use Webkul\UVDesk\CoreFrameworkBundle\Entity\UserInstance;
  7. use Webkul\UVDesk\CoreFrameworkBundle\Entity\Ticket;
  8. use Webkul\UVDesk\CoreFrameworkBundle\Entity\SupportGroup;
  9. use Webkul\UVDesk\CoreFrameworkBundle\Entity\SupportTeam;
  10. use Symfony\Component\HttpFoundation\ParameterBag;
  11. use Symfony\Component\DependencyInjection\ContainerInterface;
  12. /**
  13.  * UserRepository
  14.  *
  15.  * This class was generated by the Doctrine ORM. Add your own custom
  16.  * repository methods below.
  17.  */
  18. class UserRepository extends \Doctrine\ORM\EntityRepository
  19. {
  20.     const LIMIT 10;
  21.     public $safeFields = ['page''limit''sort''order''direction'];
  22.     public function getAllAgents(ParameterBag $params nullContainerInterface $container) {
  23.         $params = !empty($params) ? array_reverse($params->all()) : [];
  24.         $queryBuilder $this->getEntityManager()->createQueryBuilder()
  25.             ->select("user, userInstance, supportRole")
  26.             ->from(User::class, 'user')
  27.             ->leftJoin('user.userInstance''userInstance')
  28.             ->leftJoin('userInstance.supportRole''supportRole')
  29.             ->where('supportRole.id != :customerRole')->setParameter('customerRole'4)
  30.             ->orderBy('userInstance.createdAt', !isset($params['sort']) ? Criteria::DESC Criteria::ASC);
  31.         foreach ($params as $field => $fieldValue) {
  32.             if (in_array($field$this->safeFields))
  33.                 continue;
  34.             
  35.             if (!in_array($field, ['dateUpdated''dateAdded''search''isActive'])) {
  36.                 $queryBuilder->andWhere("user.$field = :$field")->setParameter($field$fieldValue);
  37.             } else {
  38.                 if ('search' == $field) {
  39.                     $queryBuilder->andWhere("CONCAT(a.firstName,' ', a.lastName) LIKE :fullName OR a.email LIKE :email")
  40.                         ->setParameter('fullName''%' urldecode(trim($fieldValue)) . '%')
  41.                         ->setParameter('email''%' urldecode(trim($fieldValue)) . '%');
  42.                 } else if ('isActive' == $field) {
  43.                     $queryBuilder->andWhere('userInstance.isActive = :isActive')->setParameter('isActive'$fieldValue);
  44.                 }
  45.             }
  46.         }
  47.         // Pagination
  48.         $options = ['distinct' => true'wrap-queries' => true];
  49.         $currentPage = isset($params['page']) ? $params['page'] : 1;
  50.         
  51.         $paginationQueryBuilder = clone $queryBuilder;
  52.         $totalUsers = (int) $paginationQueryBuilder->select('COUNT (DISTINCT user.id)')->getQuery()->getSingleScalarResult();
  53.         $query $queryBuilder->getQuery()->setHydrationMode(Query::HYDRATE_ARRAY)->setHint('knp_paginator.count'$totalUsers);
  54.         $pagination $container->get('knp_paginator')->paginate($query$currentPageself::LIMIT$options);
  55.         
  56.         // Parse result
  57.         $paginationParams $pagination->getParams();
  58.         $paginationAttributes $pagination->getPaginationData();
  59.         
  60.         $paginationParams['page'] = 'replacePage';
  61.         $paginationAttributes['url'] = '#' $container->get('uvdesk.service')->buildPaginationQuery($paginationParams);
  62.         
  63.         return [
  64.             'pagination_data' => $paginationAttributes,
  65.             'users' => array_map(function ($user) {
  66.                 return [
  67.                     'id'             => $user['id'],
  68.                     'email'          => $user['email'],
  69.                     'smallThumbnail' => $user['userInstance'][0]['profileImagePath'] ?: null,
  70.                     'isActive'       => $user['userInstance'][0]['isActive'],
  71.                     'name'           => ucwords(trim(implode(' ', [$user['firstName'], $user['lastName']]))),
  72.                     'role'           => $user['userInstance'][0]['supportRole']['description'],
  73.                     'roleCode'       => $user['userInstance'][0]['supportRole']['code'],
  74.                 ];
  75.             }, $pagination->getItems()),
  76.         ];
  77.     }
  78.     public function getAllAgentsForChoice(ParameterBag $obj null$container)
  79.     {
  80.         $qb $this->getEntityManager()->createQueryBuilder();
  81.         $qb->select('a')->from($this->getEntityName(), 'a')
  82.                 ->leftJoin('a.userInstance''userInstance')
  83.                 ->leftJoin('userInstance.supportRole''supportRole')
  84.                 ->andWhere('userInstance.supportRole NOT IN (:roles)')
  85.                 ->setParameter('roles', [4]);
  86.         return $qb;
  87.     }
  88.     public function getAllCustomer(ParameterBag $obj null$container)
  89.     {
  90.         $json = array();
  91.         $qb $this->getEntityManager()->createQueryBuilder();
  92.         $qb->select('a,userInstance')->from($this->getEntityName(), 'a');
  93.         $qb->leftJoin('a.userInstance''userInstance');
  94.         $qb->addSelect("CONCAT(a.firstName,' ',a.lastName) AS name");
  95.         $data $obj->all();
  96.         $data array_reverse($data);
  97.         
  98.         foreach ($data as $key => $value) {
  99.             if (! in_array($key,$this->safeFields)) {
  100.                 if ($key!='dateUpdated' AND $key!='dateAdded' AND $key!='search' AND $key!='starred' AND $key!='isActive') {
  101.                     $qb->andWhere('a.'.$key.' = :'.$key);
  102.                     $qb->setParameter($key$value);
  103.                 } else {
  104.                     if ($key == 'search') {
  105.                         $qb->andWhere("CONCAT(a.firstName,' ', a.lastName) LIKE :fullName OR a.email LIKE :email");
  106.                         $qb->setParameter('fullName''%'.urldecode(trim($value)).'%');
  107.                         $qb->setParameter('email''%'.urldecode(trim($value)).'%'); 
  108.                     } elseif ($key == 'starred') {
  109.                         $qb->andWhere('userInstance.isStarred = 1');
  110.                     } elseif ($key == 'isActive') {
  111.                         $qb->andWhere('userInstance.isActive = :isActive');
  112.                         $qb->setParameter('isActive'$value);
  113.                     }
  114.                 }
  115.             }
  116.         } 
  117.         $qb->andWhere('userInstance.supportRole = :roles');
  118.         $qb->setParameter('roles'4);
  119.         if (!isset($data['sort'])) {
  120.             $qb->orderBy('userInstance.createdAt',Criteria::DESC);
  121.         }
  122.         $paginator  $container->get('knp_paginator');
  123.         $newQb = clone $qb;
  124.         $newQb->select('DISTINCT a.id');
  125.         $results $paginator->paginate(
  126.             $qb->getQuery()->setHydrationMode(Query::HYDRATE_ARRAY)->setHint('knp_paginator.count'count($newQb->getQuery()->getResult())),
  127.             isset($data['page']) ? $data['page'] : 1,
  128.             self::LIMIT,
  129.             array('distinct' => true'wrap-queries' => true)
  130.         );
  131.         $paginationData $results->getPaginationData();
  132.         $queryParameters $results->getParams();
  133.         $queryParameters['page'] = "replacePage";
  134.         $paginationData['url'] = '#'.$container->get('uvdesk.service')->buildPaginationQuery($queryParameters);
  135.         $this->container $container;
  136.         $data = array();
  137.         foreach ($results as $key => $customer) {
  138.             $data[] =   [
  139.                             'id'             => $customer[0]['id'],
  140.                             'email'          => $customer[0]['email'],
  141.                             'smallThumbnail' => $customer[0]['userInstance'][0]['profileImagePath'],
  142.                             'isStarred'      => $customer[0]['userInstance'][0]['isStarred'],
  143.                             'isActive'       => $customer[0]['userInstance'][0]['isActive'],
  144.                             'name'           => $customer[0]['firstName'].' '.$customer[0]['lastName'],
  145.                             'source'         => $customer[0]['userInstance'][0]['source'],
  146.                             'count'          => $this->getCustomerTicketCount($customer[0]['id']),
  147.                         ];
  148.         }
  149.         $json['customers'] = $data;
  150.         $json['pagination_data'] = $paginationData;
  151.         $json['customer_count'] = $this->getCustomerCountDetails($container);
  152.         return $json;
  153.     }
  154.     public function getCustomerCountDetails($container) {
  155.         $starredQb $this->getEntityManager()->createQueryBuilder();
  156.         $starredQb->select('COUNT(u.id) as countUser')
  157.                 ->from($this->getEntityName(), 'u')
  158.                 ->leftJoin('u.userInstance''userInstance')
  159.                 ->andWhere('userInstance.isActive = 1')
  160.                 ->andWhere('userInstance.supportRole = :roles')
  161.                 ->setParameter('roles'4);
  162.         $all $starredQb->getQuery()->getResult();
  163.         $starredQb->andWhere('userInstance.isStarred = 1');
  164.         $starred $starredQb->getQuery()->getResult();
  165.         return array('all' => $all[0]['countUser'],'starred' => $starred[0]['countUser']);
  166.     }
  167.     public function getCustomerTicketCount($customerId) {
  168.         $qb $this->getEntityManager()->createQueryBuilder();
  169.         $qb->select('COUNT(t.id) as countTicket')->from(Ticket::class, 't');
  170.         $qb->andWhere('t.status = 1');
  171.         $qb->andWhere('t.isTrashed != 1');
  172.         $qb->andWhere('t.customer = :customerId');
  173.         $qb->setParameter('customerId'$customerId);
  174.         $result $qb->getQuery()->getResult();
  175.         return $result[0]['countTicket'];
  176.     }
  177.     public function getAgentByEmail($username)
  178.     {
  179.         $queryBuilder $this->getEntityManager()->createQueryBuilder()
  180.             ->select('u, dt')
  181.             ->from(User::class, 'u')
  182.             ->leftJoin('u.userInstance''dt')
  183.             ->where('u.email = :email')->setParameter('email'$username)
  184.             ->andWhere('dt.supportRole != :roles')->setParameter('roles'4)
  185.         ;
  186.         return $queryBuilder->getQuery()->getOneOrNullResult();
  187.     }
  188.     
  189.     public function getSupportGroups(Request $request null)
  190.     {
  191.         $queryBuilder $this->getEntityManager()->createQueryBuilder()
  192.             ->select('supportGroup.id, supportGroup.name')->from(SupportGroup::class, 'supportGroup')
  193.             ->where('supportGroup.isActive = :isActive')->setParameter('isActive'true);
  194.         if ($request) {
  195.             $queryBuilder
  196.                 ->andWhere("supportGroup.name LIKE :groupName")->setParameter('groupName''%' urldecode($request->query->get('query')) . '%')
  197.                 ->andWhere("supportGroup.id NOT IN (:ids)")->setParameter('ids'explode(','urldecode($request->query->get('not'))));
  198.         }
  199.         return $queryBuilder->getQuery()->getArrayResult();
  200.     }
  201.     public function getSupportTeams(Request $request null)
  202.     {
  203.         $queryBuilder $this->getEntityManager()->createQueryBuilder()
  204.             ->select('supportTeam.id, supportTeam.name')->from(SupportTeam::class, 'supportTeam')
  205.             ->where('supportTeam.isActive = :isActive')->setParameter('isActive'true);
  206.         
  207.         if ($request) {
  208.             $queryBuilder
  209.                 ->andWhere("supportTeam.name LIKE :subGroupName")->setParameter('subGroupName''%' urldecode($request->query->get('query')) . '%')
  210.                 ->andWhere("supportTeam.id NOT IN (:ids)")->setParameter('ids'explode(',',urldecode($request->query->get('not'))));
  211.         }
  212.         return $queryBuilder->getQuery()->getResult();
  213.     }
  214.     
  215.     public function getUserSupportGroupReferences(User $user)
  216.     {
  217.         $query $this->getEntityManager()->createQueryBuilder()
  218.             ->select('ug.id')->from(User::class, 'u'
  219.             ->leftJoin('u.userInstance','userInstance')
  220.             ->leftJoin('userInstance.supportGroups','ug')
  221.             ->andWhere('u.id = :userId')
  222.             ->setParameter('userId'$user->getId())
  223.             ->andWhere('ug.isActive = 1');
  224.         return array_map('current'$query->getQuery()->getResult());
  225.     }
  226.     public function getUserSupportTeamReferences(User $user)
  227.     {
  228.         $query $this->getEntityManager()->createQueryBuilder()
  229.             ->select('ut.id')->from(User::class, 'u')
  230.             ->leftJoin('u.userInstance','userInstance')
  231.             ->leftJoin('userInstance.supportTeams','ut')
  232.             ->andWhere('u.id = :userId')
  233.             ->andWhere('userInstance.supportRole != :agentRole')
  234.             ->andWhere('ut.isActive = 1')
  235.             ->setParameter('userId'$user->getId())
  236.             ->setParameter('agentRole''4');
  237.         return array_map('current'$query->getQuery()->getResult());
  238.     }
  239.     public function lastUpdatedRole($user)
  240.     {
  241.         $qb $this->getEntityManager()->createQueryBuilder();
  242.         $qb->select('us')->from(UserInstance::class, 'us');
  243.         $qb->andWhere('us.user = :userId');
  244.         $qb->setParameter('userId',$user->getId());
  245.         $qb->setMaxResults(1);
  246.         $qb->orderBy('us.createdAt'Criteria::DESC);
  247.         return $qb->getQuery()->getResult();
  248.     }
  249.     public function retrieveHelpdeskCustomerInstances($username)
  250.     {
  251.         $queryBuilder $this->getEntityManager()->createQueryBuilder()
  252.             ->select('u, dt')
  253.             ->from(User::class, 'u')
  254.             ->leftJoin('u.userInstance''dt')
  255.             ->where('u.email = :email')->setParameter('email'$username)
  256.             ->andWhere('dt.supportRole = :roles')->setParameter('roles'4)
  257.         ;
  258.         return $queryBuilder->getQuery()->getOneOrNullResult();
  259.     }
  260. }