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

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 Commercial License (PCL)
  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 PCL
  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.         $this->visitorInfoStorage $visitorInfoStorage;
  43.         $this->segmentTracker $segmentTracker;
  44.         $this->segmentManager $segmentManager;
  45.     }
  46.     public static function getSubscribedEvents()
  47.     {
  48.         return [
  49.             TargetingEvents::RENDER_TOOLBAR => 'onRenderToolbar'
  50.         ];
  51.     }
  52.     public function onRenderToolbar(RenderToolbarEvent $event)
  53.     {
  54.         // set the currently used template as variable scoped to cmf to
  55.         // make sure multiple template inheritance works when another bundle
  56.         // extends the template as well. if we'd just extend the core toolbar
  57.         // template, any other bundles setting the template from inheritance
  58.         // would be lost
  59.         $event->setData(array_merge($event->getData(), [
  60.             'cmfOriginalTemplate' => $event->getTemplate(),
  61.             'cmfTrackedSegments' => $this->getTrackedSegments(),
  62.         ]));
  63.         $event->setTemplate('@PimcoreCustomerManagementFramework/targeting/toolbar.html.twig');
  64.     }
  65.     private function getTrackedSegments(): array
  66.     {
  67.         if (!$this->visitorInfoStorage->hasVisitorInfo()) {
  68.             return [];
  69.         }
  70.         $visitorInfo $this->visitorInfoStorage->getVisitorInfo();
  71.         $trackedSegments $this->segmentTracker->getAssignments($visitorInfo);
  72.         $result = [];
  73.         foreach ($trackedSegments as $id => $count) {
  74.             $segment $this->segmentManager->getSegmentById($id);
  75.             if (!$segment || !$segment instanceof CustomerSegmentInterface) {
  76.                 continue;
  77.             }
  78.             $result[] = [
  79.                 'id' => $segment->getId(),
  80.                 'name' => $segment->getName(),
  81.                 'group' => $segment->getGroup() ? $segment->getGroup()->getName() : null,
  82.                 'calculated' => $segment->getCalculated(),
  83.                 'count' => $count,
  84.             ];
  85.         }
  86.         return $result;
  87.     }
  88. }