Advertisement
Guest User

EmailSubscriber.php

a guest
Oct 17th, 2019
187
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 6.25 KB | None | 0 0
  1. <?php
  2.  
  3. namespace MauticPlugin\MauticAdvancedTemplatesBundle\EventListener;
  4. use Mautic\CampaignBundle\Entity\Lead;
  5. use Mautic\CoreBundle\EventListener\CommonSubscriber;
  6. use Mautic\EmailBundle\EmailEvents;
  7. use Mautic\EmailBundle\Event as Events;
  8. use Mautic\EmailBundle\Helper\PlainTextHelper;
  9. use Mautic\CoreBundle\Exception as MauticException;
  10. use MauticPlugin\MauticAdvancedTemplatesBundle\Helper\TemplateProcessor;
  11. use Psr\Log\LoggerInterface;
  12.  
  13. use Symfony\Component\Dotenv\Dotenv;
  14.  
  15. /**
  16.  * Class EmailSubscriber.
  17.  */
  18. class EmailSubscriber extends CommonSubscriber
  19. {
  20.     /**
  21.      * @var TokenHelper $tokenHelper ;
  22.      */
  23.     protected $templateProcessor;
  24.  
  25.     protected $conn = null;
  26.     /**
  27.      * EmailSubscriber constructor.
  28.      *
  29.      * @param TokenHelper $tokenHelper
  30.      */
  31.     public function __construct(TemplateProcessor $templateProcessor)
  32.     {
  33.         $this->templateProcessor = $templateProcessor;
  34.     }
  35.     /**
  36.      * @return array
  37.      */
  38.     public static function getSubscribedEvents()
  39.     {
  40.         return [
  41.             EmailEvents::EMAIL_ON_SEND => ['onEmailGenerate', 0],
  42.             EmailEvents::EMAIL_ON_DISPLAY => ['onEmailGenerate', 0]
  43.         ];
  44.     }
  45.  
  46.     /**
  47.      * Search and replace tokens with content
  48.      *
  49.      * @param Events\EmailSendEvent $event
  50.      * @throws \Throwable
  51.      * @throws \Twig_Error_Loader
  52.      * @throws \Twig_Error_Syntax
  53.      */
  54.     public function onEmailGenerate(Events\EmailSendEvent $event)
  55.     {
  56.         $this->logger->info('onEmailGenerate MauticAdvancedTemplatesBundle\EmailSubscriber');
  57.         $content = $event->getContent();
  58.        
  59.         $lead = $this->addLeadData($event);
  60.  
  61.         $content = $this->templateProcessor->processTemplate($content, $lead);
  62.         $event->setContent($content);
  63.         if ( empty( trim($event->getPlainText()) ) ) {
  64.             $event->setPlainText( (new PlainTextHelper($content))->getText() );
  65.         }
  66.     }
  67.  
  68.     public function addLeadData($event) {
  69.         $order_id = null;
  70.        
  71.         $tokens = $event->getTokens();
  72.  
  73.         $lead = $event->getLead();
  74.  
  75.         if(!empty($tokens)) {
  76.             if(isset($tokens['{order_id}'])) {
  77.                 $order_id = $tokens['{order_id}'];
  78.  
  79.                 if($order_id) {
  80.                     $this->connectHomeperks();
  81.  
  82.                     $order = $this->getOrder($order_id);
  83.                     $lead['order'] = json_encode($order);
  84.  
  85.                     if($order) {
  86.                         $lead['order_items'] = $this->getOrderItems($order_id);
  87.                         $lead['order_details'] = $this->getOrderDetails($order_id);
  88.                         $lead['customer'] = $this->getCustomer($order['customer_id']);
  89.                         $lead['address'] = $this->getAddress($order['customer_id']);
  90.                         $lead['phone'] = $this->getPhone($order['customer_id']);
  91.                         $lead['email'] = $this->getEmail($order['customer_id']);
  92.                         $lead['style_cobrand'] = $this->getStyleCobrand($order['cobrand']);
  93.                         $lead['style_providers'] = $this->getStyleProviders();
  94.                     }
  95.                 }
  96.             }
  97.         }
  98.  
  99.         return $lead;
  100.  
  101.     }
  102.  
  103.     public function connectHomeperks() {
  104.         $dotenv = new Dotenv();
  105.         $dotenv->load(__DIR__.'/../../../.env');
  106.  
  107.         $link = mysqli_connect($_ENV['DB_HOST'], $_ENV['DB_USERNAME'], $_ENV['DB_PASSWORD'], $_ENV['DB_DATABASE']);
  108.  
  109.         if($link)
  110.             $this->conn = $link;
  111.         else
  112.             $this->conn = false;
  113.     }
  114.  
  115.     public function getOrder($order_id) {
  116.         $order_id = mysqli_real_escape_string($this->conn, $order_id);
  117.  
  118.         $res = mysqli_query($this->conn, "SELECT * FROM orders WHERE id = " .$order_id);
  119.      
  120.         $order = mysqli_fetch_assoc($res);
  121.        
  122.         return $order;
  123.     }
  124.  
  125.     public function getOrderItems($order_id) {
  126.         $sql = mysqli_query($this->conn, "
  127.        SELECT * FROM order_items  
  128.        WHERE order_id = $order_id");
  129.  
  130.         $order_items = mysqli_fetch_all($sql, MYSQLI_ASSOC);
  131.  
  132.         return json_encode($order_items);
  133.     }
  134.  
  135.     public function getOrderDetails($order_id) {
  136.         $sql = mysqli_query($this->conn, "
  137.        SELECT oid.*, CONCAT(oid.message_1, oid.message_2, oid.message_3, oid.message_4, oid.message_5) AS message, CONCAT(oid.summary_1, oid.summary_2, oid.summary_3, oid.summary_4, oid.summary_5) AS summary FROM order_items oi  
  138.        LEFT JOIN order_item_details oid
  139.        ON oid.order_item_id = oi.id
  140.        WHERE oi.order_id = " . $order_id);
  141.  
  142.         $order_item_details = mysqli_fetch_all($sql, MYSQLI_ASSOC);
  143.  
  144.         return json_encode($order_item_details);
  145.     }
  146.  
  147.     public function getStyleCobrand($cobrand) {
  148.         $sql = mysqli_query($this->conn, "SELECT * FROM style_cobrands WHERE cobrand = '" . mysqli_real_escape_string($this->conn, $cobrand) . "'");
  149.      
  150.         $style = mysqli_fetch_assoc($sql);
  151.  
  152.         return json_encode($style);
  153.     }
  154.  
  155.     public function getStyleProviders() {
  156.         $result = mysqli_query($this->conn, "SELECT * FROM style_providers");
  157.      
  158.         $arr = [];
  159.         while($row = mysqli_fetch_assoc($result)) {
  160.             $arr[$row['slug']] = $row;
  161.         }
  162.  
  163.         return json_encode($arr);
  164.     }
  165.  
  166.     public function getCustomer($customer_id) {
  167.         $sql = mysqli_query($this->conn, "SELECT * FROM customers WHERE id = " . $customer_id);
  168.      
  169.         $customer = mysqli_fetch_assoc($sql);
  170.  
  171.         return json_encode($customer);
  172.     }
  173.  
  174.     public function getPhone($customer_id) {
  175.         $sql = mysqli_query($this->conn, "SELECT * FROM phones WHERE id = " . $customer_id);
  176.      
  177.         $phone = mysqli_fetch_assoc($sql);
  178.  
  179.         return json_encode($phone);
  180.     }
  181.  
  182.     public function getAddress($customer_id) {
  183.         $sql = mysqli_query($this->conn, "SELECT * FROM addresses WHERE customer_id = " . $customer_id);
  184.  
  185.         $address = mysqli_fetch_assoc($sql);
  186.  
  187.         return $address;
  188.     }
  189.  
  190.     public function getEmail($customer_id) {
  191.         $sql = mysqli_query($this->conn, "SELECT * FROM emails WHERE customer_id = " . $customer_id);
  192.  
  193.         $email = mysqli_fetch_assoc($sql);
  194.  
  195.         return json_encode($email);
  196.     }
  197. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement