public function queryCube(DataControllerCallContext $callcontext, CubeQueryRequest $request, ResultFormatter $resultFormatter) { $records = NULL; $environment_metamodel = data_controller_get_environment_metamodel(); $metamodel = data_controller_get_metamodel(); $cubeName = $request->getCubeName(); $cube = $metamodel->getCube($cubeName); $cubeDatasetName = $cube->sourceDatasetName; $cubeDataset = $metamodel->getDataset($cubeDatasetName); $datasource = $environment_metamodel->getDataSource($cubeDataset->datasourceName); $designDocumentName = NameSpaceHelper::removeNameSpace($cubeName); $viewName = NameSpaceHelper::removeNameSpace($cubeName); $url = '/' . $cubeDataset->source->database . "/_design/$designDocumentName/_view/$viewName"; $dimensionCount = $cube->getDimensionCount(); $queryKeys = NULL; // TODO list of dimensions could be empty foreach ($cube->dimensions as $dimension) { $queryDimension = $request->findDimensionQuery($dimension->name); if (isset($queryDimension)) { $queryKeys[] = $queryDimension->values; } else { $queryKeys[] = NULL; } } // TODO develop more comprehensive validation or mapping if ($cube->getMeasureCount() != 1) { throw new UnsupportedOperationException(t('Only one measure is supported')); } $cubeMeasurePropertyName = NULL; foreach ($cube->measures as $measureName => $measure) { $cubeMeasurePropertyName = $measureName; } // preparing set of keys to access data $requestKeys = NULL; $this->prepareCubeRequestKeys($requestKeys, $queryKeys, 0, NULL); // preparing server requests if (isset($requestKeys)) { foreach ($requestKeys as $requestKey) { $parameterKey = ''; foreach ($requestKey as $dimensionKey) { $parameterKey .= self::prepareSingleValue($dimensionKey); } $parameterKey = '[' . substr($parameterKey, 0, strlen($parameterKey) - 1) . ']'; $serverRequest = NULL; $serverRequest->url = $url . "?key=$parameterKey"; // executing the server request $serverResponse = $this->communicateWithServer($datasource, $serverRequest); $this->checkDocumentExistence($serverResponse, TRUE); if (isset($serverResponse->rows[0])) { $record = NULL; // adding dimension-related properties for ($i = 0; $i < $dimensionCount; $i++) { // we should have data for a dimension to report related property if (!isset($requestKey[$i])) { continue; } $dimension = $cube->dimensions[$i]; $dimensionKey = $requestKey[$i]; // FIXME there is no support for targetKey any more $record[$dimension->targetKey] = $dimensionKey; } // adding measure value $record[$cubeMeasurePropertyName] = $serverResponse->rows[0]->value; $records[] = $record; } } } return $records; }
protected function processConfig ( &$config ) { $metamodel = data_controller_get_metamodel(); if ( !empty($config->model->datasets) ) { foreach ( $config->model->datasets as $key => $datasetName ) { $dataset = $metamodel->getDataset($datasetName); if (isset($dataset->uuid)) { $config->model->datasets[$key] = $dataset->uuid; } else { $config->model->datasets[$key] = NameSpaceHelper::removeNameSpace($dataset->name); } } } // update columns if ( !empty($config->model->columns) ) { foreach ( $config->model->columns as $key => $value ) { $config->model->columns[$key] = DatasetExportHelper::getExportColumnName($value,$metamodel); } } // update column configs if ( !empty($config->columnConfigs) ) { foreach ( $config->columnConfigs as $key => $value ) { $config->columnConfigs[$key]->columnId = DatasetExportHelper::getExportColumnName($value->columnId,$metamodel); } } // update column orders if ( !empty($config->model->columnOrder) ) { foreach ( $config->model->columnOrder as $key => $value ) { $config->model->columnOrder[$key] = DatasetExportHelper::getExportColumnName($value,$metamodel); } } // update column sorts if ( !empty($config->model->orderBy) ) { foreach ( $config->model->orderBy as $key => $value ) { $config->model->orderBy[$key]->column = DatasetExportHelper::getExportColumnName($value->column,$metamodel); } } // update visual series if ( !empty($config->visual->series) ) { $newSeries = array(); foreach ( $config->visual->series as $key => $value ) { $newSeries[DatasetExportHelper::getExportColumnName($key,$metamodel)] = $value; } $config->visual->series = $newSeries; } // update traffic column if ( !empty($config->visual->trafficColumn) ) { $config->visual->trafficColumn = DatasetExportHelper::getExportColumnName($config->visual->trafficColumn,$metamodel); } // update color column if ( !empty($config->visual->useColumnDataForColor) ) { $config->visual->useColumnDataForColor = DatasetExportHelper::getExportColumnName($config->visual->useColumnDataForColor,$metamodel); } // update traffic columns if ( !empty($config->visual->traffic) ) { $newTraffic = array(); foreach ( $config->visual->traffic as $key => $value ) { $value->trafficColumn = DatasetExportHelper::getExportColumnName($key,$metamodel); $newTraffic[DatasetExportHelper::getExportColumnName($key,$metamodel)] = $value; } $config->visual->traffic = $newTraffic; } // update filters if ( !empty($config->model->filters) ) { foreach ( $config->model->filters as $key => $value ) { $config->model->filters[$key]->column = DatasetExportHelper::getExportColumnName($value->column,$metamodel); } } }
public function getQueryFormulas() { $formulas = $this->getFormulas(); $f = array(); if (!empty($formulas)) { foreach($formulas as $formula) { $form = $this->getFormula($formula['name']); $form->name = NameSpaceHelper::removeNameSpace($form->name); $f[] = $form; } } return array(AbstractQueryRequest::OPTION__FORMULA_DEF => $f); }