vendor/pimcore/pimcore/lib/Analytics/Piwik/EventListener/IndexSettingsListener.php line 66

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 Pimcore\Analytics\Piwik\EventListener;
  16. use Pimcore\Analytics\Piwik\Config\ConfigProvider;
  17. use Pimcore\Analytics\Piwik\ReportBroker;
  18. use Pimcore\Bundle\AdminBundle\Security\User\TokenStorageUserResolver;
  19. use Pimcore\Event\Admin\IndexSettingsEvent;
  20. use Pimcore\Event\AdminEvents;
  21. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  22. class IndexSettingsListener implements EventSubscriberInterface
  23. {
  24.     /**
  25.      * @var ConfigProvider
  26.      */
  27.     private $configProvider;
  28.     /**
  29.      * @var ReportBroker
  30.      */
  31.     private $reportBroker;
  32.     /**
  33.      * @var TokenStorageUserResolver
  34.      */
  35.     private $userResolver;
  36.     public function __construct(
  37.         ConfigProvider $configProvider,
  38.         ReportBroker $reportBroker,
  39.         TokenStorageUserResolver $tokenStorageUserResolver
  40.     ) {
  41.         $this->configProvider $configProvider;
  42.         $this->reportBroker $reportBroker;
  43.         $this->userResolver $tokenStorageUserResolver;
  44.     }
  45.     public static function getSubscribedEvents()
  46.     {
  47.         return [
  48.             AdminEvents::INDEX_SETTINGS => 'addIndexSettings'
  49.         ];
  50.     }
  51.     /**
  52.      * Handles INDEX_SETTINGS event and adds piwik reports to settings
  53.      *
  54.      * @param IndexSettingsEvent $event
  55.      */
  56.     public function addIndexSettings(IndexSettingsEvent $event)
  57.     {
  58.         $user $this->userResolver->getUser();
  59.         if (!$user || !$user->isAllowed('piwik_reports')) {
  60.             return;
  61.         }
  62.         $config $this->configProvider->getConfig();
  63.         $settings = [
  64.             'configured' => $config->isConfigured(),
  65.             'iframe_configured' => $config->isIframeIntegrationConfigured(),
  66.             'report_token_configured' => !empty($config->getReportToken()),
  67.             'api_token_configured' => !empty($config->getApiToken()),
  68.         ];
  69.         $settings $this->addReportSettings($settings);
  70.         $event->getSettings()->piwik $settings;
  71.     }
  72.     private function addReportSettings(array $settings): array
  73.     {
  74.         $reports = [];
  75.         foreach ($this->reportBroker->getReports() as $report) {
  76.             $reports[$report->getId()] = [
  77.                 'id' => $report->getId(),
  78.                 'title' => $report->getTitle()
  79.             ];
  80.         }
  81.         $settings['reports'] = $reports;
  82.         return $settings;
  83.     }
  84. }