/** * Recursively add all subselect properties to their parent. Even when they are member of a subselect themselves. * * @param Legend $legend The legend to add the properties to. * * @param array $subSelectPalettes All subselect palettes. * * @param string $propertyName The name of the property for which all dependant properties shall get added. * * @param string $legendName The name of the legend for which properties shall get retrieved. */ protected function addSubSelectProperties(Legend $legend, $subSelectPalettes, $propertyName, $legendName = '', $insert = 'before', $reference = null) { if (!isset($subSelectPalettes[$propertyName][$legendName])) { return; } $position = null; if ($insert && $reference) { $properties = $legend->getProperties(); if (!empty($properties)) { $property = current($properties); do { if ($property->getName() == $reference) { if ($insert == 'before') { $position = $property; } elseif ($insert == 'after') { $position = next($properties); } break; } } while ($property = next($properties)); } } if ($position === false) { $position = null; } $legend->addProperties($subSelectPalettes[$propertyName][$legendName], $position); foreach ((array) $subSelectPalettes[$propertyName][$legendName] as $property) { /** @var Property $property */ // Add anonymous legends for this property. if (isset($subSelectPalettes[$property->getName()][''])) { $legend->addProperties($subSelectPalettes[$property->getName()]['']); } if (isset($subSelectPalettes[$property->getName()][$legendName])) { $this->addSubSelectProperties($legend, $subSelectPalettes, $property->getName(), $legendName, $insert, $reference); } } }