/** * Enhance $simpleDataTable using metadata : * * - remove metrics based on $reportMetadata['metrics'] * - add 0 valued metrics if $simpleDataTable doesn't provide all $reportMetadata['metrics'] * - format metric values to a 'human readable' format * - extract row metadata to a separate Piwik_DataTable_Simple $rowsMetadata * * @param int $idSite enables monetary value formatting based on site currency * @param Piwik_DataTable_Simple $simpleDataTable * @param array $metadataColumns * @param boolean $hasDimension * @return array Piwik_DataTable $enhancedDataTable filtered metrics with human readable format & Piwik_DataTable_Simple $rowsMetadata */ private function handleSimpleDataTable($idSite, $simpleDataTable, $metadataColumns, $hasDimension) { // new DataTable to store metadata $rowsMetadata = new Piwik_DataTable(); // new DataTable to store 'human readable' values if ($hasDimension) { $enhancedDataTable = new Piwik_DataTable(); } else { $enhancedDataTable = new Piwik_DataTable_Simple(); } // add missing metrics foreach ($simpleDataTable->getRows() as $row) { $rowMetrics = $row->getColumns(); foreach ($metadataColumns as $id => $name) { if (!isset($rowMetrics[$id])) { $row->addColumn($id, 0); } } } foreach ($simpleDataTable->getRows() as $row) { $enhancedRow = new Piwik_DataTable_Row(); $enhancedDataTable->addRow($enhancedRow); $rowMetrics = $row->getColumns(); foreach ($rowMetrics as $columnName => $columnValue) { // filter metrics according to metadata definition if (isset($metadataColumns[$columnName])) { // generate 'human readable' metric values $prettyValue = Piwik::getPrettyValue($idSite, $columnName, $columnValue, false, false); $enhancedRow->addColumn($columnName, $prettyValue); } } // If report has a dimension, extract metadata into a distinct DataTable if ($hasDimension) { $rowMetadata = $row->getMetadata(); $idSubDataTable = $row->getIdSubDataTable(); // Create a row metadata only if there are metadata to insert if (count($rowMetadata) > 0 || !is_null($idSubDataTable)) { $metadataRow = new Piwik_DataTable_Row(); $rowsMetadata->addRow($metadataRow); foreach ($rowMetadata as $metadataKey => $metadataValue) { $metadataRow->addColumn($metadataKey, $metadataValue); } if (!is_null($idSubDataTable)) { $metadataRow->addColumn('idsubdatatable', $idSubDataTable); } } } } return array($enhancedDataTable, $rowsMetadata); }
/** * Convert a dimension-less report to a multi-row two-column data table * * @static * @param $reportMetadata array * @param $report Piwik_DataTable * @param $reportColumns array * @return array Piwik_DataTable $report & array $columns */ protected static function processTableFormat($reportMetadata, $report, $reportColumns) { $finalReport = $report; if (empty($reportMetadata['dimension'])) { // var_dump($report); $simpleReportMetrics = $report->getFirstRow(); if ($simpleReportMetrics) { $finalReport = new Piwik_DataTable_Simple(); foreach ($simpleReportMetrics->getColumns() as $metricId => $metric) { $newRow = new Piwik_DataTable_Row(); $newRow->addColumn("label", $reportColumns[$metricId]); $newRow->addColumn("value", $metric); $finalReport->addRow($newRow); } } $reportColumns = array('label' => Piwik_Translate('General_Name'), 'value' => Piwik_Translate('General_Value')); } return array($finalReport, $reportColumns); }