public function finalize(DataControllerCallContext $callcontext, DatasetMetaData $dataset) { if ($this->datasetStructureModified) { $assembler = new DatasetUIMetaDataAssembler(); // preparing possible combinations of cache names for the dataset $cacheEntryNames = array( $assembler->prepareCacheEntryName($dataset->name, FALSE), $assembler->prepareCacheEntryName($dataset->name, TRUE)); // removing assembled UI Meta Data from cache $assembler->cache->expireCacheEntries($cacheEntryNames); } parent::finalize($callcontext, $dataset); }
/** * @static * @param $datasetName * @param $columns * @param $parameters * @param $orderBy * @param $options * @return DataControllerQueryObject[] */ public static function prepareDataQueryControllerRequest($datasetName, $columns, $parameters, $orderBy, array $options = NULL) { $metamodel = data_controller_get_metamodel(); list($cleanedColumns, $cleanedParameters, $cleanedOrderBy, $cleanedOptions) = self::cleanFunctionParameters($datasetName, $columns, $parameters, $orderBy, $options); // preparing list of columns which are used to filter data $parsedUIMetaDataNames = NULL; $parameterColumnNames = NULL; if (isset($cleanedParameters)) { ArrayHelper::addUniqueValues($parameterColumnNames, array_keys($cleanedParameters)); if (isset($parameterColumnNames)) { foreach ($parameterColumnNames as $uiMetaDataName) { $parsedUIMetaDataNames[$uiMetaDataName] = self::parseUIMetaDataName($datasetName, $uiMetaDataName, $cleanedOptions); } } } // looking for all datasets/[cubes] we need to work with $connectedDatasetNames = array($datasetName); $cubes = NULL; $wereColumnNamesRequested = isset($cleanedColumns); // if no columns were selected we need to use all columns available $isCube = FALSE; if (!$wereColumnNamesRequested) { $assembler = new DatasetUIMetaDataAssembler(); $uiMetaData = $assembler->assemble($datasetName); if (isset($parameterColumnNames)) { ArrayHelper::addUniqueValues($connectedDatasetNames, self::detectConnectedDatasetsBySelectedColumns($parsedUIMetaDataNames)); foreach ($connectedDatasetNames as $connectedDatasetName) { $cube = $metamodel->findCubeByDatasetName($connectedDatasetName); if (isset($cube)) { $cubes[$connectedDatasetName] = $cube; } } $isCube = self::detectRequestTypeBySelectedColumns($cubes, $parsedUIMetaDataNames, NULL, $parameterColumnNames); } // we need to load list of all available columns from requested dataset $uiMetaData->prepareElementNames($cleanedColumns, FALSE); } // adding requested columns to list of parsed columns if (isset($cleanedColumns)) { foreach ($cleanedColumns as $uiMetaDataName) { $parsedUIMetaDataNames[$uiMetaDataName] = self::parseUIMetaDataName($datasetName, $uiMetaDataName, $cleanedOptions); } } // updating list of datasets/[cubes] we need to work with ArrayHelper::addUniqueValues($connectedDatasetNames, self::detectConnectedDatasetsBySelectedColumns($parsedUIMetaDataNames)); // loading meta data for additional participating cubes foreach ($connectedDatasetNames as $connectedDatasetName) { if (!isset($cubes[$connectedDatasetName])) { $cube = $metamodel->findCubeByDatasetName($connectedDatasetName); if (isset($cube)) { $cubes[$connectedDatasetName] = $cube; } } } if ($wereColumnNamesRequested) { $isCube = self::detectRequestTypeBySelectedColumns($cubes, $parsedUIMetaDataNames, $cleanedColumns, $parameterColumnNames); } $request = $isCube ? new DataQueryControllerCubeRequest() : new DataQueryControllerDatasetRequest(); $request->datasetName = $datasetName; $request->options = $cleanedOptions; $columnMappings = $isCube ? self::prepareCubeColumnMappings($cubes, $parsedUIMetaDataNames) : self::prepareListColumnMappings($cubes, $parsedUIMetaDataNames); $request->columns = self::mapColumns($parsedUIMetaDataNames, $columnMappings, $cleanedColumns, $isCube); $request->parameters = self::mapParameters($parsedUIMetaDataNames, $columnMappings, $cleanedParameters, $isCube); $request->orderBy = self::mapOrderBy($parsedUIMetaDataNames, $columnMappings, $cleanedOrderBy, $isCube); $request->resultFormatter = new ColumnMappingResultFormatter(array_flip($columnMappings)); return $request; }