%PDF- %PDF-
Direktori : /data/www_bck/varak.net_bck/stats.varak.net/plugins/SitesManager/ |
Current File : //data/www_bck/varak.net_bck/stats.varak.net/plugins/SitesManager/Controller.php |
<?php /** * Matomo - free/libre analytics platform * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later * */ namespace Piwik\Plugins\SitesManager; use Exception; use Piwik\API\Request; use Piwik\API\ResponseBuilder; use Piwik\Common; use Piwik\Container\StaticContainer; use Piwik\Piwik; use Piwik\Plugin\Manager; use Piwik\Plugin; use Piwik\Plugins\CustomVariables\CustomVariables; use Piwik\Plugins\PrivacyManager\DoNotTrackHeaderChecker; use Piwik\Site; use Piwik\SiteContentDetector; use Piwik\Session; use Piwik\SettingsPiwik; use Piwik\Tracker\TrackerCodeGenerator; use Piwik\Url; use Matomo\Cache\Lazy; /** * */ class Controller extends \Piwik\Plugin\ControllerAdmin { /** @var Lazy */ private $cache; /** @var SiteContentDetector */ private $siteContentDetector; public function __construct(Lazy $cache, SiteContentDetector $siteContentDetector) { $this->cache = $cache; $this->siteContentDetector = $siteContentDetector; parent::__construct(); } /** * Main view showing listing of websites and settings */ public function index() { Piwik::checkUserHasSomeAdminAccess(); SitesManager::dieIfSitesAdminIsDisabled(); return $this->renderTemplate('index'); } public function globalSettings() { Piwik::checkUserHasSuperUserAccess(); return $this->renderTemplate('globalSettings'); } public function getGlobalSettings() { Piwik::checkUserHasSomeViewAccess(); $response = new ResponseBuilder(Common::getRequestVar('format')); $globalSettings = []; $globalSettings['keepURLFragmentsGlobal'] = API::getInstance()->getKeepURLFragmentsGlobal(); $globalSettings['defaultCurrency'] = API::getInstance()->getDefaultCurrency(); $globalSettings['searchKeywordParametersGlobal'] = API::getInstance()->getSearchKeywordParametersGlobal(); $globalSettings['searchCategoryParametersGlobal'] = API::getInstance()->getSearchCategoryParametersGlobal(); $globalSettings['defaultTimezone'] = API::getInstance()->getDefaultTimezone(); $globalSettings['excludedIpsGlobal'] = API::getInstance()->getExcludedIpsGlobal(); $globalSettings['excludedQueryParametersGlobal'] = API::getInstance()->getExcludedQueryParametersGlobal(); $globalSettings['excludedUserAgentsGlobal'] = API::getInstance()->getExcludedUserAgentsGlobal(); $globalSettings['excludedReferrersGlobal'] = API::getInstance()->getExcludedReferrersGlobal(); return $response->getResponse($globalSettings); } /** * Records Global settings when user submit changes */ public function setGlobalSettings() { $response = new ResponseBuilder(Common::getRequestVar('format')); try { $this->checkTokenInUrl(); $timezone = Common::getRequestVar('timezone', false); $excludedIps = Common::getRequestVar('excludedIps', false); $excludedQueryParameters = Common::getRequestVar('excludedQueryParameters', false); $excludedUserAgents = Common::getRequestVar('excludedUserAgents', false); $excludedReferrers = Common::getRequestVar('excludedReferrers', false); $currency = Common::getRequestVar('currency', false); $searchKeywordParameters = Common::getRequestVar('searchKeywordParameters', $default = ""); $searchCategoryParameters = Common::getRequestVar('searchCategoryParameters', $default = ""); $keepURLFragments = Common::getRequestVar('keepURLFragments', $default = 0); $api = API::getInstance(); $api->setDefaultTimezone($timezone); $api->setDefaultCurrency($currency); $api->setGlobalExcludedQueryParameters($excludedQueryParameters); $api->setGlobalExcludedIps($excludedIps); $api->setGlobalExcludedUserAgents($excludedUserAgents); $api->setGlobalExcludedReferrers($excludedReferrers); $api->setGlobalSearchParameters($searchKeywordParameters, $searchCategoryParameters); $api->setKeepURLFragmentsGlobal($keepURLFragments); $toReturn = $response->getResponse(); } catch (Exception $e) { $toReturn = $response->getResponseException($e); } return $toReturn; } public function ignoreNoDataMessage() { Piwik::checkUserHasSomeViewAccess(); $session = new Session\SessionNamespace('siteWithoutData'); $session->ignoreMessage = true; $session->setExpirationSeconds($oneHour = 60 * 60); $url = Url::getCurrentUrlWithoutQueryString() . Url::getCurrentQueryStringWithParametersModified(array('module' => 'CoreHome', 'action' => 'index')); Url::redirectToUrl($url); } public function siteWithoutData() { $this->checkSitePermission(); $javascriptGenerator = new TrackerCodeGenerator(); $javascriptGenerator->forceMatomoEndpoint(); $piwikUrl = Url::getCurrentUrlWithoutFileName(); $jsTag = Request::processRequest('SitesManager.getJavascriptTag', ['idSite' => $this->idSite, 'piwikUrl' => $piwikUrl]); // Strip off open and close <script> tag and comments so that JS will be displayed in ALL mail clients $rawJsTag = TrackerCodeGenerator::stripTags($jsTag); $showMatomoLinks = true; /** * @ignore */ Piwik::postEvent('SitesManager.showMatomoLinksInTrackingCodeEmail', [&$showMatomoLinks]); $trackerCodeGenerator = new TrackerCodeGenerator(); $trackingUrl = trim(SettingsPiwik::getPiwikUrl(), '/') . '/' . $trackerCodeGenerator->getPhpTrackerEndpoint(); $emailTemplateData = [ 'jsTag' => $rawJsTag, 'showMatomoLinks' => $showMatomoLinks, 'trackingUrl' => $trackingUrl, 'idSite' => $this->idSite, 'consentManagerName' => false, 'cloudflare' => false, 'ga3Used' => false, 'ga4Used' => false, 'gtmUsed' => false, 'cms' => false, 'jsFramework' => false, ]; $this->siteContentDetector->detectContent([SiteContentDetector::ALL_CONTENT]); if ($this->siteContentDetector->consentManagerId) { $emailTemplateData['consentManagerName'] = $this->siteContentDetector->consentManagerName; $emailTemplateData['consentManagerUrl'] = $this->siteContentDetector->consentManagerUrl; } $emailTemplateData['ga3Used'] = $this->siteContentDetector->ga3; $emailTemplateData['ga4Used'] = $this->siteContentDetector->ga4; $emailTemplateData['gtmUsed'] = $this->siteContentDetector->gtm; $emailTemplateData['cloudflare'] = $this->siteContentDetector->cloudflare; $emailTemplateData['cms'] = $this->siteContentDetector->cms; $emailTemplateData['jsFramework'] = $this->siteContentDetector->jsFramework; $emailContent = $this->renderTemplateAs('@SitesManager/_trackingCodeEmail', $emailTemplateData, $viewType = 'basic'); $inviteUserLink = $this->getInviteUserLink(); return $this->renderTemplateAs('siteWithoutData', [ 'siteName' => $this->site->getName(), 'idSite' => $this->idSite, 'piwikUrl' => $piwikUrl, 'emailBody' => $emailContent, 'siteWithoutDataStartTrackingTranslationKey' => StaticContainer::get('SitesManager.SiteWithoutDataStartTrackingTranslation'), 'SiteWithoutDataVueFollowStepNote2Key' => StaticContainer::get('SitesManager.SiteWithoutDataVueFollowStepNote2'), 'inviteUserLink' => $inviteUserLink ], $viewType = 'basic'); } public function siteWithoutDataTabs() { $this->checkSitePermission(); $piwikUrl = Url::getCurrentUrlWithoutFileName(); $jsTag = Request::processRequest('SitesManager.getJavascriptTag', ['idSite' => $this->idSite, 'piwikUrl' => $piwikUrl]); $maxCustomVariables = 0; if (Plugin\Manager::getInstance()->isPluginActivated('CustomVariables')) { $maxCustomVariables = CustomVariables::getNumUsableCustomVariables(); } $showMatomoLinks = true; /** * @ignore */ Piwik::postEvent('SitesManager.showMatomoLinksInTrackingCodeEmail', [&$showMatomoLinks]); $googleAnalyticsImporterMessage = ''; if (Manager::getInstance()->isPluginLoaded('GoogleAnalyticsImporter')) { $googleAnalyticsImporterMessage = '<h3>' . Piwik::translate('CoreAdminHome_ImportFromGoogleAnalytics') . '</h3>' . '<p>' . Piwik::translate('CoreAdminHome_ImportFromGoogleAnalyticsDescription', ['<a href="https://plugins.matomo.org/GoogleAnalyticsImporter" rel="noopener noreferrer" target="_blank">', '</a>']) . '</p>' . '<p></p>'; /** * @ignore */ Piwik::postEvent('SitesManager.siteWithoutData.customizeImporterMessage', [&$googleAnalyticsImporterMessage]); } $tagManagerActive = false; if (Manager::getInstance()->isPluginActivated('TagManager')) { $tagManagerActive = true; } $this->siteContentDetector->detectContent([SiteContentDetector::ALL_CONTENT], $this->idSite); $dntChecker = new DoNotTrackHeaderChecker(); $templateData = [ 'siteName' => $this->site->getName(), 'idSite' => $this->idSite, 'jsTag' => $jsTag, 'piwikUrl' => $piwikUrl, 'showMatomoLinks' => $showMatomoLinks, 'siteType' => $this->siteContentDetector->cms, 'instruction' => SitesManager::getInstructionByCms($this->siteContentDetector->cms), 'gtmUsed' => $this->siteContentDetector->gtm, 'ga3Used' => $this->siteContentDetector->ga3, 'ga4Used' => $this->siteContentDetector->ga4, 'googleAnalyticsImporterMessage' => $googleAnalyticsImporterMessage, 'tagManagerActive' => $tagManagerActive, 'consentManagerName' => false, 'cloudflare' => $this->siteContentDetector->cloudflare, 'jsFramework' => $this->siteContentDetector->jsFramework, 'cms' => $this->siteContentDetector->cms, 'SiteWithoutDataVueFollowStepNote2Key' => StaticContainer::get('SitesManager.SiteWithoutDataVueFollowStepNote2'), 'defaultSiteDecoded' => [ 'id' => $this->idSite, 'name' => Common::unsanitizeInputValue(Site::getNameFor($this->idSite)), ], 'maxCustomVariables' => $maxCustomVariables, 'serverSideDoNotTrackEnabled' => $dntChecker->isActive() ]; $templateData['showGAImportTab'] = $this->shouldShowGAImportTab($templateData); if ($this->siteContentDetector->consentManagerId) { $templateData['consentManagerName'] = $this->siteContentDetector->consentManagerName; $templateData['consentManagerUrl'] = $this->siteContentDetector->consentManagerUrl; $templateData['consentManagerIsConnected'] = $this->siteContentDetector->isConnected; } $templateData['activeTab'] = $this->getActiveTabOnLoad($templateData); if ($this->siteContentDetector->jsFramework === SitesManager::JS_FRAMEWORK_VUE) { $templateData['vue3Code'] = $this->getVueInitializeCode(3); $templateData['vue2Code'] = $this->getVueInitializeCode(2); } $this->mergeMultipleNotification($templateData); return $this->renderTemplateAs('_siteWithoutDataTabs', $templateData, $viewType = 'basic'); } private function getActiveTabOnLoad($templateData) { $tabToDisplay = ''; if (!empty($templateData['gtmUsed'])) { $tabToDisplay = 'gtm'; } else if (!empty($templateData['cms']) && $templateData['cms'] === SitesManager::SITE_TYPE_WORDPRESS) { $tabToDisplay = 'wordpress'; } else if (!empty($templateData['showGAImportTab'])) { $tabToDisplay = 'ga-import'; } else if (!empty($templateData['cloudflare'])) { $tabToDisplay = 'cloudflare'; } else if (!empty($templateData['jsFramework']) && $templateData['jsFramework'] === SitesManager::JS_FRAMEWORK_VUE) { $tabToDisplay = 'vue'; } else if (!empty($templateData['jsFramework']) && $templateData['jsFramework'] === SitesManager::JS_FRAMEWORK_REACT && Manager::getInstance()->isPluginActivated('TagManager')) { $tabToDisplay = 'react'; } else if (!empty($templateData['consentManagerName'])) { $tabToDisplay = 'consentManager'; } return $tabToDisplay; } private function getInviteUserLink() { $idSite = Common::getRequestVar('idSite', 0, 'int'); if (!$idSite || !Piwik::isUserHasAdminAccess($idSite)) { return 'https://matomo.org/faq/general/manage-users/#imanadmin-creating-users'; } return SettingsPiwik::getPiwikUrl() . 'index.php?' . Url::getQueryStringFromParameters([ 'idSite' => $idSite, 'module' => 'UsersManager', 'action' => 'index', ]); } private function getVueInitializeCode($vueVersion = '3') { $piwikUrl = Url::getCurrentUrlWithoutFileName(); $siteId = Common::getRequestVar('idSite', 1, 'int'); $configureComment = Piwik::translate('SitesManager_SiteWithoutDataVueFollowStep2ExampleCodeCommentConfigureMatomo'); $trackViewComment = Piwik::translate('SitesManager_SiteWithoutDataVueFollowStep2ExampleCodeCommentTrackPageView'); if ($vueVersion == 2) { return <<<INST import { createApp } from 'vue' import VueMatomo from 'vue-matomo' import App from './App.vue' createApp(App) .use(VueMatomo, { // $configureComment host: '$piwikUrl', siteId: $siteId, }) .mount('#app') window._paq.push(['trackPageView']); // $trackViewComment INST; } return <<<INST import Vue from 'vue' import App from './App.vue' import VueMatomo from 'vue-matomo' Vue.use(VueMatomo, { host: '$piwikUrl', siteId: $siteId }); new Vue({ el: '#app', router, components: {App}, template: '' }) window._paq.push(['trackPageView']); // $trackViewComment INST; } private function mergeMultipleNotification(&$templateData) { $isNotificationsMerged = false; $bannerMessage = ''; $guides = []; $message = []; if ($templateData['ga3Used'] || $templateData['ga4Used']) { $message[0] = 'Google Analytics '; $ga3GuideUrl = '<a href="https://matomo.org/faq/how-to/migrate-from-google-analytics-3-to-matomo/" target="_blank" rel="noreferrer noopener">Google Analytics 3</a>'; $ga4GuideUrl = '<a href="https://matomo.org/faq/how-to/migrate-from-google-analytics-4-to-matomo/" target="_blank" rel="noreferrer noopener">Google Analytics 4</a>'; if ($templateData['ga3Used'] && $templateData['ga4Used']) { $isNotificationsMerged = true; $guides[] = $ga3GuideUrl; $guides[] = $ga4GuideUrl; $message[0] .= '3 & 4'; } else { $message[0] .= ($templateData['ga3Used'] ? 3 : 4); $guides[] = ($templateData['ga3Used'] ? $ga3GuideUrl : $ga4GuideUrl); } } if (!empty($message) && $templateData['consentManagerName']) { $isNotificationsMerged = true; $message[] = $templateData['consentManagerName']; $guides[] = '<a href="' . $templateData['consentManagerUrl'] . '" target="_blank" rel="noreferrer noopener">' . $templateData['consentManagerName'] . '</a>'; } if (!empty($message)) { $bannerMessage = implode(' ' . Piwik::translate('General_And') . ' ', $message); } if ($isNotificationsMerged && $bannerMessage) { $info = [ 'isNotificationsMerged' => $isNotificationsMerged, 'notificationMessage' => '<p class="fw-bold">' . Piwik::translate('SitesManager_MergedNotificationLine1', [$bannerMessage]) . '</p><p>' . Piwik::translate('SitesManager_MergedNotificationLine2', [(implode(' / ', $guides))]) . '</p>' ]; if (!empty($templateData['consentManagerIsConnected'])) { $info['notificationMessage'] .= '<p>' . Piwik::translate('SitesManager_ConsentManagerConnected', [$templateData['consentManagerName']]) . '</p>'; } } else { $info = $this->getSingleNotifications($templateData); } $templateData = array_merge($templateData, $info); } private function getSingleNotifications(&$templateData) { $info = ['isNotificationsMerged' => false, 'notificationMessage' => '']; if (!empty($templateData['consentManagerName']) ) { $info['notificationMessage'] = '<p>' . Piwik::translate('PrivacyManager_ConsentManagerDetected', [$templateData['consentManagerName'], '<a href="' . $templateData['consentManagerUrl'] . '" target="_blank" rel="noreferrer noopener">', '</a>']) . '</p>'; if (!empty($templateData['consentManagerIsConnected'])) { $info['notificationMessage'] .= '<p>' . Piwik::translate('SitesManager_ConsentManagerConnected', [$templateData['consentManagerName']]) . '</p>'; } } else if (!empty($templateData['ga3Used'])) { $info['notificationMessage'] = '<p>' . Piwik::translate('SitesManager_GADetected', ['Google Analytics 3', 'GA', '', '', '<a href="https://matomo.org/faq/how-to/migrate-from-google-analytics-3-to-matomo/" target="_blank" rel="noreferrer noopener">', '</a>']) . '</p>'; } else if (!empty($templateData['ga4Used'])) { $info['notificationMessage'] = '<p>' . Piwik::translate('SitesManager_GADetected', ['Google Analytics 4', 'GA', '', '', '<a href="https://matomo.org/faq/how-to/migrate-from-google-analytics-4-to-matomo/" target="_blank" rel="noreferrer noopener">', '</a>']) . '</p>'; } return $info; } private function shouldShowGAImportTab($templateData) { if (Piwik::hasUserSuperUserAccess() && Manager::getInstance()->isPluginActivated('GoogleAnalyticsImporter') && (!empty($templateData['ga3Used']) || !empty($templateData['ga4Used']))) { return true; } return false; } }