/** * Fill a palette collection from a multidimensional array of palettes. * * @param PaletteCollection $collection The collection. * * @param array $palettes The palettes to fill. * * @return void * * @throws DcGeneralInvalidArgumentException When an invalid palette has been passed. */ public static function fillPaletteCollection(PaletteCollection $collection, array $palettes) { foreach ($palettes as $palette) { if ($palette instanceof PaletteInterface) { $collection->addPalette($palette); } elseif (is_array($palette)) { static::fillPaletteCollection($collection, $palette); } else { $type = is_object($palette) ? get_class($palette) : gettype($palette); throw new DcGeneralInvalidArgumentException('Palette [' . $type . '] does not implement PaletteInterface'); } } }
/** * Parse the given palettes. * * @param array(string => string) $palettes The array of palettes, e.g. * <code>array('default' => '{title_legend},title')</code>. * * @param array(string => string) $subPaletteProperties Mapped array from subpalette [optional]. * * @param array $selectorFieldNames List of names of the properties to be used as selector * [optional]. * * @param PaletteCollectionInterface $collection The palette collection to populate [optional]. * * @return PaletteCollectionInterface */ public function parsePalettes(array $palettes, array $subPaletteProperties = array(), array $selectorFieldNames = array(), PaletteCollectionInterface $collection = null) { if (!$collection) { $collection = new PaletteCollection(); } if (isset($palettes['__selector__'])) { $selectorFieldNames = array_merge($selectorFieldNames, $palettes['__selector__']); $selectorFieldNames = array_unique($selectorFieldNames); unset($palettes['__selector__']); } foreach ($palettes as $selector => $fields) { // Fields list must be a string. if (!is_string($fields)) { continue; } if ($collection->hasPaletteByName($selector)) { $palette = $collection->getPaletteByName($selector); $this->parsePalette($selector, $fields, $subPaletteProperties, $selectorFieldNames, $palette); } else { $palette = $this->parsePalette($selector, $fields, $subPaletteProperties, $selectorFieldNames); $collection->addPalette($palette); } } return $collection; }