Skip to content

Commit bada42d

Browse files
author
Joshua Brule
committed
Updated for compatibility with Piwik 3.0+. Added Matomo branding.
1 parent c69ef8d commit bada42d

File tree

7 files changed

+181
-136
lines changed

7 files changed

+181
-136
lines changed

API.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public function getSettings()
1313

1414
$params = array("idSite","piwikUrl","options","optionsBeforeTrackerUrl","httpsPiwikUrl","protocol");
1515

16-
$settings = new Settings(self::$plugin_name);
16+
$settings = new SystemSettings();
1717

1818
foreach($params as $param){
1919

README.md

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
# Piwik TrackingCodeCustomizer Plugin
2-
Tracking Code Customizer plugin for the Piwik Web Analytics software package
1+
# Matomo, formerly Piwik, TrackingCodeCustomizer Plugin
2+
Tracking Code Customizer plugin for the Matomo Web Analytics software package
33

44
##Description
5-
Allows Piwik admininstrators to customize the tracking code that is autogenerated for users. This is useful for directing requests to the correct servers in a multi-server setup, include additional parameters in default tracking, or to perform conditional checks before initiating a tracking call.
5+
Allows Matomo admininstrators to customize the tracking code that is autogenerated for users. This is useful for directing requests to the correct servers in a multi-server setup, include additional parameters in default tracking, or to perform conditional checks before initiating a tracking call.
66

77
##Instructions
8-
The easiest way to install is to find the plugin in the [Piwik Marketplace](http://plugins.piwik.org/).
8+
The easiest way to install is to find the plugin in the [Matomo Marketplace](https://plugins.matomo.org/).
99

1010
##Usage
1111

@@ -16,7 +16,7 @@ if (typeof(hash) !== 'undefined'){_paq.push(['setCustomVariable','1','U',hash,'v
1616
```
1717
Resultant tracking code
1818
```javascript
19-
<!-- Piwik -->
19+
<!-- Matomo -->
2020
<script type="text/javascript">
2121
var _paq = _paq || [];
2222
if (typeof(hash) !== 'undefined'){_paq.push(['setCustomVariable','1','U',hash,'visit']); _paq.push(['setUserId',hash]);};
@@ -30,10 +30,11 @@ _paq.push(['setTrackerUrl', u+'piwik.php']);
3030
})();
3131
</script>
3232
<noscript><p><img src="//webanalytics-tracker.XXXX.XXX/piwik.php?idsite=1" style="border:0;" alt="" /></p></noscript>
33-
<!-- End Piwik Code -->
33+
<!-- End Matomo Code -->
3434
```
3535

3636
##Changelog
37+
3.0.0 Updated for compatibility with Piwik 3.0+. Added "Matomo" branding. Users on pre 3.0 release please see 2.x-dev branch.
3738
0.1.2 Updated for compatibility with Piwik v2.15 and included new registerEvents() hook for compatibility with Piwik 3.0
3839
0.1.1 Version bump to activation Marketplace hook
3940
0.1.0 Initial Release

Settings.php

Lines changed: 0 additions & 106 deletions
This file was deleted.

SystemSettings.php

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
<?php
2+
/**
3+
* Piwik - free/libre analytics platform
4+
*
5+
* @link http://piwik.org
6+
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
7+
*/
8+
9+
namespace Piwik\Plugins\TrackingCodeCustomizer;
10+
11+
use Piwik\Piwik;
12+
use Piwik\Settings\Setting;
13+
use Piwik\Settings\FieldConfig;
14+
15+
/**
16+
* Defines Settings for TrackingCodeCustomizer.
17+
*
18+
* Usage like this:
19+
* $settings = new SystemSettings();
20+
* $settings->metric->getValue();
21+
* $settings->description->getValue();
22+
*/
23+
class SystemSettings extends \Piwik\Settings\Plugin\SystemSettings
24+
{
25+
26+
public $idSite;
27+
public $protocol;
28+
public $piwikUrl;
29+
public $httpsPiwikUrl;
30+
public $options;
31+
public $optionsBeforeTrackerUrl;
32+
33+
const TEXTBOX_SETTINGS = array("size"=> 65);
34+
35+
protected function init()
36+
{
37+
$this->idSite = $this->createIdSiteSetting();
38+
$this->protocol = $this->createProtocolSetting();
39+
$this->piwikUrl = $this->createInstallUrlSetting();
40+
$this->httpsPiwikUrl = $this->createSecureInstallUrlSetting();
41+
$this->options = $this->createOptionsSetting();
42+
$this->optionsBeforeTrackerUrl = $this->createOptionsBeforeTrackerUrl();
43+
}
44+
45+
private function createIdSiteSetting(){
46+
return $this->makeSetting('idSite', $default = "", FieldConfig::TYPE_STRING, function (FieldConfig $field) {
47+
$field->title = $this->t('idSiteSettingTitle');
48+
$field->uiControl = FieldConfig::UI_CONTROL_TEXT;
49+
$field->uiControlAttributes = array("size" => "6", "maxlength" => "8");
50+
$field->description = $this->t('TitleSettingDescription');
51+
$field->inlineHelp = sprintf('<br/>Probably not useful in most scenarios. The idSite option is included for completeness.<br/><br/>Default: %s',$this->t('TitleSettingDefault'));
52+
$field->validate = function ($value, $setting) {
53+
if ($value != "" && preg_match("/^[0-9]+$/",$value) !== 1) {
54+
throw new \Exception('Value is invalid. Must be positive integer');
55+
}
56+
};
57+
58+
});
59+
}
60+
61+
private function createProtocolSetting(){
62+
return $this->makeSetting('protocol', $default = "", FieldConfig::TYPE_STRING, function (FieldConfig $field) {
63+
$field->title = $this->t('protocolSettingTitle');
64+
$field->uiControl = FieldConfig::UI_CONTROL_TEXT;
65+
$field->uiControlAttributes = array("size" => "10", "maxlength" => "8");
66+
$field->description = $this->t('protocolSettingDescription');
67+
$field->inlineHelp = sprintf('<br/>http:// or https://<br/><br/>Default: %s',$this->t('protocolSettingDefault'));
68+
$field->validate = function ($value, $setting) {
69+
if ($value != "" && !($value == "http://" || $value == "https://")) {
70+
throw new \Exception('Value is invalid');
71+
}
72+
};
73+
});
74+
}
75+
76+
private function createInstallUrlSetting(){
77+
return $this->makeSetting('piwikUrl', $default = "", FieldConfig::TYPE_STRING, function (FieldConfig $field) {
78+
$field->title = $this->t('piwikUrlSettingTitle');
79+
$field->uiControl = FieldConfig::UI_CONTROL_TEXT;
80+
//$field->uiControlAttributes = array("size"=> 65);
81+
$field->description = $this->t('piwikUrlSettingDescription');
82+
$field->inlineHelp = sprintf('<br/>tracker.example.com/piwik use hostname+basepath only (omit protocol and trailing slash)<br/><br/>Default: %s',$this->t('piwikUrlSettingDefault'));
83+
});
84+
}
85+
86+
private function createSecureInstallUrlSetting(){
87+
return $this->makeSetting('httpsPiwikUrl', $default = "", FieldConfig::TYPE_STRING, function (FieldConfig $field) {
88+
$field->title = $this->t('httpsPiwikUrlSettingTitle');
89+
$field->uiControl = FieldConfig::UI_CONTROL_TEXT;
90+
//$field->uiControlAttributes = array("size"=> 65);
91+
$field->description = $this->t('httpsPiwikUrlSettingDescription');
92+
$field->inlineHelp = sprintf('<br/>secure-tracker.example.com/piwik use hostname+basepath only (omit protocol and trailing slash)<br/><br/>Default: %s',$this->t('httpsPiwikUrlSettingDefault'));
93+
94+
});
95+
}
96+
97+
private function createOptionsSetting(){
98+
return $this->makeSetting('options', $default = "", FieldConfig::TYPE_STRING, function (FieldConfig $field) {
99+
$field->title = $this->t('optionsSettingTitle');
100+
$field->uiControl = FieldConfig::UI_CONTROL_TEXTAREA;
101+
//$field->uiControlAttributes = array("size"=> 65);
102+
$field->description = $this->t('optionsSettingDescription');
103+
$field->inlineHelp = sprintf('<br/>{$original_paramname} and {$paramname} tokens are available for referencing values.<br/><br/>Default: %s',$this->t('optionsSettingDefault'));
104+
});
105+
}
106+
107+
private function createOptionsBeforeTrackerUrl(){
108+
return $this->makeSetting('optionsBeforeTrackerUrl', $default = "", FieldConfig::TYPE_STRING, function (FieldConfig $field) {
109+
$field->title = $this->t('optionsBeforeTrackerUrlSettingTitle');
110+
$field->uiControl = FieldConfig::UI_CONTROL_TEXTAREA;
111+
//$field->uiControlAttributes = array("size"=> 65);
112+
$field->description = $this->t('optionsBeforeTrackerUrlSettingDescription');
113+
$field->inlineHelp = sprintf('<br/>{$original_paramname} and {$paramname} tokens are available for referencing values.<br/><br/>Default: %s',$this->t('optionsBeforeTrackerUrlSettingDefault'));
114+
});
115+
}
116+
117+
private function t($translate_token){
118+
return Piwik::translate("TrackingCodeCustomizer_".$translate_token);
119+
}
120+
}

TrackingCodeCustomizer.php

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,7 @@ public function applyTrackingCodeCustomizations(&$sysparams,$parameters){
7575

7676
$originalSysparams = $sysparams;
7777

78-
$settings = API::getInstance();
79-
80-
$storedSettings = $settings->getSettings();
78+
$storedSettings = $this->getSettings();
8179

8280
if(array_key_exists("options", $storedSettings))
8381
$storedSettings["options"] .= $sysparams["options"];
@@ -94,6 +92,27 @@ public function applyTrackingCodeCustomizations(&$sysparams,$parameters){
9492

9593
}
9694

95+
private function getSettings()
96+
{
97+
$outParams = array();
98+
99+
$params = array("idSite","piwikUrl","options","optionsBeforeTrackerUrl","httpsPiwikUrl","protocol");
100+
101+
$settings = new SystemSettings();
102+
103+
//print_r($settings);
104+
//end();
105+
106+
foreach($params as $param){
107+
108+
$value = $settings->{$param}->getValue();
109+
if(!empty($value))
110+
$outParams[$param] = $value;
111+
}
112+
113+
return $outParams;
114+
}
115+
97116
private function replaceTokens($subject,$originalSysparams,$sysparams){
98117
$output = str_replace(array_map(function($item){return '{$original_'.$item.'}';},array_keys($originalSysparams)),array_values($originalSysparams),$subject);
99118
$output = str_replace(array_map(function($item){return '{$'.$item.'}';},array_keys($sysparams)),array_values($sysparams),$output);

lang/en.json

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,21 @@
33
"PluginDescription":"The provided values will replace the defaults in the generated tracking code (leave blank to use defaults). Viewing https://github.com/piwik/piwik/blob/master/core/Tracker/TrackerCodeGenerator.php is recommended to deconstruct how the tracking code is built.",
44
"idSiteSettingTitle":"idSite",
55
"idSiteSettingDescription":"The siteId that will be included in the tracking code.",
6+
"idSiteSettingDefault":"Dependent on selected site.",
67
"protocolSettingTitle":"protocol",
78
"protocolSettingDescription":"Piwik url protocol.",
9+
"protocolSettingDefault":"\"//\"",
810
"piwikUrlSettingTitle":"piwikUrl",
9-
"piwikUrlSettingDescription":"The tracker URL to use.",
11+
"piwikUrlSettingDescription":"The tracker URL to use.\nDefault: Same as Matomo installation path",
12+
"piwikUrlSettingDefault":"Same as Matomo installation path",
1013
"httpsPiwikUrlSettingTitle":"httpsPiwikUrl",
1114
"httpsPiwikUrlSettingDescription":"Set if the HTTPS domain is different from the normal domain.",
15+
"httpsPiwikUrlSettingDefault":"Attempts to detect protocol and retrieves using piwikUrl.<br/>Note: Setting a value here will disable protocol checking and force https.",
1216
"optionsSettingTitle":"options",
1317
"optionsSettingDescription":"A string of JavaScript code that customizes the JavaScript tracker (after _paq = _paq || [] and before trackPageView).",
18+
"optionsSettingDefault":"Empty",
1419
"optionsBeforeTrackerUrlSettingTitle":"optionsBeforeTrackerUrl",
15-
"optionsBeforeTrackerUrlSettingDescription":"A string of Javascript code that customizes the JavaScript tracker inside of anonymous function before adding setTrackerUrl into paq."
20+
"optionsBeforeTrackerUrlSettingDescription":"A string of Javascript code that customizes the JavaScript tracker inside of anonymous function before adding setTrackerUrl into paq.",
21+
"optionsBeforeTrackerUrlSettingDefault":"Empty"
1622
}
1723
}

plugin.json

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,24 @@
11
{
2-
"name": "TrackingCodeCustomizer",
3-
"version": "0.1.2",
4-
"license": "GPL v3+",
5-
"keywords": ["tracking", "javascript tracking","customize tracking","customise tracking"],
6-
"description": "Allows Piwik admininstrators to customize the tracking code that is autogenerated for users. This is useful for directing requests to the correct servers in a multi-server setup, include additional parameters in default tracking, or to perform conditional checks before initiating a tracking call. ",
7-
"homepage": "https://github.com/jbrule/piwikplugin-TrackingCodeCustomizer",
8-
"theme": false,
9-
"require": {
10-
"piwik": ">=v2.12.0"
11-
},
12-
"authors": [
13-
{
14-
"name": "Josh Brule",
15-
"email": "",
16-
"homepage": "https://www.linkedin.com/pub/joshua-brule/15/326/9b9"
17-
}
18-
]
19-
}
2+
"name": "TrackingCodeCustomizer",
3+
"version": "3.0.0",
4+
"license": "GPL v3+",
5+
"keywords": [
6+
"tracking",
7+
"javascript tracking",
8+
"customize tracking",
9+
"customise tracking"
10+
],
11+
"description": "Allows Matomo (Piwik) admininstrators to customize the tracking code that is autogenerated for users. This is useful for directing requests to the correct servers in a multi-server setup, include additional parameters in default tracking, or to perform conditional checks before initiating a tracking call. ",
12+
"homepage": "https:\/\/github.com\/jbrule\/piwikplugin-TrackingCodeCustomizer",
13+
"theme": false,
14+
"require": {
15+
"piwik": ">=3.0.0-stable,<4.0.0-b1"
16+
},
17+
"authors": [
18+
{
19+
"name": "Josh Brule",
20+
"email": "",
21+
"homepage": "https:\/\/www.linkedin.com\/pub\/joshua-brule\/15\/326\/9b9"
22+
}
23+
]
24+
}

0 commit comments

Comments
 (0)