| <?php |
|
|
| |
| |
| |
| |
| |
| |
|
|
| namespace Piwik\Plugins\API; |
|
|
| use Piwik\Metrics; |
|
|
| class Glossary |
| { |
| |
| |
| |
| private $api; |
|
|
| public function __construct(API $api) |
| { |
| $this->api = $api; |
| } |
|
|
| public function reportsGlossary($idSite) |
| { |
| $metadata = $this->api->getReportMetadata($idSite); |
|
|
| $reports = array(); |
| foreach ($metadata as $report) { |
| if (isset($report['documentation'])) { |
| $docReport = array( |
| 'name' => sprintf("%s (%s)", $report['name'], $report['category']), |
| 'documentation' => $report['documentation'], |
| ); |
|
|
| if (isset($report['onlineGuideUrl'])) { |
| $docReport['onlineGuideUrl'] = $report['onlineGuideUrl']; |
| } |
|
|
| $reports[] = $docReport; |
| } |
| } |
|
|
| usort($reports, function ($a, $b) { |
| return strcmp($a['name'], $b['name']); |
| }); |
|
|
| return $reports; |
| } |
|
|
| public function metricsGlossary($idSite) |
| { |
| $metadata = $this->api->getReportMetadata($idSite); |
|
|
| $metrics = []; |
|
|
| |
| $metricsTranslations = Metrics::getDefaultMetricTranslations(); |
| foreach (Metrics::getDefaultMetricsDocumentation() as $metric => $translation) { |
| |
| if ($metric == 'nb_hits') { |
| continue; |
| } |
|
|
| $metrics[$metric] = [ |
| 'name' => $metricsTranslations[$metric], |
| 'id' => $metric, |
| 'documentation' => [ |
| 'default' => $translation, |
| 'reportSpecific' => [], |
| ], |
| ]; |
| } |
|
|
|
|
| foreach ($metadata as $report) { |
| if (!isset($report['metricsDocumentation'])) { |
| continue; |
| } |
|
|
| foreach ($report['metricsDocumentation'] as $metricId => $metricDocumentation) { |
| $metricKey = $metricId; |
|
|
| if ( |
| empty($report['metrics'][$metricId]) |
| && empty($report['processedMetrics'][$metricId]) |
| ) { |
| continue; |
| } |
|
|
| $metricName = $report['metrics'][$metricId] ?? $report['processedMetrics'][$metricId]; |
|
|
|
|
| |
| if ( |
| isset($metrics[$metricKey]) |
| && $metrics[$metricKey]['documentation']['default'] !== $metricDocumentation |
| ) { |
| |
| if ($metricKey == 'nb_hits') { |
| continue; |
| } |
|
|
| $metrics[$metricKey]['documentation']['reportSpecific'][$report['uniqueId']] = $metricDocumentation; |
| } elseif (!isset($metrics[$metricKey])) { |
| $metrics[$metricKey] = [ |
| 'name' => $metricName, |
| 'id' => $metricId, |
| 'documentation' => [ |
| 'default' => null, |
| 'reportSpecific' => [ |
| $report['uniqueId'] => $metricDocumentation, |
| ], |
| ], |
| ]; |
| } |
| } |
| } |
|
|
| foreach ($metrics as &$metric) { |
| if (empty($metric['documentation']['default'])) { |
| $valueCount = array_count_values($metric['documentation']['reportSpecific']); |
|
|
| |
| if (array_sum($valueCount) - reset($valueCount) < reset($valueCount)) { |
| $metric['documentation']['default'] = key($valueCount); |
|
|
| foreach ($metric['documentation']['reportSpecific'] as $uniqueId => $documentation) { |
| if ($documentation === $metric['documentation']['default']) { |
| unset($metric['documentation']['reportSpecific'][$uniqueId]); |
| } |
| } |
| } |
| } |
| if (empty($metric['documentation']['reportSpecific'])) { |
| $metric['documentation']['reportSpecific'] = null; |
| } |
| } |
|
|
| |
| |
| |
| foreach ($metrics as $metricId => &$metric) { |
| if (empty($metric['documentation']['default'])) { |
| unset($metrics[$metricId]); |
| } else { |
| $metric['documentation'] = $metric['documentation']['default']; |
| } |
| } |
|
|
| usort($metrics, function ($a, $b) { |
| $key = ($a['name'] === $b['name'] ? 'id' : 'name'); |
|
|
| return strcmp($a[$key], $b[$key]); |
| }); |
|
|
| return $metrics; |
| } |
| } |
|
|