vendor/pimcore/pimcore/lib/Targeting/DataLoader.php line 42

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 Pimcore\Targeting;
  16. use Pimcore\Debug\Traits\StopwatchTrait;
  17. use Pimcore\Targeting\DataProvider\DataProviderInterface;
  18. use Pimcore\Targeting\Model\VisitorInfo;
  19. use Psr\Container\ContainerInterface;
  20. class DataLoader implements DataLoaderInterface
  21. {
  22.     use StopwatchTrait;
  23.     /**
  24.      * @var ContainerInterface
  25.      */
  26.     private $dataProviders;
  27.     public function __construct(ContainerInterface $dataProviders)
  28.     {
  29.         $this->dataProviders $dataProviders;
  30.     }
  31.     /**
  32.      * {@inheritdoc}
  33.      */
  34.     public function loadDataFromProviders(VisitorInfo $visitorInfo$providerKeys)
  35.     {
  36.         if (!is_array($providerKeys)) {
  37.             $providerKeys = [(string)$providerKeys];
  38.         }
  39.         foreach ($providerKeys as $providerKey) {
  40.             $loadedProviders $visitorInfo->get('_data_providers', []);
  41.             // skip already loaded providers to avoid circular reference loops
  42.             if (in_array($providerKey$loadedProviders)) {
  43.                 continue;
  44.             }
  45.             $loadedProviders[] = $providerKey;
  46.             $visitorInfo->set('_data_providers'$loadedProviders);
  47.             $dataProvider $this->dataProviders->get($providerKey);
  48.             // load data from required providers
  49.             if ($dataProvider instanceof DataProviderDependentInterface) {
  50.                 $this->loadDataFromProviders(
  51.                     $visitorInfo,
  52.                     $dataProvider->getDataProviderKeys()
  53.                 );
  54.             }
  55.             $this->startStopwatch('Targeting:load:' $providerKey'targeting');
  56.             $dataProvider->load($visitorInfo);
  57.             $this->stopStopwatch('Targeting:load:' $providerKey);
  58.         }
  59.     }
  60.     /**
  61.      * {@inheritdoc}
  62.      */
  63.     public function hasDataProvider(string $type): bool
  64.     {
  65.         return $this->dataProviders->has($type);
  66.     }
  67.     /**
  68.      * {@inheritdoc}
  69.      */
  70.     public function getDataProvider(string $type): DataProviderInterface
  71.     {
  72.         if (!$this->dataProviders->has($type)) {
  73.             throw new \InvalidArgumentException(sprintf(
  74.                 'There is no data provider registered for type "%s"',
  75.                 $type
  76.             ));
  77.         }
  78.         return $this->dataProviders->get($type);
  79.     }
  80. }