vendor/pimcore/customer-management-framework-bundle/src/Targeting/EventListener/TargetingToolbarListener.php line 63

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. /**
  4.  * Pimcore
  5.  *
  6.  * This source file is available under two different licenses:
  7.  * - GNU General Public License version 3 (GPLv3)
  8.  * - Pimcore Enterprise License (PEL)
  9.  * Full copyright and license information is available in
  10.  * LICENSE.md which is distributed with this source code.
  11.  *
  12.  * @copyright  Copyright (c) Pimcore GmbH (http://www.pimcore.org)
  13.  * @license    http://www.pimcore.org/license     GPLv3 and PEL
  14.  */
  15. namespace CustomerManagementFrameworkBundle\Targeting\EventListener;
  16. use CustomerManagementFrameworkBundle\Model\CustomerSegmentInterface;
  17. use CustomerManagementFrameworkBundle\SegmentManager\SegmentManagerInterface;
  18. use CustomerManagementFrameworkBundle\Targeting\SegmentTracker;
  19. use Pimcore\Event\Targeting\RenderToolbarEvent;
  20. use Pimcore\Event\TargetingEvents;
  21. use Pimcore\Targeting\VisitorInfoStorageInterface;
  22. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  23. class TargetingToolbarListener implements EventSubscriberInterface
  24. {
  25.     /**
  26.      * @var VisitorInfoStorageInterface
  27.      */
  28.     private $visitorInfoStorage;
  29.     /**
  30.      * @var SegmentTracker
  31.      */
  32.     private $segmentTracker;
  33.     /**
  34.      * @var SegmentManagerInterface
  35.      */
  36.     private $segmentManager;
  37.     public function __construct(
  38.         VisitorInfoStorageInterface $visitorInfoStorage,
  39.         SegmentTracker $segmentTracker,
  40.         SegmentManagerInterface $segmentManager
  41.     )
  42.     {
  43.         $this->visitorInfoStorage $visitorInfoStorage;
  44.         $this->segmentTracker     $segmentTracker;
  45.         $this->segmentManager     $segmentManager;
  46.     }
  47.     public static function getSubscribedEvents()
  48.     {
  49.         return [
  50.             TargetingEvents::RENDER_TOOLBAR => 'onRenderToolbar'
  51.         ];
  52.     }
  53.     public function onRenderToolbar(RenderToolbarEvent $event)
  54.     {
  55.         // set the currently used template as variable scoped to cmf to
  56.         // make sure multiple template inheritance works when another bundle
  57.         // extends the template as well. if we'd just extend the core toolbar
  58.         // template, any other bundles setting the template from inheritance
  59.         // would be lost
  60.         $event->setData(array_merge($event->getData(), [
  61.             'cmfOriginalTemplate' => $event->getTemplate(),
  62.             'cmfTrackedSegments'  => $this->getTrackedSegments(),
  63.         ]));
  64.         $event->setTemplate('@PimcoreCustomerManagementFramework/Targeting/toolbar.html.twig');
  65.     }
  66.     private function getTrackedSegments(): array
  67.     {
  68.         if (!$this->visitorInfoStorage->hasVisitorInfo()) {
  69.             return [];
  70.         }
  71.         $visitorInfo     $this->visitorInfoStorage->getVisitorInfo();
  72.         $trackedSegments $this->segmentTracker->getAssignments($visitorInfo);
  73.         $result = [];
  74.         foreach ($trackedSegments as $id => $count) {
  75.             $segment $this->segmentManager->getSegmentById($id);
  76.             if (!$segment || !$segment instanceof CustomerSegmentInterface) {
  77.                 continue;
  78.             }
  79.             $result[] = [
  80.                 'id'         => $segment->getId(),
  81.                 'name'       => $segment->getName(),
  82.                 'group'      => $segment->getGroup() ? $segment->getGroup()->getName() : null,
  83.                 'calculated' => $segment->getCalculated(),
  84.                 'count'      => $count,
  85.             ];
  86.         }
  87.         return $result;
  88.     }
  89. }