Marcel Kapfer
09f9578d20
For some reason the AssetCollector instance created (or passed) in the PageRendererPreProcess constructor was not used, but instead a new instance was made as part of the addLibrary function. This commit refactors PageRendererPreProcess::addLibrary to use the already created AssetCollector.
77 lines
2 KiB
PHP
77 lines
2 KiB
PHP
<?php
|
|
|
|
namespace MMK2410\PlausibleAnalytics\Hooks;
|
|
|
|
use TYPO3\CMS\Core\Page\AssetCollector;
|
|
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
|
|
|
class PageRendererPreProcess
|
|
{
|
|
/** @var \TYPO3\CMS\Core\Page\AssetCollector */
|
|
private $assetCollector;
|
|
|
|
/** @var \TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController */
|
|
private $tsfe;
|
|
|
|
public function __construct(AssetCollector $assetCollector = null)
|
|
{
|
|
$this->assetCollector = $assetCollector ?? GeneralUtility::makeInstance(AssetCollector::class);
|
|
$this->tsfe = $GLOBALS['TSFE'] ?? null;
|
|
}
|
|
|
|
public function addLibrary(): void
|
|
{
|
|
if (!isset($this->tsfe)) {
|
|
return;
|
|
}
|
|
|
|
$domain = $this->getDomain();
|
|
$plausible = $this->getPlausibleURL();
|
|
|
|
if (isset($domain) && isset($plausible) && !$this->tsfe->isBackendUserLoggedIn()) {
|
|
$this->assetCollector->addJavaScript(
|
|
'plausible_analytics',
|
|
$plausible . '/js/plausible.js',
|
|
[
|
|
'async' => 'async',
|
|
'defer' => 'defer',
|
|
'data-domain' => $domain
|
|
],
|
|
);
|
|
}
|
|
}
|
|
|
|
protected function getPlausibleURL(): ?string
|
|
{
|
|
if (!isset($this->tsfe)) {
|
|
return null;
|
|
}
|
|
|
|
return $this->tsfe->getSite()->getConfiguration()['plausible_url'] ?? null;
|
|
}
|
|
|
|
protected function getDomain(): ?string
|
|
{
|
|
if (!isset($this->tsfe)) {
|
|
return null;
|
|
}
|
|
|
|
$domain = $this->tsfe->getSite()->getConfiguration()['plausible_domain'];
|
|
|
|
if (!empty($domain)) {
|
|
return $domain;
|
|
}
|
|
|
|
$base = $this->tsfe->getSite()->getConfiguration()['base'];
|
|
|
|
if (!isset($base)) {
|
|
return null;
|
|
}
|
|
|
|
if (strpos($base, 'http://') !== false || strpos($base, 'https://') !== false) {
|
|
return preg_replace('/https?:\/\/([^\/\n]*).*/', '$1', $base);
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
}
|