Supports pie graphs, bar graphs and time serieses (aka, evolution graphs).
/** * @param DataTable|DataTable\Map $dataTable * @param $visualization */ protected function initChartObjectData($dataTable, $visualization) { // if the loaded datatable is a simple DataTable, it is most likely a plugin plotting some custom data // we don't expect plugin developers to return a well defined Set if ($dataTable instanceof DataTable) { parent::initChartObjectData($dataTable, $visualization); return; } // the X label is extracted from the 'period' object in the table's metadata $xLabels = array(); foreach ($dataTable->getDataTables() as $metadataDataTable) { $xLabels[] = $metadataDataTable->getMetadata(DataTableFactory::TABLE_METADATA_PERIOD_INDEX)->getLocalizedShortString(); // eg. "Aug 2009" } $units = $this->getUnitsForColumnsToDisplay(); // if rows to display are not specified, default to all rows (TODO: perhaps this should be done elsewhere?) $rowsToDisplay = $this->properties['rows_to_display'] ?: array_unique($dataTable->getColumn('label')) ?: array(false); // collect series data to show. each row-to-display/column-to-display permutation creates a series. $allSeriesData = array(); $seriesUnits = array(); foreach ($rowsToDisplay as $rowLabel) { foreach ($this->properties['columns_to_display'] as $columnName) { $seriesLabel = $this->getSeriesLabel($rowLabel, $columnName); $seriesData = $this->getSeriesData($rowLabel, $columnName, $dataTable); $allSeriesData[$seriesLabel] = $seriesData; $seriesUnits[$seriesLabel] = $units[$columnName]; } } $visualization->dataTable = $dataTable; $visualization->properties = $this->properties; $visualization->setAxisXLabels($xLabels); $visualization->setAxisYValues($allSeriesData); $visualization->setAxisYUnits($seriesUnits); $dataTables = $dataTable->getDataTables(); if ($this->isLinkEnabled()) { $idSite = Common::getRequestVar('idSite', null, 'int'); $periodLabel = reset($dataTables)->getMetadata(DataTableFactory::TABLE_METADATA_PERIOD_INDEX)->getLabel(); $axisXOnClick = array(); $queryStringAsHash = $this->getQueryStringAsHash(); foreach ($dataTable->getDataTables() as $idDataTable => $metadataDataTable) { $dateInUrl = $metadataDataTable->getMetadata(DataTableFactory::TABLE_METADATA_PERIOD_INDEX)->getDateStart(); $parameters = array('idSite' => $idSite, 'period' => $periodLabel, 'date' => $dateInUrl->toString(), 'segment' => \Piwik\API\Request::getRawSegmentFromRequest()); $hash = ''; if (!empty($queryStringAsHash)) { $hash = '#' . Url::getQueryStringFromParameters($queryStringAsHash + $parameters); } $link = 'index.php?' . Url::getQueryStringFromParameters(array('module' => 'CoreHome', 'action' => 'index') + $parameters) . $hash; $axisXOnClick[] = $link; } $visualization->setAxisXOnClick($axisXOnClick); } }
protected function makeDataGenerator($properties) { return JqplotDataGenerator::factory('pie', $properties); }