vendor/uvdesk/core-framework/Workflow/Actions/Ticket/MailCustomer.php line 42

Open in your IDE?
  1. <?php
  2. namespace Webkul\UVDesk\CoreFrameworkBundle\Workflow\Actions\Ticket;
  3. use Webkul\UVDesk\CoreFrameworkBundle\Entity as CoreEntities;
  4. use Webkul\UVDesk\AutomationBundle\Workflow\FunctionalGroup;
  5. use Symfony\Component\DependencyInjection\ContainerInterface;
  6. use Webkul\UVDesk\CoreFrameworkBundle\Entity\Ticket;
  7. use Webkul\UVDesk\AutomationBundle\Workflow\Action as WorkflowAction;
  8. class MailCustomer extends WorkflowAction
  9. {
  10.     public static function getId()
  11.     {
  12.         return 'uvdesk.ticket.mail_customer';
  13.     }
  14.     public static function getDescription()
  15.     {
  16.         return "Mail to customer";
  17.     }
  18.     public static function getFunctionalGroup()
  19.     {
  20.         return FunctionalGroup::TICKET;
  21.     }
  22.     public static function getOptions(ContainerInterface $container)
  23.     {
  24.         $entityManager $container->get('doctrine.orm.entity_manager');
  25.         $emailTemplateCollection array_map(function ($emailTemplate) {
  26.             return [
  27.                 'id' => $emailTemplate->getId(),
  28.                 'name' => $emailTemplate->getName(),
  29.             ];
  30.         }, $entityManager->getRepository('UVDeskCoreFrameworkBundle:EmailTemplates')->findAll());
  31.         return $emailTemplateCollection;
  32.     }
  33.     public static function applyAction(ContainerInterface $container$entity$value null$thread null)
  34.     {
  35.         $entityManager $container->get('doctrine.orm.entity_manager');
  36.         switch (true) {
  37.             case $entity instanceof CoreEntities\Ticket:
  38.                 $currentThread = isset($entity->currentThread) ? $entity->currentThread '';
  39.                 $createdThread = isset($entity->createdThread) ? $entity->createdThread '';
  40.                 
  41.                 $emailTemplate $entityManager->getRepository('UVDeskCoreFrameworkBundle:EmailTemplates')->findOneById($value);
  42.                 if (empty($emailTemplate)) {
  43.                     break;
  44.                 }
  45.                 // Only process attachments if required in the message body
  46.                 // @TODO: Revist -> Maybe we should always include attachments if they are provided??
  47.                 $attachments = [];
  48.                 if (!empty($createdThread) && (strpos($emailTemplate->getMessage(), '{%ticket.attachments%}') !== false || strpos($emailTemplate->getMessage(), '{% ticket.attachments %}') !== false)) {
  49.                     $attachments array_map(function($attachment) use ($container) { 
  50.                         return str_replace('//''/'$container->get('kernel')->getProjectDir() . "/public" $attachment->getPath());
  51.                     }, $entityManager->getRepository('UVDeskCoreFrameworkBundle:Attachment')->findByThread($createdThread));
  52.                 }
  53.                 $ticketPlaceholders $container->get('email.service')->getTicketPlaceholderValues($entity);
  54.                 $subject $container->get('email.service')->processEmailSubject($emailTemplate->getSubject(), $ticketPlaceholders);
  55.                 $message $container->get('email.service')->processEmailContent($emailTemplate->getMessage(), $ticketPlaceholders);
  56.                 $thread = ($thread != null) ? $thread $createdThread;
  57.                 $ticketCollaborators = (($thread != null) && !empty($thread->getTicket()) && $thread != "" ) ? $thread->getTicket()->getCollaborators() : [];
  58.               $headers = ['References' => $entity->getReferenceIds()]; 
  59.                 if (!empty($thread)) {
  60.                     $headers = ['References' => $entity->getReferenceIds()];
  61.                 
  62.                     if (!empty($currentThread) && null != $currentThread->getMessageId()) {
  63.                         $headers['In-Reply-To'] = $currentThread->getMessageId();
  64.                     }
  65.                     $messageId $container->get('email.service')->sendMail($subject$message$entity->getCustomer()->getEmail(), $headers$entity->getMailboxEmail(), $attachments ?? []);
  66.                     if (!empty($messageId)) {
  67.                         $updatedReferenceIds $entity->getReferenceIds() . ' ' $messageId;            
  68.                         $entity->setReferenceIds($updatedReferenceIds);
  69.                         $entityManager->persist($entity);
  70.                         $entityManager->flush();
  71.                     }
  72.                     if($thread->getCc() || $thread->getBcc() || $ticketCollaborators != null && count($ticketCollaborators) > 0) {
  73.                         self::sendCcBccMail($container$entity$thread$subject$attachments$ticketCollaborators$message);
  74.                     }
  75.                     
  76.                 } else {
  77.                     if (!empty($entity->getReferenceIds())) {
  78.                         $headers = ['References' => $entity->getReferenceIds()];
  79.                         }
  80.                     
  81.                     $message $container->get('email.service')->sendMail($subject$message$entity->getCustomer()->getEmail(),$headers);
  82.                 }
  83.                 break;
  84.             default:
  85.                 break;
  86.         }
  87.     }
  88.     public static function sendCcBccMail($container$entity$thread$subject$attachments$ticketCollaborators$message null)
  89.     {
  90.         $entityManager $container->get('doctrine.orm.entity_manager');
  91.         $collabrator = array();
  92.         $cc = array();
  93.         if($thread->getCc() != null){
  94.             foreach($thread->getCc() as $EmailCC){
  95.                 if($entityManager->getRepository(Ticket::class)->isTicketCollaborator($thread->getTicket(), $EmailCC) != false){
  96.                     $collabrator[] = $EmailCC;
  97.                 }else{
  98.                     $cc[] = $EmailCC;
  99.                 }
  100.            }   
  101.         }
  102.         $emailOfcollabrator = !empty($thread) && $thread->getCreatedBy() == "collaborator" $thread->getUser()->getEmail() : null;
  103.         if ($collabrator != null && !empty($collabrator) || $ticketCollaborators != null && !empty($ticketCollaborators)) {
  104.             if (count($collabrator) == && count($ticketCollaborators) > && !empty($ticketCollaborators) && empty($collabrator)) {
  105.                 foreach ($ticketCollaborators as $collaborator) {
  106.                     if (!empty($collaborator->getEmail()) && $collaborator->getEmail() != $emailOfcollabrator) {
  107.                         $collabrator[] = $collaborator->getEmail();
  108.                     }
  109.                 }
  110.             }
  111.             $messageId $container->get('email.service')->sendMail($subject$messagenull, [], $entity->getMailboxEmail(), $attachments ?? [], $collabrator ?? [], []); 
  112.             if (!empty($messageId)) {
  113.             $updatedReferenceIds $entity->getReferenceIds() . ' ' $messageId;            
  114.             $entity->setReferenceIds($updatedReferenceIds);
  115.             $entityManager->persist($entity);
  116.             $entityManager->flush();
  117.             }
  118.            if($collabrator != null && $thread->getCc()!= null && count($thread->getCc()) == count($collabrator) && $thread->getBcc() != null){
  119.             $message '<html><body style="background-image: none"><p>'.html_entity_decode($thread->getMessage()).'</p></body></html>';
  120.             $messageId $container->get('email.service')->sendMail($subject$messagenull, [], $entity->getMailboxEmail(), $attachments ?? [], [], $thread->getBcc() ?? []);  
  121.            }
  122.         }
  123.         if($cc != null && !empty($cc)){
  124.             $message '<html><body style="background-image: none"><p>'.html_entity_decode($thread->getMessage()).'</p></body></html>';
  125.             $messageId $container->get('email.service')->sendMail($subject$messagenull, [], $entity->getMailboxEmail(), $attachments ?? [], $cc ?? [], $thread->getBcc() ?? []);    
  126.         }
  127.            
  128.         if($thread->getBcc() != null && $thread->getCc() == null){
  129.             $message '<html><body style="background-image: none"><p>'.html_entity_decode($thread->getMessage()).'</p></body></html>';
  130.             $messageId $container->get('email.service')->sendMail($subject$messagenull, [], $entity->getMailboxEmail(), $attachments ?? [], $thread->getCc() ?? [], $thread->getBcc() ?? []);  
  131.         }
  132.     }
  133. }