vendor/uvdesk/core-framework/Repository/ThreadRepository.php line 141

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\Ticket;
  7. use Webkul\UVDesk\CoreFrameworkBundle\Entity\Attachment;
  8. /**
  9.  * ThreadRepository
  10.  *
  11.  * This class was generated by the Doctrine ORM. Add your own custom
  12.  * repository methods below.
  13.  */
  14. class ThreadRepository extends \Doctrine\ORM\EntityRepository
  15. {
  16.     const DEFAULT_PAGINATION_LIMIT 15;
  17.     public function findTicketBySubject($email$subject)
  18.     {
  19.         if (stripos($subject,"RE: ") !== false) {
  20.             $subject str_ireplace("RE: """$subject);
  21.         }
  22.         if (stripos($subject,"FWD: ") !== false) {
  23.             $subject str_ireplace("FWD: ","",$subject);
  24.         }
  25.         $ticket $this->getEntityManager()->createQuery("SELECT t FROM UVDeskCoreFrameworkBundle:Ticket t WHERE t.subject LIKE :referenceIds" )
  26.             ->setParameter('referenceIds''%' $subject '%')
  27.             ->setMaxResults(1)
  28.             ->getOneOrNullResult();
  29.         return ($ticket && strtolower($ticket->getCustomer()->getEmail()) == strtolower($email)) ? $ticket null;
  30.     }
  31.     public function getTicketCurrentThread($ticket)
  32.     {
  33.         return $this->getEntityManager()->createQueryBuilder()
  34.             ->select("thread")
  35.             ->from('UVDeskCoreFrameworkBundle:Thread''thread')
  36.             ->where('thread.ticket = :ticket')->setParameter('ticket'$ticket)
  37.             ->orderBy('thread.id'Criteria::DESC)
  38.             ->setMaxResults(1)
  39.             ->getQuery()
  40.             ->getOneOrNullResult();
  41.     }
  42.     public function prepareBasePaginationRecentThreadsQuery($ticket, array $params$enabledLockedThreads true)
  43.     {
  44.         $queryBuilder $this->getEntityManager()->createQueryBuilder()
  45.             ->select("thread, attachments, user, userInstance")
  46.             ->from('UVDeskCoreFrameworkBundle:Thread''thread')
  47.             ->leftJoin('thread.user''user')
  48.             ->leftJoin('user.userInstance''userInstance')
  49.             ->leftJoin('thread.attachments''attachments')
  50.             ->where('thread.ticket = :ticket')->setParameter('ticket'$ticket)
  51.             ->andWhere('thread.threadType != :disabledThreadType')->setParameter('disabledThreadType''create')
  52.             ->orderBy('thread.id'Criteria::DESC);
  53.         // Filter locked threads
  54.         if (false === $enabledLockedThreads) {
  55.             $queryBuilder->andWhere('thread.isLocked = :isThreadLocked')->setParameter('isThreadLocked'false);
  56.         }
  57.         // Filter threads by their type
  58.         switch (!empty($params['threadType']) ? $params['threadType'] : 'reply') {
  59.             case 'reply':
  60.                 $queryBuilder->andWhere('thread.threadType = :threadType')->setParameter('threadType''reply');
  61.                 break;
  62.             case 'forward':
  63.                 $queryBuilder->andWhere('thread.threadType = :threadType')->setParameter('threadType''forward');
  64.                 break;
  65.             case 'note':
  66.                 $queryBuilder->andWhere('thread.threadType = :threadType')->setParameter('threadType''note');
  67.                 break;
  68.             case 'bookmark':
  69.             case 'pinned':
  70.                 $queryBuilder->andWhere('thread.isBookmarked = :isBookmarked')->setParameter('isBookmarked'true);
  71.                 break;
  72.             case 'task':
  73.                 // $queryBuilder->andWhere('thread.threadType = :threadType')->setParameter('threadType', 'forward');
  74.                 break;
  75.             default:
  76.                 break;
  77.         }
  78.         return $queryBuilder;
  79.     }
  80.     public function getAllCustomerThreads($ticketId,\Symfony\Component\HttpFoundation\ParameterBag $obj null$container)
  81.     {
  82.         $json = array();
  83.         $entityManager $this->getEntityManager();
  84.         $qb $entityManager->createQueryBuilder()
  85.             ->select("th, a, u.id as userId, CONCAT(u.firstName, ' ', u.lastName) as fullname, userInstance.profileImagePath as smallThumbnail")->from($this->getEntityName(), 'th')
  86.             ->leftJoin('th.user''u')
  87.             ->leftJoin('th.attachments''a')
  88.             ->leftJoin('u.userInstance''userInstance')
  89.             ->andwhere('th.threadType = :threadType')
  90.             ->setParameter('threadType''reply')
  91.             ->andwhere('th.ticket = :ticketId')
  92.             ->setParameter('ticketId'$ticketId)
  93.             ->orderBy('th.id''DESC');
  94.         $data $obj->all();
  95.         $newQb = clone $qb;
  96.         $newQb->select('COUNT(DISTINCT th.id)');
  97.         $paginator $container->get('knp_paginator');
  98.         $results $paginator->paginate(
  99.             $qb->getQuery()->setHydrationMode(Query::HYDRATE_ARRAY)->setHint('knp_paginator.count'$newQb->getQuery()->getSingleScalarResult()),
  100.             isset($data['page']) ? $data['page'] : 1,
  101.             self::DEFAULT_PAGINATION_LIMIT,
  102.             array('distinct' => true)
  103.         );
  104.         $paginationData $results->getPaginationData();
  105.         $queryParameters $results->getParams();
  106.         $queryParameters['page'] = "replacePage";
  107.         $paginationData['url'] = '#'.$container->get('uvdesk.service')->buildPaginationQuery($queryParameters);
  108.         $data = array();
  109.         $userService $container->get('user.service');
  110.         $uvdeskFileSystemService $container->get('uvdesk.core.file_system.service');
  111.         foreach ($results->getItems() as $key => $row) {
  112.             $thread $row[0];
  113.             $threadResponse = [
  114.                 'id' => $thread['id'],
  115.                 'user' => $row['userId'] ? ['id' => $row['userId']] : null,
  116.                 'fullname' => $row['fullname'],
  117.                 'smallThumbnail'=> $row['smallThumbnail'],
  118.                 'reply' => html_entity_decode($thread['message']),
  119.                 'source' => $thread['source'],
  120.                 'threadType' => $thread['threadType'],
  121.                 'userType' => $thread['createdBy'],
  122.                 'formatedCreatedAt' => $userService->getLocalizedFormattedTime($thread['createdAt'], $userService->getSessionUser()),
  123.                 'timestamp' => $userService->convertToDatetimeTimezoneTimestamp($thread['createdAt']),
  124.                 'cc' => $thread['cc'],
  125.                 'bcc' => $thread['bcc'],
  126.                 'attachments' => $thread['attachments'],
  127.             ];
  128.             if (!empty($threadResponse['attachments'])) {
  129.                 $threadResponse['attachments'] = array_map(function ($attachment) use ($entityManager$uvdeskFileSystemService) {
  130.                     $attachmentReferenceObject $entityManager->getReference(Attachment::class, $attachment['id']);
  131.                     return $uvdeskFileSystemService->getFileTypeAssociations($attachmentReferenceObject);
  132.                 }, $threadResponse['attachments']);
  133.             }
  134.             array_push($data$threadResponse);
  135.         }
  136.         
  137.         $json['threads'] = $data;
  138.         $json['pagination'] = $paginationData;
  139.         return $json;
  140.     }
  141.     public function findThreadByRefrenceId($referenceIds)
  142.     {
  143.         $query $this->getEntityManager()
  144.             ->createQuery(
  145.                 "SELECT t FROM UVDeskCoreFrameworkBundle:Ticket t
  146.                 WHERE t.referenceIds LIKE :referenceIds
  147.                 ORDER BY t.id DESC"
  148.             )->setParameter('referenceIds''%'.$referenceIds.'%');
  149.         return $query->setMaxResults(1)->getOneOrNullResult();
  150.     }
  151. }