in modules/quanthub_sdmx_sync/src/QuanthubSdmxClient.php [250:326]
public function datasetIndicators(string $urn, string $dimension_id = '', array $selected_indicators = []) {
$dimension_id = $dimension_id ?: self::STRUCTURE_DIMENSION_ID;
$indicators = [];
$avaiability_data = $this->datasetAvaiability($urn);
if (empty($selected_indicators) && !empty($avaiability_data['data']['dataConstraints'][0]['cubeRegions'][0]['memberSelection'])) {
$member_selection = $avaiability_data['data']['dataConstraints'][0]['cubeRegions'][0]['memberSelection'];
foreach ($member_selection as $value) {
// Should be hardcoded, the same as in structure query dimension id.
if ($value['componentId'] == $dimension_id) {
$indicators = array_column($value['selectionValues'], 'memberValue');
break;
}
}
}
$dataset_structure = $this->getDasetStructure($urn, TRUE, TRUE);
if ($dataset_structure['data']['glossaries']) {
$dataset_glossaries = $dataset_structure['data']['glossaries'];
if (!empty($dataset_structure['data']['dataStructures'][0]['dataStructureComponents']['dimensionList']['dimensions'])) {
$dimensions = $dataset_structure['data']['dataStructures'][0]['dataStructureComponents']['dimensionList']['dimensions'];
foreach ($dimensions as $dimension) {
// Should be hardcoded, the same as
// in availability query dimension componentId.
if ($dimension['id'] == $dimension_id) {
$full_indicator_concept_identity = $dimension['conceptIdentity'];
// Parse dimension concept identity:
// 1. Get xxx:xxxx - agency and name
// 2. Id string that located after version (x.x.x) and dot.
if (preg_match('/=([\w\-_:]+)\([\d.~*+]+\)\.([\w_]+)/', $full_indicator_concept_identity, $matches)) {
$indicator_concept_identity = $matches[1];
$indicator_concept_identity_id = $matches[2];
[$indicator_concept_agency, $indicator_concept_name] = explode(':', $indicator_concept_identity);
if (!empty($indicator_concept_agency) && !empty($indicator_concept_name)) {
foreach ($dataset_structure['data']['conceptSchemes'] as $conceptScheme) {
if (
$conceptScheme['id'] == $indicator_concept_name &&
$conceptScheme['agency'] = $indicator_concept_agency
) {
foreach ($conceptScheme['concepts'] as $concept) {
if ($concept['id'] == $indicator_concept_identity_id) {
$indicator_enumeration = $concept['coreRepresentation']['enumeration'];
// Remove versions because we don't need this here.
$indicator_enumeration = preg_replace('/\(.*\)/', '', $indicator_enumeration);
}
}
}
}
}
}
}
}
}
$indicators_items = [];
foreach ($dataset_glossaries as $dataset_glossary) {
foreach ($dataset_glossary['links'] as $dataset_glossary_link) {
if (str_contains($dataset_glossary_link['urn'], $indicator_enumeration)) {
$indicators_items = $dataset_glossary['terms'];
}
}
}
$indicators_items = array_combine(array_column($indicators_items, 'id'), $indicators_items);
if (empty($selected_indicators)) {
$indicators = array_intersect_key($indicators_items, array_flip($indicators));
}
else {
$indicators = array_intersect_key($indicators_items, array_flip($selected_indicators));
}
}
return $indicators;
}