featureRegistry as $featureClass) { $featureInstance = GeneralUtility::makeInstance($featureClass); if (!($featureInstance instanceof FeatureInterface)) { throw new Exception( 'Feature ' . $featureClass . ' does not implement FeatureInterface', 1378644593 ); } $featureInstance->initializePresets($postValues); $features[] = $featureInstance; } return $features; } /** * Get configuration values to be set to LocalConfiguration from * list of selected $POST feature presets * * @param array $postValues List of $POST values * @return array List of configuration values */ public function getConfigurationForSelectedFeaturePresets(array $postValues) { $localConfigurationValuesToSet = []; $features = $this->getInitializedFeatures($postValues); foreach ($features as $feature) { $featureName = $feature->getName(); $presets = $feature->getPresetsOrderedByPriority(); foreach ($presets as $preset) { $presetName = $preset->getName(); if (!empty($postValues[$featureName]['enable']) && $postValues[$featureName]['enable'] === $presetName && (!$preset->isActive() || $preset instanceof CustomPresetInterface) ) { $localConfigurationValuesToSet = array_merge( $localConfigurationValuesToSet, $preset->getConfigurationValues() ); } } } return $localConfigurationValuesToSet; } /** * Cycle through features and get settings. First matching * preset (highest priority) will be selected. * * @return array Configuration settings */ public function getBestMatchingConfigurationForAllFeatures() { $localConfigurationValuesToSet = []; $features = $this->getInitializedFeatures([]); foreach ($features as $feature) { $presets = $feature->getPresetsOrderedByPriority(); foreach ($presets as $preset) { // Only choose "normal" presets, no custom presets if ($preset instanceof CustomPresetInterface) { break; } if ($preset->isAvailable()) { $localConfigurationValuesToSet = array_merge( $localConfigurationValuesToSet, $preset->getConfigurationValues() ); // Setting for this feature done, go to next feature break; } } } return $localConfigurationValuesToSet; } }