Passed
Push — master ( bb8381...e42fb8 )
by Edson
02:29
created

Engine::config()   A

Complexity

Conditions 4
Paths 4

Size

Total Lines 15
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 20

Importance

Changes 0
Metric Value
eloc 8
dl 0
loc 15
ccs 0
cts 13
cp 0
rs 10
c 0
b 0
f 0
cc 4
nc 4
nop 1
crap 20
1
<?php
2
3
namespace EdsonOnildo\Tpl;
4
5
use EdsonOnildo\Tpl\Tag\Tag;
6
7
class Engine
8
{
9
    private $data = [];
10
11
    public function render(string $view, array $data = []): string
12
    {
13
        try {
14
            $content = $this->handle(Content::getContent($view));
15
        } catch (Exception $e) { // @codeCoverageIgnore
0 ignored issues
show
Bug introduced by
The type EdsonOnildo\Tpl\Exception was not found. Did you mean Exception? If so, make sure to prefix the type with \.
Loading history...
16
            return $e->getMessage(); // @codeCoverageIgnore
17
        }
18
19
        $this->data = array_merge($this->data, $data);
20
21
        if (!array_key_exists('page', $this->data)) {
22
            $this->data['page'] = $_SERVER['REQUEST_URI'];
23
        }
24
25
        $dir = Tpl::getDir() . '.cache/';
26
27
        if (!is_dir($dir)) {
28
            mkdir($dir);
29
        }
30
31
        $fname = $dir . md5($view) . '.phtml';
32
33
        $file = new File($fname);
34
35
        $this->setCache($file, $content);
36
37
        $content = $file->read($this->data);
38
39
        $file->close();
40
41
        return trim($content);
42
    }
43
44
    private function handle($content)
45
    {
46
        Tag::setContent($content);
47
48
        $this->registerTag([
49
            'Inheritance',
50
            'Block',
51
            'IncludeTag',
52
//            'Statement',
53
            'Evaluate',
54
            // 'Func',
55
            'Loop',
56
            'Condition',
57
        ]);
58
59
        return Tag::getContent();
60
    }
61
62
    private function setCache(File $file, $content): void
63
    {
64
        $file->create();
65
        $file->write($content);
66
    }
67
68
    private function registerTag(array $tags): void
69
    {
70
        foreach ($tags as $tag) {
71
            $tag = "\EdsonOnildo\Tpl\Tag\\" . ucfirst($tag);
72
            new $tag;
73
        }
74
    }
75
}
76