vendor/pimcore/customer-management-framework-bundle/src/Targeting/ActionHandler/TrackSegment.php line 78

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\ActionHandler;
  16. use CustomerManagementFrameworkBundle\Model\CustomerSegmentInterface;
  17. use CustomerManagementFrameworkBundle\SegmentManager\SegmentManagerInterface;
  18. use CustomerManagementFrameworkBundle\Targeting\DataProvider\Customer;
  19. use CustomerManagementFrameworkBundle\Targeting\SegmentTracker;
  20. use Pimcore\Model\DataObject\CustomerSegment;
  21. use Pimcore\Model\Tool\Targeting\Rule;
  22. use Pimcore\Targeting\ActionHandler\ActionHandlerInterface;
  23. use Pimcore\Targeting\DataProviderDependentInterface;
  24. use Pimcore\Targeting\Model\VisitorInfo;
  25. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  26. class TrackSegment implements ActionHandlerInterfaceDataProviderDependentInterface
  27. {
  28.     /**
  29.      * @var SegmentManagerInterface
  30.      */
  31.     private $segmentManager;
  32.     /**
  33.      * @var SegmentTracker
  34.      */
  35.     private $segmentTracker;
  36.     /**
  37.      * @phpstan-ignore-next-line
  38.      * TODO: Remove unused parameter
  39.      */
  40.     public function __construct(
  41.         SegmentManagerInterface $segmentManager,
  42.         SegmentTracker $segmentTracker,
  43.         EventDispatcherInterface $eventDispatcher
  44.     ) {
  45.         $this->segmentManager $segmentManager;
  46.         $this->segmentTracker $segmentTracker;
  47.     }
  48.     /**
  49.      * @inheritDoc
  50.      */
  51.     public function getDataProviderKeys(): array
  52.     {
  53.         return [Customer::PROVIDER_KEY];
  54.     }
  55.     /**
  56.      * @inheritDoc
  57.      */
  58.     public function apply(VisitorInfo $visitorInfo, array $actionRule $rule null)
  59.     {
  60.         $segmentOption $action['segment'];
  61.         if (empty($segmentOption)) {
  62.             return;
  63.         }
  64.         if (is_numeric($segmentOption)) {
  65.             $segment $this->segmentManager->getSegmentById((int)$segmentOption);
  66.         } else {
  67.             // TODO load from segment manager?
  68.             $segment CustomerSegment::getByPath($segmentOption);
  69.         }
  70.         // TODO log errors (e.g. segment not found)
  71.         if (!$segment instanceof CustomerSegmentInterface) {
  72.             return;
  73.         }
  74.         $this->segmentTracker->trackSegment($visitorInfo$segment);
  75.     }
  76. }