diff options
Diffstat (limited to 'core/Columns/ComputedMetricFactory.php')
-rw-r--r-- | core/Columns/ComputedMetricFactory.php | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/core/Columns/ComputedMetricFactory.php b/core/Columns/ComputedMetricFactory.php new file mode 100644 index 0000000000..0b2b2f5426 --- /dev/null +++ b/core/Columns/ComputedMetricFactory.php @@ -0,0 +1,57 @@ +<?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\Columns; + +use Piwik\Piwik; +use Piwik\Plugin\ArchivedMetric; +use Piwik\Plugin\ComputedMetric; +use Piwik\Plugin\Report; + +/** + * A factory to create computed metrics. + * + * @api since Piwik 3.2.0 + */ +class ComputedMetricFactory +{ + /** + * @var MetricsList + */ + private $metricsList = null; + + /** + * Generates a new report metric factory. + * @param MetricsList $list A report list instance + * @ignore + */ + public function __construct(MetricsList $list) + { + $this->metricsList = $list; + } + + /** + * @return \Piwik\Plugin\ComputedMetric + */ + public function createComputedMetric($metricName1, $metricName2, $aggregation) + { + $metric1 = $this->metricsList->getMetric($metricName1); + + if (!$metric1 instanceof ArchivedMetric || !$metric1->getDimension()) { + throw new \Exception('Only possible to create computed metric for an archived metric with a dimension'); + } + + $dimension1 = $metric1->getDimension(); + + $metric = new ComputedMetric($metricName1, $metricName2, $aggregation); + $metric->setCategory($dimension1->getCategoryId()); + + return $metric; + } + +}
\ No newline at end of file |