| Current Path : /var/www/clients/client3/web2/web/vendor/magento/module-payment/Model/Config/ |
| Current File : /var/www/clients/client3/web2/web/vendor/magento/module-payment/Model/Config/Converter.php |
<?php
/**
* Payment Config Converter
*
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Payment\Model\Config;
class Converter implements \Magento\Framework\Config\ConverterInterface
{
/**
* {@inheritdoc}
*/
public function convert($source)
{
$xpath = new \DOMXPath($source);
return [
'credit_cards' => $this->convertCreditCards($xpath),
'groups' => $this->convertGroups($xpath),
'methods' => $this->convertMethods($xpath)
];
}
/**
* Convert credit cards xml tree to array
*
* @param \DOMXPath $xpath
* @return array
*/
protected function convertCreditCards(\DOMXPath $xpath)
{
$creditCards = [];
/** @var \DOMNode $type */
foreach ($xpath->query('/payment/credit_cards/type') as $type) {
$typeArray = [];
/** @var $typeSubNode \DOMNode */
foreach ($type->childNodes as $typeSubNode) {
switch ($typeSubNode->nodeName) {
case 'label':
$typeArray['name'] = $typeSubNode->nodeValue;
break;
default:
break;
}
}
$typeAttributes = $type->attributes;
$typeArray['order'] = $typeAttributes->getNamedItem('order')->nodeValue;
$ccId = $typeAttributes->getNamedItem('id')->nodeValue;
$creditCards[$ccId] = $typeArray;
}
uasort($creditCards, [$this, '_compareCcTypes']);
$config = [];
foreach ($creditCards as $code => $data) {
$config[$code] = $data['name'];
}
return $config;
}
/**
* Compare sort order of CC Types
*
* @SuppressWarnings(PHPMD.UnusedPrivateMethod) Used in callback.
*
* @param array $left
* @param array $right
* @return int
*/
private function _compareCcTypes($left, $right)
{
return $left['order'] - $right['order'];
}
/**
* Convert groups xml tree to array
*
* @param \DOMXPath $xpath
* @return array
*/
protected function convertGroups(\DOMXPath $xpath)
{
$config = [];
/** @var \DOMNode $group */
foreach ($xpath->query('/payment/groups/group') as $group) {
$groupAttributes = $group->attributes;
$id = $groupAttributes->getNamedItem('id')->nodeValue;
/** @var $groupSubNode \DOMNode */
foreach ($group->childNodes as $groupSubNode) {
switch ($groupSubNode->nodeName) {
case 'label':
$config[$id] = $groupSubNode->nodeValue;
break;
default:
break;
}
}
}
return $config;
}
/**
* Convert methods xml tree to array
*
* @param \DOMXPath $xpath
* @return array
*/
protected function convertMethods(\DOMXPath $xpath)
{
$config = [];
/** @var \DOMNode $method */
foreach ($xpath->query('/payment/methods/method') as $method) {
$name = $method->attributes->getNamedItem('name')->nodeValue;
/** @var $methodSubNode \DOMNode */
foreach ($method->childNodes as $methodSubNode) {
if ($methodSubNode->nodeType != XML_ELEMENT_NODE) {
continue;
}
$config[$name][$methodSubNode->nodeName] = $methodSubNode->nodeValue;
}
}
return $config;
}
}