Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
<?php
declare(strict_types=1);
namespace Firegento\ContentProvisioning\Model\Config\Converter;
use DOMDocument;
use Firegento\ContentProvisioning\Api\Data\PageEntryInterface;
use Magento\Framework\Exception\LocalizedException;
class PageNodesParser
{
/**
* @var AttributeValueParser
*/
private $attributeValueParser;
/**
* @var StoresNodeParser
*/
private $storesNodeParser;
/**
* @var ContentNodeParser
*/
private $contentNodeParser;
/**
* @var ContentElementKeyBuilder
*/
private $contentElementKeyBuilder;
/**
* @var ContentHeadingParser
*/
private $contentHeadingParser;
/**
* @var SeoNodeParser
*/
private $seoNodeParser;
/**
* @var DesignNodeParser
*/
private $designNodeParser;
/**
* @var CustomDesignNodeParser
*/
private $customDesignNodeParser;
/**
* @var TitleNodeParser
*/
private $titleNodeParser;
/**
* @param AttributeValueParser $attributeValueParser
* @param StoresNodeParser $storesNodeParser
* @param ContentNodeParser $contentNodeParser
* @param ContentElementKeyBuilder $contentElementKeyBuilder
* @param ContentHeadingParser $contentHeadingParser
* @param SeoNodeParser $seoNodeParser
* @param DesignNodeParser $designNodeParser
* @param CustomDesignNodeParser $customDesignNodeParser
* @param TitleNodeParser $titleNodeParser
*/
public function __construct(
AttributeValueParser $attributeValueParser,
StoresNodeParser $storesNodeParser,
ContentNodeParser $contentNodeParser,
ContentElementKeyBuilder $contentElementKeyBuilder,
ContentHeadingParser $contentHeadingParser,
SeoNodeParser $seoNodeParser,
DesignNodeParser $designNodeParser,
CustomDesignNodeParser $customDesignNodeParser,
TitleNodeParser $titleNodeParser
) {
$this->attributeValueParser = $attributeValueParser;
$this->storesNodeParser = $storesNodeParser;
$this->contentNodeParser = $contentNodeParser;
$this->contentElementKeyBuilder = $contentElementKeyBuilder;
$this->contentHeadingParser = $contentHeadingParser;
$this->seoNodeParser = $seoNodeParser;
$this->designNodeParser = $designNodeParser;
$this->customDesignNodeParser = $customDesignNodeParser;
$this->titleNodeParser = $titleNodeParser;
}
/**
* @param DOMDocument $document
* @return array
* @throws LocalizedException
*/
public function execute(DOMDocument $document): array
{
$output = [];
foreach ($document->getElementsByTagName('page') as $node) {
$identifier = $this->attributeValueParser->execute($node, 'identifier');
$stores = $this->storesNodeParser->execute($node);
$key = $this->contentElementKeyBuilder->build($identifier, $stores, 'page');
$output[$key] = array_merge(
[
PageEntryInterface::KEY => $key,
PageEntryInterface::IDENTIFIER => $identifier,
PageEntryInterface::TITLE => $this->titleNodeParser->execute($node),
PageEntryInterface::IS_ACTIVE => $this->castBoolean(
$this->attributeValueParser->execute($node, 'active', 'false')
),
PageEntryInterface::IS_MAINTAINED => $this->castBoolean(
$this->attributeValueParser->execute($node, 'maintained', 'false')
),
PageEntryInterface::STORES => $stores,
PageEntryInterface::CONTENT => $this->contentNodeParser->execute($node),
PageEntryInterface::CONTENT_HEADING => $this->contentHeadingParser->execute($node),
],
$this->seoNodeParser->execute($node),
$this->designNodeParser->execute($node),
$this->customDesignNodeParser->execute($node)
);
}
return $output;
}
/**
* @param string $value
* @return bool
*/
private function castBoolean(string $value): bool
{
if (in_array($value, ['false', 'no', '0'])) {
return false;
}
return (bool)$value;
}
}