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:
authordiosmosis <diosmosis@users.noreply.github.com>2018-08-03 01:57:13 +0300
committerGitHub <noreply@github.com>2018-08-03 01:57:13 +0300
commitcb1d83db863938ace3ebdafd072dfd32e434fded (patch)
tree32d8e98d500b2167dcd9d04d92edfec21da9f5e9 /core/Plugin/Report.php
parent59e6f48c9d9112b7335e078f05d405264b46f0c5 (diff)
Add reusable widget to display single metric w/ sparkline & evolution percent (+ other changes) (#13101)
* Add empty metric for single metric view. * Add new isReusable property to widget metadata & if set to true, do not grey out the widget in the dashboard manager, even if the widget is used in the dashboard. * Initial working version of single metric view. * Get single metric view widget to work and look correctly (no series picker). * Add series picker to single metric widget and add filter_last_period_evolution parameter. * Persist metric change through dashboard widget parameter saving. * Loading state for single metric view. * Make new evolution param work on processed reports + tweak component implementation. * Tweak CSS and make sure angular components are compiled in widget preview. * Make component work with widget preview and avoid unnecessary widget reloads when multiple widgets of the same type are shown. * Generalize JS lastN range period computing and use to create standalone sparkline angular component and get rid of need for "past-period" argument to single metric view. * Add format_metrics: "1" to API.get method. * Add escaping to _angularComponent.twig. * hacky fix for formatting revenue columns * Format past data values & allow evolution to be calculated for processed metrics. * filter evolution changes * Fix issue in subtable recursion for processed metric computation & metric formatting + add new processed metric compute hooks to fix bug in evolution calculation on subtables. * remove isReusable property. * attempting to change strategy * simpler solution that does not require backend changes * remove unneeded code + fix issue w/ formatted metrics * remove some more unneeded code * write UI test * add new screenshots * Add all goals to single metric view picker. * move category * fix test * fixing more tests * Fixing some UI tests. * Update more screenshots. * update two more screenshots
Diffstat (limited to 'core/Plugin/Report.php')
-rw-r--r--core/Plugin/Report.php38
1 files changed, 37 insertions, 1 deletions
diff --git a/core/Plugin/Report.php b/core/Plugin/Report.php
index e0850586d9..5356286f80 100644
--- a/core/Plugin/Report.php
+++ b/core/Plugin/Report.php
@@ -934,6 +934,42 @@ class Report
*/
public static function getProcessedMetricsForTable(DataTable $dataTable, Report $report = null)
{
- return self::getMetricsForTable($dataTable, $report, 'Piwik\\Plugin\\ProcessedMetric');
+ /** @var ProcessedMetric[] $metrics */
+ $metrics = self::getMetricsForTable($dataTable, $report, 'Piwik\\Plugin\\ProcessedMetric');
+
+ // sort metrics w/ dependent metrics calculated before the metrics that depend on them
+ $result = [];
+ self::processedMetricDfs($metrics, function ($metricName) use (&$result, $metrics) {
+ $result[$metricName] = $metrics[$metricName];
+ });
+ return $result;
+ }
+
+ /**
+ * @param ProcessedMetric[] $metrics
+ * @param $callback
+ * @param array $visited
+ */
+ private static function processedMetricDfs($metrics, $callback, &$visited = [], $toVisit = null)
+ {
+ $toVisit = $toVisit === null ? $metrics : $toVisit;
+ foreach ($toVisit as $name => $metric) {
+ if (!empty($visited[$name])) {
+ continue;
+ }
+
+ $visited[$name] = true;
+
+ $dependentMetrics = [];
+ foreach ($metric->getDependentMetrics() as $metricName) {
+ if (!empty($metrics[$metricName])) {
+ $dependentMetrics[$metricName] = $metrics[$metricName];
+ }
+ }
+
+ self::processedMetricDfs($metrics, $callback, $visited, $dependentMetrics);
+
+ $callback($name);
+ }
}
}