Passed
Push — master ( 3849b2...6d2bbe )
by Edson
01:17
created

Engine   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 67
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 8
eloc 32
dl 0
loc 67
ccs 0
cts 44
cp 0
rs 10
c 1
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A setCache() 0 4 1
A registerTag() 0 5 2
A handle() 0 17 1
A render() 0 31 4
1
<?php
2
3
namespace Bonfim\Tpl;
4
5
use Bonfim\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 Bonfim\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
            // 'Expression'
58
        ]);
59
60
        return Tag::getContent();
61
    }
62
63
    private function setCache(File $file, $content): void
64
    {
65
        $file->create();
66
        $file->write($content);
67
    }
68
69
    private function registerTag(array $tags): void
70
    {
71
        foreach ($tags as $tag) {
72
            $tag = "\EdsonOnildo\Tpl\Tag\\" . ucfirst($tag);
73
            new $tag;
74
        }
75
    }
76
}
77