File: /var/www/vhost/disk-apps/magento.bikenow.co/vendor/magento/module-sales/Model/Config/Converter.php
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
/**
* Converts sales totals (incl. creditmemo, invoice) from \DOMDocument to array
*/
namespace Magento\Sales\Model\Config;
class Converter implements \Magento\Framework\Config\ConverterInterface
{
/**
* Converting data to array type
*
* @param mixed $source
* @return array
* @throws \InvalidArgumentException
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
*/
public function convert($source)
{
$output = [];
if (!$source instanceof \DOMDocument) {
return $output;
}
/** @var \DOMNodeList $sections*/
$sections = $source->getElementsByTagName('section');
/** @var \DOMElement $section */
foreach ($sections as $section) {
$sectionArray = [];
$sectionName = $section->getAttribute('name');
if (!$sectionName) {
throw new \InvalidArgumentException('Attribute "name" of "section" does not exist');
}
/** @var \DOMNodeList $groups */
$groups = $section->getElementsByTagName('group');
/** @var \DOMElement $group */
foreach ($groups as $group) {
$groupArray = [];
$groupName = $group->getAttribute('name');
if (!$groupName) {
throw new \InvalidArgumentException('Attribute "name" of "group" does not exist');
}
/** @var \DOMNodeList $items */
$items = $group->getElementsByTagName('item');
/** @var \DOMElement $item */
foreach ($items as $item) {
$rendererArray = [];
$itemName = $item->getAttribute('name');
if (!$itemName) {
throw new \InvalidArgumentException('Attribute "name" of "item" does not exist');
}
/** @var \DOMNodeList $renderers */
$renderers = $item->getElementsByTagName('renderer');
/** @var \DOMElement $renderer */
foreach ($renderers as $renderer) {
$rendererName = $renderer->getAttribute('name');
if (!$rendererName) {
throw new \InvalidArgumentException('Attribute "name" of "renderer" does not exist');
}
$rendererArray[$rendererName] = $renderer->getAttribute('instance');
}
$itemArray = [
'instance' => $item->getAttribute('instance'),
'sort_order' => $item->getAttribute('sort_order'),
'renderers' => $rendererArray,
];
$groupArray[$itemName] = $itemArray;
}
$sectionArray[$groupName] = $groupArray;
}
$output[$sectionName] = $sectionArray;
}
$order = $source->getElementsByTagName('order')->item(0);
$availableProductTypes = [];
/** @var \DOMElement $order */
if ($order) {
/** @var \DOMNodeList $types */
$types = $order->getElementsByTagName('available_product_type');
/** @var \DOMElement $type */
foreach ($types as $type) {
$availableProductTypes[] = $type->getAttribute('name');
}
$output['order']['available_product_types'] = $availableProductTypes;
}
return $output;
}
}