properties = $properties; $this->graphType = $graphType; } /** * Generates JSON graph data and returns it. * * @param DataTable|DataTable\Map $dataTable * @return string */ public function generate($dataTable) { $visualization = new Chart(); if ($dataTable->getRowsCount() > 0) { // if addTotalRow was called in GenerateGraphHTML, add a row containing totals of // different metrics if ($this->properties['add_total_row']) { $dataTable->queueFilter('AddSummaryRow', Piwik::translate('General_Total')); } $dataTable->applyQueuedFilters(); $this->initChartObjectData($dataTable, $visualization); } return $visualization->render(); } /** * @param DataTable|DataTable\Map $dataTable * @param Chart $visualization */ protected function initChartObjectData($dataTable, $visualization) { $xLabels = $dataTable->getColumn('label'); $columnNames = $this->properties['columns_to_display']; if (($labelColumnIndex = array_search('label', $columnNames)) !== false) { unset($columnNames[$labelColumnIndex]); } $columnNameToTranslation = $columnNameToValue = array(); foreach ($columnNames as $columnName) { $columnNameToTranslation[$columnName] = @$this->properties['translations'][$columnName]; $columnNameToValue[$columnName] = $dataTable->getColumn($columnName); } $visualization->dataTable = $dataTable; $visualization->properties = $this->properties; $visualization->setAxisXLabels($xLabels); $visualization->setAxisYValues($columnNameToValue); $visualization->setAxisYLabels($columnNameToTranslation); $units = $this->getUnitsForColumnsToDisplay(); $visualization->setAxisYUnits($units); } protected function getUnitsForColumnsToDisplay() { // derive units from column names $units = $this->deriveUnitsFromRequestedColumnNames(); if (!empty($this->properties['y_axis_unit'])) { $units = array_fill(0, count($units), $this->properties['y_axis_unit']); } return $units; } private function deriveUnitsFromRequestedColumnNames() { $idSite = Common::getRequestVar('idSite', null, 'int'); $units = array(); foreach ($this->properties['columns_to_display'] as $columnName) { $derivedUnit = Metrics::getUnit($columnName, $idSite); $units[$columnName] = empty($derivedUnit) ? false : $derivedUnit; } return $units; } }