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

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