app/Plugin/UaGaEEc4/Event.php line 319

Open in your IDE?
  1. <?php
  2. /*
  3.  * UaGaEEc: Google Analytics eコマース/拡張eコマース対応プラグイン
  4.  * Copyright (C) 2016-2021 Freischtide Inc. All Rights Reserved.
  5.  * http://freischtide.tumblr.com/
  6.  *
  7.  * License: see LICENSE.txt
  8.  */
  9. namespace Plugin\UaGaEEc4;
  10. use Eccube\Common\EccubeConfig;
  11. use Eccube\Event\TemplateEvent;
  12. use Eccube\Entity\Order;
  13. use Plugin\UaGaEEc4\Entity\UaGaEEc;
  14. use Plugin\UaGaEEc4\Repository\UaGaEEcRepository;
  15. use Symfony\Component\DependencyInjection\ContainerInterface;
  16. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  17. use Symfony\Component\HttpFoundation\RequestStack;
  18. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  19. use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
  20. use Symfony\Component\Finder\Finder;
  21. class Event implements EventSubscriberInterface
  22. {
  23.     /**
  24.      * @var UaGaEEcRepository
  25.      */
  26.     private $repo;
  27.     /**
  28.      * @var EccubeConfig
  29.      */
  30.     private $eccubeConfig;
  31.     /**
  32.      * @var TokenStorageInterface
  33.      */
  34.     private $tokenStorage;
  35.     /**
  36.      * @var AuthorizationCheckerInterface
  37.      */
  38.     private $authorizationChecker;
  39.     /**
  40.      * @var RequestStack
  41.      */
  42.     private $requestStack;
  43.     /**
  44.      * @var ContainerInterface
  45.      */
  46.     private $container;
  47.     /**
  48.      * @var UaGaEEc
  49.      */
  50.     private $uagaeec;
  51.     private $uagaeec_tag_rendered false;
  52.     /**
  53.      * Event constructor.
  54.      * @param UaGaEEcRepository $repo
  55.      * @param EccubeConfig $eccubeConfig
  56.      * @param TokenStorageInterface $tokenStorage
  57.      * @param AuthorizationCheckerInterface $authorizationChecker
  58.      * @param RequestStack $requestStack
  59.      * @param ContainerInterface $container
  60.      * @param \Twig_Environment $environment
  61.      */
  62.     public function __construct(
  63.         UaGaEEcRepository $repo,
  64.         EccubeConfig $eccubeConfig,
  65.         TokenStorageInterface $tokenStorage,
  66.         AuthorizationCheckerInterface $authorizationChecker,
  67.         RequestStack $requestStack,
  68.         ContainerInterface $container
  69.     ) {
  70.         $this->repo $repo;
  71.         $this->eccubeConfig $eccubeConfig;
  72.         $this->tokenStorage $tokenStorage;
  73.         $this->authorizationChecker $authorizationChecker;
  74.         $this->requestStack $requestStack;
  75.         $this->container $container;
  76.         $this->uagaeec $this->repo->get();
  77.     }
  78.     /**
  79.      * @return array
  80.      */
  81.     public static function getSubscribedEvents()
  82.     {
  83.         $template_path __DIR__ '/../../../src/Eccube/Resource/template/default/';
  84.         $subscribed_events = [];
  85.         foreach ((new Finder())->in($template_path)->name('*.twig')->files() as $fileinfo) {
  86.             $subscribed_events[str_replace($template_path''$fileinfo->getPathname())] = 'all';
  87.         }
  88.         $subscribed_events['Product/list.twig']       = 'productList';
  89.         $subscribed_events['Mypage/favorite.twig']    = 'mypageFavorite';
  90.         $subscribed_events['Product/detail.twig']     = 'productDetail';
  91.         $subscribed_events['Cart/index.twig']         = 'cart';
  92.         $subscribed_events['Shopping/login.twig']     = 'shopping_login';
  93.         $subscribed_events['Shopping/nonmember.twig'] = 'shopping_nonmember';
  94.         $subscribed_events['Shopping/index.twig']     = 'shopping';
  95.         $subscribed_events['Shopping/confirm.twig']   = 'shopping';
  96.         $subscribed_events['Shopping/complete.twig']  = 'shoppingComplete';
  97.         return $subscribed_events;
  98.     }
  99.     private function setVars(&$parameters)
  100.     {
  101.         if ($this->uagaeec->getTrackUserId() == UaGaEEc::UAGAEEC_OP_INCLUDE_USER_ID) {
  102.             if (!is_null($this->tokenStorage->getToken()) &&
  103.                 $this->authorizationChecker->isGranted('ROLE_USER')) {
  104.                 $customer_id $this->tokenStorage->getToken()->getUser()->getId();
  105.                 $parameters['user_id'] = $this->getUuid5($this->eccubeConfig->get('UAGAEEC_UUID'),
  106.                                                          $this->uagaeec->getTid(),
  107.                                                          $customer_id);
  108.             }
  109.         }
  110.         if ($crossdomain_linker $this->uagaeec->getCrossdomainLinker()) {
  111.             $autoLinks explode(','$crossdomain_linker);
  112.             foreach ($autoLinks as $key => $value) {
  113.                 // $autoLinks[$key] = '"' . (trim(str_replace('"','',$value))) . '"'; // Escape javascript and add '"' to each domain
  114.                 $autoLinks[$key] = "'" . (trim(str_replace("'","",$value))) . "'"// Escape javascript and add '"' to each domain
  115.             }
  116.             $parameters['crossdomain_linker'] = implode(','$autoLinks);
  117.         }
  118.         $pid $this->requestStack->getCurrentRequest()->get('ugep_id');
  119.         $pname $this->requestStack->getCurrentRequest()->get('ugep_name');
  120.         if ($pid && $pname) {
  121.             $promo['id'] = addslashes($pid);
  122.             $promo['name'] = addslashes($pname);
  123.             $promo['creative'] = addslashes($this->requestStack->getCurrentRequest()->get('ugep_creative'));
  124.             $promo['position'] = addslashes($this->requestStack->getCurrentRequest()->get('ugep_position'));
  125.             $parameters['promo'] = $promo;
  126.         }
  127.     }
  128.     public function all(TemplateEvent $event)
  129.     {
  130.         $tid $this->uagaeec->getTid();
  131.         if (empty($tid)) {
  132.             return;
  133.         }
  134.         if ($this->uagaeec_tag_rendered) {
  135.             return;
  136.         }
  137.         $parameters $event->getParameters();
  138.         $this->setVars($parameters);
  139.         $parameters['uagaeec'] = $this->uagaeec;
  140.         $parameters['partial'] = '@UaGaEEc4/default/_all.twig';
  141.         $event->setParameters($parameters);
  142.         $this->addAsset($event);
  143.     }
  144.     public function productList(TemplateEvent $event)
  145.     {
  146.         $tid $this->uagaeec->getTid();
  147.         if (empty($tid)) {
  148.             return;
  149.         }
  150.         if ($this->uagaeec->getEec() == UaGaEEc::UAGAEEC_USE_EC ||
  151.             $this->requestStack->getCurrentRequest()->getMethod() != 'GET') {
  152.             $this->all($event);
  153.             return;
  154.         }
  155.         $parameters $event->getParameters();
  156.         $this->setVars($parameters);
  157.         $name $this->requestStack->getCurrentRequest()->get('name');
  158.         if (!empty($name)) {
  159.             $list 'Search Results';
  160.         } else {
  161.             $list 'Category List';
  162.         }
  163.         $items $parameters['pagination']->getItems();
  164.         $impressions = [];
  165.         if ($this->uagaeec->getImpTrack() == UaGaEEc::UAGAEEC_OP_WITH_IMP_TRACK) {
  166.             if ($this->uagaeec->getCategory() == UaGaEEc::UAGAEEC_OP_CATEGORY_ON &&
  167.                 is_object($parameters['Category'])) {
  168.                 $category $parameters['Category']->getName();
  169.             } else {
  170.                 $category '';
  171.             }
  172.             foreach ($items as $item) {
  173.                 $impressions[] = $this->buildEcImpression($item$list$category);
  174.             }
  175.         }
  176.         $parameters['uagaeec'] = $this->uagaeec;
  177.         $parameters['impressions'] = $impressions;
  178.         $parameters['partial'] = '@UaGaEEc4/default/_product_list.twig';
  179.         $parameters['list_name'] = $list;
  180.         $event->setParameters($parameters);
  181.         $this->addAsset($event);
  182.     }
  183.     public function mypageFavorite(TemplateEvent $event)
  184.     {
  185.         $tid $this->uagaeec->getTid();
  186.         if (empty($tid)) {
  187.             return;
  188.         }
  189.         if ($this->uagaeec->getEec() == UaGaEEc::UAGAEEC_USE_EC ||
  190.             $this->requestStack->getCurrentRequest()->getMethod() != 'GET') {
  191.             $this->all($event);
  192.             return;
  193.         }
  194.         $parameters $event->getParameters();
  195.         $this->setVars($parameters);
  196.         $list 'Favorite List';
  197.         $items $parameters['pagination']->getItems();
  198.         $impressions = [];
  199.         if ($this->uagaeec->getImpTrack() == UaGaEEc::UAGAEEC_OP_WITH_IMP_TRACK) {
  200.             foreach ($items as $item) {
  201.                 // CustomerFavoriteProduct => Product
  202.                 $product $item->getProduct($item->getId());
  203.                 $category $this->getCategory($product);
  204.                 $impressions[] = $this->buildEcImpression($product$list$category);
  205.             }
  206.         }
  207.         $parameters['uagaeec'] = $this->uagaeec;
  208.         $parameters['impressions'] = $impressions;
  209.         $parameters['partial'] = '@UaGaEEc4/default/_product_list.twig';
  210.         $parameters['list_name'] = $list;
  211.         $event->setParameters($parameters);
  212.         $this->addAsset($event);
  213.     }
  214.     public function productDetail(TemplateEvent $event)
  215.     {
  216.         $tid $this->uagaeec->getTid();
  217.         if (empty($tid)) {
  218.             return;
  219.         }
  220.         if ($this->uagaeec->getEec() == UaGaEEc::UAGAEEC_USE_EC ||
  221.             $this->requestStack->getCurrentRequest()->getMethod() != 'GET') {
  222.             $this->all($event);
  223.             return;
  224.         }
  225.         $parameters $event->getParameters();
  226.         $this->setVars($parameters);
  227.         $list 'Item Detail';
  228.         $product $parameters['Product'];
  229.         $category $this->getCategory($product);
  230.         $products = [$this->buildEcProduct($product$category)];
  231.         $action  = ['action' => 'detail''option' => ''];
  232.         $clickFrom $this->decideList($_SERVER);
  233.         if ($clickFrom != 'Direct Access') {
  234.             $this->uagaeec->setClick($this->getOptionsStr(['list' => json_encode($clickFrom)]));
  235.         }
  236.         $impressions = [];
  237.         if ($this->uagaeec->getImpTrack() == UaGaEEc::UAGAEEC_OP_WITH_IMP_TRACK) {
  238.             // related product from RelatedProduct plugin by EC-CUBE
  239.             // https://github.com/EC-CUBE/related-product-plugin
  240.             if (class_exists('Plugin\RelatedProduct4\Entity\RelatedProduct')) {
  241.                 $relatedProductPlugin false;
  242.                 $enabledPlugins $this->container->getParameter('eccube.plugins.enabled');
  243.                 foreach ($enabledPlugins as $plugin) {
  244.                     if ($plugin == 'RelatedProduct4') {
  245.                         $relatedProductPlugin true;
  246.                         break;
  247.                     }
  248.                 }
  249.                 if ($relatedProductPlugin) {
  250.                     foreach ($product->getRelatedProducts() as $relatedProduct) {
  251.                         $childProduct $relatedProduct->getChildProduct();
  252.                         if ($childProduct->getStatus()->getId() == \Eccube\Entity\Master\ProductStatus::DISPLAY_SHOW) {
  253.                             $childCategory $this->getCategory($childProduct);
  254.                             $impressions[] = $this->buildEcImpression($childProduct$list$childCategory);
  255.                         }
  256.                     }
  257.                 }
  258.             }
  259.         }
  260.         $parameters['uagaeec'] = $this->uagaeec;
  261.         $parameters['impressions'] = $impressions;
  262.         $parameters['products'] = $products;
  263.         $parameters['action'] = $action;
  264.         $parameters['partial'] = '@UaGaEEc4/default/_product_detail.twig';
  265.         $parameters['list_name'] = $clickFrom;
  266.         $event->setParameters($parameters);
  267.         $this->addAsset($event);
  268.     }
  269.     public function cart(TemplateEvent $event)
  270.     {
  271.         $tid $this->uagaeec->getTid();
  272.         if (empty($tid)) {
  273.             return;
  274.         }
  275.         if ($this->uagaeec->getEec() == UaGaEEc::UAGAEEC_USE_EC ||
  276.             $this->requestStack->getCurrentRequest()->getMethod() != 'GET') {
  277.             $this->all($event);
  278.             return;
  279.         }
  280.         $parameters $event->getParameters();
  281.         $this->setVars($parameters);
  282.         $carts $parameters['Carts'];
  283.         $products = array();
  284.         foreach ($carts as $cart) {
  285.             foreach ($cart->getCartItems() as $cartItem) {
  286.                 $product $cartItem->getProductClass()->getProduct();
  287.                 $category $this->getCategory($product);
  288.                 $products[] = $this->buildEcProduct($product,
  289.                                                     $category,
  290.                                                     $cartItem->getPrice(),
  291.                                                     $cartItem->getQuantity());
  292.             }
  293.         }
  294.         $action  = ['action' => 'add''option' => ''];
  295.         $parameters['uagaeec'] = $this->uagaeec;
  296.         $parameters['products'] = $products;
  297.         $parameters['action'] = $action;
  298.         $parameters['partial'] = '@UaGaEEc4/default/_cart.twig';
  299.         $event->setParameters($parameters);
  300.         $this->addAsset($event);
  301.     }
  302.     // 買い物時のログイン
  303.     public function shopping_login(TemplateEvent $event)
  304.     {
  305.         $tid $this->uagaeec->getTid();
  306.         if (empty($tid)) {
  307.             return;
  308.         }
  309.         if ($this->uagaeec->getEec() == UaGaEEc::UAGAEEC_USE_EC ||
  310.             $this->requestStack->getCurrentRequest()->getMethod() != 'GET') {
  311.             $this->all($event);
  312.             return;
  313.         }
  314.         $parameters $event->getParameters();
  315.         $this->setVars($parameters);
  316.         //$action = ['action' => 'checkout', 'option' => $this->getOptionsStr([
  317.         //    'step' => 1 // ログイン
  318.         //])];
  319.         $parameters['uagaeec'] = $this->uagaeec;
  320.         //$parameters['action'] = $action;
  321.         //$parameters['partial'] = '@UaGaEEc4/default/_shopping.twig';
  322.         $parameters['partial'] = '@UaGaEEc4/default/_all.twig';
  323.         //$parameters['event'] = 'begin_checkout';
  324.         //$parameters['checkout_step'] = 1;
  325.         $event->setParameters($parameters);
  326.         $this->addAsset($event);
  327.     }
  328.     // お客様情報
  329.     public function shopping_nonmember(TemplateEvent $event)
  330.     {
  331.         $tid $this->uagaeec->getTid();
  332.         if (empty($tid)) {
  333.             return;
  334.         }
  335.         if ($this->uagaeec->getEec() == UaGaEEc::UAGAEEC_USE_EC ||
  336.             $this->requestStack->getCurrentRequest()->getMethod() != 'GET') {
  337.             $this->all($event);
  338.             return;
  339.         }
  340.         $parameters $event->getParameters();
  341.         $this->setVars($parameters);
  342.         //$action = ['action' => 'checkout', 'option' => $this->getOptionsStr([
  343.         //    'step' => 2 // お客様情報
  344.         //])];
  345.         $parameters['uagaeec'] = $this->uagaeec;
  346.         //$parameters['action'] = $action;
  347.         //$parameters['partial'] = '@UaGaEEc4/default/_shopping.twig';
  348.         $parameters['partial'] = '@UaGaEEc4/default/_all.twig';
  349.         //$parameters['event'] = 'checkout_progress';
  350.         //$parameters['checkout_step'] = 2;
  351.         $event->setParameters($parameters);
  352.         $this->addAsset($event);
  353.     }
  354.     // step 1: ご注文手続き(GET), step 2: ご注文内容確認(POST)
  355.     public function shopping(TemplateEvent $event)
  356.     {
  357.         $tid $this->uagaeec->getTid();
  358.         if (empty($tid)) {
  359.             return;
  360.         }
  361.         if ($this->uagaeec->getEec() == UaGaEEc::UAGAEEC_USE_EC) {
  362.             if ($this->requestStack->getCurrentRequest()->getMethod() == 'POST' &&
  363.                 $this->uagaeec->getConfirmationAsPurchase() == UaGaEEc::UAGAEEC_OP_CONFIRMATION_AS_PURCHASE) {
  364.                 # confirmation as purchase
  365.             } else {
  366.                 $this->all($event);
  367.                 return;
  368.             }
  369.         }
  370.         $parameters $event->getParameters();
  371.         $this->setVars($parameters);
  372.         // order id を一時的に保持(ペイジェント等の外部決済システムが order id を返さないため)
  373.         $order $parameters['Order'];
  374.         if ($order->getId()) {
  375.             $cookie = isset($_COOKIE['eccube_uagaeec']) ? json_decode($_COOKIE['eccube_uagaeec'], true) : [];
  376.             $cookie['orderId'] = $order->getId();
  377.             setcookie('eccube_uagaeec'json_encode($cookie), time()+60*60'/');
  378.         }
  379.         $orderDetails $order->getOrderItems();
  380.         $products = [];
  381.         foreach ($orderDetails as $orderDetail) {
  382.             if (!$orderDetail->isProduct()) {
  383.                 continue;
  384.             }
  385.             $product $orderDetail->getProduct();
  386.             $category $this->getCategory($product);
  387.             $products[] = $this->buildEcProduct($product,
  388.                                                 $category,
  389.                                                 $orderDetail->getPriceIncTax(),
  390.                                                 $orderDetail->getQuantity());
  391.         }
  392.         $action = ['action' => 'checkout''option' => $this->getOptionsStr([
  393.             //'step' => $this->requestStack->getCurrentRequest()->getMethod() == 'POST' ? 4 : 3,
  394.             'step' => $this->requestStack->getCurrentRequest()->getMethod() == 'POST' 1,
  395.             //'option' => '"' . $orderDetail['Order']['payment_method'] . '"'
  396.         ])];
  397.         $parameters['uagaeec'] = $this->uagaeec;
  398.         $parameters['products'] = $products;
  399.         $parameters['action'] = $action;
  400.         $parameters['partial'] = '@UaGaEEc4/default/_shopping.twig';
  401.         //$parameters['event'] = 'checkout_progress';
  402.         //$parameters['checkout_step'] = $this->requestStack->getCurrentRequest()->getMethod() == 'POST' ? 4 : 3;
  403.         $parameters['event'] = 'begin_checkout';
  404.         $parameters['checkout_step'] = 1;
  405.         if ($this->requestStack->getCurrentRequest()->getMethod() == 'POST') {
  406.             $parameters['event'] = 'checkout_progress';
  407.             $parameters['checkout_step'] = 2;
  408.             if ($this->uagaeec->getConfirmationAsPurchase() == UaGaEEc::UAGAEEC_OP_CONFIRMATION_AS_PURCHASE) {
  409.                 $parameters['transaction'] = $this->getTransaction($order);
  410.                 $parameters['order'] = $order;
  411.                 # eコマースの場合はテンプレートを置きかえる
  412.                 if ($this->uagaeec->getEec() == UaGaEEc::UAGAEEC_USE_EC) {
  413.                     $parameters['partial'] = '@UaGaEEc4/default/_shopping_complete.twig';
  414.                 }
  415.             }
  416.         }
  417.         $event->setParameters($parameters);
  418.         $this->addAsset($event);
  419.     }
  420.     public function shoppingComplete(TemplateEvent $event)
  421.     {
  422.         $tid $this->uagaeec->getTid();
  423.         if (empty($tid)) {
  424.             return;
  425.         }
  426.         if ($this->uagaeec->getConfirmationAsPurchase() == UaGaEEc::UAGAEEC_OP_CONFIRMATION_AS_PURCHASE) {
  427.             return;
  428.         }
  429.         if ($this->requestStack->getCurrentRequest()->getMethod() != 'GET') {
  430.             $this->all($event);
  431.             return;
  432.         }
  433.         $parameters $event->getParameters();
  434.         $this->setVars($parameters);
  435.         // 必要に応じて cookie より order id を復元
  436.         $order $parameters['Order'];
  437.         if (empty($order)) {
  438.             $cookie = isset($_COOKIE['eccube_uagaeec']) ? json_decode($_COOKIE['eccube_uagaeec'], true) : [];
  439.             if (isset($cookie['orderId'])) {
  440.                 $orderId $cookie['orderId'];
  441.                 $entityManager $this->container->get('doctrine')->getManager();
  442.                 $orderRepository $entityManager->getRepository(Order::class);
  443.                 $order $orderRepository->find($orderId);
  444.                 unset($cookie['orderId']);
  445.                 setcookie('eccube_uagaeec'json_encode($cookie), time()+60*60'/');
  446.             } else {
  447.                 return;
  448.             }
  449.         }
  450.         $orderDetails $order->getOrderItems();
  451.         $products = [];
  452.         foreach ($orderDetails as $orderDetail) {
  453.             if (!$orderDetail->isProduct()) {
  454.                 continue;
  455.             }
  456.             $product $orderDetail->getProduct();
  457.             $category $this->getCategory($product);
  458.             $products[] = $this->buildEcProduct($product,
  459.                                                 $category,
  460.                                                 $orderDetail->getPriceIncTax(),
  461.                                                 $orderDetail->getQuantity());
  462.         }
  463.         $transaction $this->getTransaction($order);
  464.         $action = ['action' => 'purchase''option' => $this->getOptionsStr($transaction)];
  465.         $parameters['uagaeec'] = $this->uagaeec;
  466.         $parameters['products'] = $products;
  467.         $parameters['action'] = $action;
  468.         $parameters['transaction'] = $transaction;
  469.         $parameters['partial'] = '@UaGaEEc4/default/_shopping_complete.twig';
  470.         $parameters['order'] = $order;
  471.         $event->setParameters($parameters);
  472.         $this->addAsset($event);
  473.     }
  474.     private function addAsset($event)
  475.     {
  476.         if ($this->uagaeec->getGaGtag() == UaGaEEc::UAGAEEC_USE_GA) {
  477.             $event->addAsset('@UaGaEEc4/default/uagaeec.twig');
  478.         } elseif ($this->uagaeec->getGaGtag() == UaGaEEc::UAGAEEC_USE_GTAG) {
  479.             $event->addAsset('@UaGaEEc4/default/uagaeec_gtag.twig');
  480.         }
  481.         $this->uagaeec_tag_rendered true;
  482.     }
  483.     private function getCategory($product)
  484.     {
  485.         $category '';
  486.         if ($this->uagaeec->getCategory() == UaGaEEc::UAGAEEC_OP_CATEGORY_ON) {
  487.             $productCategories $product->getProductCategories();
  488.             $categories = array();
  489.             foreach ($productCategories as $productCategory) {
  490.                 $categories[] = $productCategory['Category']->getName();
  491.             }
  492.             $category implode('/'$categories);
  493.         }
  494.         return $category;
  495.     }
  496.     private function getOptionsStr($options)
  497.     {
  498.         $results = array();
  499.         foreach ($options as $k => $v) {
  500.             $results[] = "'" $k "': " $v;
  501.         }
  502.         return implode(', '$results);
  503.     }
  504.     private function decideList($serverEnv)
  505.     {
  506.         if(!empty($serverEnv['HTTP_REFERER'])) {
  507.             $referrer $serverEnv['HTTP_REFERER'];
  508.         } else {
  509.             return 'Direct Access';
  510.         }
  511.         $url parse_url($referrer);
  512.         if ($url['host'] == $serverEnv['SERVER_NAME']) {
  513.             switch (true) {
  514.             case $url['path'] == '/':
  515.                 return 'TOP';
  516.             case stristr($url['path'], '/mypage/favorite'):
  517.                 return 'Favorite List';
  518.             case stristr($url['path'], '/products/list'):
  519.                 $name $this->requestStack->getCurrentRequest()->get('name');
  520.                 if (!empty($name)) {
  521.                     return 'Search Results';
  522.                 } else {
  523.                     return 'Category List';
  524.                 }
  525.             case stristr($url['path'], '/products/detail'):
  526.                 return 'Item Detail';
  527.             default:
  528.                 return 'Internal Site';
  529.             }
  530.         } else {
  531.             if ($this->uagaeec->getUseCustomReferrer() == UaGaEEc::UAGAEEC_OP_USE_CUSTOM_REFERRER) {
  532.                 foreach ($this->uagaeec->getCustomReferrers() as $customer_referrer) {
  533.                     if (stristr($referrer$customer_referrer[0])) {
  534.                         return addslashes($customer_referrer[1]);
  535.                     }
  536.                 }
  537.             }
  538.             return 'External Site';
  539.         }
  540.     }
  541.     private function getTransaction($order)
  542.     {
  543.         $transaction = [
  544.             'id'       => "'" $order['id'] . "'",
  545.             'revenue'  => "'" $order['total'] . "'",
  546.             'tax'      => "'" $order['tax'] . "'",
  547.             'shipping' => "'" $order['delivery_fee_total'] . "'"
  548.         ];
  549.         return $transaction;
  550.     }
  551.     private function getUuid5($namespace_id$ga_tid$customer_id)
  552.     {
  553.         $customer_hash sha1($namespace_id $ga_tid $customer_id);
  554.         $time_low            substr($customer_hash,  0,  8);
  555.         $time_mid            substr($customer_hash,  8,  4);
  556.         $time_hi_and_version substr($customer_hash12,  4);
  557.         $time_hi_and_version sprintf('%04x', (intval('0x' $time_hi_and_version16) & 0x0fff) | 0x3000);
  558.         $clk_seq_hi_res      substr($customer_hash16,  2);
  559.         $clk_seq_hi_res      sprintf('%02x', (intval('0x' $clk_seq_hi_res16) & 0x3f) | 0x80);
  560.         $clk_seq_low         substr($customer_hash18,  2);
  561.         $node                substr($customer_hash2012);
  562.         return sprintf('%8s-%4s-%4s-%2s%2s-%12s'$time_low$time_mid$time_hi_and_version$clk_seq_hi_res$clk_seq_low$node);
  563.     }
  564.     private function buildEcImpression($item$list$category)
  565.     {
  566.         return array('id'       => $item->getId(),
  567.                      'name'     => addslashes($item->getName()),
  568.                      'list'     => $list,
  569.                      'category' => addslashes($category),
  570.                      'price'    => $item->getPrice02IncTaxMax());
  571.     }
  572.     private function buildEcProduct($product$category$price null$quantity 0)
  573.     {
  574.         return array('id'       => $product->getId(),
  575.                      'name'     => addslashes($product->getName()),
  576.                      'price'    => $price == null $product->getPrice02IncTaxMax() : $price,
  577.                      'quantity' => $quantity,
  578.                      'category' => addslashes($category));
  579.     }
  580. }