Completed
Push — master ( cc173b...1bbcf8 )
by Peter
21:26
created

src/AppBundle/Repository/PsrRepository.php (2 issues)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
3
namespace AppBundle\Repository;
4
5
use Symfony\Component\Finder\Finder;
6
use AppBundle\Entity\Psr;
7
use Mni\FrontYAML\Parser;
8
9
class PsrRepository
10
{
11
    public function __construct($kernelRootDir)
12
    {
13
        $this->path = $kernelRootDir;
0 ignored issues
show
The property path does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
14
    }
15
16
    /**
17
     * return array
18
     */
19
    public function findAll()
20
    {
21
        $finder = new Finder();
22
        $finder->files()->in($this->path.'/../vendor/symfony-si/fig-standards-sl/accepted');
23
        $finder->files()->name('*md');
24
        $finder->sortByName();
25
26
        $psrs = [];
27
        foreach ($finder as $file) {
28
            if (substr($file->getFileName(), -7) != 'meta.md' && substr($file->getFileName(), -11) != 'examples.md') {
29
                $psrs[] = $this->getPsrByFile($file->getRealPath());
30
            }
31
        }
32
33
        return $psrs;
34
    }
35
36
    /**
37
     * @param string $slug
38
     * @return Psr
39
     */
40
    public function findOneBySlug($slug)
41
    {
42
        $finder = new Finder();
43
        $finder->files()->in($this->path.'/../vendor/symfony-si/fig-standards-sl/accepted')->name("*.md");
44
        $finder->sortByName();
45
46
        $parser = new Parser();
47
        foreach ($finder as $file) {
48
            $document = $parser->parse($file->getContents());
49
            if ($document->getYAML()['slug'] == $slug) {
50
                return $this->getPsrByFile($file->getRealPath());
51
            }
52
        }
53
54
        return null;
55
    }
56
57
    /**
58
     * @param string $file
59
     * @return null|Psr
60
     */
61
    public function getPsrByFile($file)
62
    {
63
        if (!file_exists($file)) {
64
            return null;
65
        }
66
67
        $psr = $this->getPsrByFileWithoutChilds($file);
68
        $metaFile = substr($file, 0, -3).'-meta.md';
69
        if (file_exists($metaFile)) {
70
            $meta = $this->getPsrByFileWithoutChilds($metaFile);
71
            $psr->setMeta($meta);
72
        }
73
74
        $examplesFile = substr($file, 0, -3).'-examples.md';
75
        if (file_exists($examplesFile)) {
76
            $examples = $this->getPsrByFileWithoutChilds($examplesFile);
77
            $psr->setExamples($examples);
78
        }
79
80
        return $psr;
81
    }
82
83
    /**
84
     * Get Psr without meta or example child documents.
85
     *
86
     * @param string $file
87
     * @return Psr
88
     */
89
    private function getPsrByFileWithoutChilds($file)
90
    {
91
        $parser = new Parser();
92
        $document = $parser->parse(file_get_contents($file));
93
94
        $psr = new Psr();
95
        $psr->setTitle($document->getYAML()['title']);
96
        $psr->setSlug($document->getYaml()['slug']);
97
        $psr->setContent($document->getContent());
98
        $psr->setReadTime($document->getYAML()['read_time']);
99
        $psr->setDescription($document->getYAML()['description']);
100
        $psr->setUpdated(\DateTime::createFromFormat('Y-m-d', $document->getYAML()['updated']));
0 ignored issues
show
It seems like \DateTime::createFromFor...->getYAML()['updated']) targeting DateTime::createFromFormat() can also be of type false; however, AppBundle\Entity\Psr::setUpdated() does only seem to accept object<DateTime>, did you maybe forget to handle an error condition?
Loading history...
101
102
        return $psr;
103
    }
104
}
105