vendor/uvdesk/core-framework/Workflow/Actions/Ticket/MailAgent.php line 96

Open in your IDE?
  1. <?php
  2. namespace Webkul\UVDesk\CoreFrameworkBundle\Workflow\Actions\Ticket;
  3. use Webkul\UVDesk\AutomationBundle\Workflow\FunctionalGroup;
  4. use Symfony\Component\DependencyInjection\ContainerInterface;
  5. use Webkul\UVDesk\CoreFrameworkBundle\Entity\Ticket;
  6. use Webkul\UVDesk\AutomationBundle\Workflow\Action as WorkflowAction;
  7. class MailAgent extends WorkflowAction
  8. {
  9.     public static function getId()
  10.     {
  11.         return 'uvdesk.ticket.mail_agent';
  12.     }
  13.     public static function getDescription()
  14.     {
  15.         return "Mail to agent";
  16.     }
  17.     public static function getFunctionalGroup()
  18.     {
  19.         return FunctionalGroup::TICKET;
  20.     }
  21.     public static function getOptions(ContainerInterface $container)
  22.     {
  23.         $entityManager $container->get('doctrine.orm.entity_manager');
  24.         $emailTemplateCollection array_map(function ($emailTemplate) {
  25.             return [
  26.                 'id' => $emailTemplate->getId(),
  27.                 'name' => $emailTemplate->getName(),
  28.             ];
  29.         }, $entityManager->getRepository('UVDeskCoreFrameworkBundle:EmailTemplates')->findAll());
  30.         $agentCollection array_map(function ($agent) {
  31.             return [
  32.                 'id' => $agent['id'],
  33.                 'name' => $agent['name'],
  34.             ];
  35.         }, $container->get('user.service')->getAgentPartialDataCollection());
  36.         array_unshift($agentCollection, [
  37.             'id' => 'responsePerforming',
  38.             'name' => 'Response Performing Agent',
  39.         ], [
  40.             'id' => 'assignedAgent',
  41.             'name' => 'Assigned Agent',
  42.         ]);
  43.         return [
  44.             'partResults' => $agentCollection,
  45.             'templates' => $emailTemplateCollection,
  46.         ];
  47.     }
  48.     public static function applyAction(ContainerInterface $container$entity$value null$thread null)
  49.     {
  50.         $entityManager $container->get('doctrine.orm.entity_manager');
  51.         if ($entity instanceof Ticket) {
  52.             $emailTemplate $entityManager->getRepository('UVDeskCoreFrameworkBundle:EmailTemplates')->findOneById($value['value']);
  53.             $emails self::getAgentMails($value['for'], (($ticketAgent $entity->getAgent()) ? $ticketAgent->getEmail() : ''), $container);
  54.             $ticketCollaborators = []; 
  55.             if ($emails || $emailTemplate) {
  56.                 $queryBuilder $entityManager->createQueryBuilder()
  57.                     ->select('th.messageId as messageId')
  58.                     ->from('UVDeskCoreFrameworkBundle:Thread''th')
  59.                     ->where('th.createdBy = :userType')->setParameter('userType''agent')
  60.                     ->orderBy('th.id''DESC')
  61.                     ->setMaxResults(1);
  62.                 
  63.                 $inReplyTo $queryBuilder->getQuery()->getOneOrNullResult();
  64.                 if (!empty($inReplyTo)) {
  65.                     $emailHeaders['In-Reply-To'] = $inReplyTo;
  66.                 }
  67.                 if (!empty($entity->getReferenceIds())) {
  68.                     $emailHeaders['References'] = $entity->getReferenceIds();
  69.                 }
  70.                 // Only process attachments if required in the message body
  71.                 // @TODO: Revist -> Maybe we should always include attachments if they are provided??
  72.                 $createdThread = isset($entity->createdThread) && $entity->createdThread->getThreadType() != "note" $entity->createdThread : (isset($entity->currentThread) ? $entity->currentThread "") ;
  73.                 $attachments = [];
  74.                 if (!empty($createdThread) && (strpos($emailTemplate->getMessage(), '{%ticket.attachments%}') !== false || strpos($emailTemplate->getMessage(), '{% ticket.attachments %}') !== false)) {
  75.                     $attachments array_map(function($attachment) use ($container) { 
  76.                         return str_replace('//''/'$container->get('kernel')->getProjectDir() . "/public" $attachment->getPath());
  77.                     }, $entityManager->getRepository('UVDeskCoreFrameworkBundle:Attachment')->findByThread($createdThread));
  78.                 }
  79.                 $placeHolderValues $container->get('email.service')->getTicketPlaceholderValues($entity'agent');
  80.                 $subject $container->get('email.service')->processEmailSubject($emailTemplate->getSubject(), $placeHolderValues);
  81.                 $message $container->get('email.service')->processEmailContent($emailTemplate->getMessage(), $placeHolderValues);
  82.                 $thread = ($thread != null) ? $thread $createdThread;
  83.                 if ($thread != null && $thread->getThreadType() == "reply" && $thread->getCreatedBy() != "collaborator") {
  84.                     $ticketCollaborators = (($thread != null) && !empty($thread->getTicket()) && $thread != "" ) ? $thread->getTicket()->getCollaborators() : [];
  85.                 }
  86.                 if(!empty($emails) && $emails != null){
  87.                     foreach ($emails as $email) {
  88.                         if (is_array($email)) {
  89.                            $email $email['email'];
  90.                         }
  91.                         $messageId $container->get('email.service')->sendMail($subject$message$email$emailHeadersnull$attachments ?? []);
  92.                         if (!empty($messageId)) {
  93.                             $updatedReferenceIds $entity->getReferenceIds() . ' ' $messageId;            
  94.                             $entity->setReferenceIds($updatedReferenceIds);
  95.     
  96.                             $entityManager->persist($entity);
  97.                             $entityManager->flush();
  98.                         }
  99.                     }
  100.                 }
  101.                 
  102.                 if(!empty($thread) && ($thread->getCc() || $thread->getBcc()) || $ticketCollaborators != null && count($ticketCollaborators) > 0) {
  103.                     self::sendCcBccMail($container$entity$thread$subject$attachments$ticketCollaborators$message);
  104.                 }
  105.             } else {
  106.                 // Email Template/Emails Not Found. Disable Workflow/Prepared Response
  107.                 // $this->disableEvent($event, $entity);
  108.             }
  109.         } 
  110.     }
  111.     public static function getAgentMails($for$currentEmails$container)
  112.     {
  113.         $agentMails = [];
  114.         $entityManager $container->get('doctrine.orm.entity_manager');
  115.         foreach ($for as $agent) {
  116.             if ($agent == 'assignedAgent') {
  117.                 if (is_array($currentEmails)) {
  118.                     $agentMails array_merge($agentMails$currentEmails);
  119.                 } else {
  120.                     $agentMails[] = $currentEmails;
  121.                 }
  122.             } else if ($agent == 'responsePerforming' && is_object($currentUser $container->get('security.token_storage')->getToken()->getUser())) {
  123.                 // Add current user email if any
  124.                 $agentMails[] = $currentUser->getEmail();
  125.             } else if ($agent == 'baseAgent') {
  126.                 // Add selected user email if any
  127.                 if (is_array($currentEmails)) {
  128.                     $agentMails array_merge($agentMails$currentEmails);
  129.                 } else {
  130.                     $agentMails[] = $currentEmails;
  131.                 }
  132.             } else if((int)$agent) {
  133.                 $qb $entityManager->createQueryBuilder();
  134.                 $emails $qb->select('u.email')->from('UVDeskCoreFrameworkBundle:User''u')
  135.                     ->andwhere("u.id = :userId")
  136.                     ->setParameter('userId'$agent)
  137.                     ->getQuery()->getResult();
  138.                 
  139.                 foreach ($emails as $email) {
  140.                     $agent $entityManager->getRepository('UVDeskCoreFrameworkBundle:User')->findOneBy($email);
  141.                     if ($agent != null && $agent->getAgentInstance() != null) {
  142.                             $agentMails[] = $email;
  143.                     }
  144.                 }
  145.             }
  146.         }
  147.         return array_filter($agentMails);
  148.     }
  149.     
  150.     public static function sendCcBccMail($container$entity$thread$subject$attachments$ticketCollaborators$message null)
  151.     {
  152.         $entityManager $container->get('doctrine.orm.entity_manager');
  153.         $collabrator = array();
  154.         $cc = array();
  155.         if($thread->getCc() != null){
  156.             foreach($thread->getCc() as $EmailCC){
  157.                 if($entityManager->getRepository(Ticket::class)->isTicketCollaborator($thread->getTicket(), $EmailCC) != false){
  158.                     $collabrator[] = $EmailCC;
  159.                 }else{
  160.                     $cc[] = $EmailCC;
  161.                 }
  162.            }   
  163.         }
  164.         $emailOfcollabrator = !empty($thread) && $thread->getCreatedBy() == "collaborator" $thread->getUser()->getEmail() : null;
  165.         if ($collabrator != null && !empty($collabrator) || $ticketCollaborators != null && !empty($ticketCollaborators)) {
  166.             if (count($collabrator) == && count($ticketCollaborators) > && !empty($ticketCollaborators) && empty($collabrator)) {
  167.                 foreach ($ticketCollaborators as $collaborator) {
  168.                     if (!empty($collaborator->getEmail()) && $collaborator->getEmail() != $emailOfcollabrator) {
  169.                         $collabrator[] = $collaborator->getEmail();
  170.                     }
  171.                 }
  172.             }
  173.             $messageId $container->get('email.service')->sendMail($subject$messagenull, [], $entity->getMailboxEmail(), $attachments ?? [], $collabrator ?? [], []); 
  174.             if (!empty($messageId)) {
  175.             $updatedReferenceIds $entity->getReferenceIds() . ' ' $messageId;            
  176.             $entity->setReferenceIds($updatedReferenceIds);
  177.             $entityManager->persist($entity);
  178.             $entityManager->flush();
  179.             }
  180.            if($thread->getCc() != null && count($thread->getCc()) == count($collabrator) && $thread->getBcc() != null){
  181.             $message '<html><body style="background-image: none"><p>'.html_entity_decode($thread->getMessage()).'</p></body></html>';
  182.             $messageId $container->get('email.service')->sendMail($subject$messagenull, [], $entity->getMailboxEmail(), $attachments ?? [], [], $thread->getBcc() ?? []);  
  183.            }
  184.         }
  185.         if($cc != null && !empty($cc)){
  186.             $message '<html><body style="background-image: none"><p>'.html_entity_decode($thread->getMessage()).'</p></body></html>';
  187.             $messageId $container->get('email.service')->sendMail($subject$messagenull, [], $entity->getMailboxEmail(), $attachments ?? [], $cc ?? [], $thread->getBcc() ?? []);    
  188.         }
  189.            
  190.         if($thread->getBcc() != null && $thread->getCc() == null){
  191.             $message '<html><body style="background-image: none"><p>'.html_entity_decode($thread->getMessage()).'</p></body></html>';
  192.             $messageId $container->get('email.service')->sendMail($subject$messagenull, [], $entity->getMailboxEmail(), $attachments ?? [], $thread->getCc() ?? [], $thread->getBcc() ?? []);  
  193.         }
  194.     }
  195. }