diff options
author | Matthieu Aubry <matt@piwik.org> | 2014-11-04 02:33:24 +0300 |
---|---|---|
committer | Matthieu Aubry <matt@piwik.org> | 2014-11-04 02:33:24 +0300 |
commit | 56e9596380f0e9edb908c968aa114bcbed9c195a (patch) | |
tree | 36a4aa8891dc25a076c81b3a6760a246d8ae1df3 | |
parent | 7f7a64993d82d5baf36035f44e7a07e784bd3351 (diff) | |
parent | d02f6010775c5267a840423332537b3a33fd86d9 (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.php | 19 | ||||
-rw-r--r-- | plugins/Installation/Controller.php | 33 | ||||
-rw-r--r-- | plugins/Installation/FormDefaultSettings.php | 23 | ||||
-rw-r--r-- | plugins/Installation/lang/en.json | 2 | ||||
-rw-r--r-- | plugins/Installation/templates/finished.twig | 31 | ||||
-rw-r--r-- | plugins/PrivacyManager/Config.php | 4 | ||||
-rw-r--r-- | plugins/PrivacyManager/PrivacyManager.php | 63 | ||||
-rw-r--r-- | plugins/PrivacyManager/lang/en.json | 1 | ||||
-rw-r--r-- | plugins/PrivacyManager/tests/Integration/PrivacyManagerConfigTest.php | 14 |
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 }} »</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' => ' ' . Piwik::translate('PrivacyManager_DoNotTrack_Enable') . '<br>' + . Piwik::translate('PrivacyManager_DoNotTrack_EnabledMoreInfo'), + )); + $form->addElement('checkbox', 'anonymise_ip', null, + array( + 'content' => ' ' . 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, ); |