/**
  * @param array $dimensions Dimension values indexed by dimension name
  * @return array Allowed preset names for the given dimension combination indexed by dimension name
  */
 public function allowedPresetsByName(array $dimensions)
 {
     $allowedPresets = array();
     $preselectedDimensionPresets = array();
     foreach ($dimensions as $dimensionName => $dimensionValues) {
         $preset = $this->contentDimensionsPresetSource->findPresetByDimensionValues($dimensionName, $dimensionValues);
         if ($preset !== null) {
             $preselectedDimensionPresets[$dimensionName] = $preset['identifier'];
         }
     }
     foreach ($preselectedDimensionPresets as $dimensionName => $presetName) {
         $presets = $this->contentDimensionsPresetSource->getAllowedDimensionPresetsAccordingToPreselection($dimensionName, $preselectedDimensionPresets);
         $allowedPresets[$dimensionName] = array_keys($presets[$dimensionName]['presets']);
     }
     return $allowedPresets;
 }
 /**
  * Returns only presets of the dimension specified by $dimensionName. But even though only one dimension is returned,
  * the output follows the structure as described in ContentDimensionPresetSourceInterface::getAllPresets().
  *
  * It is possible to pass a selection of presets as a filter. In that case, $chosenDimensionPresets must be an array
  * of one or more dimension names (key) and preset names (value). The returned list will then only contain dimension
  * presets which are allowed in combination with the given presets.
  *
  * Example: Given that $chosenDimensionPresets = array('country' => 'US') and that a second dimension "language"
  * exists and $dimensionName is "language. This method will now display a list of dimension presets for the dimension
  * "language" which are allowed in combination with the country "US".
  *
  * @param string $dimensionName Name of the dimension to return presets for
  * @param array $chosenDimensionPresets An optional array of dimension names and a single preset per dimension
  * @return void
  */
 public function showAction($dimensionName, $chosenDimensionPresets = array())
 {
     if ($chosenDimensionPresets === array()) {
         $contentDimensionsAndPresets = $this->contentDimensionPresetSource->getAllPresets();
         if (!isset($contentDimensionsAndPresets[$dimensionName])) {
             $this->throwStatus(404, sprintf('The dimension %s does not exist.', $dimensionName));
         }
         $contentDimensionsAndPresets = array($dimensionName => $contentDimensionsAndPresets[$dimensionName]);
     } else {
         $contentDimensionsAndPresets = $this->contentDimensionPresetSource->getAllowedDimensionPresetsAccordingToPreselection($dimensionName, $chosenDimensionPresets);
     }
     if ($this->view instanceof JsonView) {
         $this->view->assign('value', $contentDimensionsAndPresets);
     } else {
         $this->view->assign('dimensionName', $dimensionName);
         $this->view->assign('contentDimensionsPresets', $contentDimensionsAndPresets);
     }
 }