These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php |
||
2 | namespace Redaxscript; |
||
3 | |||
4 | use function file_get_contents; |
||
5 | use function method_exists; |
||
6 | use function str_replace; |
||
7 | use function ucfirst; |
||
8 | |||
9 | /** |
||
10 | * parent class to install the database |
||
11 | * |
||
12 | * @since 2.4.0 |
||
13 | * |
||
14 | * @category Installer |
||
15 | * @package Redaxscript |
||
16 | * @author Henry Ruhs |
||
17 | */ |
||
18 | |||
19 | class Installer |
||
20 | { |
||
21 | /** |
||
22 | * instance of the registry class |
||
23 | * |
||
24 | * @var Registry |
||
25 | */ |
||
26 | |||
27 | protected $_registry; |
||
28 | |||
29 | /** |
||
30 | * instance of the request class |
||
31 | * |
||
32 | * @var Request |
||
33 | */ |
||
34 | |||
35 | protected $_request; |
||
36 | |||
37 | /** |
||
38 | * instance of the language class |
||
39 | * |
||
40 | * @var Language |
||
41 | */ |
||
42 | |||
43 | protected $_language; |
||
44 | |||
45 | /** |
||
46 | * instance of the config class |
||
47 | * |
||
48 | * @var Config |
||
49 | */ |
||
50 | |||
51 | protected $_config; |
||
52 | |||
53 | /** |
||
54 | * name of the directory |
||
55 | * |
||
56 | * @var string |
||
57 | */ |
||
58 | |||
59 | protected $_directory; |
||
60 | |||
61 | /** |
||
62 | * placeholder for the prefix |
||
63 | * |
||
64 | * @var string |
||
65 | */ |
||
66 | |||
67 | protected $_prefixPlaceholder = '/* %PREFIX% */'; |
||
68 | |||
69 | /** |
||
70 | * constructor of the class |
||
71 | * |
||
72 | * @since 3.0.0 |
||
73 | * |
||
74 | * @param Registry $registry instance of the registry class |
||
75 | * @param Request $request instance of the request class |
||
76 | * @param Language $language instance of the language class |
||
77 | * @param Config $config instance of the config class |
||
78 | */ |
||
79 | |||
80 | 3 | public function __construct(Registry $registry, Request $request, Language $language, Config $config) |
|
81 | { |
||
82 | 3 | $this->_registry = $registry; |
|
83 | 3 | $this->_request = $request; |
|
84 | 3 | $this->_language = $language; |
|
85 | 3 | $this->_config = $config; |
|
86 | 3 | } |
|
87 | |||
88 | /** |
||
89 | * init the class |
||
90 | * |
||
91 | * @since 2.6.0 |
||
92 | * |
||
93 | * @param string $directory name of the directory |
||
94 | */ |
||
95 | |||
96 | 3 | public function init(string $directory = 'database') : void |
|
97 | { |
||
98 | 3 | $this->_directory = $directory; |
|
99 | 3 | } |
|
100 | |||
101 | /** |
||
102 | * create from sql |
||
103 | * |
||
104 | * @since 2.4.0 |
||
105 | */ |
||
106 | |||
107 | 1 | public function rawCreate() : void |
|
108 | { |
||
109 | 1 | $this->_rawExecute('create', $this->_config->get('dbType')); |
|
0 ignored issues
–
show
|
|||
110 | 1 | } |
|
111 | |||
112 | /** |
||
113 | * drop from sql |
||
114 | * |
||
115 | * @since 2.4.0 |
||
116 | */ |
||
117 | |||
118 | 1 | public function rawDrop() : void |
|
119 | { |
||
120 | 1 | $this->_rawExecute('drop', $this->_config->get('dbType')); |
|
0 ignored issues
–
show
It seems like
$this->_config->get('dbType') targeting Redaxscript\Config::get() can also be of type array or null ; however, Redaxscript\Installer::_rawExecute() does only seem to accept string , maybe add an additional type check?
This check looks at variables that are passed out again to other methods. If the outgoing method call has stricter type requirements than the method itself, an issue is raised. An additional type check may prevent trouble.
Loading history...
|
|||
121 | 1 | } |
|
122 | |||
123 | /** |
||
124 | * insert the data |
||
125 | * |
||
126 | * @since 3.1.0 |
||
127 | * |
||
128 | * @param array $optionArray options of the installation |
||
129 | */ |
||
130 | |||
131 | 1 | public function insertData(array $optionArray = []) : void |
|
132 | { |
||
133 | 1 | $this->insertCategories($optionArray); |
|
134 | 1 | $this->insertArticles($optionArray); |
|
135 | 1 | $this->insertExtras($optionArray); |
|
136 | 1 | $this->insertComments($optionArray); |
|
137 | 1 | $this->insertGroups(); |
|
138 | 1 | $this->insertUsers($optionArray); |
|
139 | 1 | $this->insertModules(); |
|
140 | 1 | $this->insertSettings($optionArray); |
|
141 | 1 | } |
|
142 | |||
143 | /** |
||
144 | * insert the categories |
||
145 | * |
||
146 | * @since 3.1.0 |
||
147 | * |
||
148 | * @param array $optionArray options of the installation |
||
149 | */ |
||
150 | |||
151 | 1 | public function insertCategories(array $optionArray = []) : void |
|
152 | { |
||
153 | 1 | $now = $this->_registry->get('now'); |
|
154 | 1 | Db::forTablePrefix('categories') |
|
155 | 1 | ->create() |
|
156 | 1 | ->set( |
|
157 | [ |
||
158 | 1 | 'title' => 'Home', |
|
159 | 1 | 'alias' => 'home', |
|
160 | 1 | 'author' => $optionArray['adminUser'], |
|
161 | 1 | 'rank' => 1, |
|
162 | 1 | 'date' => $now |
|
163 | ]) |
||
164 | 1 | ->save(); |
|
165 | 1 | } |
|
166 | |||
167 | /** |
||
168 | * insert the articles |
||
169 | * |
||
170 | * @since 3.1.0 |
||
171 | * |
||
172 | * @param array $optionArray options of the installation |
||
173 | */ |
||
174 | |||
175 | 1 | public function insertArticles(array $optionArray = []) : void |
|
176 | { |
||
177 | 1 | $now = $this->_registry->get('now'); |
|
178 | 1 | Db::forTablePrefix('articles') |
|
179 | 1 | ->create() |
|
180 | 1 | ->set( |
|
181 | [ |
||
182 | 1 | 'title' => 'Welcome', |
|
183 | 1 | 'alias' => 'welcome', |
|
184 | 1 | 'author' => $optionArray['adminUser'], |
|
185 | 1 | 'text' => file_get_contents('database' . DIRECTORY_SEPARATOR . 'html' . DIRECTORY_SEPARATOR . 'articles' . DIRECTORY_SEPARATOR . 'welcome.phtml'), |
|
186 | 1 | 'category' => 1, |
|
187 | 1 | 'comments' => 1, |
|
188 | 1 | 'rank' => 1, |
|
189 | 1 | 'date' => $now |
|
190 | ]) |
||
191 | 1 | ->save(); |
|
192 | 1 | } |
|
193 | |||
194 | /** |
||
195 | * insert the extras |
||
196 | * |
||
197 | * @since 3.1.0 |
||
198 | * |
||
199 | * @param array $optionArray options of the installation |
||
200 | */ |
||
201 | |||
202 | 1 | public function insertExtras(array $optionArray = []) : void |
|
203 | { |
||
204 | 1 | $now = $this->_registry->get('now'); |
|
205 | $extrasArray = |
||
206 | [ |
||
207 | 1 | 'categories' => |
|
208 | [ |
||
209 | 'category' => null, |
||
210 | 'headline' => 1, |
||
211 | 'status' => 1 |
||
212 | ], |
||
213 | 'articles' => |
||
214 | [ |
||
215 | 'category' => null, |
||
216 | 'headline' => 1, |
||
217 | 'status' => 1 |
||
218 | ], |
||
219 | 'comments' => |
||
220 | [ |
||
221 | 'category' => null, |
||
222 | 'headline' => 1, |
||
223 | 'status' => 1 |
||
224 | ], |
||
225 | 'languages' => |
||
226 | [ |
||
227 | 'category' => null, |
||
228 | 'headline' => 1, |
||
229 | 'status' => 0 |
||
230 | ], |
||
231 | 'templates' => |
||
232 | [ |
||
233 | 'category' => null, |
||
234 | 'headline' => 1, |
||
235 | 'status' => 0 |
||
236 | ], |
||
237 | 'teaser' => |
||
238 | [ |
||
239 | 'category' => 1, |
||
240 | 'headline' => 0, |
||
241 | 'status' => 0 |
||
242 | ] |
||
243 | ]; |
||
244 | 1 | $extrasRank = 0; |
|
245 | |||
246 | /* process extras */ |
||
247 | |||
248 | 1 | foreach ($extrasArray as $key => $value) |
|
249 | { |
||
250 | 1 | Db::forTablePrefix('extras') |
|
251 | 1 | ->create() |
|
252 | 1 | ->set( |
|
253 | [ |
||
254 | 1 | 'title' => ucfirst($key), |
|
255 | 1 | 'alias' => $key, |
|
256 | 1 | 'author' => $optionArray['adminUser'], |
|
257 | 1 | 'text' => file_get_contents('database' . DIRECTORY_SEPARATOR . 'html' . DIRECTORY_SEPARATOR . 'extras' . DIRECTORY_SEPARATOR . $key . '.phtml'), |
|
258 | 1 | 'category' => $value['category'], |
|
259 | 1 | 'headline' => $value['headline'], |
|
260 | 1 | 'status' => $value['status'], |
|
261 | 1 | 'rank' => ++$extrasRank, |
|
262 | 1 | 'date' => $now |
|
263 | ]) |
||
264 | 1 | ->save(); |
|
265 | } |
||
266 | 1 | } |
|
267 | |||
268 | /** |
||
269 | * insert the comments |
||
270 | * |
||
271 | * @since 3.1.0 |
||
272 | * |
||
273 | * @param array $optionArray options of the installation |
||
274 | */ |
||
275 | |||
276 | 1 | public function insertComments(array $optionArray = []) : void |
|
277 | { |
||
278 | 1 | $now = $this->_registry->get('now'); |
|
279 | 1 | Db::forTablePrefix('comments') |
|
280 | 1 | ->create() |
|
281 | 1 | ->set( |
|
282 | [ |
||
283 | 1 | 'author' => $optionArray['adminUser'], |
|
284 | 1 | 'email' => $optionArray['adminEmail'], |
|
285 | 1 | 'text' => file_get_contents('database' . DIRECTORY_SEPARATOR . 'html' . DIRECTORY_SEPARATOR . 'comments' . DIRECTORY_SEPARATOR . 'hello.phtml'), |
|
286 | 1 | 'article' => 1, |
|
287 | 1 | 'rank' => 1, |
|
288 | 1 | 'date' => $now |
|
289 | ]) |
||
290 | 1 | ->save(); |
|
291 | 1 | } |
|
292 | |||
293 | /** |
||
294 | * insert the groups |
||
295 | * |
||
296 | * @since 3.1.0 |
||
297 | */ |
||
298 | |||
299 | 1 | public function insertGroups() : void |
|
300 | { |
||
301 | 1 | Db::forTablePrefix('groups') |
|
302 | 1 | ->create() |
|
303 | 1 | ->set( |
|
304 | [ |
||
305 | 1 | 'name' => 'Administrators', |
|
306 | 'alias' => 'administrators', |
||
307 | 'description' => 'Unlimited access', |
||
308 | 'categories' => '[1, 2, 3]', |
||
309 | 'articles' => '[1, 2, 3]', |
||
310 | 'extras' => '[1, 2, 3]', |
||
311 | 'comments' => '[1, 2, 3]', |
||
312 | 'groups' => '[1, 2, 3]', |
||
313 | 'users' => '[1, 2, 3]', |
||
314 | 'modules' => '[1, 2, 3]', |
||
315 | 'settings' => 1, |
||
316 | 'filter' => 0 |
||
317 | ]) |
||
318 | 1 | ->save(); |
|
319 | 1 | Db::forTablePrefix('groups') |
|
320 | 1 | ->create() |
|
321 | 1 | ->set( |
|
322 | [ |
||
323 | 1 | 'name' => 'Members', |
|
324 | 'alias' => 'members', |
||
325 | 'description' => 'Default members group' |
||
326 | ]) |
||
327 | 1 | ->save(); |
|
328 | 1 | } |
|
329 | |||
330 | /** |
||
331 | * insert the users |
||
332 | * |
||
333 | * @since 3.1.0 |
||
334 | * |
||
335 | * @param array $optionArray options of the installation |
||
336 | */ |
||
337 | |||
338 | 1 | public function insertUsers(array $optionArray = []) : void |
|
339 | { |
||
340 | 1 | $passwordHash = new Hash(); |
|
341 | 1 | $passwordHash->init($optionArray['adminPassword']); |
|
342 | 1 | Db::forTablePrefix('users') |
|
343 | 1 | ->create() |
|
344 | 1 | ->set( |
|
345 | [ |
||
346 | 1 | 'name' => $optionArray['adminName'], |
|
347 | 1 | 'user' => $optionArray['adminUser'], |
|
348 | 1 | 'password' => $passwordHash->getHash(), |
|
349 | 1 | 'email' => $optionArray['adminEmail'], |
|
350 | 1 | 'description' => 'God admin', |
|
351 | 1 | 'groups' => '[1]' |
|
352 | ]) |
||
353 | 1 | ->save(); |
|
354 | 1 | } |
|
355 | |||
356 | /** |
||
357 | * insert the modules |
||
358 | * |
||
359 | * @since 3.1.0 |
||
360 | */ |
||
361 | |||
362 | 1 | public function insertModules() : void |
|
363 | { |
||
364 | $moduleArray = |
||
365 | [ |
||
366 | 1 | 'AliasGenerator', |
|
367 | 'CallHome', |
||
368 | 'Dialog', |
||
369 | 'FormValidator', |
||
370 | 'TextareaResizer', |
||
371 | 'TableSorter' |
||
372 | ]; |
||
373 | |||
374 | /* process modules */ |
||
375 | |||
376 | 1 | foreach ($moduleArray as $alias) |
|
377 | { |
||
378 | 1 | $moduleClass = 'Redaxscript\Modules\\' . $alias . '\\' . $alias; |
|
379 | |||
380 | /* install */ |
||
381 | |||
382 | 1 | if (method_exists($moduleClass, 'install')) |
|
383 | { |
||
384 | 1 | $module = new $moduleClass($this->_registry, $this->_request, $this->_language, $this->_config); |
|
385 | 1 | $module->install(); |
|
386 | } |
||
387 | } |
||
388 | 1 | } |
|
389 | |||
390 | /** |
||
391 | * insert the settings |
||
392 | * |
||
393 | * @since 3.1.0 |
||
394 | * |
||
395 | * @param array $optionArray options of the installation |
||
396 | */ |
||
397 | |||
398 | 1 | public function insertSettings(array $optionArray = []) : void |
|
399 | { |
||
400 | $settingArray = |
||
401 | [ |
||
402 | 1 | 'language' => null, |
|
403 | 'template' => null, |
||
404 | 1 | 'title' => $this->_language->get('name', '_package'), |
|
405 | 1 | 'author' => $optionArray['adminName'], |
|
406 | 'copyright' => null, |
||
407 | 1 | 'description' => $this->_language->get('description', '_package'), |
|
408 | 'keywords' => null, |
||
409 | 1 | 'robots' => 1, |
|
410 | 1 | 'email' => $optionArray['adminEmail'], |
|
411 | 1 | 'subject' => $this->_language->get('name', '_package'), |
|
412 | 1 | 'notification' => 0, |
|
413 | 1 | 'charset' => 'utf-8', |
|
414 | 1 | 'divider' => ' - ', |
|
415 | 1 | 'zone' => 'Europe/Berlin', |
|
416 | 1 | 'time' => 'H:i', |
|
417 | 1 | 'date' => 'd.m.Y', |
|
418 | 1 | 'homepage' => 0, |
|
419 | 1 | 'limit' => 10, |
|
420 | 1 | 'order' => 'asc', |
|
421 | 1 | 'pagination' => 1, |
|
422 | 1 | 'registration' => 0, |
|
423 | 1 | 'verification' => 0, |
|
424 | 1 | 'recovery' => 1, |
|
425 | 1 | 'moderation' => 0, |
|
426 | 1 | 'captcha' => 0, |
|
427 | 1 | 'version' => $this->_language->get('version', '_package') |
|
428 | ]; |
||
429 | |||
430 | /* process settings */ |
||
431 | |||
432 | 1 | foreach ($settingArray as $name => $value) |
|
433 | { |
||
434 | 1 | Db::forTablePrefix('settings') |
|
435 | 1 | ->create() |
|
436 | 1 | ->set( |
|
437 | [ |
||
438 | 1 | 'name' => $name, |
|
439 | 1 | 'value' => $value |
|
440 | ]) |
||
441 | 1 | ->save(); |
|
442 | } |
||
443 | 1 | } |
|
444 | |||
445 | /** |
||
446 | * execute from sql |
||
447 | * |
||
448 | * @since 2.4.0 |
||
449 | * |
||
450 | * @param string $action action to process |
||
451 | * @param string $type type of the database |
||
452 | */ |
||
453 | |||
454 | 2 | protected function _rawExecute(string $action = null, string $type = 'mysql') : void |
|
455 | { |
||
456 | 2 | $actionFilesystem = new Filesystem\File(); |
|
457 | 2 | $actionFilesystem->init($this->_directory . DIRECTORY_SEPARATOR . $type . DIRECTORY_SEPARATOR . $action); |
|
458 | 2 | $actionFilesystemArray = $actionFilesystem->getSortArray(); |
|
459 | |||
460 | /* process filesystem */ |
||
461 | |||
462 | 2 | foreach ($actionFilesystemArray as $file) |
|
463 | { |
||
464 | 2 | $query = $actionFilesystem->readFile($file); |
|
465 | 2 | if ($query) |
|
466 | { |
||
467 | 2 | if ($this->_config->get('dbPrefix')) |
|
468 | { |
||
469 | 2 | $query = str_replace($this->_prefixPlaceholder, $this->_config->get('dbPrefix'), $query); |
|
470 | } |
||
471 | 2 | Db::rawExecute($query); |
|
472 | } |
||
473 | } |
||
474 | 2 | } |
|
475 | } |
||
476 |
This check looks at variables that are passed out again to other methods.
If the outgoing method call has stricter type requirements than the method itself, an issue is raised.
An additional type check may prevent trouble.