diff options
author | diosmosis <diosmosis@users.noreply.github.com> | 2018-08-03 01:57:13 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-08-03 01:57:13 +0300 |
commit | cb1d83db863938ace3ebdafd072dfd32e434fded (patch) | |
tree | 32d8e98d500b2167dcd9d04d92edfec21da9f5e9 /core/Plugin/Report.php | |
parent | 59e6f48c9d9112b7335e078f05d405264b46f0c5 (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.php | 38 |
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); + } } } |