protected function excludeIneligibleRegions(CubeMetaData $cube, &$eligibleRegionNames, array $requestDimensions, $isExactMatchRequired) { // checking each request dimension foreach ($requestDimensions as $requestDimension) { $requestDimensionName = $requestDimension->dimensionName; $requestDimensionLevelName = $requestDimension->levelName; // checking each eligible region foreach ($eligibleRegionNames as $eligibleRegionNameIndex => $eligibleRegionName) { $eligibleRegion = $cube->regions->{$eligibleRegionName}; $isRegionEligible = FALSE; // is the dimension present in the region? if (isset($eligibleRegion->dimensions->{$requestDimensionName})) { $eligibleRegionDimension = $eligibleRegion->dimensions->{$requestDimensionName}; // if levels are defined we need to check if any aggregation is done on required level or any lower level if (isset($eligibleRegionDimension->levels)) { $dimension = $cube->findDimension($requestDimensionName); if (isset($dimension)) { $matchingLevelName = NULL; foreach ($dimension->levels as $level) { $levelName = $level->name; if (isset($eligibleRegionDimension->levels->{$levelName})) { $matchingLevelName = $levelName; } if ($requestDimensionLevelName === $levelName) { if (isset($matchingLevelName)) { if ($isExactMatchRequired) { if ($requestDimensionLevelName === $matchingLevelName) { $isRegionEligible = TRUE; } } else { $isRegionEligible = TRUE; } } break; } } } } else { $isRegionEligible = TRUE; } } if (!$isRegionEligible) { unset($eligibleRegionNames[$eligibleRegionNameIndex]); } } } }