Skip to content

Commit

Permalink
Add possibility to manage and view Intranet websites #7724
Browse files Browse the repository at this point in the history
  • Loading branch information
tsteur committed Sep 24, 2018
1 parent 53b278c commit 8eaa5e8
Show file tree
Hide file tree
Showing 11 changed files with 163 additions and 6 deletions.
1 change: 1 addition & 0 deletions config/global.ini.php
Original file line number Diff line number Diff line change
Expand Up @@ -868,6 +868,7 @@
Plugins[] = CoreAdminHome
Plugins[] = CoreHome
Plugins[] = WebsiteMeasurable
Plugins[] = IntranetMeasurable
Plugins[] = Diagnostics
Plugins[] = CoreVisualizations
Plugins[] = Proxy
Expand Down
6 changes: 0 additions & 6 deletions core/Tracker/Visit.php
Original file line number Diff line number Diff line change
Expand Up @@ -65,11 +65,6 @@ class Visit implements VisitInterface
*/
protected $visitProperties;

/**
* @var VisitorRecognizer
*/
private $visitorRecognizer;

/**
* @var ArchiveInvalidator
*/
Expand All @@ -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');
Expand Down
5 changes: 5 additions & 0 deletions core/Tracker/VisitorRecognizer.php
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
1 change: 1 addition & 0 deletions core/Updates/3.6.1-b2.php
Original file line number Diff line number Diff line change
Expand Up @@ -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'),
);
}

Expand Down
46 changes: 46 additions & 0 deletions plugins/IntranetMeasurable/IntranetMeasurable.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
<?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\IntranetMeasurable;

use Piwik\Container\StaticContainer;
use Piwik\Site;

class IntranetMeasurable extends \Piwik\Plugin
{
/**
* @see \Piwik\Plugin::registerEvents
*/
public function registerEvents()
{
return array(
'Tracker.Cache.getSiteAttributes' => '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();
}
}
}
39 changes: 39 additions & 0 deletions plugins/IntranetMeasurable/MeasurableSettings.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
<?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\IntranetMeasurable;

use Piwik\Piwik;
use Piwik\Settings\FieldConfig;
use Piwik\Settings\Setting;

class MeasurableSettings extends \Piwik\Plugins\WebsiteMeasurable\MeasurableSettings
{
/** @var Setting */
public $trustvisitorcookies;

protected function shouldShowSettingsForType($type)
{
return $type === Type::ID;
}

protected function init()
{
$this->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;
});
}
}
37 changes: 37 additions & 0 deletions plugins/IntranetMeasurable/Tracker/RequestProcessor.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
<?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\IntranetMeasurable\Tracker;

use Piwik\Container\StaticContainer;
use Piwik\Plugins\IntranetMeasurable\MeasurableSettings;
use Piwik\Plugins\IntranetMeasurable\Type;
use Piwik\Tracker\Cache;
use Piwik\Tracker\Request;

class RequestProcessor extends \Piwik\Tracker\RequestProcessor
{
private $settingName = 'ini.Tracker.trust_visitors_cookies';

public function manipulateRequest(Request $request)
{
$idSite = $request->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);
}
}
}
}
20 changes: 20 additions & 0 deletions plugins/IntranetMeasurable/Type.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?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\IntranetMeasurable;

class Type extends \Piwik\Measurable\Type
{
const ID = 'intranet';
protected $name = 'IntranetMeasurable_Intranet';
protected $namePlural = 'IntranetMeasurable_Intranets';
protected $description = 'IntranetMeasurable_IntranetDescription';
protected $howToSetupUrl = '?module=CoreAdminHome&action=trackingCodeGenerator';

}

9 changes: 9 additions & 0 deletions plugins/IntranetMeasurable/lang/en.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"IntranetMeasurable": {
"Intranet": "Intranet",
"Intranets": "Intranets",
"IntranetDescription": "An intranet measurable is just like a website but hosted on an internal network.",
"TrustVisitorCookies": "Trust Visitor Cookies",
"TrustVisitorCookiesHelp": "This should be enabled when most visitors have the same configuration (browsers, operating systems); and the same IP for better unique visitors recognition. If disabled, all visitors will be counted as one single visitor."
}
}
4 changes: 4 additions & 0 deletions plugins/IntranetMeasurable/plugin.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"name": "IntranetMeasurable",
"description": "Analytics for the web: lets you measure and analyze intranet websites."
}
1 change: 1 addition & 0 deletions plugins/SitesManager/SitesManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,7 @@ public function recordWebsiteDataInCache(&$array, $idSite)
$array['sitesearch_category_parameters'] = $this->getTrackerSearchCategoryParameters($website);
$array['timezone'] = $this->getTimezoneFromWebsite($website);
$array['ts_created'] = $website['ts_created'];
$array['type'] = $website['type'];
}

/**
Expand Down

0 comments on commit 8eaa5e8

Please sign in to comment.