booleanInterpreter = $booleanInterpreter; } /** * Convert dom node tree to array * * @param \DOMDocument $source * @return array */ public function convert($source) { $output = []; /** @var \DOMNodeList $extensions */ $extensions = $source->getElementsByTagName('extension'); /** @var \DOMNode $extension */ foreach ($extensions as $extension) { $extensionConfig = [ ExtensionInformationInterface::FIELD_CONFIG_SECTION => '', ExtensionInformationInterface::FIELD_IS_ENABLED_PATH => '', ExtensionInformationInterface::FIELD_DOCUMENTATION => '', ExtensionInformationInterface::FIELD_WIKI => '', ExtensionInformationInterface::FIELD_IS_SERVICE => false, ExtensionInformationInterface::FIELD_URL => '', ExtensionInformationInterface::FIELD_MARKETPLACE_URL => '', 'customer' => ['key' => ''], 'metapackage' => ['composer_name' => '', 'directory' => ''], ]; /** @var \DOMAttr $attribute */ foreach ($extension->attributes as $attribute) { $value = $attribute->nodeValue; if ($attribute->nodeName === ExtensionInformationInterface::FIELD_IS_SERVICE) { $value = $this->booleanInterpreter->evaluate(['value' => $value]); } $extensionConfig[$attribute->nodeName] = $value; } $extensionConfig = $this->addCustomerData($extension, $extensionConfig); $output[$extension->attributes->getNamedItem('name')->nodeValue] = $extensionConfig; } return $output; } private function addCustomerData(\DOMNode $extension, array $extensionConfig): array { if ($extension->hasChildNodes()) { /** @var \DOMNode $childNode */ foreach ($extension->childNodes as $childNode) { if ($childNode->nodeType === XML_ELEMENT_NODE) { /** @var \DOMAttr $attribute */ foreach ($childNode->attributes as $attribute) { $extensionConfig[$childNode->nodeName][$attribute->nodeName] = $attribute->nodeValue; } } } } return $extensionConfig; } }