View source
<?php
namespace Drupal\matomo_reports\Plugin\Block;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Block\BlockBase;
use Drupal\Core\Access\AccessResult;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Drupal\Core\Session\AccountProxyInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Extension\ModuleHandlerInterface;
use Drupal\Core\Render\RendererInterface;
use Drupal\matomo_reports\MatomoData;
use Symfony\Component\DependencyInjection\ContainerInterface;
class MatomoReportsBlock extends BlockBase implements ContainerFactoryPluginInterface {
protected $currentUser;
protected $entityTypeManager;
protected $configFactory;
protected $moduleHandler;
protected $renderer;
public function __construct(array $configuration, $plugin_id, $plugin_definition, AccountProxyInterface $currentUser, EntityTypeManagerInterface $entityTypeManager, ConfigFactoryInterface $configFactory, ModuleHandlerInterface $moduleHandler, RendererInterface $renderer) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->currentUser = $currentUser;
$this->entityTypeManager = $entityTypeManager;
$this->configFactory = $configFactory;
$this->moduleHandler = $moduleHandler;
$this->renderer = $renderer;
}
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static($configuration, $plugin_id, $plugin_definition, $container
->get('current_user'), $container
->get('entity_type.manager'), $container
->get('config.factory'), $container
->get('module_handler'), $container
->get('renderer'));
}
public function defaultConfiguration() {
return [] + parent::defaultConfiguration();
}
protected function blockAccess(AccountInterface $account) {
return AccessResult::allowedIfHasPermission($account, 'access matomo reports');
}
public function build() {
$renderer = $this->renderer;
$current_user = $this->currentUser;
$build = [];
if (!$this->moduleHandler
->moduleExists('matomo')) {
$build['#markup'] = $this
->t('To use this block, you need to install the <a href=":url">Matomo</a> module', [
':url' => 'https://www.drupal.org/project/matomo',
]);
return $build;
}
$token_auth = MatomoData::getToken();
$matomo_url = MatomoData::getUrl();
if (empty($matomo_url)) {
$build['#markup'] = $this
->t('Please configure the <a href=":url">Matomo settings</a> to use this block.', [
':url' => '/admin/config/system/matomo',
]);
return $build;
}
$data_params = [];
$data_params['idSite'] = $this->configFactory
->get('matomo.settings')
->get('site_id');
$data_params['date'] = 'today';
$data_params['period'] = 'year';
$data_params['module'] = 'API';
$data_params['method'] = 'Actions.getPageUrl';
$data_params['pageUrl'] = urldecode($_SERVER['REQUEST_URI']);
$data_params['format'] = 'JSON';
if (!empty($token_auth)) {
$data_params['token_auth'] = $token_auth;
}
$query_string = http_build_query($data_params);
$build['#markup'] = '<div id="matomopageviews"></div>';
$build['#attached']['library'][] = 'matomo_reports/matomoreports';
$build['#attached']['drupalSettings']['matomo_reports']['matomoJS']['url'] = $matomo_url;
$build['#attached']['drupalSettings']['matomo_reports']['matomoJS']['query_string'] = $query_string;
$build['#cache']['contexts'] = [
'user',
'url',
];
$renderer
->addCacheableDependency($build, $this->entityTypeManager
->getStorage('user')
->load($current_user
->id()));
return $build;
}
}