SitemapIndex   A
last analyzed

Complexity

Total Complexity 8

Size/Duplication

Total Lines 79
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
dl 0
loc 79
rs 10
c 0
b 0
f 0
wmc 8

6 Methods

Rating   Name   Duplication   Size   Complexity  
A render() 0 7 1
A writeToFile() 0 5 1
A add() 0 9 2
A getSitemap() 0 4 2
A hasSitemap() 0 3 1
A create() 0 3 1
1
<?php
2
3
namespace safaeean\Sitemap;
4
5
use safaeean\Sitemap\Tags\Tag;
6
use safaeean\Sitemap\Tags\Sitemap;
0 ignored issues
show
Bug introduced by
This use statement conflicts with another class in this namespace, safaeean\Sitemap\Sitemap. Consider defining an alias.

Let?s assume that you have a directory layout like this:

.
|-- OtherDir
|   |-- Bar.php
|   `-- Foo.php
`-- SomeDir
    `-- Foo.php

and let?s assume the following content of Bar.php:

// Bar.php
namespace OtherDir;

use SomeDir\Foo; // This now conflicts the class OtherDir\Foo

If both files OtherDir/Foo.php and SomeDir/Foo.php are loaded in the same runtime, you will see a PHP error such as the following:

PHP Fatal error:  Cannot use SomeDir\Foo as Foo because the name is already in use in OtherDir/Foo.php

However, as OtherDir/Foo.php does not necessarily have to be loaded and the error is only triggered if it is loaded before OtherDir/Bar.php, this problem might go unnoticed for a while. In order to prevent this error from surfacing, you must import the namespace with a different alias:

// Bar.php
namespace OtherDir;

use SomeDir\Foo as SomeDirFoo; // There is no conflict anymore.
Loading history...
7
8
class SitemapIndex
9
{
10
    /** @var array */
11
    protected $tags = [];
12
13
    /**
14
     * @return static
15
     */
16
    public static function create()
17
    {
18
        return new static();
19
    }
20
21
    /**
22
     * @param string|\safaeean\Sitemap\Tags\Tag $tag
23
     *
24
     * @return $this
25
     */
26
    public function add($tag)
27
    {
28
        if (is_string($tag)) {
29
            $tag = Sitemap::create($tag);
30
        }
31
32
        $this->tags[] = $tag;
33
34
        return $this;
35
    }
36
37
    /**
38
     * Get sitemap tag.
39
     *
40
     * @param string $url
41
     *
42
     * @return \safaeean\Sitemap\Tags\Sitemap|null
43
     */
44
    public function getSitemap(string $url)
45
    {
46
        return collect($this->tags)->first(function (Tag $tag) use ($url) {
47
            return $tag->getType() === 'sitemap' && $tag->url === $url;
48
        });
49
    }
50
51
    /**
52
     * Check if there is the provided sitemap in the index.
53
     *
54
     * @param string $url
55
     *
56
     * @return bool
57
     */
58
    public function hasSitemap(string $url): bool
59
    {
60
        return (bool) $this->getSitemap($url);
61
    }
62
63
    /**
64
     * Get the inflated template content.
65
     *
66
     * @return string
67
     */
68
    public function render(): string
69
    {
70
        $tags = $this->tags;
71
72
        return view('laravel-sitemap::sitemapIndex/index')
73
            ->with(compact('tags'))
74
            ->render();
75
    }
76
77
    /**
78
     * @param string $path
79
     *
80
     * @return $this
81
     */
82
    public function writeToFile(string $path)
83
    {
84
        file_put_contents($path, $this->render());
85
86
        return $this;
87
    }
88
}
89