Piwik\Plugins\API\ProcessedReport::handleSimpleDataTable PHP Метод

handleSimpleDataTable() приватный Метод

- 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 Simple $rowsMetadata
private handleSimpleDataTable ( integer $idSite, Piwik\DataTable\Simple $simpleDataTable, array $metadataColumns, boolean $hasDimension, boolean $returnRawMetrics = false, boolean | null $formatMetrics = null ) : array
$idSite integer enables monetary value formatting based on site currency
$simpleDataTable Piwik\DataTable\Simple
$metadataColumns array
$hasDimension boolean
$returnRawMetrics boolean If set to true, the original metrics will be returned
$formatMetrics boolean | null
Результат array DataTable $enhancedDataTable filtered metrics with human readable format & Simple $rowsMetadata
    private function handleSimpleDataTable($idSite, $simpleDataTable, $metadataColumns, $hasDimension, $returnRawMetrics = false, $formatMetrics = null)
    {
        // new DataTable to store metadata
        $rowsMetadata = new DataTable();
        // new DataTable to store 'human readable' values
        if ($hasDimension) {
            $enhancedDataTable = new DataTable();
        } else {
            $enhancedDataTable = new Simple();
        }
        $formatter = new Formatter();
        foreach ($simpleDataTable->getRows() as $row) {
            $rowMetrics = $row->getColumns();
            // add missing metrics
            foreach ($metadataColumns as $id => $name) {
                if (!isset($rowMetrics[$id])) {
                    $row->setColumn($id, 0);
                    $rowMetrics[$id] = 0;
                }
            }
            $enhancedRow = new Row();
            $enhancedDataTable->addRow($enhancedRow);
            foreach ($rowMetrics as $columnName => $columnValue) {
                // filter metrics according to metadata definition
                if (isset($metadataColumns[$columnName])) {
                    // generate 'human readable' metric values
                    // if we handle MultiSites.getAll we do not always have the same idSite but different ones for
                    // each site, see https://github.com/piwik/piwik/issues/5006
                    $idSiteForRow = $idSite;
                    $idSiteMetadata = $row->getMetadata('idsite');
                    if ($idSiteMetadata && is_numeric($idSiteMetadata)) {
                        $idSiteForRow = (int) $idSiteMetadata;
                    }
                    // format metrics manually here to maintain API.getProcessedReport BC if format_metrics query parameter is
                    // not supplied. TODO: should be removed for 3.0. should only rely on format_metrics query parameter.
                    if ($formatMetrics === null || $formatMetrics == 'bc') {
                        $prettyValue = self::getPrettyValue($formatter, $idSiteForRow, $columnName, $columnValue, $htmlAllowed = false);
                    } else {
                        $prettyValue = $columnValue;
                    }
                    $enhancedRow->addColumn($columnName, $prettyValue);
                } else {
                    if ($returnRawMetrics) {
                        if (!isset($columnValue)) {
                            $columnValue = 0;
                        }
                        $enhancedRow->addColumn($columnName, $columnValue);
                    }
                }
            }
            // 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 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);
    }