Element::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 3
nc 1
nop 2
dl 0
loc 5
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace PiedWeb\CMSBundle\Extension\TemplateEditor;
4
5
/**
6
 * Entity.
7
 */
8
class Element
9
{
10
    /**
11
     * @var string
12
     */
13
    protected $path;
14
15
    /**
16
     * @var string
17
     */
18
    protected $code;
19
20
    /**
21
     * @var string
22
     */
23
    protected $templateDir;
24
25
    /**
26
     * @var string
27
     */
28
    protected $unlink;
29
30
    public function __construct($templateDir, $path = null)
31
    {
32
        $this->templateDir = realpath($templateDir);
33
        $this->path = substr($path, \strlen($this->templateDir));
34
        $this->code = $this->loadCode();
35
    }
36
37
    protected function loadCode()
38
    {
39
        if ($this->path && file_exists($this->getTemplateDir().$this->getPath())) {
40
            return file_get_contents($this->getTemplateDir().$this->getPath());
41
        }
42
43
        return '';
44
    }
45
46
    protected function getTemplateDir()
47
    {
48
        return $this->templateDir;
49
    }
50
51
    public function getPath(): ?string
52
    {
53
        return $this->path;
54
    }
55
56
    public function getEncodedPath(): ?string
57
    {
58
        return md5($this->path);
59
    }
60
61
    public function setPath(string $path)
62
    {
63
        if (false !== strpos($path, '..')) { // avoiding to store in an other folder than templates.
64
            throw new \Exception('You can\'t do that...');
65
        }
66
67
        if (null === $this->path) {
68
            $this->path = $path;
69
        } else {
70
            $path = '/'.ltrim($path, '/');
71
            if ($this->path != $path) {
72
                if (file_exists($this->getTemplateDir().$path)) { // check if we don't erase an other file
73
                    throw new \Exception('file ever exist'); // todo move it to assert to avoid error 500..
74
                } else {
75
                    // we will delete if we rename it
76
                    if ($this->path && file_exists($this->getTemplateDir().$this->path)) {
77
                        $this->unlink = $this->getTemplateDir().$this->path;
78
                    }
79
                    $this->path = $path;
80
                }
81
            }
82
        }
83
84
        return $this;
85
    }
86
87
    public function getCode()
88
    {
89
        return $this->code;
90
    }
91
92
    public function setCode(string $code)
93
    {
94
        $this->code = $code;
95
    }
96
97
    public function storeElement()
98
    {
99
        if ($this->unlink) { // for rename
100
            unlink($this->unlink);
101
        }
102
103
        return file_put_contents($this->getTemplateDir().$this->path, $this->code);
104
    }
105
106
    public function deleteElement()
107
    {
108
        return unlink($this->getTemplateDir().$this->path);
109
    }
110
}
111