diff --git a/core/Plugin/Report.php b/core/Plugin/Report.php index 91a07377fb65da40e94cd0be0ebbee1cdca3ae47..e5c862cf32b3686829c8739553d228c5d2f8db93 100644 --- a/core/Plugin/Report.php +++ b/core/Plugin/Report.php @@ -127,13 +127,6 @@ class Report public $processedMetrics = array('nb_actions_per_visit', 'avg_time_on_site', 'bounce_rate', 'conversion_rate'); // for a little performance improvement we avoid having to call Metrics::getDefaultProcessedMetrics for each report - /** - * TODO - * - * TODO: shouldn't be public - */ - public $temporaryMetrics = array(); - /** * Set this property to true in case your report supports goal metrics. In this case, the goal metrics will be * automatically added to the report metadata and the report will be displayed in the Goals UI. diff --git a/plugins/API/API.php b/plugins/API/API.php index 9d7d3641871ad037edd16803004e7a66820a2612..5af04194ae2d777ae9d910979ebcd7b1ca237514 100644 --- a/plugins/API/API.php +++ b/plugins/API/API.php @@ -381,7 +381,8 @@ class API extends \Piwik\Plugin\API && !empty($reportMeta['metrics']) ) { $plugin = $reportMeta['module']; - foreach ($reportMeta['metrics'] as $column => $columnTranslation) { + $allMetrics = array_merge($reportMeta['metrics'], @$reportMeta['processedMetrics'] ?: array()); + foreach ($allMetrics as $column => $columnTranslation) { // a metric from this report has been requested if (isset($columnsMap[$column]) // or by default, return all metrics diff --git a/plugins/API/Reports/Get.php b/plugins/API/Reports/Get.php index f8e7e5280cd9b64b07da4ad781647044d5f827c2..2ed936cd081162f60b62b5aac231f672652fb22b 100644 --- a/plugins/API/Reports/Get.php +++ b/plugins/API/Reports/Get.php @@ -48,15 +48,6 @@ class Get extends Report $this->metrics = array_merge($this->metrics, $report->metrics); } - $this->temporaryMetrics = array(); - foreach ($this->reportsToMerge as $report) { - if (!is_array($report->temporaryMetrics)) { - continue; - } - - $this->temporaryMetrics = array_merge($this->temporaryMetrics, $report->temporaryMetrics); - } - // Used to process metrics, not displayed/used directly // 'sum_visit_length', // 'nb_visits_converted', diff --git a/plugins/VisitFrequency/Metrics/BounceRateReturning.php b/plugins/VisitFrequency/Metrics/BounceRateReturning.php deleted file mode 100644 index 9d9f2f89f921351e3d0931b56c2a47ec0e37a247..0000000000000000000000000000000000000000 --- a/plugins/VisitFrequency/Metrics/BounceRateReturning.php +++ /dev/null @@ -1,43 +0,0 @@ -<?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\VisitFrequency\Metrics; - -use Piwik\DataTable\Row; -use Piwik\Piwik; -use Piwik\Plugin\ProcessedMetric; - -/** - * TODO - */ -class BounceRateReturning extends ProcessedMetric -{ - public function getName() - { - return 'bounce_rate_returning'; - } - - public function getTranslatedName() - { - return Piwik::translate('VisitFrequency_ColumnBounceRateForReturningVisits'); - } - - public function format($value) - { - return ($value * 100) . '%'; - } - - public function compute(Row $row) - { - return 0; // (metric is not computed, it is copied from segmented report) - } - - public function getDependenctMetrics() - { - return array(); - } -} \ No newline at end of file diff --git a/plugins/VisitFrequency/Metrics/ReturningMetric.php b/plugins/VisitFrequency/Metrics/ReturningMetric.php new file mode 100644 index 0000000000000000000000000000000000000000..8f99c057a1262babc5a60e50acaa2ff05c98994c --- /dev/null +++ b/plugins/VisitFrequency/Metrics/ReturningMetric.php @@ -0,0 +1,59 @@ +<?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\VisitFrequency\Metrics; + +use Piwik\DataTable\Row; +use Piwik\Piwik; +use Piwik\Plugin\ProcessedMetric; + +/** + * TODO + */ +class ReturningMetric extends ProcessedMetric +{ + private static $translations = array( + 'avg_time_on_site_returning' => 'ColumnAverageVisitDurationForReturningVisitors', + 'nb_actions_per_visit_returning' => 'ColumnAvgActionsPerReturningVisit', + 'bounce_rate_returning' => 'ColumnBounceRateForReturningVisits', + ); + + /** + * @var ProcessedMetric + */ + private $wrapped; + + public function __construct(ProcessedMetric $wrapped) + { + $this->wrapped = $wrapped; + } + + public function getName() + { + return $this->wrapped->getName() . '_returning'; + } + + public function getTranslatedName() + { + return Piwik::translate(self::$translations[$this->getName()]); + } + + public function format($value) + { + return $this->wrapped->format($value); + } + + public function compute(Row $row) + { + return 0; // (metric is not computed, it is copied from segmented report) + } + + public function getDependenctMetrics() + { + return array(); + } +} \ No newline at end of file diff --git a/plugins/VisitFrequency/Reports/Get.php b/plugins/VisitFrequency/Reports/Get.php index f1cf21293c755332c4b5a0ff9807d3afd9cc8c30..332b9b6e09f1b507918adcb553609c0de292a96d 100644 --- a/plugins/VisitFrequency/Reports/Get.php +++ b/plugins/VisitFrequency/Reports/Get.php @@ -9,7 +9,10 @@ namespace Piwik\Plugins\VisitFrequency\Reports; use Piwik\Piwik; -use Piwik\Plugins\VisitFrequency\Metrics\BounceRateReturning; +use Piwik\Plugins\CoreHome\Metrics\ActionsPerVisit; +use Piwik\Plugins\CoreHome\Metrics\AverageTimeOnSite; +use Piwik\Plugins\CoreHome\Metrics\BounceRate; +use Piwik\Plugins\VisitFrequency\Metrics\ReturningMetric; class Get extends \Piwik\Plugin\Report { @@ -20,13 +23,13 @@ class Get extends \Piwik\Plugin\Report $this->name = Piwik::translate('VisitFrequency_ColumnReturningVisits'); $this->documentation = ''; // TODO $this->processedMetrics = array( - new BounceRateReturning() + new ReturningMetric(new AverageTimeOnSite()), + new ReturningMetric(new ActionsPerVisit()), + new ReturningMetric(new BounceRate()) ); $this->metrics = array( 'nb_visits_returning', 'nb_actions_returning', - 'avg_time_on_site_returning', - 'nb_actions_per_visit_returning', 'nb_uniq_visitors_returning', 'sum_visit_length_returning', 'nb_users_returning', diff --git a/plugins/VisitsSummary/Reports/Get.php b/plugins/VisitsSummary/Reports/Get.php index 32fc2a2644c82f5805b713dbbe5e0b967bf01be0..e2ba2657044a4b736312e91b1443d4a961644676 100644 --- a/plugins/VisitsSummary/Reports/Get.php +++ b/plugins/VisitsSummary/Reports/Get.php @@ -50,7 +50,7 @@ class Get extends \Piwik\Plugin\Report public function getProcessedMetrics() { - $metrics = parent::getMetrics(); + $metrics = parent::getProcessedMetrics(); $metrics['avg_time_on_site'] = Piwik::translate('General_VisitDuration'); 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 005ad102454aafef46a028ffe9ecbec6b7384e55..ce93308a2e01a376406d69fc1c791a2400ec8339 100644 --- a/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getReportMetadata_day.xml +++ b/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getReportMetadata_day.xml @@ -21,8 +21,6 @@ <revenue>Revenue</revenue> <nb_visits_returning>Returning Visits</nb_visits_returning> <nb_actions_returning>Actions by Returning Visits</nb_actions_returning> - <avg_time_on_site_returning>Avg. Duration of a Returning Visit (in sec)</avg_time_on_site_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> @@ -32,8 +30,6 @@ <nb_visits>Visits</nb_visits> <nb_users>Users</nb_users> <nb_actions>Actions</nb_actions> - <nb_actions_per_visit>Actions per Visit</nb_actions_per_visit> - <avg_time_on_site>Avg. Visit Duration (in seconds)</avg_time_on_site> <max_actions>Maximum actions in one visit</max_actions> </metrics> <metricsDocumentation> @@ -50,12 +46,14 @@ <nb_visits>If a visitor comes to your website for the first time or if he visits a page more than 30 minutes after his last page view, this will be recorded as a new visit.</nb_visits> <nb_users>The number of users logged in your website. It is the number of unique active users that have a User ID set (via the Tracking code function 'setUserId').</nb_users> <nb_actions>The number of actions performed by your visitors. Actions can be page views, internal site searches, downloads or outlinks.</nb_actions> - <nb_actions_per_visit>The average number of actions (page views, site searches, downloads or outlinks) that were performed during the visits.</nb_actions_per_visit> - <avg_time_on_site>The average duration of a visit.</avg_time_on_site> </metricsDocumentation> <processedMetrics> + <avg_time_on_site_returning>Avg. Duration of a Returning Visit (in sec)</avg_time_on_site_returning> + <nb_actions_per_visit_returning>Avg. Actions per Returning Visit</nb_actions_per_visit_returning> <bounce_rate_returning>Bounce Rate for Returning Visits</bounce_rate_returning> <bounce_rate>Bounce Rate</bounce_rate> + <nb_actions_per_visit>Actions per Visit</nb_actions_per_visit> + <avg_time_on_site>Avg. Time on Website</avg_time_on_site> </processedMetrics> <imageGraphUrl>index.php?module=API&method=ImageGraph.get&idSite=1&apiModule=API&apiAction=get&period=day&date=2008-12-06,2009-01-04</imageGraphUrl> <imageGraphEvolutionUrl>index.php?module=API&method=ImageGraph.get&idSite=1&apiModule=API&apiAction=get&period=day&date=2008-12-06,2009-01-04</imageGraphEvolutionUrl> @@ -133,8 +131,6 @@ <nb_visits>Visits</nb_visits> <nb_users>Users</nb_users> <nb_actions>Actions</nb_actions> - <nb_actions_per_visit>Actions per Visit</nb_actions_per_visit> - <avg_time_on_site>Avg. Visit Duration (in seconds)</avg_time_on_site> <max_actions>Maximum actions in one visit</max_actions> </metrics> <metricsDocumentation> @@ -142,11 +138,11 @@ <nb_visits>If a visitor comes to your website for the first time or if he visits a page more than 30 minutes after his last page view, this will be recorded as a new visit.</nb_visits> <nb_users>The number of users logged in your website. It is the number of unique active users that have a User ID set (via the Tracking code function 'setUserId').</nb_users> <nb_actions>The number of actions performed by your visitors. Actions can be page views, internal site searches, downloads or outlinks.</nb_actions> - <nb_actions_per_visit>The average number of actions (page views, site searches, downloads or outlinks) that were performed during the visits.</nb_actions_per_visit> - <avg_time_on_site>The average duration of a visit.</avg_time_on_site> </metricsDocumentation> <processedMetrics> <bounce_rate>Bounce Rate</bounce_rate> + <nb_actions_per_visit>Actions per Visit</nb_actions_per_visit> + <avg_time_on_site>Avg. Visit Duration (in seconds)</avg_time_on_site> </processedMetrics> <imageGraphUrl>index.php?module=API&method=ImageGraph.get&idSite=1&apiModule=VisitsSummary&apiAction=get&period=day&date=2008-12-06,2009-01-04</imageGraphUrl> <imageGraphEvolutionUrl>index.php?module=API&method=ImageGraph.get&idSite=1&apiModule=VisitsSummary&apiAction=get&period=day&date=2008-12-06,2009-01-04</imageGraphEvolutionUrl> @@ -1844,8 +1840,6 @@ <metrics> <nb_visits_returning>Returning Visits</nb_visits_returning> <nb_actions_returning>Actions by Returning Visits</nb_actions_returning> - <avg_time_on_site_returning>Avg. Duration of a Returning Visit (in sec)</avg_time_on_site_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> @@ -1853,6 +1847,8 @@ <max_actions_returning>Maximum actions in one returning visit</max_actions_returning> </metrics> <processedMetrics> + <avg_time_on_site_returning>Avg. Duration of a Returning Visit (in sec)</avg_time_on_site_returning> + <nb_actions_per_visit_returning>Avg. Actions per Returning Visit</nb_actions_per_visit_returning> <bounce_rate_returning>Bounce Rate for Returning Visits</bounce_rate_returning> </processedMetrics> <imageGraphUrl>index.php?module=API&method=ImageGraph.get&idSite=1&apiModule=VisitFrequency&apiAction=get&period=day&date=2008-12-06,2009-01-04</imageGraphUrl> @@ -2134,8 +2130,6 @@ <revenue>Revenue</revenue> <nb_visits_returning>Returning Visits</nb_visits_returning> <nb_actions_returning>Actions by Returning Visits</nb_actions_returning> - <avg_time_on_site_returning>Avg. Duration of a Returning Visit (in sec)</avg_time_on_site_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> @@ -2145,8 +2139,6 @@ <nb_visits>Visits</nb_visits> <nb_users>Users</nb_users> <nb_actions>Actions</nb_actions> - <nb_actions_per_visit>Actions per Visit</nb_actions_per_visit> - <avg_time_on_site>Avg. Visit Duration (in seconds)</avg_time_on_site> <max_actions>Maximum actions in one visit</max_actions> <revenue_subtotal>Subtotal</revenue_subtotal> <revenue_tax>Tax</revenue_tax> @@ -2156,8 +2148,12 @@ <avg_order_revenue>Average Order Value</avg_order_revenue> </metrics> <processedMetrics> + <avg_time_on_site_returning>Avg. Duration of a Returning Visit (in sec)</avg_time_on_site_returning> + <nb_actions_per_visit_returning>Avg. Actions per Returning Visit</nb_actions_per_visit_returning> <bounce_rate_returning>Bounce Rate for Returning Visits</bounce_rate_returning> <bounce_rate>Bounce Rate</bounce_rate> + <nb_actions_per_visit>Actions per Visit</nb_actions_per_visit> + <avg_time_on_site>Avg. Visit Duration (in seconds)</avg_time_on_site> </processedMetrics> <metricsDocumentation> <nb_pageviews>The number of times this page was visited.</nb_pageviews> @@ -2173,8 +2169,6 @@ <nb_visits>If a visitor comes to your website for the first time or if he visits a page more than 30 minutes after his last page view, this will be recorded as a new visit.</nb_visits> <nb_users>The number of users logged in your website. It is the number of unique active users that have a User ID set (via the Tracking code function 'setUserId').</nb_users> <nb_actions>The number of actions performed by your visitors. Actions can be page views, internal site searches, downloads or outlinks.</nb_actions> - <nb_actions_per_visit>The average number of actions (page views, site searches, downloads or outlinks) that were performed during the visits.</nb_actions_per_visit> - <avg_time_on_site>The average duration of a visit.</avg_time_on_site> </metricsDocumentation> <uniqueId>API_get</uniqueId> </row> 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 a69bb4a656a8adb7fc72348ee516d7e0b97bed6c..d4b0c6d61db61f5c8d5ac42742ce66f641f69acf 100644 --- a/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.get_day.xml +++ b/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.get_day.xml @@ -1,27 +1,24 @@ <?xml version="1.0" encoding="utf-8" ?> <result> <nb_uniq_visitors>1</nb_uniq_visitors> - <nb_users>0</nb_users> <nb_visits>1</nb_visits> + <nb_users>0</nb_users> <nb_actions>1</nb_actions> - <nb_visits_converted>1</nb_visits_converted> + <max_actions>1</max_actions> <bounce_count>1</bounce_count> <sum_visit_length>1086</sum_visit_length> - <max_actions>1</max_actions> - <nb_actions_per_visit>1</nb_actions_per_visit> - <avg_time_on_site>1086</avg_time_on_site> - <nb_uniq_visitors_returning>0</nb_uniq_visitors_returning> - <nb_users_returning>0</nb_users_returning> <nb_visits_returning>0</nb_visits_returning> <nb_actions_returning>0</nb_actions_returning> - <nb_visits_converted_returning>0</nb_visits_converted_returning> - <bounce_count_returning>0</bounce_count_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> - <bounce_rate_returning>0%</bounce_rate_returning> <nb_conversions>1</nb_conversions> + <nb_visits_converted>1</nb_visits_converted> <conversion_rate>100</conversion_rate> <revenue>42.26</revenue> <nb_pageviews>1</nb_pageviews> @@ -34,4 +31,6 @@ <nb_keywords>0</nb_keywords> <avg_time_generation>0</avg_time_generation> <bounce_rate>100%</bounce_rate> + <nb_actions_per_visit>1</nb_actions_per_visit> + <avg_time_on_site>1086</avg_time_on_site> </result> \ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_apiGetReportMetadata_showRawMetrics__API.getProcessedReport_day.xml b/tests/PHPUnit/System/expected/test_apiGetReportMetadata_showRawMetrics__API.getProcessedReport_day.xml index 4b38b3da7f33c7eb77c350a9df45faa3b11a028e..a701470308e9acf030a9e1caac16239bee017012 100644 --- a/tests/PHPUnit/System/expected/test_apiGetReportMetadata_showRawMetrics__API.getProcessedReport_day.xml +++ b/tests/PHPUnit/System/expected/test_apiGetReportMetadata_showRawMetrics__API.getProcessedReport_day.xml @@ -64,7 +64,7 @@ </goals> <nb_conversions>1</nb_conversions> <revenue>$ 42.26</revenue> - <conversion_rate>0</conversion_rate> + <conversion_rate>0%</conversion_rate> <nb_actions_per_visit>1</nb_actions_per_visit> <avg_time_on_site>00:18:06</avg_time_on_site> <bounce_rate>100%</bounce_rate>