XmlStringSitemap::__invoke()   A
last analyzed

Complexity

Conditions 3
Paths 4

Size

Total Lines 19
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
cc 3
eloc 14
c 2
b 0
f 0
nc 4
nop 0
dl 0
loc 19
rs 9.7998
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Chinstrap\Core\Generators;
6
7
use Chinstrap\Core\Contracts\Generators\Sitemap;
8
use Chinstrap\Core\Contracts\Objects\Document;
9
use Chinstrap\Core\Contracts\Sources\Source;
10
use DOMDocument;
11
use PublishingKit\Config\Config;
12
use SimpleXMLElement;
13
14
final class XmlStringSitemap implements Sitemap
15
{
16
    private Config $config;
17
18
    private Source $source;
19
20
    public function __construct(Config $config, Source $source)
21
    {
22
        $this->config = $config;
23
        $this->source = $source;
24
    }
25
26
    public function __invoke(): string
27
    {
28
        $documents = $this->source->all();
29
        $xml = new SimpleXMLElement(
30
            "<?xml version='1.0' encoding='UTF-8' ?>\n"
31
            . '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" />'
32
        );
33
        foreach ($documents as $document) {
34
            assert($document instanceof Document);
35
            $item = $xml->addChild('url');
36
            $item->addChild('loc', ($this->config->get('base_url') ?? '') . $document->getUrl());
37
        }
38
        $doc = new DOMDocument();
39
        $doc->preserveWhiteSpace = false;
40
        $doc->formatOutput = true;
41
        if ($content = $xml->asXML()) {
42
            $doc->loadXML($content);
43
        }
44
        return $doc->saveXML();
45
    }
46
}
47