From 8eaa5e866a65730f0906ec60182f53d9c42bacaf Mon Sep 17 00:00:00 2001 From: Thomas Steur Date: Mon, 24 Sep 2018 16:15:30 +1200 Subject: [PATCH] Add possibility to manage and view Intranet websites #7724 --- config/global.ini.php | 1 + core/Tracker/Visit.php | 6 --- core/Tracker/VisitorRecognizer.php | 5 ++ core/Updates/3.6.1-b2.php | 1 + .../IntranetMeasurable/IntranetMeasurable.php | 46 +++++++++++++++++++ .../IntranetMeasurable/MeasurableSettings.php | 39 ++++++++++++++++ .../Tracker/RequestProcessor.php | 37 +++++++++++++++ plugins/IntranetMeasurable/Type.php | 20 ++++++++ plugins/IntranetMeasurable/lang/en.json | 9 ++++ plugins/IntranetMeasurable/plugin.json | 4 ++ plugins/SitesManager/SitesManager.php | 1 + 11 files changed, 163 insertions(+), 6 deletions(-) create mode 100644 plugins/IntranetMeasurable/IntranetMeasurable.php create mode 100644 plugins/IntranetMeasurable/MeasurableSettings.php create mode 100644 plugins/IntranetMeasurable/Tracker/RequestProcessor.php create mode 100644 plugins/IntranetMeasurable/Type.php create mode 100644 plugins/IntranetMeasurable/lang/en.json create mode 100644 plugins/IntranetMeasurable/plugin.json diff --git a/config/global.ini.php b/config/global.ini.php index 17df3416821..fe3168065be 100644 --- a/config/global.ini.php +++ b/config/global.ini.php @@ -868,6 +868,7 @@ Plugins[] = CoreAdminHome Plugins[] = CoreHome Plugins[] = WebsiteMeasurable +Plugins[] = IntranetMeasurable Plugins[] = Diagnostics Plugins[] = CoreVisualizations Plugins[] = Proxy diff --git a/core/Tracker/Visit.php b/core/Tracker/Visit.php index 06382c26d72..737c24c380f 100644 --- a/core/Tracker/Visit.php +++ b/core/Tracker/Visit.php @@ -65,11 +65,6 @@ class Visit implements VisitInterface */ protected $visitProperties; - /** - * @var VisitorRecognizer - */ - private $visitorRecognizer; - /** * @var ArchiveInvalidator */ @@ -79,7 +74,6 @@ public function __construct() { $requestProcessors = StaticContainer::get('Piwik\Plugin\RequestProcessors'); $this->requestProcessors = $requestProcessors->getRequestProcessors(); - $this->visitorRecognizer = StaticContainer::get('Piwik\Tracker\VisitorRecognizer'); $this->visitProperties = null; $this->userSettings = StaticContainer::get('Piwik\Tracker\Settings'); $this->invalidator = StaticContainer::get('Piwik\Archive\ArchiveInvalidator'); diff --git a/core/Tracker/VisitorRecognizer.php b/core/Tracker/VisitorRecognizer.php index 7727156727a..4b3be310a2a 100644 --- a/core/Tracker/VisitorRecognizer.php +++ b/core/Tracker/VisitorRecognizer.php @@ -77,6 +77,11 @@ public function __construct($trustCookiesOnly, $visitStandardLength, $lookbackNS $this->eventDispatcher = $eventDispatcher; } + public function setTrustCookiesOnly($trustCookiesOnly) + { + $this->trustCookiesOnly = $trustCookiesOnly; + } + public function findKnownVisitor($configId, VisitProperties $visitProperties, Request $request) { $idSite = $request->getIdSite(); diff --git a/core/Updates/3.6.1-b2.php b/core/Updates/3.6.1-b2.php index 1236c0f167e..70ed561b28f 100644 --- a/core/Updates/3.6.1-b2.php +++ b/core/Updates/3.6.1-b2.php @@ -33,6 +33,7 @@ public function getMigrations(Updater $updater) { return array( $this->migration->db->addColumn('site', 'creator_login', ' VARCHAR(100) NULL'), + $this->migration->plugin->activate('IntranetMeasurable'), ); } diff --git a/plugins/IntranetMeasurable/IntranetMeasurable.php b/plugins/IntranetMeasurable/IntranetMeasurable.php new file mode 100644 index 00000000000..8b0aba0589a --- /dev/null +++ b/plugins/IntranetMeasurable/IntranetMeasurable.php @@ -0,0 +1,46 @@ + 'recordWebsiteDataInCache', + ); + } + + public function isTrackerPlugin() + { + return true; + } + + public function recordWebsiteDataInCache(&$array, $idSite) + { + $idSite = (int) $idSite; + $type = Site::getTypeFor($idSite); + if ($type === Type::ID) { + /** @var \Piwik\Plugins\IntranetMeasurable\MeasurableSettings $measurableSettings */ + $measurableSettings = StaticContainer::getContainer()->make( + '\Piwik\Plugins\IntranetMeasurable\MeasurableSettings', + array('idSite' => $idSite, 'idMeasurableType' => Site::getTypeFor($idSite)) + ); + + // add the 'hosts' entry in the website array + $array['enable_trust_visitors_cookies'] = (int) $measurableSettings->trustvisitorcookies->getValue(); + } + } +} diff --git a/plugins/IntranetMeasurable/MeasurableSettings.php b/plugins/IntranetMeasurable/MeasurableSettings.php new file mode 100644 index 00000000000..e936c5f6a5f --- /dev/null +++ b/plugins/IntranetMeasurable/MeasurableSettings.php @@ -0,0 +1,39 @@ +trustvisitorcookies = $this->makeTrustVisitorCookies(); + parent::init(); + } + + private function makeTrustVisitorCookies() + { + return $this->makeSetting('trust_visitors_cookies', $default = true, FieldConfig::TYPE_BOOL, function (FieldConfig $field) { + $field->title = Piwik::translate('IntranetMeasurable_TrustVisitorCookies'); + $field->inlineHelp = Piwik::translate('IntranetMeasurable_TrustVisitorCookiesHelp'); + $field->uiControl = FieldConfig::UI_CONTROL_CHECKBOX; + }); + } +} diff --git a/plugins/IntranetMeasurable/Tracker/RequestProcessor.php b/plugins/IntranetMeasurable/Tracker/RequestProcessor.php new file mode 100644 index 00000000000..503aeeb0381 --- /dev/null +++ b/plugins/IntranetMeasurable/Tracker/RequestProcessor.php @@ -0,0 +1,37 @@ +getIdSite(); + if ($idSite && !StaticContainer::get($this->settingName)) { + // we may need to enable it for an intranet site... + + $site = Cache::getCacheWebsiteAttributes($idSite); + if (!empty($site['type']) + && $site['type'] === Type::ID + && !empty($site['enable_trust_visitors_cookies'])) { + + StaticContainer::get('Piwik\Tracker\VisitorRecognizer')->setTrustCookiesOnly(1); + StaticContainer::getContainer()->set($this->settingName, 1); + } + } + } +} diff --git a/plugins/IntranetMeasurable/Type.php b/plugins/IntranetMeasurable/Type.php new file mode 100644 index 00000000000..a6636e2771c --- /dev/null +++ b/plugins/IntranetMeasurable/Type.php @@ -0,0 +1,20 @@ +getTrackerSearchCategoryParameters($website); $array['timezone'] = $this->getTimezoneFromWebsite($website); $array['ts_created'] = $website['ts_created']; + $array['type'] = $website['type']; } /**