Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthieu Aubry <matt@piwik.org>2014-11-04 02:33:24 +0300
committerMatthieu Aubry <matt@piwik.org>2014-11-04 02:33:24 +0300
commit56e9596380f0e9edb908c968aa114bcbed9c195a (patch)
tree36a4aa8891dc25a076c81b3a6760a246d8ae1df3
parent7f7a64993d82d5baf36035f44e7a07e784bd3351 (diff)
parentd02f6010775c5267a840423332537b3a33fd86d9 (diff)
Merge pull request #6581 from piwik/installation_privacy_options2.9.0-b1
Customize privacy options on installation
-rw-r--r--core/Updates/2.9.0-b1.php19
-rw-r--r--plugins/Installation/Controller.php33
-rw-r--r--plugins/Installation/FormDefaultSettings.php23
-rw-r--r--plugins/Installation/lang/en.json2
-rw-r--r--plugins/Installation/templates/finished.twig31
-rw-r--r--plugins/PrivacyManager/Config.php4
-rw-r--r--plugins/PrivacyManager/PrivacyManager.php63
-rw-r--r--plugins/PrivacyManager/lang/en.json1
-rw-r--r--plugins/PrivacyManager/tests/Integration/PrivacyManagerConfigTest.php14
9 files changed, 162 insertions, 28 deletions
diff --git a/core/Updates/2.9.0-b1.php b/core/Updates/2.9.0-b1.php
index 8a0a096241..f36f52a6bd 100644
--- a/core/Updates/2.9.0-b1.php
+++ b/core/Updates/2.9.0-b1.php
@@ -10,6 +10,7 @@ namespace Piwik\Updates;
use Piwik\Common;
use Piwik\Db;
+use Piwik\Option;
use Piwik\Plugin\Manager;
use Piwik\Updater;
use Piwik\Updates;
@@ -22,7 +23,6 @@ class Updates_2_9_0_b1 extends Updates
$sql = self::updateBrowserEngine($sql);
-
return $sql;
}
@@ -30,6 +30,8 @@ class Updates_2_9_0_b1 extends Updates
{
Updater::updateDatabase(__FILE__, self::getSql());
+ self::updateIPAnonymizationSettings();
+
try {
Manager::getInstance()->activatePlugin('TestRunner');
} catch (\Exception $e) {
@@ -72,4 +74,19 @@ class Updates_2_9_0_b1 extends Updates
return $sql;
}
+
+ private static function updateIPAnonymizationSettings()
+ {
+ $optionName = 'PrivacyManager.ipAnonymizerEnabled';
+
+ $value = Option::get($optionName);
+
+ if ($value !== false) {
+ // If the config is defined, nothing to do
+ return;
+ }
+
+ // We disable IP anonymization if it wasn't configured (because by default it has gone from disabled to enabled)
+ Option::set($optionName, '0');
+ }
}
diff --git a/plugins/Installation/Controller.php b/plugins/Installation/Controller.php
index 0dffcd343c..a3c858f08c 100644
--- a/plugins/Installation/Controller.php
+++ b/plugins/Installation/Controller.php
@@ -24,6 +24,7 @@ use Piwik\Piwik;
use Piwik\Plugin\Manager;
use Piwik\Plugins\CoreUpdater\CoreUpdater;
use Piwik\Plugins\LanguagesManager\LanguagesManager;
+use Piwik\Plugins\PrivacyManager\IPAnonymizer;
use Piwik\Plugins\SitesManager\API as APISitesManager;
use Piwik\Plugins\UserCountry\LocationProvider;
use Piwik\Plugins\UsersManager\API as APIUsersManager;
@@ -362,8 +363,6 @@ class Controller extends \Piwik\Plugin\ControllerAdmin
{
$this->checkPiwikIsNotInstalled();
- $this->markInstallationAsCompleted();
-
$view = new View(
'@Installation/trackingCode',
$this->getInstallationSteps(),
@@ -395,6 +394,8 @@ class Controller extends \Piwik\Plugin\ControllerAdmin
*/
public function finished()
{
+ $this->checkPiwikIsNotInstalled();
+
$this->markInstallationAsCompleted();
$view = new View(
@@ -403,6 +404,34 @@ class Controller extends \Piwik\Plugin\ControllerAdmin
__FUNCTION__
);
+ $form = new FormDefaultSettings();
+
+ /**
+ * Triggered on initialization of the form to customize default Piwik settings (at the end of the installation process).
+ *
+ * @param \Piwik\Plugins\Installation\FormDefaultSettings $form
+ */
+ Piwik::postEvent('Installation.defaultSettingsForm.init', array($form));
+
+ $form->addElement('submit', 'submit', array('value' => Piwik::translate('General_ContinueToPiwik') . ' ยป', 'class' => 'submit'));
+
+ if ($form->validate()) {
+ try {
+ /**
+ * Triggered on submission of the form to customize default Piwik settings (at the end of the installation process).
+ *
+ * @param \Piwik\Plugins\Installation\FormDefaultSettings $form
+ */
+ Piwik::postEvent('Installation.defaultSettingsForm.submit', array($form));
+
+ Url::redirectToUrl('index.php');
+ } catch (Exception $e) {
+ $view->errorMessage = $e->getMessage();
+ }
+ }
+
+ $view->addForm($form);
+
$view->showNextStep = false;
$output = $view->render();
diff --git a/plugins/Installation/FormDefaultSettings.php b/plugins/Installation/FormDefaultSettings.php
new file mode 100644
index 0000000000..19f24e6cda
--- /dev/null
+++ b/plugins/Installation/FormDefaultSettings.php
@@ -0,0 +1,23 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+namespace Piwik\Plugins\Installation;
+
+use Piwik\QuickForm2;
+
+class FormDefaultSettings extends QuickForm2
+{
+ public function __construct($id = 'defaultsettingsform', $method = 'post', $attributes = null, $trackSubmit = false)
+ {
+ parent::__construct($id, $method, $attributes, $trackSubmit);
+ }
+
+ public function init()
+ {
+ }
+}
diff --git a/plugins/Installation/lang/en.json b/plugins/Installation/lang/en.json
index 742bc0744d..df8fd6e53a 100644
--- a/plugins/Installation/lang/en.json
+++ b/plugins/Installation/lang/en.json
@@ -43,6 +43,8 @@
"PercentDone": "%s %% Done",
"PleaseFixTheFollowingErrors": "Please fix the following errors",
"PluginDescription": "Installation process of Piwik. The Installation is usually done once only. If the configuration file config\/config.inc.php is deleted, the installation will start again.",
+ "DefaultSettings": "Default Piwik settings",
+ "DefaultSettingsHelp": "Piwik comes with default settings. You can customize them now or do so later in the admin screen.",
"Requirements": "Piwik Requirements",
"RestartWebServer": "After making this change, restart your web server.",
"ReusingTables": "Reusing the Tables",
diff --git a/plugins/Installation/templates/finished.twig b/plugins/Installation/templates/finished.twig
index 81b2e03276..468fe0600b 100644
--- a/plugins/Installation/templates/finished.twig
+++ b/plugins/Installation/templates/finished.twig
@@ -1,23 +1,34 @@
{% extends '@Installation/layout.twig' %}
{% block content %}
-<h2>{{ 'Installation_Congratulations'|translate|raw }}</h2>
+<h2>{{ 'Installation_Congratulations'|translate|raw }}</h2>
{{ 'Installation_CongratulationsHelp'|translate|raw }}
+<br/>
- <br/>
<h2>{{ 'Installation_WelcomeToCommunity'|translate }}</h2>
<p>
-{{ 'Installation_CollaborativeProject'|translate }}
-</p><p>
+ {{ 'Installation_CollaborativeProject'|translate }}
+</p>
+<p>
{{ 'Installation_GetInvolved'|translate('<a target="_blank" href="http://piwik.org/get-involved/">','</a>')|raw }}
- {{ 'General_HelpTranslatePiwik'|translate("<a target='_blank' href=\'http://piwik.org/translations/\'>","<\/a>")|raw }}
+ {{ 'General_HelpTranslatePiwik'|translate("<a target='_blank' href=\'http://piwik.org/translations/\'>","<\/a>")|raw }}
</p>
- <p>{{ 'Installation_WeHopeYouWillEnjoyPiwik'|translate }}</p>
- <p><i>{{ 'Installation_HappyAnalysing'|translate }}</i></p>
+<p>{{ 'Installation_WeHopeYouWillEnjoyPiwik'|translate }}</p>
+<p><i>{{ 'Installation_HappyAnalysing'|translate }}</i></p>
+<br/>
-<p class="nextStep">
- <a class="submit" href="index.php">{{ 'General_ContinueToPiwik'|translate }} &raquo;</a>
+<h2>{{ 'Installation_DefaultSettings'|translate }}</h2>
+<p>{{ 'Installation_DefaultSettingsHelp'|translate }}</p>
+{% if errorMessage is defined %}
+ <div class="error">
+ <img src="plugins/Morpheus/images/error_medium.png"/>
+ {{ 'General_Error'|translate }}:
+ <br/>- {{ errorMessage|raw }}
+ </div>
+{% endif %}
+{% if form_data is defined %}
+ {% include "genericForm.twig" %}
+{% endif %}
-</p>
{% endblock %}
diff --git a/plugins/PrivacyManager/Config.php b/plugins/PrivacyManager/Config.php
index a1e3929fa5..ac6e143b11 100644
--- a/plugins/PrivacyManager/Config.php
+++ b/plugins/PrivacyManager/Config.php
@@ -28,9 +28,9 @@ class Config
{
private $properties = array(
'useAnonymizedIpForVisitEnrichment' => array('type' => 'boolean', 'default' => true),
- 'ipAddressMaskLength' => array('type' => 'integer', 'default' => 1),
+ 'ipAddressMaskLength' => array('type' => 'integer', 'default' => 2),
'doNotTrackEnabled' => array('type' => 'boolean', 'default' => true),
- 'ipAnonymizerEnabled' => array('type' => 'boolean', 'default' => false),
+ 'ipAnonymizerEnabled' => array('type' => 'boolean', 'default' => true),
);
public function __set($name, $value)
diff --git a/plugins/PrivacyManager/PrivacyManager.php b/plugins/PrivacyManager/PrivacyManager.php
index b96cc7beed..ddce27fa3c 100644
--- a/plugins/PrivacyManager/PrivacyManager.php
+++ b/plugins/PrivacyManager/PrivacyManager.php
@@ -8,6 +8,7 @@
*/
namespace Piwik\Plugins\PrivacyManager;
+use HTML_QuickForm2_DataSource_Array;
use Piwik\Common;
use Piwik\Config as PiwikConfig;
use Piwik\DataTable\DataTableInterface;
@@ -17,7 +18,10 @@ use Piwik\Metrics;
use Piwik\Option;
use Piwik\Period;
use Piwik\Period\Range;
+use Piwik\Piwik;
+use Piwik\Plugin;
use Piwik\Plugins\Goals\Archiver;
+use Piwik\Plugins\Installation\FormDefaultSettings;
use Piwik\Site;
use Piwik\Tracker\GoalManager;
@@ -32,7 +36,7 @@ require_once PIWIK_INCLUDE_PATH . '/plugins/PrivacyManager/IPAnonymizer.php';
/**
*/
-class PrivacyManager extends \Piwik\Plugin
+class PrivacyManager extends Plugin
{
const OPTION_LAST_DELETE_PIWIK_LOGS = "lastDelete_piwik_logs";
const OPTION_LAST_DELETE_PIWIK_REPORTS = 'lastDelete_piwik_reports';
@@ -133,10 +137,12 @@ class PrivacyManager extends \Piwik\Plugin
public function getListHooksRegistered()
{
return array(
- 'AssetManager.getJavaScriptFiles' => 'getJsFiles',
- 'Tracker.setTrackerCacheGeneral' => 'setTrackerCacheGeneral',
- 'Tracker.isExcludedVisit' => array($this->dntChecker, 'checkHeaderInTracker'),
- 'Tracker.setVisitorIp' => array($this->ipAnonymizer, 'setVisitorIpAddress'),
+ 'AssetManager.getJavaScriptFiles' => 'getJsFiles',
+ 'Tracker.setTrackerCacheGeneral' => 'setTrackerCacheGeneral',
+ 'Tracker.isExcludedVisit' => array($this->dntChecker, 'checkHeaderInTracker'),
+ 'Tracker.setVisitorIp' => array($this->ipAnonymizer, 'setVisitorIpAddress'),
+ 'Installation.defaultSettingsForm.init' => 'installationFormInit',
+ 'Installation.defaultSettingsForm.submit' => 'installationFormSubmit',
);
}
@@ -152,6 +158,53 @@ class PrivacyManager extends \Piwik\Plugin
}
/**
+ * Customize the Installation "default settings" form.
+ *
+ * @param FormDefaultSettings $form
+ */
+ public function installationFormInit(FormDefaultSettings $form)
+ {
+ $form->addElement('checkbox', 'do_not_track', null,
+ array(
+ 'content' => '&nbsp;&nbsp;' . Piwik::translate('PrivacyManager_DoNotTrack_Enable') . '<br>'
+ . Piwik::translate('PrivacyManager_DoNotTrack_EnabledMoreInfo'),
+ ));
+ $form->addElement('checkbox', 'anonymise_ip', null,
+ array(
+ 'content' => '&nbsp;&nbsp;' . Piwik::translate('PrivacyManager_AnonymizeIpInlineHelp') . '<br>'
+ . Piwik::translate('PrivacyManager_AnonymizeIpExtendedHelp', array('213.34.51.91', '213.34.0.0')),
+ ));
+
+ // default values
+ $form->addDataSource(new HTML_QuickForm2_DataSource_Array(array(
+ 'do_not_track' => DoNotTrackHeaderChecker::isActive(),
+ 'anonymise_ip' => IPAnonymizer::isActive(),
+ )));
+ }
+
+ /**
+ * Process the submit on the Installation "default settings" form.
+ *
+ * @param FormDefaultSettings $form
+ */
+ public function installationFormSubmit(FormDefaultSettings $form)
+ {
+ $doNotTrack = (bool) $form->getSubmitValue('do_not_track');
+ if ($doNotTrack) {
+ DoNotTrackHeaderChecker::activate();
+ } else {
+ DoNotTrackHeaderChecker::deactivate();
+ }
+
+ $anonymiseIp = (bool) $form->getSubmitValue('anonymise_ip');
+ if ($anonymiseIp) {
+ IPAnonymizer::activate();
+ } else {
+ IPAnonymizer::deactivate();
+ }
+ }
+
+ /**
* Returns the settings for the data purging feature.
*
* @return array
diff --git a/plugins/PrivacyManager/lang/en.json b/plugins/PrivacyManager/lang/en.json
index 801cb91dec..aa84139e89 100644
--- a/plugins/PrivacyManager/lang/en.json
+++ b/plugins/PrivacyManager/lang/en.json
@@ -2,6 +2,7 @@
"PrivacyManager": {
"AnonymizeIpDescription": "Select \"Yes\" if you want Piwik not to track fully qualified IP-Addresses.",
"AnonymizeIpInlineHelp": "Anonymize the last byte(s) of visitors IP addresses to comply with your local privacy laws\/guidelines.",
+ "AnonymizeIpExtendedHelp": "When users visit your website, Piwik will not use the full IP address (such as %s) but instead Piwik will anonymise it first (to %s). IP address anonymisation is one of the requirements set by the privacy laws in some countries such as Germany.",
"AnonymizeIpMaskLengtDescription": "Select how many bytes of the visitors' IPs should be masked.",
"AnonymizeIpMaskLength": "%s byte(s) - e.g. %s",
"CannotLockSoDeleteLogActions": "The log_action table will not be purged: please grant the LOCK TABLES privilege to the '%s' MYSQL user.",
diff --git a/plugins/PrivacyManager/tests/Integration/PrivacyManagerConfigTest.php b/plugins/PrivacyManager/tests/Integration/PrivacyManagerConfigTest.php
index 4d2a121ee3..1e17f7253f 100644
--- a/plugins/PrivacyManager/tests/Integration/PrivacyManagerConfigTest.php
+++ b/plugins/PrivacyManager/tests/Integration/PrivacyManagerConfigTest.php
@@ -13,8 +13,6 @@ use Piwik\Plugins\PrivacyManager\Config as PrivacyManagerConfig;
use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
/**
- * Class Plugins_SitesManagerTest
- *
* @group Plugins
*/
class PrivacyManagerConfigTest extends IntegrationTestCase
@@ -59,16 +57,16 @@ class PrivacyManagerConfigTest extends IntegrationTestCase
public function test_ipAnonymizerEnabled()
{
- $this->assertFalse($this->config->ipAnonymizerEnabled);
+ $this->assertTrue($this->config->ipAnonymizerEnabled);
- $this->config->ipAnonymizerEnabled = true;
+ $this->config->ipAnonymizerEnabled = false;
- $this->assertTrue($this->config->ipAnonymizerEnabled);
+ $this->assertFalse($this->config->ipAnonymizerEnabled);
}
public function test_ipAddressMaskLength()
{
- $this->assertSame(1, $this->config->ipAddressMaskLength);
+ $this->assertSame(2, $this->config->ipAddressMaskLength);
$this->config->ipAddressMaskLength = '19';
@@ -81,8 +79,8 @@ class PrivacyManagerConfigTest extends IntegrationTestCase
$expected = array(
'existingEntry' => 'test',
- 'PrivacyManager.ipAddressMaskLength' => 1,
- 'PrivacyManager.ipAnonymizerEnabled' => false,
+ 'PrivacyManager.ipAddressMaskLength' => 2,
+ 'PrivacyManager.ipAnonymizerEnabled' => true,
'PrivacyManager.doNotTrackEnabled' => true,
'PrivacyManager.useAnonymizedIpForVisitEnrichment' => true,
);