Test Failed
Push — master ( a3c6b7...453945 )
by Florian
01:58
created

AbstractBaseRenderer::setTemplateExtension()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
eloc 2
dl 0
loc 5
ccs 0
cts 3
cp 0
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
crap 2
1
<?php
2
declare(strict_types = 1);
3
4
namespace Phauthentic\Presentation\Renderer;
5
6
use Phauthentic\Presentation\Renderer\Exception\MissingTemplateException;
7
use Phauthentic\Presentation\View\ViewInterface;
8
9
/**
10
 * AbstractBaseRenderer
11
 */
12
abstract class AbstractBaseRenderer implements RendererInterface
13
{
14
    /**
15
     * Root folder for the template files
16
     *
17
     * @var string
18
     */
19
    protected $templateRoot = '';
20
21
    /**
22
     * Template Folders
23
     *
24
     * @var array
25
     */
26
    protected $templateFolders = [];
27
28
    /**
29
     * Template file extension
30
     *
31
     * @var string
32
     */
33
    protected $extension = 'php';
34
35
    /**
36
     * @inheritDoc
37
     */
38
    public function setTemplateRoot(string $root): self
39
    {
40
        $this->templateRoot = $root;
41
42
        return $this;
43
    }
44
45
    /**
46
     * @inheritDoc
47
     */
48
    public function setTemplateExtension(string $extension): self
49
    {
50
        $this->extension = $extension;
51
52
        return $this;
53
    }
54
55
    /**
56
     * Gets the template extension
57
     *
58
     * @return string
59
     */
60 1
    public function getTemplateExtension(): string
61
    {
62 1
        return $this->extension;
63
    }
64
65
    /**
66
     * Sanitizes the template path
67
     *
68
     * @param string $path
69
     * @return string
70
     */
71
    public function sanitizePath(string $path): string
72
    {
73
        if (DIRECTORY_SEPARATOR === '\\') {
74
            $path = str_replace('/', '\\', $path);
75
        } else {
76
            $path = str_replace('\\', '/', $path);
77
        }
78
79
        if (substr($path, 0, -1) !== '\\') {
80
            $path .= '\\';
81
        }
82
83
        return $path;
84
    }
85
86
    /**
87
     * Gets the template file from the view DTO object
88
     *
89
     * @param \Phauthentic\Presentation\View\ViewInterface
90
     * @return string
91
     */
92
    public function getTemplateFile(ViewInterface $view): string
93
    {
94
        $path = $view->getTemplatePath();
95
        $path = $this->sanitizePath($path);
96
97
        $template = $this->templateRoot . DIRECTORY_SEPARATOR . $path . $view->getTemplate() . '.' . $this->extension;
98
99
        if (!is_file($template)) {
100
            throw new MissingTemplateException('Template file missing: ' . $template);
101
        }
102
103
        return $template;
104
    }
105
106
    /**
107
     * Renders something
108
     *
109
     * @param \Phauthentic\Presentation\View\ViewInterface $view View DTO
110
     * @return string
111
     */
112
    abstract public function render(ViewInterface $view): string;
113
}
114