Completed
Push — master ( 3cc055...006e5b )
by hu
02:38
created

Theme::parseConfig()   A

Complexity

Conditions 4
Paths 4

Size

Total Lines 9
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 4

Importance

Changes 0
Metric Value
dl 0
loc 9
ccs 6
cts 6
cp 1
rs 9.2
c 0
b 0
f 0
cc 4
eloc 5
nc 4
nop 1
crap 4
1
<?php
2
3
/*
4
 * This file is part of the trendsoft/themes.
5
 * (c) jabber <[email protected]>
6
 * This source file is subject to the MIT license that is bundled
7
 * with this source code in the file LICENSE.
8
 */
9
10
namespace Themes;
11
12
class Theme
13
{
14
    protected $config;
15
16
    protected $current;
17
18
    protected $themes = [];
19
20
    /**
21
     * Theme constructor.
22
     *
23
     * @param array $config
24
     */
25 11
    public function __construct($config = [])
26
    {
27 11
        $this->config = $config;
28 11
        $this->parseConfig($config);
29 11
    }
30
31
    /**
32
     * Set Config.
33
     *
34
     * @param $config
35
     */
36 1
    public function setConfig($config)
37
    {
38 1
        $this->config = $config;
39 1
        $this->parseConfig($config);
40 1
    }
41
42
    /**
43
     * Initial Loading Themes.
44
     *
45
     * @param $path
46
     */
47 11
    public function loadThemes($path)
48
    {
49 11
        $this->themes = [];
50
51 11
        $dirs = scandir($path);
52 11
        foreach ($dirs as $file) {
53 11
            if (is_dir($path.'/'.$file) && file_exists($path.'/'.$file.'/theme.json')) {
54 11
                $theme = json_decode(file_get_contents($path.'/'.$file.'/theme.json'), true);
55 11
                $this->themes[$theme['slug']] = $theme;
56
            }
57
        }
58 11
    }
59
60
    /**
61
     * Get all themes in theme catalog.
62
     *
63
     * @return array
64
     */
65 2
    public function all()
66
    {
67 2
        return $this->themes;
68
    }
69
70
    /**
71
     * Get Current Theme slug.
72
     *
73
     * @return mixed
74
     */
75 6
    public function getCurrent()
76
    {
77 6
        return $this->current;
78
    }
79
80
    /**
81
     * Get Current Theme.
82
     *
83
     * @return mixed
84
     */
85 1
    public function getCurrentTheme()
86
    {
87 1
        return $this->themes[$this->current];
88
    }
89
90
    /**
91
     * Set Current Theme.
92
     *
93
     * @param string $theme
94
     */
95 11
    public function setCurrent($theme)
96
    {
97 11
        $this->current = $theme;
98 11
    }
99
100
    /**
101
     * Active Theme.
102
     *
103
     * @param string $theme
104
     */
105 1
    public function active($theme = '')
106
    {
107 1
        $this->setCurrent($theme);
108 1
    }
109
110
    /**
111
     * Get Theme Relative Asset.
112
     *
113
     * @param string $asset
114
     *
115
     * @return string
116
     */
117 1
    public function asset($asset)
118
    {
119 1
        return $this->path("assets/$asset");
120
    }
121
122
    /**
123
     * Theme Is Current.
124
     *
125
     * @param string $theme
126
     *
127
     * @return bool
128
     */
129 1
    public function isCurrent($theme)
130
    {
131 1
        return $theme === $this->current;
132
    }
133
134
    /**
135
     * Get Theme Absolute Path.
136
     *
137
     * @param string $theme
138
     *
139
     * @return string
140
     */
141 1 View Code Duplication
    public function absolutePath($theme = null)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
142
    {
143 1
        if (is_null($theme)) {
144 1
            $theme = $this->getCurrent();
145
        }
146
147 1
        return $this->config['paths']['absolute'].'/'.$theme;
148
    }
149
150
    /**
151
     * Get Theme File Path.
152
     *
153
     * @param string $file
154
     * @param string $theme
155
     *
156
     * @return string
157
     */
158 2 View Code Duplication
    public function path($file, $theme = null)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
159
    {
160 2
        if (is_null($theme)) {
161 1
            $theme = $this->getCurrent();
162
        }
163
164 2
        return $this->config['paths']['base']."/$theme/$file";
165
    }
166
167
    /**
168
     * Parse Config to Object.
169
     *
170
     * @param $config
171
     */
172 11
    protected function parseConfig($config)
173
    {
174 11
        if (array_key_exists('paths', $config) && array_key_exists('absolute', $config['paths'])) {
175 11
            $this->loadThemes($config['paths']['absolute']);
176
        }
177 11
        if (array_key_exists('active', $config)) {
178 11
            $this->setCurrent($config['active']);
179
        }
180 11
    }
181
}
182