XmlStringSitemap   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 31
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 19
c 2
b 0
f 0
dl 0
loc 31
rs 10
wmc 4

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A __invoke() 0 19 3
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