Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 namespace DrupalCodeGenerator;
|
Chris@0
|
4
|
Chris@0
|
5 use DrupalCodeGenerator\Helper\Renderer;
|
Chris@0
|
6
|
Chris@0
|
7 /**
|
Chris@0
|
8 * Simple data structure to represent an asset being generated.
|
Chris@0
|
9 */
|
Chris@0
|
10 class Asset {
|
Chris@0
|
11
|
Chris@0
|
12 /**
|
Chris@0
|
13 * Asset path.
|
Chris@0
|
14 *
|
Chris@0
|
15 * @var string
|
Chris@0
|
16 */
|
Chris@0
|
17 protected $path;
|
Chris@0
|
18
|
Chris@0
|
19 /**
|
Chris@0
|
20 * Asset content.
|
Chris@0
|
21 *
|
Chris@0
|
22 * @var string
|
Chris@0
|
23 */
|
Chris@0
|
24 protected $content;
|
Chris@0
|
25
|
Chris@0
|
26 /**
|
Chris@0
|
27 * Twig template to render header.
|
Chris@0
|
28 *
|
Chris@0
|
29 * @var string
|
Chris@0
|
30 */
|
Chris@0
|
31 protected $headerTemplate;
|
Chris@0
|
32
|
Chris@0
|
33 /**
|
Chris@0
|
34 * Twig template to render main content.
|
Chris@0
|
35 *
|
Chris@0
|
36 * @var string
|
Chris@0
|
37 */
|
Chris@0
|
38 protected $template;
|
Chris@0
|
39
|
Chris@0
|
40 /**
|
Chris@0
|
41 * Template variables.
|
Chris@0
|
42 *
|
Chris@0
|
43 * @var array
|
Chris@0
|
44 */
|
Chris@0
|
45 protected $vars = [];
|
Chris@0
|
46
|
Chris@0
|
47 /**
|
Chris@0
|
48 * Action.
|
Chris@0
|
49 *
|
Chris@0
|
50 * This defines an action to take if specified file already exists.
|
Chris@0
|
51 *
|
Chris@0
|
52 * @var string
|
Chris@0
|
53 */
|
Chris@0
|
54 protected $action = 'replace';
|
Chris@0
|
55
|
Chris@0
|
56 /**
|
Chris@0
|
57 * Header size.
|
Chris@0
|
58 *
|
Chris@0
|
59 * @var int
|
Chris@0
|
60 */
|
Chris@0
|
61 protected $headerSize = 0;
|
Chris@0
|
62
|
Chris@0
|
63 /**
|
Chris@0
|
64 * Asset mode.
|
Chris@0
|
65 *
|
Chris@0
|
66 * @var int
|
Chris@0
|
67 */
|
Chris@0
|
68 protected $mode;
|
Chris@0
|
69
|
Chris@0
|
70 /**
|
Chris@0
|
71 * Asset type (file or directory).
|
Chris@0
|
72 *
|
Chris@0
|
73 * @var string
|
Chris@0
|
74 */
|
Chris@0
|
75 protected $type = 'file';
|
Chris@0
|
76
|
Chris@0
|
77 /**
|
Chris@0
|
78 * Getter for asset path.
|
Chris@0
|
79 *
|
Chris@0
|
80 * @return string
|
Chris@0
|
81 * Asset path.
|
Chris@0
|
82 */
|
Chris@0
|
83 public function getPath() {
|
Chris@0
|
84 return Utils::tokenReplace($this->path, $this->getVars());
|
Chris@0
|
85 }
|
Chris@0
|
86
|
Chris@0
|
87 /**
|
Chris@0
|
88 * Getter for asset content.
|
Chris@0
|
89 *
|
Chris@0
|
90 * @return string
|
Chris@0
|
91 * Asset content.
|
Chris@0
|
92 */
|
Chris@0
|
93 public function getContent() {
|
Chris@0
|
94 return $this->content;
|
Chris@0
|
95 }
|
Chris@0
|
96
|
Chris@0
|
97 /**
|
Chris@0
|
98 * Getter for header template.
|
Chris@0
|
99 *
|
Chris@0
|
100 * @return string
|
Chris@0
|
101 * Asset header template.
|
Chris@0
|
102 */
|
Chris@0
|
103 public function getHeaderTemplate() {
|
Chris@0
|
104 return $this->headerTemplate;
|
Chris@0
|
105 }
|
Chris@0
|
106
|
Chris@0
|
107 /**
|
Chris@0
|
108 * Getter for template.
|
Chris@0
|
109 *
|
Chris@0
|
110 * @return string
|
Chris@0
|
111 * Asset template.
|
Chris@0
|
112 */
|
Chris@0
|
113 public function getTemplate() {
|
Chris@0
|
114 return $this->template;
|
Chris@0
|
115 }
|
Chris@0
|
116
|
Chris@0
|
117 /**
|
Chris@0
|
118 * Getter for asset vars.
|
Chris@0
|
119 *
|
Chris@0
|
120 * @return array
|
Chris@0
|
121 * Asset template variables.
|
Chris@0
|
122 */
|
Chris@0
|
123 public function getVars() {
|
Chris@0
|
124 return $this->vars;
|
Chris@0
|
125 }
|
Chris@0
|
126
|
Chris@0
|
127 /**
|
Chris@0
|
128 * Getter for asset action.
|
Chris@0
|
129 *
|
Chris@0
|
130 * @return string
|
Chris@0
|
131 * Asset action.
|
Chris@0
|
132 */
|
Chris@0
|
133 public function getAction() {
|
Chris@0
|
134 return $this->action;
|
Chris@0
|
135 }
|
Chris@0
|
136
|
Chris@0
|
137 /**
|
Chris@0
|
138 * Getter for asset header size.
|
Chris@0
|
139 *
|
Chris@0
|
140 * @return string
|
Chris@0
|
141 * Asset header size.
|
Chris@0
|
142 */
|
Chris@0
|
143 public function getHeaderSize() {
|
Chris@0
|
144 return $this->headerSize;
|
Chris@0
|
145 }
|
Chris@0
|
146
|
Chris@0
|
147 /**
|
Chris@0
|
148 * Getter for asset mode.
|
Chris@0
|
149 *
|
Chris@0
|
150 * @return string
|
Chris@0
|
151 * Asset file mode.
|
Chris@0
|
152 */
|
Chris@0
|
153 public function getMode() {
|
Chris@0
|
154 return $this->mode ?: ($this->isDirectory() ? 0755 : 0644);
|
Chris@0
|
155 }
|
Chris@0
|
156
|
Chris@0
|
157 /**
|
Chris@0
|
158 * Getter for asset type.
|
Chris@0
|
159 *
|
Chris@0
|
160 * @return string
|
Chris@0
|
161 * Asset type.
|
Chris@0
|
162 */
|
Chris@0
|
163 public function getType() {
|
Chris@0
|
164 return $this->type;
|
Chris@0
|
165 }
|
Chris@0
|
166
|
Chris@0
|
167 /**
|
Chris@0
|
168 * Setter for asset path.
|
Chris@0
|
169 *
|
Chris@0
|
170 * @param string $path
|
Chris@0
|
171 * Asset path.
|
Chris@0
|
172 *
|
Chris@0
|
173 * @return \DrupalCodeGenerator\Asset
|
Chris@0
|
174 * The asset.
|
Chris@0
|
175 */
|
Chris@0
|
176 public function path($path) {
|
Chris@0
|
177 $this->path = $path;
|
Chris@0
|
178 return $this;
|
Chris@0
|
179 }
|
Chris@0
|
180
|
Chris@0
|
181 /**
|
Chris@0
|
182 * Setter for asset content.
|
Chris@0
|
183 *
|
Chris@0
|
184 * @param string $content
|
Chris@0
|
185 * Asset content.
|
Chris@0
|
186 *
|
Chris@0
|
187 * @return \DrupalCodeGenerator\Asset
|
Chris@0
|
188 * The asset.
|
Chris@0
|
189 */
|
Chris@0
|
190 public function content($content) {
|
Chris@0
|
191 $this->content = $content;
|
Chris@0
|
192 return $this;
|
Chris@0
|
193 }
|
Chris@0
|
194
|
Chris@0
|
195 /**
|
Chris@0
|
196 * Setter for asset header template.
|
Chris@0
|
197 *
|
Chris@0
|
198 * @param string $header_template
|
Chris@0
|
199 * Asset template.
|
Chris@0
|
200 *
|
Chris@0
|
201 * @return \DrupalCodeGenerator\Asset
|
Chris@0
|
202 * The asset.
|
Chris@0
|
203 */
|
Chris@0
|
204 public function headerTemplate($header_template) {
|
Chris@0
|
205 $this->headerTemplate = $header_template;
|
Chris@0
|
206 return $this;
|
Chris@0
|
207 }
|
Chris@0
|
208
|
Chris@0
|
209 /**
|
Chris@0
|
210 * Setter for asset template.
|
Chris@0
|
211 *
|
Chris@0
|
212 * @param string $template
|
Chris@0
|
213 * Asset template.
|
Chris@0
|
214 *
|
Chris@0
|
215 * @return \DrupalCodeGenerator\Asset
|
Chris@0
|
216 * The asset.
|
Chris@0
|
217 */
|
Chris@0
|
218 public function template($template) {
|
Chris@0
|
219 $this->template = $template;
|
Chris@0
|
220 return $this;
|
Chris@0
|
221 }
|
Chris@0
|
222
|
Chris@0
|
223 /**
|
Chris@0
|
224 * Setter for asset vars.
|
Chris@0
|
225 *
|
Chris@0
|
226 * @param array $vars
|
Chris@0
|
227 * Asset template variables.
|
Chris@0
|
228 *
|
Chris@0
|
229 * @return \DrupalCodeGenerator\Asset
|
Chris@0
|
230 * The asset.
|
Chris@0
|
231 */
|
Chris@0
|
232 public function vars(array $vars) {
|
Chris@0
|
233 $this->vars = $vars;
|
Chris@0
|
234 return $this;
|
Chris@0
|
235 }
|
Chris@0
|
236
|
Chris@0
|
237 /**
|
Chris@0
|
238 * Setter for asset action.
|
Chris@0
|
239 *
|
Chris@0
|
240 * @param string $action
|
Chris@0
|
241 * Asset action.
|
Chris@0
|
242 *
|
Chris@0
|
243 * @return \DrupalCodeGenerator\Asset
|
Chris@0
|
244 * The asset.
|
Chris@0
|
245 */
|
Chris@0
|
246 public function action($action) {
|
Chris@0
|
247 $this->action = $action;
|
Chris@0
|
248 return $this;
|
Chris@0
|
249 }
|
Chris@0
|
250
|
Chris@0
|
251 /**
|
Chris@0
|
252 * Setter for asset header size.
|
Chris@0
|
253 *
|
Chris@0
|
254 * @param int $header_size
|
Chris@0
|
255 * Asset header size.
|
Chris@0
|
256 *
|
Chris@0
|
257 * @return \DrupalCodeGenerator\Asset
|
Chris@0
|
258 * The asset.
|
Chris@0
|
259 */
|
Chris@0
|
260 public function headerSize($header_size) {
|
Chris@0
|
261 $this->headerSize = $header_size;
|
Chris@0
|
262 return $this;
|
Chris@0
|
263 }
|
Chris@0
|
264
|
Chris@0
|
265 /**
|
Chris@0
|
266 * Setter for asset mode.
|
Chris@0
|
267 *
|
Chris@0
|
268 * @param string $mode
|
Chris@0
|
269 * Asset mode.
|
Chris@0
|
270 *
|
Chris@0
|
271 * @return \DrupalCodeGenerator\Asset
|
Chris@0
|
272 * The asset.
|
Chris@0
|
273 */
|
Chris@0
|
274 public function mode($mode) {
|
Chris@0
|
275 $this->mode = $mode;
|
Chris@0
|
276 return $this;
|
Chris@0
|
277 }
|
Chris@0
|
278
|
Chris@0
|
279 /**
|
Chris@0
|
280 * Setter for asset type.
|
Chris@0
|
281 *
|
Chris@0
|
282 * @param string $type
|
Chris@0
|
283 * Asset type.
|
Chris@0
|
284 *
|
Chris@0
|
285 * @return \DrupalCodeGenerator\Asset
|
Chris@0
|
286 * The asset.
|
Chris@0
|
287 */
|
Chris@0
|
288 public function type($type) {
|
Chris@0
|
289 $this->type = $type;
|
Chris@0
|
290 return $this;
|
Chris@0
|
291 }
|
Chris@0
|
292
|
Chris@0
|
293 /**
|
Chris@0
|
294 * Determines if the asset is a directory.
|
Chris@0
|
295 *
|
Chris@0
|
296 * @return bool
|
Chris@0
|
297 * True if the asset is a directory, false otherwise.
|
Chris@0
|
298 */
|
Chris@0
|
299 public function isDirectory() {
|
Chris@0
|
300 return $this->getType() == 'directory';
|
Chris@0
|
301 }
|
Chris@0
|
302
|
Chris@0
|
303 /**
|
Chris@0
|
304 * Renders the asset template.
|
Chris@0
|
305 *
|
Chris@0
|
306 * @param \DrupalCodeGenerator\Helper\Renderer $renderer
|
Chris@0
|
307 * Renderer helper.
|
Chris@0
|
308 */
|
Chris@0
|
309 public function render(Renderer $renderer) {
|
Chris@0
|
310 if (!$this->isDirectory() && is_null($this->getContent())) {
|
Chris@0
|
311 $content = '';
|
Chris@0
|
312 if ($header_template = $this->getHeaderTemplate()) {
|
Chris@0
|
313 $content .= $renderer->render($header_template, $this->getVars()) . "\n";
|
Chris@0
|
314 }
|
Chris@0
|
315 $content .= $renderer->render($this->getTemplate(), $this->getVars());
|
Chris@0
|
316 $this->content($content);
|
Chris@0
|
317 }
|
Chris@0
|
318 }
|
Chris@0
|
319
|
Chris@0
|
320 }
|