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:
-rw-r--r--.travis.yml6
-rw-r--r--README.md2
-rw-r--r--core/Updates/2.9.0-b1.php38
-rw-r--r--core/Version.php2
-rw-r--r--misc/cron/updatetoken.php21
-rwxr-xr-xmisc/log-analytics/import_logs.py3
-rw-r--r--plugins/CoreAdminHome/CustomLogo.php8
-rw-r--r--plugins/CoreUpdater/Controller.php9
-rw-r--r--plugins/CoreUpdater/lang/en.json1
-rw-r--r--plugins/ExamplePlugin/tests/System/expected/test___API.get_day.xml6
-rw-r--r--plugins/Installation/Controller.php33
-rw-r--r--plugins/Installation/FormDefaultSettings.php23
-rw-r--r--plugins/Installation/SystemCheck.php2
-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
-rw-r--r--plugins/TestRunner/Commands/TestsRunOnAws.php2
-rw-r--r--plugins/TestRunner/Runner/Remote.php6
-rw-r--r--plugins/VisitFrequency/Reports/Get.php14
-rw-r--r--plugins/VisitFrequency/VisitFrequency.php3
-rw-r--r--plugins/VisitFrequency/lang/en.json1
-rw-r--r--tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_csv__API.get_month.csvbin1896 -> 2296 bytes
-rw-r--r--tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_VisitFrequency.get_firstSite_lastN__API.getProcessedReport_day.xml28
-rw-r--r--tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_csv__ScheduledReports.generateReport_month.original.csv4
-rw-r--r--tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_month.original.html34
-rw-r--r--tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getDefaultMetricTranslations.xml1
-rw-r--r--tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getReportMetadata_day.xml8
-rw-r--r--tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.get_day.xml4
-rw-r--r--tests/PHPUnit/System/expected/test_apiGetReportMetadata_phpRenderer__API.getDefaultMetricTranslations.php2
-rw-r--r--tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_csv__ScheduledReports.generateReport_week.original.csv4
-rw-r--r--tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_week.original.html34
m---------tests/PHPUnit/UI0
35 files changed, 346 insertions, 68 deletions
diff --git a/.travis.yml b/.travis.yml
index e5e670be84..df1fc50aac 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -41,12 +41,6 @@ matrix:
env: MYSQL_ADAPTER=PDO_MYSQL COVERAGE=Integration
- php: 5.6
env: MYSQL_ADAPTER=PDO_MYSQL COVERAGE=Unit
- include:
- # Code Coverage
- - php: 5.6
- env: MYSQL_ADAPTER=PDO_MYSQL COVERAGE=Integration
- - php: 5.6
- env: MYSQL_ADAPTER=PDO_MYSQL COVERAGE=Unit
exclude:
# Run test suites separately only on PHP 5.4 with PDO
- php: 5.3.3
diff --git a/README.md b/README.md
index 91c0ac46d9..4d3302298d 100644
--- a/README.md
+++ b/README.md
@@ -101,7 +101,7 @@ The Piwik project uses an ever-expanding comprehensive set of thousands of unit
Build status (master branch) [![Build Status](https://travis-ci.org/piwik/piwik.svg?branch=master)](https://travis-ci.org/piwik/piwik) - Screenshot tests Build [![Build Status](https://travis-ci.org/piwik/piwik-ui-tests.svg?branch=master)](https://travis-ci.org/piwik/piwik-ui-tests)
-Code Coverage: [![Coverage Status](https://coveralls.io/repos/piwik/piwik/badge.png?branch=master)](https://coveralls.io/r/piwik/piwik?branch=master)
+Code Coverage: [![Code Coverage](https://scrutinizer-ci.com/g/piwik/piwik/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/piwik/piwik/?branch=master)
Issue tracker metrics: [![Average time to resolve an issue](http://isitmaintained.com/badge/resolution/piwik/piwik.svg)](http://isitmaintained.com/project/piwik/piwik "Average time to resolve an issue") - [![Percentage of issues still open](http://isitmaintained.com/badge/open/piwik/piwik.svg)](http://isitmaintained.com/project/piwik/piwik "Percentage of issues still open")
diff --git a/core/Updates/2.9.0-b1.php b/core/Updates/2.9.0-b1.php
index 9791edbe63..f36f52a6bd 100644
--- a/core/Updates/2.9.0-b1.php
+++ b/core/Updates/2.9.0-b1.php
@@ -4,25 +4,43 @@
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- *
*/
namespace Piwik\Updates;
use Piwik\Common;
use Piwik\Db;
+use Piwik\Option;
use Piwik\Plugin\Manager;
use Piwik\Updater;
use Piwik\Updates;
-/**
- */
class Updates_2_9_0_b1 extends Updates
{
static function getSql()
{
$sql = array();
+ $sql = self::updateBrowserEngine($sql);
+
+ return $sql;
+ }
+
+ static function update()
+ {
+ Updater::updateDatabase(__FILE__, self::getSql());
+
+ self::updateIPAnonymizationSettings();
+
+ try {
+ Manager::getInstance()->activatePlugin('TestRunner');
+ } catch (\Exception $e) {
+
+ }
+ }
+
+ private static function updateBrowserEngine($sql)
+ {
$sql[sprintf("ALTER TABLE `%s` ADD COLUMN `config_browser_engine` VARCHAR(10) NOT NULL", Common::prefixTable('log_visit'))] = 1060;
$browserEngineMatch = array(
@@ -57,14 +75,18 @@ class Updates_2_9_0_b1 extends Updates
return $sql;
}
- static function update()
+ private static function updateIPAnonymizationSettings()
{
- Updater::updateDatabase(__FILE__, self::getSql());
+ $optionName = 'PrivacyManager.ipAnonymizerEnabled';
- try {
- Manager::getInstance()->activatePlugin('TestRunner');
- } catch (\Exception $e) {
+ $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/core/Version.php b/core/Version.php
index cf2377419e..a924b46bc7 100644
--- a/core/Version.php
+++ b/core/Version.php
@@ -21,5 +21,5 @@ final class Version
* The current Piwik version.
* @var string
*/
- const VERSION = '2.9.0-b1';
+ const VERSION = '2.9.0-b3';
}
diff --git a/misc/cron/updatetoken.php b/misc/cron/updatetoken.php
index 3936f04f9d..4638f8bd27 100644
--- a/misc/cron/updatetoken.php
+++ b/misc/cron/updatetoken.php
@@ -32,16 +32,35 @@ if (!Common::isPhpCliMode()) {
$testmode = in_array('--testmode', $_SERVER['argv']);
if ($testmode) {
require_once PIWIK_INCLUDE_PATH . "/tests/PHPUnit/TestingEnvironment.php";
-
\Piwik_TestingEnvironment::addHooks();
}
+
+function getPiwikDomain()
+{
+ foreach($_SERVER['argv'] as $param) {
+ $pattern = '--piwik-domain=';
+ if(false !== strpos($param, $pattern)) {
+ return substr($param, strlen($pattern));
+ }
+ }
+ return null;
+}
+
+$piwikDomain = getPiwikDomain();
+if($piwikDomain) {
+ Url::setHost($piwikDomain);
+}
+
$token = Db::get()->fetchOne("SELECT token_auth
FROM " . Common::prefixTable("user") . "
WHERE superuser_access = 1
ORDER BY date_registered ASC");
$filename = PIWIK_INCLUDE_PATH . '/tmp/cache/token.php';
+
+$filename = SettingsPiwik::rewriteTmpPathWithInstanceId($filename);
+
$content = "<?php exit; //\t" . $token;
file_put_contents($filename, $content);
echo $filename; \ No newline at end of file
diff --git a/misc/log-analytics/import_logs.py b/misc/log-analytics/import_logs.py
index 9d797efcc9..90a7f4f709 100755
--- a/misc/log-analytics/import_logs.py
+++ b/misc/log-analytics/import_logs.py
@@ -630,6 +630,9 @@ class Configuration(object):
if self.options.enable_testmode:
command.append('--testmode')
+ hostname = urlparse.urlparse( self.options.piwik_url ).hostname
+ command.append('--piwik-domain=' + hostname )
+
command = subprocess.list2cmdline(command)
process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
[stdout, stderr] = process.communicate()
diff --git a/plugins/CoreAdminHome/CustomLogo.php b/plugins/CoreAdminHome/CustomLogo.php
index eda7ef0638..76f328e139 100644
--- a/plugins/CoreAdminHome/CustomLogo.php
+++ b/plugins/CoreAdminHome/CustomLogo.php
@@ -11,6 +11,7 @@ namespace Piwik\Plugins\CoreAdminHome;
use Piwik\Config;
use Piwik\Filesystem;
use Piwik\Option;
+use Piwik\Plugin\Manager;
use Piwik\SettingsPiwik;
class CustomLogo
@@ -114,7 +115,12 @@ class CustomLogo
$logo = $defaultLogo;
- $themeName = \Piwik\Plugin\Manager::getInstance()->getThemeEnabled()->getPluginName();
+ $theme = \Piwik\Plugin\Manager::getInstance()->getThemeEnabled();
+ if(!$theme) {
+ $themeName = Manager::DEFAULT_THEME;
+ } else {
+ $themeName = $theme->getPluginName();
+ }
$themeLogo = sprintf($themeLogo, $themeName);
if (file_exists($pathToPiwikRoot . '/' . $themeLogo)) {
diff --git a/plugins/CoreUpdater/Controller.php b/plugins/CoreUpdater/Controller.php
index cc27c3e9aa..5dbc14b565 100644
--- a/plugins/CoreUpdater/Controller.php
+++ b/plugins/CoreUpdater/Controller.php
@@ -36,7 +36,6 @@ use Piwik\View;
*/
class Controller extends \Piwik\Plugin\Controller
{
- const CONFIG_FILE_BACKUP = '/config/global.ini.auto-backup-before-update.php';
const PATH_TO_EXTRACT_LATEST_VERSION = '/tmp/latest/';
private $coreError = false;
@@ -97,7 +96,6 @@ class Controller extends \Piwik\Plugin\Controller
array('oneClick_Download', Piwik::translate('CoreUpdater_DownloadingUpdateFromX', $url)),
array('oneClick_Unpack', Piwik::translate('CoreUpdater_UnpackingTheUpdate')),
array('oneClick_Verify', Piwik::translate('CoreUpdater_VerifyingUnpackedFiles')),
- array('oneClick_CreateConfigFileBackup', Piwik::translate('CoreUpdater_CreatingBackupOfConfigurationFile', self::CONFIG_FILE_BACKUP))
);
$incompatiblePlugins = $this->getIncompatiblePlugins($this->newVersion);
if (!empty($incompatiblePlugins)) {
@@ -216,13 +214,6 @@ class Controller extends \Piwik\Plugin\Controller
}
}
- private function oneClick_CreateConfigFileBackup()
- {
- $configFileBefore = PIWIK_USER_PATH . '/config/global.ini.php';
- $configFileAfter = PIWIK_USER_PATH . self::CONFIG_FILE_BACKUP;
- Filesystem::copy($configFileBefore, $configFileAfter);
- }
-
private function oneClick_DisableIncompatiblePlugins()
{
$plugins = $this->getIncompatiblePlugins($this->newVersion);
diff --git a/plugins/CoreUpdater/lang/en.json b/plugins/CoreUpdater/lang/en.json
index 15285300eb..1b94754223 100644
--- a/plugins/CoreUpdater/lang/en.json
+++ b/plugins/CoreUpdater/lang/en.json
@@ -1,7 +1,6 @@
{
"CoreUpdater": {
"ClickHereToViewSqlQueries": "Click here to view and copy the list of SQL queries that will get executed",
- "CreatingBackupOfConfigurationFile": "Creating a backup of the configuration file in %s",
"CriticalErrorDuringTheUpgradeProcess": "Critical Error during the update process:",
"DatabaseUpgradeRequired": "Database Upgrade Required",
"DisablingIncompatiblePlugins": "Disabling incompatible plugins: %s",
diff --git a/plugins/ExamplePlugin/tests/System/expected/test___API.get_day.xml b/plugins/ExamplePlugin/tests/System/expected/test___API.get_day.xml
index 58296797c0..c04d73d2c7 100644
--- a/plugins/ExamplePlugin/tests/System/expected/test___API.get_day.xml
+++ b/plugins/ExamplePlugin/tests/System/expected/test___API.get_day.xml
@@ -3,7 +3,7 @@
<nb_uniq_visitors>2</nb_uniq_visitors>
<nb_visits>2</nb_visits>
<nb_users>0</nb_users>
- <nb_actions>4</nb_actions>
+ <nb_actions>4</nb_actions>
<max_actions>2</max_actions>
<bounce_rate>0%</bounce_rate>
<nb_actions_per_visit>2</nb_actions_per_visit>
@@ -11,6 +11,10 @@
<nb_visits_returning>0</nb_visits_returning>
<nb_actions_returning>0</nb_actions_returning>
<nb_uniq_visitors_returning>0</nb_uniq_visitors_returning>
+ <sum_visit_length_returning>0</sum_visit_length_returning>
+ <nb_users_returning>0</nb_users_returning>
+ <nb_visits_converted_returning>0</nb_visits_converted_returning>
+ <max_actions_returning>0</max_actions_returning>
<bounce_rate_returning>0%</bounce_rate_returning>
<nb_actions_per_visit_returning>0</nb_actions_per_visit_returning>
<avg_time_on_site_returning>0</avg_time_on_site_returning>
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/SystemCheck.php b/plugins/Installation/SystemCheck.php
index 29f87f2415..b175528310 100644
--- a/plugins/Installation/SystemCheck.php
+++ b/plugins/Installation/SystemCheck.php
@@ -332,7 +332,7 @@ class SystemCheck
public static function isPhpVersionValid($phpVersion)
{
global $piwik_minimumPHPVersion;
- return version_compare($piwik_minimumPHPVersion, $phpVersion) === -1;
+ return version_compare($piwik_minimumPHPVersion, $phpVersion) <= 0;
}
} \ No newline at end of file
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,
);
diff --git a/plugins/TestRunner/Commands/TestsRunOnAws.php b/plugins/TestRunner/Commands/TestsRunOnAws.php
index 6f88dd4a5d..c894f80e90 100644
--- a/plugins/TestRunner/Commands/TestsRunOnAws.php
+++ b/plugins/TestRunner/Commands/TestsRunOnAws.php
@@ -148,7 +148,7 @@ This feature is still beta and there might be problems with pictures and/or bina
private function buildFinishedMessage($testSuite, $host)
{
if (in_array($testSuite, array('system', 'all'))) {
- $message = "<info>Tests finished. You can browse processed files at </info><comment>http://$host/tests/PHPUnit/System/processed/</comment>";
+ $message = "<info>Tests finished. You can browse processed files and download artifacts at </info><comment>http://$host/tests/PHPUnit/System/processed/</comment>";
} elseif ('ui' === $testSuite) {
$message = "<info>Tests finished. You can browse processed screenshots at </info><comment>http://$host/tests/PHPUnit/UI/screenshot-diffs/diffviewer.html</comment>";
} else {
diff --git a/plugins/TestRunner/Runner/Remote.php b/plugins/TestRunner/Runner/Remote.php
index 63fe7a4963..49127c45f9 100644
--- a/plugins/TestRunner/Runner/Remote.php
+++ b/plugins/TestRunner/Runner/Remote.php
@@ -28,10 +28,10 @@ class Remote
$this->ssh->exec('git reset --hard');
$this->ssh->exec('git submodule foreach --recursive git reset --hard');
$this->ssh->exec('git clean -d -f');
+ $this->ssh->exec('git submodule foreach git clean -f');
$this->ssh->exec('git fetch --all');
$this->ssh->exec('git checkout ' . trim($gitHash));
$this->ssh->exec('git submodule update --recursive --force');
- $this->ssh->exec('git submodule foreach git clean -f');
$this->ssh->exec('composer.phar install');
}
@@ -88,5 +88,9 @@ class Remote
$this->ssh->exec('php console tests:run --options="--colors" --testsuite="unit"');
$this->ssh->exec('php console tests:run --options="--colors" --testsuite="' . $testSuite . '"');
}
+
+ if ('system' === $testSuite) {
+ $this->ssh->exec("tar -cjf tests/PHPUnit/System/processed/processed.tar.bz2 tests/PHPUnit/System/processed/ plugins/*/tests/System/processed/ --exclude='.gitkeep' --exclude='tests/PHPUnit/System/processed/processed.tar.bz2'");
+ }
}
}
diff --git a/plugins/VisitFrequency/Reports/Get.php b/plugins/VisitFrequency/Reports/Get.php
index 2c7d8fb21f..5db2ebebf6 100644
--- a/plugins/VisitFrequency/Reports/Get.php
+++ b/plugins/VisitFrequency/Reports/Get.php
@@ -18,7 +18,19 @@ class Get extends \Piwik\Plugin\Report
$this->category = 'General_Visitors';
$this->name = Piwik::translate('VisitFrequency_ColumnReturningVisits');
$this->documentation = ''; // TODO
- $this->metrics = array('nb_visits_returning', 'nb_actions_returning', 'avg_time_on_site_returning', 'bounce_rate_returning', 'nb_actions_per_visit_returning', 'nb_uniq_visitors_returning');
+ $this->metrics = array(
+ 'nb_visits_returning',
+ 'nb_actions_returning',
+ 'avg_time_on_site_returning',
+ 'bounce_rate_returning',
+ 'nb_actions_per_visit_returning',
+ 'nb_uniq_visitors_returning',
+ 'sum_visit_length_returning',
+ 'nb_users_returning',
+ 'nb_visits_converted_returning',
+ 'sum_visit_length_returning',
+ 'max_actions_returning'
+ );
$this->processedMetrics = false;
$this->order = 40;
}
diff --git a/plugins/VisitFrequency/VisitFrequency.php b/plugins/VisitFrequency/VisitFrequency.php
index 079b5ddf60..ad7451e0ce 100644
--- a/plugins/VisitFrequency/VisitFrequency.php
+++ b/plugins/VisitFrequency/VisitFrequency.php
@@ -31,7 +31,8 @@ class VisitFrequency extends \Piwik\Plugin
'avg_time_on_site_returning' => 'VisitFrequency_ColumnAverageVisitDurationForReturningVisitors',
'bounce_rate_returning' => 'VisitFrequency_ColumnBounceRateForReturningVisits',
'nb_actions_per_visit_returning' => 'VisitFrequency_ColumnAvgActionsPerReturningVisit',
- 'nb_uniq_visitors_returning' => 'VisitFrequency_ColumnUniqueReturningVisitors'
+ 'nb_uniq_visitors_returning' => 'VisitFrequency_ColumnUniqueReturningVisitors',
+ 'nb_users_returning' => 'VisitFrequency_ColumnReturningUsers'
);
$translations = array_merge($translations, $metrics);
diff --git a/plugins/VisitFrequency/lang/en.json b/plugins/VisitFrequency/lang/en.json
index 8d2fb230e7..ac8a2c3cd1 100644
--- a/plugins/VisitFrequency/lang/en.json
+++ b/plugins/VisitFrequency/lang/en.json
@@ -10,6 +10,7 @@
"ColumnReturningVisits": "Returning Visits",
"ColumnSumVisitLengthReturning": "Total time spent by returning visitors (in seconds)",
"ColumnUniqueReturningVisitors": "Unique returning visitors",
+ "ColumnReturningUsers": "Returning Users",
"PluginDescription": "Reports various statistics about the Returning Visitor versus the First time visitor.",
"ReturnActions": "%s actions by the returning visits",
"ReturnAverageVisitDuration": "%s average visit duration for returning visitors",
diff --git a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_csv__API.get_month.csv b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_csv__API.get_month.csv
index 6fed0a71f2..86a07c0d50 100644
--- a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_csv__API.get_month.csv
+++ b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_csv__API.get_month.csv
Binary files differ
diff --git a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_VisitFrequency.get_firstSite_lastN__API.getProcessedReport_day.xml b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_VisitFrequency.get_firstSite_lastN__API.getProcessedReport_day.xml
index fa28a54c25..0c51c09208 100644
--- a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_VisitFrequency.get_firstSite_lastN__API.getProcessedReport_day.xml
+++ b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_VisitFrequency.get_firstSite_lastN__API.getProcessedReport_day.xml
@@ -14,6 +14,10 @@
<bounce_rate_returning>Bounce Rate for Returning Visits</bounce_rate_returning>
<nb_actions_per_visit_returning>Avg. Actions per Returning Visit</nb_actions_per_visit_returning>
<nb_uniq_visitors_returning>Unique returning visitors</nb_uniq_visitors_returning>
+ <sum_visit_length_returning>Total time spent by returning visitors (in seconds)</sum_visit_length_returning>
+ <nb_users_returning>Returning Users</nb_users_returning>
+ <nb_visits_converted_returning>Number of converted returning visits</nb_visits_converted_returning>
+ <max_actions_returning>Maximum actions in one returning visit</max_actions_returning>
</metrics>
<imageGraphUrl>index.php?module=API&amp;method=ImageGraph.get&amp;idSite=1&amp;apiModule=VisitFrequency&amp;apiAction=get&amp;period=day&amp;date=2010-01-03,2010-01-09</imageGraphUrl>
<imageGraphEvolutionUrl>index.php?module=API&amp;method=ImageGraph.get&amp;idSite=1&amp;apiModule=VisitFrequency&amp;apiAction=get&amp;period=day&amp;date=2010-01-03,2010-01-09</imageGraphEvolutionUrl>
@@ -26,46 +30,70 @@
<bounce_rate_returning>Bounce Rate for Returning Visits</bounce_rate_returning>
<nb_actions_per_visit_returning>Avg. Actions per Returning Visit</nb_actions_per_visit_returning>
<nb_uniq_visitors_returning>Unique returning visitors</nb_uniq_visitors_returning>
+ <sum_visit_length_returning>Total time spent by returning visitors (in seconds)</sum_visit_length_returning>
+ <nb_users_returning>Returning Users</nb_users_returning>
+ <nb_visits_converted_returning>Number of converted returning visits</nb_visits_converted_returning>
+ <max_actions_returning>Maximum actions in one returning visit</max_actions_returning>
</columns>
<reportData>
<result prettyDate="Sunday 3 January 2010" />
<result prettyDate="Monday 4 January 2010" />
<result prettyDate="Tuesday 5 January 2010">
<nb_uniq_visitors_returning>1</nb_uniq_visitors_returning>
+ <nb_users_returning>0</nb_users_returning>
<nb_visits_returning>1</nb_visits_returning>
<nb_actions_returning>5</nb_actions_returning>
+ <nb_visits_converted_returning>0</nb_visits_converted_returning>
+ <sum_visit_length_returning>901</sum_visit_length_returning>
+ <max_actions_returning>5</max_actions_returning>
<bounce_rate_returning>0%</bounce_rate_returning>
<nb_actions_per_visit_returning>5</nb_actions_per_visit_returning>
<avg_time_on_site_returning>00:15:01</avg_time_on_site_returning>
</result>
<result prettyDate="Wednesday 6 January 2010">
<nb_uniq_visitors_returning>1</nb_uniq_visitors_returning>
+ <nb_users_returning>0</nb_users_returning>
<nb_visits_returning>1</nb_visits_returning>
<nb_actions_returning>5</nb_actions_returning>
+ <nb_visits_converted_returning>0</nb_visits_converted_returning>
+ <sum_visit_length_returning>901</sum_visit_length_returning>
+ <max_actions_returning>5</max_actions_returning>
<bounce_rate_returning>0%</bounce_rate_returning>
<nb_actions_per_visit_returning>5</nb_actions_per_visit_returning>
<avg_time_on_site_returning>00:15:01</avg_time_on_site_returning>
</result>
<result prettyDate="Thursday 7 January 2010">
<nb_uniq_visitors_returning>1</nb_uniq_visitors_returning>
+ <nb_users_returning>0</nb_users_returning>
<nb_visits_returning>1</nb_visits_returning>
<nb_actions_returning>5</nb_actions_returning>
+ <nb_visits_converted_returning>0</nb_visits_converted_returning>
+ <sum_visit_length_returning>901</sum_visit_length_returning>
+ <max_actions_returning>5</max_actions_returning>
<bounce_rate_returning>0%</bounce_rate_returning>
<nb_actions_per_visit_returning>5</nb_actions_per_visit_returning>
<avg_time_on_site_returning>00:15:01</avg_time_on_site_returning>
</result>
<result prettyDate="Friday 8 January 2010">
<nb_uniq_visitors_returning>1</nb_uniq_visitors_returning>
+ <nb_users_returning>0</nb_users_returning>
<nb_visits_returning>1</nb_visits_returning>
<nb_actions_returning>5</nb_actions_returning>
+ <nb_visits_converted_returning>0</nb_visits_converted_returning>
+ <sum_visit_length_returning>901</sum_visit_length_returning>
+ <max_actions_returning>5</max_actions_returning>
<bounce_rate_returning>0%</bounce_rate_returning>
<nb_actions_per_visit_returning>5</nb_actions_per_visit_returning>
<avg_time_on_site_returning>00:15:01</avg_time_on_site_returning>
</result>
<result prettyDate="Saturday 9 January 2010">
<nb_uniq_visitors_returning>1</nb_uniq_visitors_returning>
+ <nb_users_returning>0</nb_users_returning>
<nb_visits_returning>1</nb_visits_returning>
<nb_actions_returning>5</nb_actions_returning>
+ <nb_visits_converted_returning>0</nb_visits_converted_returning>
+ <sum_visit_length_returning>901</sum_visit_length_returning>
+ <max_actions_returning>5</max_actions_returning>
<bounce_rate_returning>0%</bounce_rate_returning>
<nb_actions_per_visit_returning>5</nb_actions_per_visit_returning>
<avg_time_on_site_returning>00:15:01</avg_time_on_site_returning>
diff --git a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_csv__ScheduledReports.generateReport_month.original.csv b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_csv__ScheduledReports.generateReport_month.original.csv
index 4a6e7f01e5..5f75466362 100644
--- a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_csv__ScheduledReports.generateReport_month.original.csv
+++ b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_csv__ScheduledReports.generateReport_month.original.csv
@@ -333,8 +333,8 @@ New visits,2
365+ days,0
Returning Visits
-nb_uniq_visitors_returning,nb_visits_returning,nb_actions_returning,bounce_rate_returning,nb_actions_per_visit_returning,avg_time_on_site_returning
-1,8,40,0%,5,00:15:01
+nb_uniq_visitors_returning,nb_users_returning,nb_visits_returning,nb_actions_returning,nb_visits_converted_returning,sum_visit_length_returning,max_actions_returning,bounce_rate_returning,nb_actions_per_visit_returning,avg_time_on_site_returning
+1,0,8,40,0,7208,5,0%,5,00:15:01
Provider
label,nb_visits,nb_actions,conversion_rate,nb_actions_per_visit,avg_time_on_site,bounce_rate
diff --git a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_month.original.html b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_month.original.html
index eedeaebeae..48a31165e9 100644
--- a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_month.original.html
+++ b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_month.original.html
@@ -4892,13 +4892,21 @@
<tr style="background-color: rgb(249,250,250)">
<td style="font-size: 11pt; border-bottom: 1px solid rgb(231,231,231); padding: 5px 0 5px 5px;">
+ Returning Users </td>
+ <td style="font-size: 11pt; border-bottom: 1px solid rgb(231,231,231); padding: 5px 0 5px 5px;">
+ 0
+ </td>
+ </tr>
+
+ <tr style="">
+ <td style="font-size: 11pt; border-bottom: 1px solid rgb(231,231,231); padding: 5px 0 5px 5px;">
Returning Visits </td>
<td style="font-size: 11pt; border-bottom: 1px solid rgb(231,231,231); padding: 5px 0 5px 5px;">
8
</td>
</tr>
- <tr style="">
+ <tr style="background-color: rgb(249,250,250)">
<td style="font-size: 11pt; border-bottom: 1px solid rgb(231,231,231); padding: 5px 0 5px 5px;">
Actions by Returning Visits </td>
<td style="font-size: 11pt; border-bottom: 1px solid rgb(231,231,231); padding: 5px 0 5px 5px;">
@@ -4906,6 +4914,30 @@
</td>
</tr>
+ <tr style="">
+ <td style="font-size: 11pt; border-bottom: 1px solid rgb(231,231,231); padding: 5px 0 5px 5px;">
+ Number of converted returning visits </td>
+ <td style="font-size: 11pt; border-bottom: 1px solid rgb(231,231,231); padding: 5px 0 5px 5px;">
+ 0
+ </td>
+ </tr>
+
+ <tr style="background-color: rgb(249,250,250)">
+ <td style="font-size: 11pt; border-bottom: 1px solid rgb(231,231,231); padding: 5px 0 5px 5px;">
+ Total time spent by returning visitors (in seconds) </td>
+ <td style="font-size: 11pt; border-bottom: 1px solid rgb(231,231,231); padding: 5px 0 5px 5px;">
+ 7208
+ </td>
+ </tr>
+
+ <tr style="">
+ <td style="font-size: 11pt; border-bottom: 1px solid rgb(231,231,231); padding: 5px 0 5px 5px;">
+ Maximum actions in one returning visit </td>
+ <td style="font-size: 11pt; border-bottom: 1px solid rgb(231,231,231); padding: 5px 0 5px 5px;">
+ 5
+ </td>
+ </tr>
+
<tr style="background-color: rgb(249,250,250)">
<td style="font-size: 11pt; border-bottom: 1px solid rgb(231,231,231); padding: 5px 0 5px 5px;">
Bounce Rate for Returning Visits </td>
diff --git a/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getDefaultMetricTranslations.xml b/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getDefaultMetricTranslations.xml
index 82c64dfc5c..a878da03dd 100644
--- a/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getDefaultMetricTranslations.xml
+++ b/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getDefaultMetricTranslations.xml
@@ -82,5 +82,6 @@
<bounce_rate_returning>Bounce Rate for Returning Visits</bounce_rate_returning>
<nb_actions_per_visit_returning>Avg. Actions per Returning Visit</nb_actions_per_visit_returning>
<nb_uniq_visitors_returning>Unique returning visitors</nb_uniq_visitors_returning>
+ <nb_users_returning>Returning Users</nb_users_returning>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getReportMetadata_day.xml b/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getReportMetadata_day.xml
index 35cca48347..0a2549a18e 100644
--- a/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getReportMetadata_day.xml
+++ b/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getReportMetadata_day.xml
@@ -1786,6 +1786,10 @@
<bounce_rate_returning>Bounce Rate for Returning Visits</bounce_rate_returning>
<nb_actions_per_visit_returning>Avg. Actions per Returning Visit</nb_actions_per_visit_returning>
<nb_uniq_visitors_returning>Unique returning visitors</nb_uniq_visitors_returning>
+ <sum_visit_length_returning>Total time spent by returning visitors (in seconds)</sum_visit_length_returning>
+ <nb_users_returning>Returning Users</nb_users_returning>
+ <nb_visits_converted_returning>Number of converted returning visits</nb_visits_converted_returning>
+ <max_actions_returning>Maximum actions in one returning visit</max_actions_returning>
</metrics>
<imageGraphUrl>index.php?module=API&amp;method=ImageGraph.get&amp;idSite=1&amp;apiModule=VisitFrequency&amp;apiAction=get&amp;period=day&amp;date=2008-12-06,2009-01-04</imageGraphUrl>
<imageGraphEvolutionUrl>index.php?module=API&amp;method=ImageGraph.get&amp;idSite=1&amp;apiModule=VisitFrequency&amp;apiAction=get&amp;period=day&amp;date=2008-12-06,2009-01-04</imageGraphEvolutionUrl>
@@ -2084,6 +2088,10 @@
<bounce_rate_returning>Bounce Rate for Returning Visits</bounce_rate_returning>
<nb_actions_per_visit_returning>Avg. Actions per Returning Visit</nb_actions_per_visit_returning>
<nb_uniq_visitors_returning>Unique returning visitors</nb_uniq_visitors_returning>
+ <sum_visit_length_returning>Total time spent by returning visitors (in seconds)</sum_visit_length_returning>
+ <nb_users_returning>Returning Users</nb_users_returning>
+ <nb_visits_converted_returning>Number of converted returning visits</nb_visits_converted_returning>
+ <max_actions_returning>Maximum actions in one returning visit</max_actions_returning>
</metrics>
<metricsDocumentation>
<nb_uniq_visitors>The number of unduplicated visitors coming to your website. Every user is only counted once, even if he visits the website multiple times a day.</nb_uniq_visitors>
diff --git a/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.get_day.xml b/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.get_day.xml
index 8615d546da..fe0924b8d9 100644
--- a/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.get_day.xml
+++ b/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.get_day.xml
@@ -11,6 +11,10 @@
<nb_visits_returning>0</nb_visits_returning>
<nb_actions_returning>0</nb_actions_returning>
<nb_uniq_visitors_returning>0</nb_uniq_visitors_returning>
+ <sum_visit_length_returning>0</sum_visit_length_returning>
+ <nb_users_returning>0</nb_users_returning>
+ <nb_visits_converted_returning>0</nb_visits_converted_returning>
+ <max_actions_returning>0</max_actions_returning>
<bounce_rate_returning>0%</bounce_rate_returning>
<nb_actions_per_visit_returning>0</nb_actions_per_visit_returning>
<avg_time_on_site_returning>0</avg_time_on_site_returning>
diff --git a/tests/PHPUnit/System/expected/test_apiGetReportMetadata_phpRenderer__API.getDefaultMetricTranslations.php b/tests/PHPUnit/System/expected/test_apiGetReportMetadata_phpRenderer__API.getDefaultMetricTranslations.php
index d9144d3e39..008dacefe9 100644
--- a/tests/PHPUnit/System/expected/test_apiGetReportMetadata_phpRenderer__API.getDefaultMetricTranslations.php
+++ b/tests/PHPUnit/System/expected/test_apiGetReportMetadata_phpRenderer__API.getDefaultMetricTranslations.php
@@ -1 +1 @@
-a:1:{i:0;a:81:{s:9:"nb_visits";s:6:"Visits";s:16:"nb_uniq_visitors";s:15:"Unique visitors";s:10:"nb_actions";s:7:"Actions";s:8:"nb_users";s:5:"Users";s:20:"nb_actions_per_visit";s:17:"Actions per Visit";s:16:"avg_time_on_site";s:20:"Avg. Time on Website";s:11:"bounce_rate";s:11:"Bounce Rate";s:15:"conversion_rate";s:15:"Conversion Rate";s:5:"label";s:5:"Label";s:4:"date";s:4:"Date";s:16:"avg_time_on_page";s:17:"Avg. time on page";s:14:"sum_time_spent";s:41:"Total time spent by visitors (in seconds)";s:16:"sum_visit_length";s:41:"Total time spent by visitors (in seconds)";s:12:"bounce_count";s:7:"Bounces";s:22:"bounce_count_returning";s:33:"Bounce Count for Returning Visits";s:11:"max_actions";s:28:"Maximum actions in one visit";s:21:"max_actions_returning";s:38:"Maximum actions in one returning visit";s:29:"nb_visits_converted_returning";s:36:"Number of converted returning visits";s:26:"sum_visit_length_returning";s:51:"Total time spent by returning visitors (in seconds)";s:19:"nb_visits_converted";s:23:"Visits with Conversions";s:14:"nb_conversions";s:11:"Conversions";s:7:"revenue";s:7:"Revenue";s:7:"nb_hits";s:9:"Pageviews";s:15:"entry_nb_visits";s:9:"Entrances";s:22:"entry_nb_uniq_visitors";s:16:"Unique entrances";s:14:"exit_nb_visits";s:5:"Exits";s:21:"exit_nb_uniq_visitors";s:12:"Unique exits";s:18:"entry_bounce_count";s:7:"Bounces";s:17:"exit_bounce_count";s:7:"Bounces";s:9:"exit_rate";s:9:"Exit rate";s:26:"sum_daily_nb_uniq_visitors";s:27:"Unique visitors (daily sum)";s:18:"sum_daily_nb_users";s:17:"Users (daily sum)";s:32:"sum_daily_entry_nb_uniq_visitors";s:28:"Unique entrances (daily sum)";s:31:"sum_daily_exit_nb_uniq_visitors";s:24:"Unique exits (daily sum)";s:16:"entry_nb_actions";s:27:"Actions after entering here";s:22:"entry_sum_visit_length";s:61:"Total time spent by visitors (in seconds) after entering here";s:12:"nb_pageviews";s:9:"Pageviews";s:17:"nb_uniq_pageviews";s:16:"Unique Pageviews";s:12:"nb_downloads";s:9:"Downloads";s:17:"nb_uniq_downloads";s:16:"Unique Downloads";s:11:"nb_outlinks";s:8:"Outlinks";s:16:"nb_uniq_outlinks";s:15:"Unique Outlinks";s:11:"nb_searches";s:8:"Searches";s:11:"nb_keywords";s:15:"Unique Keywords";s:19:"avg_time_generation";s:20:"Avg. generation time";s:19:"nb_pages_per_search";s:20:"Search Results pages";s:24:"nb_hits_following_search";s:25:"Clicked in search results";s:14:"nb_impressions";s:11:"Impressions";s:15:"nb_interactions";s:12:"Interactions";s:16:"interaction_rate";s:16:"Interaction Rate";s:9:"nb_events";s:12:"Total events";s:15:"sum_event_value";s:11:"Total value";s:15:"min_event_value";s:13:"Minimum value";s:15:"max_event_value";s:13:"Maximum value";s:15:"avg_event_value";s:13:"Average value";s:20:"nb_events_with_value";s:19:"Events with a value";s:6:"orders";s:16:"Ecommerce Orders";s:17:"ecommerce_revenue";s:15:"Product Revenue";s:17:"revenue_per_visit";s:17:"Revenue per Visit";s:8:"quantity";s:8:"Quantity";s:9:"avg_price";s:13:"Average Price";s:12:"avg_quantity";s:16:"Average Quantity";s:16:"revenue_subtotal";s:8:"Subtotal";s:11:"revenue_tax";s:3:"Tax";s:16:"revenue_shipping";s:8:"Shipping";s:16:"revenue_discount";s:8:"Discount";s:17:"avg_order_revenue";s:19:"Average Order Value";s:16:"visits_evolution";s:16:"Visits Evolution";s:17:"actions_evolution";s:17:"Actions Evolution";s:19:"pageviews_evolution";s:19:"Pageviews Evolution";s:17:"revenue_evolution";s:17:"Revenue Evolution";s:24:"nb_conversions_evolution";s:21:"Conversions Evolution";s:16:"orders_evolution";s:26:"Ecommerce Orders Evolution";s:27:"ecommerce_revenue_evolution";s:25:"Product Revenue Evolution";s:20:"nb_visits_percentage";s:8:"% Visits";s:19:"nb_visits_returning";s:16:"Returning Visits";s:20:"nb_actions_returning";s:27:"Actions by Returning Visits";s:26:"avg_time_on_site_returning";s:43:"Avg. Duration of a Returning Visit (in sec)";s:21:"bounce_rate_returning";s:32:"Bounce Rate for Returning Visits";s:30:"nb_actions_per_visit_returning";s:32:"Avg. Actions per Returning Visit";s:26:"nb_uniq_visitors_returning";s:25:"Unique returning visitors";}} \ No newline at end of file
+a:1:{i:0;a:82:{s:9:"nb_visits";s:6:"Visits";s:16:"nb_uniq_visitors";s:15:"Unique visitors";s:10:"nb_actions";s:7:"Actions";s:8:"nb_users";s:5:"Users";s:20:"nb_actions_per_visit";s:17:"Actions per Visit";s:16:"avg_time_on_site";s:20:"Avg. Time on Website";s:11:"bounce_rate";s:11:"Bounce Rate";s:15:"conversion_rate";s:15:"Conversion Rate";s:5:"label";s:5:"Label";s:4:"date";s:4:"Date";s:16:"avg_time_on_page";s:17:"Avg. time on page";s:14:"sum_time_spent";s:41:"Total time spent by visitors (in seconds)";s:16:"sum_visit_length";s:41:"Total time spent by visitors (in seconds)";s:12:"bounce_count";s:7:"Bounces";s:22:"bounce_count_returning";s:33:"Bounce Count for Returning Visits";s:11:"max_actions";s:28:"Maximum actions in one visit";s:21:"max_actions_returning";s:38:"Maximum actions in one returning visit";s:29:"nb_visits_converted_returning";s:36:"Number of converted returning visits";s:26:"sum_visit_length_returning";s:51:"Total time spent by returning visitors (in seconds)";s:19:"nb_visits_converted";s:23:"Visits with Conversions";s:14:"nb_conversions";s:11:"Conversions";s:7:"revenue";s:7:"Revenue";s:7:"nb_hits";s:9:"Pageviews";s:15:"entry_nb_visits";s:9:"Entrances";s:22:"entry_nb_uniq_visitors";s:16:"Unique entrances";s:14:"exit_nb_visits";s:5:"Exits";s:21:"exit_nb_uniq_visitors";s:12:"Unique exits";s:18:"entry_bounce_count";s:7:"Bounces";s:17:"exit_bounce_count";s:7:"Bounces";s:9:"exit_rate";s:9:"Exit rate";s:26:"sum_daily_nb_uniq_visitors";s:27:"Unique visitors (daily sum)";s:18:"sum_daily_nb_users";s:17:"Users (daily sum)";s:32:"sum_daily_entry_nb_uniq_visitors";s:28:"Unique entrances (daily sum)";s:31:"sum_daily_exit_nb_uniq_visitors";s:24:"Unique exits (daily sum)";s:16:"entry_nb_actions";s:27:"Actions after entering here";s:22:"entry_sum_visit_length";s:61:"Total time spent by visitors (in seconds) after entering here";s:12:"nb_pageviews";s:9:"Pageviews";s:17:"nb_uniq_pageviews";s:16:"Unique Pageviews";s:12:"nb_downloads";s:9:"Downloads";s:17:"nb_uniq_downloads";s:16:"Unique Downloads";s:11:"nb_outlinks";s:8:"Outlinks";s:16:"nb_uniq_outlinks";s:15:"Unique Outlinks";s:11:"nb_searches";s:8:"Searches";s:11:"nb_keywords";s:15:"Unique Keywords";s:19:"avg_time_generation";s:20:"Avg. generation time";s:19:"nb_pages_per_search";s:20:"Search Results pages";s:24:"nb_hits_following_search";s:25:"Clicked in search results";s:14:"nb_impressions";s:11:"Impressions";s:15:"nb_interactions";s:12:"Interactions";s:16:"interaction_rate";s:16:"Interaction Rate";s:9:"nb_events";s:12:"Total events";s:15:"sum_event_value";s:11:"Total value";s:15:"min_event_value";s:13:"Minimum value";s:15:"max_event_value";s:13:"Maximum value";s:15:"avg_event_value";s:13:"Average value";s:20:"nb_events_with_value";s:19:"Events with a value";s:6:"orders";s:16:"Ecommerce Orders";s:17:"ecommerce_revenue";s:15:"Product Revenue";s:17:"revenue_per_visit";s:17:"Revenue per Visit";s:8:"quantity";s:8:"Quantity";s:9:"avg_price";s:13:"Average Price";s:12:"avg_quantity";s:16:"Average Quantity";s:16:"revenue_subtotal";s:8:"Subtotal";s:11:"revenue_tax";s:3:"Tax";s:16:"revenue_shipping";s:8:"Shipping";s:16:"revenue_discount";s:8:"Discount";s:17:"avg_order_revenue";s:19:"Average Order Value";s:16:"visits_evolution";s:16:"Visits Evolution";s:17:"actions_evolution";s:17:"Actions Evolution";s:19:"pageviews_evolution";s:19:"Pageviews Evolution";s:17:"revenue_evolution";s:17:"Revenue Evolution";s:24:"nb_conversions_evolution";s:21:"Conversions Evolution";s:16:"orders_evolution";s:26:"Ecommerce Orders Evolution";s:27:"ecommerce_revenue_evolution";s:25:"Product Revenue Evolution";s:20:"nb_visits_percentage";s:8:"% Visits";s:19:"nb_visits_returning";s:16:"Returning Visits";s:20:"nb_actions_returning";s:27:"Actions by Returning Visits";s:26:"avg_time_on_site_returning";s:43:"Avg. Duration of a Returning Visit (in sec)";s:21:"bounce_rate_returning";s:32:"Bounce Rate for Returning Visits";s:30:"nb_actions_per_visit_returning";s:32:"Avg. Actions per Returning Visit";s:26:"nb_uniq_visitors_returning";s:25:"Unique returning visitors";s:18:"nb_users_returning";s:15:"Returning Users";}} \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_csv__ScheduledReports.generateReport_week.original.csv b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_csv__ScheduledReports.generateReport_week.original.csv
index 9927d8b38b..ad3cd28109 100644
--- a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_csv__ScheduledReports.generateReport_week.original.csv
+++ b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_csv__ScheduledReports.generateReport_week.original.csv
@@ -484,8 +484,8 @@ New visits,1
365+ days,0
Returning Visits
-nb_uniq_visitors_returning,nb_visits_returning,nb_actions_returning,bounce_rate_returning,nb_actions_per_visit_returning,avg_time_on_site_returning
-1,4,12,25%,3,00:25:32
+nb_uniq_visitors_returning,nb_users_returning,nb_visits_returning,nb_actions_returning,nb_visits_converted_returning,sum_visit_length_returning,max_actions_returning,bounce_rate_returning,nb_actions_per_visit_returning,avg_time_on_site_returning
+1,0,4,12,3,6126,6,25%,3,00:25:32
Provider
label,nb_visits,nb_actions,conversion_rate,nb_actions_per_visit,avg_time_on_site,bounce_rate
diff --git a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_week.original.html b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_week.original.html
index d8f071033a..5116a93633 100644
--- a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_week.original.html
+++ b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_week.original.html
@@ -6434,13 +6434,21 @@
<tr style="background-color: rgb(249,250,250)">
<td style="font-size: 11pt; border-bottom: 1px solid rgb(231,231,231); padding: 5px 0 5px 5px;">
+ Returning Users </td>
+ <td style="font-size: 11pt; border-bottom: 1px solid rgb(231,231,231); padding: 5px 0 5px 5px;">
+ 0
+ </td>
+ </tr>
+
+ <tr style="">
+ <td style="font-size: 11pt; border-bottom: 1px solid rgb(231,231,231); padding: 5px 0 5px 5px;">
Returning Visits </td>
<td style="font-size: 11pt; border-bottom: 1px solid rgb(231,231,231); padding: 5px 0 5px 5px;">
4
</td>
</tr>
- <tr style="">
+ <tr style="background-color: rgb(249,250,250)">
<td style="font-size: 11pt; border-bottom: 1px solid rgb(231,231,231); padding: 5px 0 5px 5px;">
Actions by Returning Visits </td>
<td style="font-size: 11pt; border-bottom: 1px solid rgb(231,231,231); padding: 5px 0 5px 5px;">
@@ -6448,6 +6456,30 @@
</td>
</tr>
+ <tr style="">
+ <td style="font-size: 11pt; border-bottom: 1px solid rgb(231,231,231); padding: 5px 0 5px 5px;">
+ Number of converted returning visits </td>
+ <td style="font-size: 11pt; border-bottom: 1px solid rgb(231,231,231); padding: 5px 0 5px 5px;">
+ 3
+ </td>
+ </tr>
+
+ <tr style="background-color: rgb(249,250,250)">
+ <td style="font-size: 11pt; border-bottom: 1px solid rgb(231,231,231); padding: 5px 0 5px 5px;">
+ Total time spent by returning visitors (in seconds) </td>
+ <td style="font-size: 11pt; border-bottom: 1px solid rgb(231,231,231); padding: 5px 0 5px 5px;">
+ 6126
+ </td>
+ </tr>
+
+ <tr style="">
+ <td style="font-size: 11pt; border-bottom: 1px solid rgb(231,231,231); padding: 5px 0 5px 5px;">
+ Maximum actions in one returning visit </td>
+ <td style="font-size: 11pt; border-bottom: 1px solid rgb(231,231,231); padding: 5px 0 5px 5px;">
+ 6
+ </td>
+ </tr>
+
<tr style="background-color: rgb(249,250,250)">
<td style="font-size: 11pt; border-bottom: 1px solid rgb(231,231,231); padding: 5px 0 5px 5px;">
Bounce Rate for Returning Visits </td>
diff --git a/tests/PHPUnit/UI b/tests/PHPUnit/UI
-Subproject 990155a77da0d587cc3750ba41cf663bac8c998
+Subproject 171b25d3333ab4334ee9c636b6a10b22a3c4790