protected function get($archiveNames, $archiveDataType, $idSubtable = null)
    {
        if (!is_array($archiveNames)) {
            $archiveNames = array($archiveNames);
        }

        // apply idSubtable
        if ($idSubtable !== null
            && $idSubtable != self::ID_SUBTABLE_LOAD_ALL_SUBTABLES
        ) {
            // this is also done in ArchiveSelector. It should be actually only done in ArchiveSelector but DataCollection
            // does require to have the subtableId appended. Needs to be changed in refactoring to have it only in one
            // place.
            $dataNames = array();
            foreach ($archiveNames as $name) {
                $dataNames[] = ArchiveSelector::appendIdsubtable($name, $idSubtable);
            }
        } else {
            $dataNames = $archiveNames;
        }

        $result = new Archive\DataCollection(
            $dataNames, $archiveDataType, $this->params->getIdSites(), $this->params->getPeriods(), $defaultRow = null);

        $archiveIds = $this->getArchiveIds($archiveNames);
        if (empty($archiveIds)) {
            /**
             * Triggered when no archive data is found in an API request.
             * @ignore
             */
            Piwik::postEvent('Archive.noArchivedData');
            return $result;
        }

        $archiveData = ArchiveSelector::getArchiveData($archiveIds, $archiveNames, $archiveDataType, $idSubtable);

        $isNumeric = $archiveDataType == 'numeric';

        foreach ($archiveData as $row) {
            // values are grouped by idsite (site ID), date1-date2 (date range), then name (field name)
            $periodStr = $row['date1'] . ',' . $row['date2'];

            if ($isNumeric) {
                $row['value'] = $this->formatNumericValue($row['value']);
            } else {
                $result->addMetadata($row['idsite'], $periodStr, DataTable::ARCHIVED_DATE_METADATA_NAME, $row['ts_archived']);
            }

            $result->set($row['idsite'], $periodStr, $row['name'], $row['value']);
        }

        return $result;
    }
protected function get($archiveNames, $archiveDataType, $idSubtable = null)
    {
        if (!is_array($archiveNames)) {
            $archiveNames = array($archiveNames);
        }

        // apply idSubtable
        if ($idSubtable !== null
            && $idSubtable != self::ID_SUBTABLE_LOAD_ALL_SUBTABLES
        ) {
            // this is also done in ArchiveSelector. It should be actually only done in ArchiveSelector but DataCollection
            // does require to have the subtableId appended. Needs to be changed in refactoring to have it only in one
            // place.
            $dataNames = array();
            foreach ($archiveNames as $name) {
                $dataNames[] = ArchiveSelector::appendIdsubtable($name, $idSubtable);
            }
        } else {
            $dataNames = $archiveNames;
        }

        $result = new Archive\DataCollection(
            $dataNames, $archiveDataType, $this->params->getIdSites(), $this->params->getPeriods(), $defaultRow = null);

        $archiveIds = $this->getArchiveIds($archiveNames);
        if (empty($archiveIds)) {
            /**
             * Triggered when no archive data is found in an API request.
             * @ignore
             */
            Piwik::postEvent('Archive.noArchivedData');
            return $result;
        }

        $archiveData = ArchiveSelector::getArchiveData($archiveIds, $archiveNames, $archiveDataType, $idSubtable);

        $isNumeric = $archiveDataType == 'numeric';

        foreach ($archiveData as $row) {
            // values are grouped by idsite (site ID), date1-date2 (date range), then name (field name)
            $periodStr = $row['date1'] . ',' . $row['date2'];

            if ($isNumeric) {
                $row['value'] = $this->formatNumericValue($row['value']);
            } else {
                $result->addMetadata($row['idsite'], $periodStr, DataTable::ARCHIVED_DATE_METADATA_NAME, $row['ts_archived']);
            }

            $result->set($row['idsite'], $periodStr, $row['name'], $row['value']);
        }

        return $result;
    }
protected function get ( $ archiveNames , $ archiveDataType , $ idSubtable = null ) { if ( ! is_array ( $ archiveNames ) ) { $ archiveNames = array ( $ archiveNames ) ; } // apply idSubtable if ( $ idSubtable !== null && $ idSubtable != self :: ID_SUBTABLE_LOAD_ALL_SUBTABLES ) { // this is also done in ArchiveSelector. It should be actually only done in ArchiveSelector but DataCollection // does require to have the subtableId appended. Needs to be changed in refactoring to have it only in one // place. $ dataNames = array ( ) ; foreach ( $ archiveNames as $ name ) { $ dataNames [ ] = ArchiveSelector :: appendIdsubtable ( $ name , $ idSubtable ) ; } } else { $ dataNames = $ archiveNames ; } $ result = new Archive \ DataCollection ( $ dataNames , $ archiveDataType , $ this -> params -> getIdSites ( ) , $ this -> params -> getPeriods ( ) , $ defaultRow = null ) ; $ archiveIds = $ this -> getArchiveIds ( $ archiveNames ) ; if ( empty ( $ archiveIds ) ) { /**
             * Triggered when no archive data is found in an API request.
             * @ignore
             */ Piwik :: postEvent ( 'Archive.noArchivedData' ) ; return $ result ; } $ archiveData = ArchiveSelector :: getArchiveData ( $ archiveIds , $ archiveNames , $ archiveDataType , $ idSubtable ) ; $ isNumeric = $ archiveDataType == 'numeric' ; foreach ( $ archiveData as $ row ) { // values are grouped by idsite (site ID), date1-date2 (date range), then name (field name) $ periodStr = $ row [ 'date1' ] . ',' . $ row [ 'date2' ] ; if ( $ isNumeric ) { $ row [ 'value' ] = $ this -> formatNumericValue ( $ row [ 'value' ] ) ; } else { $ result -> addMetadata ( $ row [ 'idsite' ] , $ periodStr , DataTable :: ARCHIVED_DATE_METADATA_NAME , $ row [ 'ts_archived' ] ) ; } $ result -> set ( $ row [ 'idsite' ] , $ periodStr , $ row [ 'name' ] , $ row [ 'value' ] ) ; } return $ result ; }
Queries archive tables for data and returns the result.
@param array|string $archiveNames
@param $archiveDataType
@param null|int $idSubtable
@return Archive\DataCollection
Queries archive tables for data and returns the result .