This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include
, or for example
via PHP's auto-loading mechanism.
1 | <?php |
||||
2 | |||||
3 | namespace XoopsModules\Modulebuilder\Files; |
||||
4 | |||||
5 | use XoopsModules\Modulebuilder; |
||||
6 | |||||
7 | /* |
||||
8 | You may not change or alter any portion of this comment or credits |
||||
9 | of supporting developers from this source code or any supporting source code |
||||
10 | which is considered copyrighted (c) material of the original comment or credit authors. |
||||
11 | |||||
12 | This program is distributed in the hope that it will be useful, |
||||
13 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
||||
15 | */ |
||||
16 | /** |
||||
17 | * modulebuilder module. |
||||
18 | * |
||||
19 | * @copyright XOOPS Project (https://xoops.org) |
||||
20 | * @license GNU GPL 2 (https://www.gnu.org/licenses/old-licenses/gpl-2.0.html) |
||||
21 | * |
||||
22 | * @since 2.5.0 |
||||
23 | * |
||||
24 | * @author Txmod Xoops https://xoops.org |
||||
25 | * Goffy https://myxoops.org |
||||
26 | * |
||||
27 | */ |
||||
28 | \xoops_load('XoopsFile'); |
||||
29 | |||||
30 | /** |
||||
31 | * Class CreateFile. |
||||
32 | */ |
||||
33 | class CreateFile extends CreateTableFields |
||||
34 | { |
||||
35 | /** |
||||
36 | * @var string |
||||
37 | */ |
||||
38 | private $tab = ' '; |
||||
39 | |||||
40 | /** |
||||
41 | * @var mixed |
||||
42 | */ |
||||
43 | private $xf = null; |
||||
44 | /** |
||||
45 | * "fileName" attribute of the files. |
||||
46 | * |
||||
47 | * @var mixed |
||||
48 | */ |
||||
49 | private $fileName = null; |
||||
50 | /** |
||||
51 | * "subdir" attribute of the directories. |
||||
52 | * |
||||
53 | * @var string |
||||
54 | */ |
||||
55 | private $subdir = null; |
||||
56 | /** |
||||
57 | * "uploadPath" attribute of the files. |
||||
58 | * |
||||
59 | * @var string |
||||
60 | */ |
||||
61 | private $uploadPath = null; |
||||
62 | /** |
||||
63 | * @var string |
||||
64 | */ |
||||
65 | private $content = null; |
||||
66 | /** |
||||
67 | * @var mixed |
||||
68 | */ |
||||
69 | private $created = null; |
||||
70 | /** |
||||
71 | * @var mixed |
||||
72 | */ |
||||
73 | private $notCreated = null; |
||||
74 | /** |
||||
75 | * @var string |
||||
76 | */ |
||||
77 | private $mode = null; |
||||
78 | /** |
||||
79 | * @var mixed |
||||
80 | */ |
||||
81 | protected $phpcode = null; |
||||
82 | /** |
||||
83 | * @var mixed |
||||
84 | */ |
||||
85 | protected $htmlcode; |
||||
86 | |||||
87 | /** |
||||
88 | * @public function constructor |
||||
89 | * @param null |
||||
90 | */ |
||||
91 | public function __construct() |
||||
92 | { |
||||
93 | parent::__construct(); |
||||
94 | $this->xf = \XoopsFile::getHandler(); |
||||
95 | } |
||||
96 | |||||
97 | /** |
||||
98 | * @public static function getInstance |
||||
99 | * @param null |
||||
100 | * @return Modulebuilder\Files\CreateFile |
||||
101 | */ |
||||
102 | public static function getInstance() |
||||
103 | { |
||||
104 | static $instance = false; |
||||
105 | if (!$instance) { |
||||
106 | $instance = new self(); |
||||
107 | } |
||||
108 | |||||
109 | return $instance; |
||||
110 | } |
||||
111 | |||||
112 | /** |
||||
113 | * @public function create |
||||
114 | * |
||||
115 | * @param $moduleDirname |
||||
116 | * @param $subdir |
||||
117 | * @param $fileName |
||||
118 | * @param $content |
||||
119 | * @param $created |
||||
120 | * @param $notCreated |
||||
121 | * @param $mode |
||||
122 | */ |
||||
123 | public function create($moduleDirname, $subdir = null, $fileName = null, $content = '', $created = null, $notCreated = null, $mode = 'w+') |
||||
124 | { |
||||
125 | $this->setFileName($fileName); |
||||
126 | $this->created = $created; |
||||
127 | $this->notCreated = $notCreated; |
||||
128 | $this->setMode($mode); |
||||
129 | $this->setRepositoryPath($moduleDirname); |
||||
130 | if (!empty($content) && \is_string($content)) { |
||||
131 | $this->setContent($content); |
||||
132 | } |
||||
133 | if (isset($subdir) && \is_string($subdir)) { |
||||
134 | $this->setSubDir($subdir); |
||||
135 | } |
||||
136 | } |
||||
137 | |||||
138 | /** |
||||
139 | * @public function write |
||||
140 | * @param mixed $moduleDirname |
||||
141 | */ |
||||
142 | /*public function write($module, $fileName) |
||||
143 | { |
||||
144 | $this->setModule($module); |
||||
145 | $this->setFileName($fileName); |
||||
146 | }*/ |
||||
147 | |||||
148 | /** |
||||
149 | * @private function setRepositoryPath |
||||
150 | * @param string $moduleDirname |
||||
151 | */ |
||||
152 | private function setRepositoryPath($moduleDirname) |
||||
153 | { |
||||
154 | $this->uploadPath = TDMC_UPLOAD_REPOSITORY_PATH . '/' . $moduleDirname; |
||||
155 | } |
||||
156 | |||||
157 | /** |
||||
158 | * @private function getRepositoryPath |
||||
159 | * @param null |
||||
160 | * @return string |
||||
161 | */ |
||||
162 | private function getRepositoryPath() |
||||
163 | { |
||||
164 | return $this->uploadPath; |
||||
165 | } |
||||
166 | |||||
167 | /** |
||||
168 | * @private function setSubDir |
||||
169 | * @param $subdir |
||||
170 | */ |
||||
171 | private function setSubDir($subdir) |
||||
172 | { |
||||
173 | $this->subdir = $subdir; |
||||
174 | } |
||||
175 | |||||
176 | /** |
||||
177 | * @private function getSubDir |
||||
178 | * @param null |
||||
179 | * @return string |
||||
180 | */ |
||||
181 | private function getSubDir() |
||||
182 | { |
||||
183 | return $this->subdir; |
||||
184 | } |
||||
185 | |||||
186 | /** |
||||
187 | * public function setFileName. |
||||
188 | * |
||||
189 | * @param $fileName |
||||
190 | */ |
||||
191 | public function setFileName($fileName) |
||||
192 | { |
||||
193 | $this->fileName = $fileName; |
||||
194 | } |
||||
195 | |||||
196 | /** |
||||
197 | * @public function getFileName |
||||
198 | * @param null |
||||
199 | * @return mixed |
||||
200 | */ |
||||
201 | public function getFileName() |
||||
202 | { |
||||
203 | return $this->fileName; |
||||
204 | } |
||||
205 | |||||
206 | /** |
||||
207 | * @private function setContent |
||||
208 | * @param $content |
||||
209 | */ |
||||
210 | private function setContent($content) |
||||
211 | { |
||||
212 | //replace tabs by 4 spaces |
||||
213 | $this->content = preg_replace('/\t/', $this->tab, $content); |
||||
214 | } |
||||
215 | |||||
216 | /** |
||||
217 | * @private function setContent |
||||
218 | * @param null |
||||
219 | * @return string |
||||
220 | */ |
||||
221 | private function getContent() |
||||
222 | { |
||||
223 | return $this->content; |
||||
224 | } |
||||
225 | |||||
226 | /** |
||||
227 | * @private function getFolderName |
||||
228 | * @param null |
||||
229 | * @return string |
||||
230 | */ |
||||
231 | private function getFolderName() |
||||
232 | { |
||||
233 | $path = $this->getUploadPath(); |
||||
234 | if (\mb_strrpos($path, '\\')) { |
||||
235 | $str = \mb_strrpos($path, '\\'); |
||||
236 | if (false !== $str) { |
||||
237 | return mb_substr($path, $str + 1, mb_strlen($path)); |
||||
238 | } |
||||
239 | |||||
240 | return mb_substr($path, $str, mb_strlen($path)); |
||||
241 | } |
||||
242 | //return 'root module'; |
||||
243 | return false; |
||||
0 ignored issues
–
show
Bug
Best Practice
introduced
by
![]() |
|||||
244 | } |
||||
245 | |||||
246 | /** |
||||
247 | * @public function getUploadPath |
||||
248 | * @param null |
||||
249 | * @return string |
||||
250 | */ |
||||
251 | private function getUploadPath() |
||||
252 | { |
||||
253 | if (null != $this->getSubDir()) { |
||||
254 | $ret = $this->getRepositoryPath() . '/' . $this->getSubDir(); |
||||
255 | } else { |
||||
256 | $ret = $this->getRepositoryPath(); |
||||
257 | } |
||||
258 | |||||
259 | return $ret; |
||||
260 | } |
||||
261 | |||||
262 | /** |
||||
263 | * @private function getCreated |
||||
264 | * @param null |
||||
265 | * @return bool |
||||
266 | */ |
||||
267 | private function getCreated() |
||||
268 | { |
||||
269 | return $this->created; |
||||
270 | } |
||||
271 | |||||
272 | /** |
||||
273 | * @private function getNotCreated |
||||
274 | * @param null |
||||
275 | * @return bool |
||||
276 | */ |
||||
277 | private function getNotCreated() |
||||
278 | { |
||||
279 | return $this->notCreated; |
||||
280 | } |
||||
281 | |||||
282 | /** |
||||
283 | * @private function setMode |
||||
284 | * @param $mode |
||||
285 | */ |
||||
286 | private function setMode($mode) |
||||
287 | { |
||||
288 | $this->mode = $mode; |
||||
289 | } |
||||
290 | |||||
291 | /** |
||||
292 | * @private function getMode |
||||
293 | * @param null |
||||
294 | * @return string |
||||
295 | */ |
||||
296 | private function getMode() |
||||
297 | { |
||||
298 | return $this->mode; |
||||
299 | } |
||||
300 | |||||
301 | /** |
||||
302 | * @public function getLanguage |
||||
303 | * @param string $moduleDirname |
||||
304 | * @param string $prefix |
||||
305 | * @param string $suffix |
||||
306 | * @param string $addFq //add function qualifier |
||||
307 | * @return string |
||||
308 | */ |
||||
309 | public function getLanguage($moduleDirname, $prefix = '', $suffix = '', $addFq = true) |
||||
310 | { |
||||
311 | $lang = ''; |
||||
312 | if ($addFq) { |
||||
313 | $lang = '\\'; |
||||
314 | } |
||||
315 | $lang .= '_' . $prefix . '_' . \mb_strtoupper($moduleDirname); |
||||
316 | $ret = $lang; |
||||
317 | if (!empty($suffix) || '_' !== $suffix) { |
||||
318 | $ret = $lang . '_' . $suffix; |
||||
319 | } elseif ('_' === $suffix) { |
||||
320 | $ret = $lang . '_'; |
||||
321 | } |
||||
322 | |||||
323 | return $ret; |
||||
324 | } |
||||
325 | |||||
326 | /** |
||||
327 | * @public function getLeftString |
||||
328 | * @param string $string |
||||
329 | * |
||||
330 | * @return string |
||||
331 | */ |
||||
332 | public function getLeftString($string) |
||||
333 | { |
||||
334 | return mb_substr($string, 0, mb_strpos($string, '_')); |
||||
335 | } |
||||
336 | |||||
337 | /** |
||||
338 | * @public function getRightString |
||||
339 | * @param $string |
||||
340 | * |
||||
341 | * @return string |
||||
342 | */ |
||||
343 | public function getRightString($string = null) |
||||
344 | { |
||||
345 | if (mb_strpos($string, '_')) { |
||||
346 | $str = mb_strpos($string, '_'); |
||||
347 | if (false !== $str) { |
||||
348 | $ret = mb_substr($string, $str + 1, mb_strlen($string)); |
||||
349 | |||||
350 | return $ret; |
||||
351 | } |
||||
352 | } |
||||
353 | |||||
354 | return $string; |
||||
355 | } |
||||
356 | |||||
357 | /** |
||||
358 | * @public function getCamelCase |
||||
359 | * @param $string |
||||
360 | * @param $ucfirst |
||||
361 | * @param $lcfirst |
||||
362 | * |
||||
363 | * @return string |
||||
364 | */ |
||||
365 | public function getCamelCase($string, $ucfirst = false, $lcfirst = false) |
||||
366 | { |
||||
367 | $rightString = $this->getRightString($string); |
||||
368 | $leftString = $this->getLeftString($string); |
||||
369 | if ($ucfirst) { |
||||
370 | return $this->getUcfirst($leftString) . $this->getUcfirst($rightString); |
||||
371 | } |
||||
372 | if ($lcfirst) { |
||||
373 | return $this->getLcfirst($leftString) . $this->getUcfirst($rightString); |
||||
374 | } |
||||
375 | |||||
376 | return $string; |
||||
377 | } |
||||
378 | |||||
379 | /** |
||||
380 | * @public function getUcfirst |
||||
381 | * @param $string |
||||
382 | * |
||||
383 | * @return string |
||||
384 | */ |
||||
385 | public function getUcfirst($string) |
||||
386 | { |
||||
387 | return \ucfirst($string); |
||||
388 | } |
||||
389 | |||||
390 | /** |
||||
391 | * @public function getLcfirst |
||||
392 | * |
||||
393 | * @param $string |
||||
394 | * @return string |
||||
395 | */ |
||||
396 | public function getLcfirst($string) |
||||
397 | { |
||||
398 | return lcfirst($string); |
||||
399 | } |
||||
400 | |||||
401 | /** |
||||
402 | * @public function getStrToUpper |
||||
403 | * |
||||
404 | * @param $string |
||||
405 | * @return string |
||||
406 | */ |
||||
407 | public function getStrToUpper($string) |
||||
408 | { |
||||
409 | return \mb_strtoupper($string); |
||||
410 | } |
||||
411 | |||||
412 | /** |
||||
413 | * @public function getStrToLower |
||||
414 | * @param $string |
||||
415 | * |
||||
416 | * @return string |
||||
417 | */ |
||||
418 | public function getStrToLower($string) |
||||
419 | { |
||||
420 | return \mb_strtolower($string); |
||||
421 | } |
||||
422 | |||||
423 | /** |
||||
424 | * @public function getRequire |
||||
425 | * @param $filename |
||||
426 | * @return string |
||||
427 | */ |
||||
428 | public function getRequire($filename = 'header') |
||||
429 | { |
||||
430 | return "require __DIR__ . '/{$filename}.php';\n"; |
||||
431 | } |
||||
432 | |||||
433 | /** |
||||
434 | * @public function getRequireOnce |
||||
435 | * @param $filename |
||||
436 | * @return string |
||||
437 | */ |
||||
438 | public function getRequireOnce($filename = 'header') |
||||
439 | { |
||||
440 | return "require_once __DIR__ . '/{$filename}.php';\n"; |
||||
441 | } |
||||
442 | |||||
443 | /** |
||||
444 | * @private function getDashComment |
||||
445 | * |
||||
446 | * @param $comment |
||||
447 | * |
||||
448 | * @return string |
||||
449 | */ |
||||
450 | public function getDashComment($comment) |
||||
451 | { |
||||
452 | return "// ------------------- {$comment} ------------------- //\n"; |
||||
453 | } |
||||
454 | |||||
455 | /** |
||||
456 | * @public function getSimpleString |
||||
457 | * @param $string |
||||
458 | * |
||||
459 | * @param string $t |
||||
460 | * @return string |
||||
461 | */ |
||||
462 | public function getSimpleString($string, $t = '') |
||||
463 | { |
||||
464 | return "{$t}{$string}\n"; |
||||
465 | } |
||||
466 | |||||
467 | /** |
||||
468 | * @public function getHeaderFilesComments |
||||
469 | * @param string $module |
||||
470 | * @param $noPhpFile |
||||
471 | * |
||||
472 | * @param string $namespace |
||||
473 | * @return string |
||||
474 | */ |
||||
475 | public function getHeaderFilesComments($module, $noPhpFile = null, $namespace = '') |
||||
476 | { |
||||
477 | $pc = Modulebuilder\Files\CreatePhpCode::getInstance(); |
||||
478 | $name = $module->getVar('mod_name'); |
||||
479 | $dirname = $module->getVar('mod_dirname'); |
||||
480 | //$version = $module->getVar('mod_version'); |
||||
481 | $since = $module->getVar('mod_since'); |
||||
482 | $minXoops = $module->getVar('mod_min_xoops'); |
||||
483 | $author = $module->getVar('mod_author'); |
||||
484 | //$credits = $module->getVar('mod_credits'); |
||||
485 | $authorMail = $module->getVar('mod_author_mail'); |
||||
486 | $authorWebsiteUrl = $module->getVar('mod_author_website_url'); |
||||
487 | $license = $module->getVar('mod_license'); |
||||
488 | //$subversion = $module->getVar('mod_subversion'); |
||||
489 | //$date = date('D Y-m-d H:i:s'); |
||||
490 | if (null === $noPhpFile) { |
||||
491 | $ret = "<?php"; |
||||
492 | $ret .= "\n\ndeclare(strict_types=1);\n"; |
||||
493 | } elseif (\is_string($noPhpFile)) { |
||||
494 | $ret = $noPhpFile; |
||||
495 | } else { |
||||
496 | $ret = ''; |
||||
497 | } |
||||
498 | $ret .= "\n{$namespace}/*\n"; |
||||
499 | |||||
500 | $filename = TDMC_CLASS_PATH . '/Files/Docs/license.txt'; |
||||
501 | $handle = fopen($filename, 'rb'); |
||||
502 | $data = fread($handle, filesize($filename)); |
||||
503 | fclose($handle); |
||||
504 | $ret .= $data . "\n"; |
||||
505 | $ret .= "*/\n"; |
||||
506 | $copyright = [ |
||||
507 | $name => 'module for xoops', |
||||
508 | '' => '', |
||||
509 | '@copyright ' => '2021 XOOPS Project (https://xoops.org)', |
||||
510 | '@license ' => $license, |
||||
511 | '@package ' => $dirname, |
||||
512 | '@since ' => $since, |
||||
513 | '@min_xoops ' => $minXoops, |
||||
514 | ]; |
||||
515 | $authorLine = $author; |
||||
516 | if ('' !== $authorMail) { |
||||
517 | $authorLine .= ' - Email:' . $authorMail; |
||||
518 | } |
||||
519 | if ('' !== $authorWebsiteUrl) { |
||||
520 | $authorLine .= ' - Website:' . $authorWebsiteUrl; |
||||
521 | } |
||||
522 | $copyright['@author '] = $authorLine; |
||||
523 | |||||
524 | $ret .= $pc->getPhpCodeCommentMultiLine($copyright); |
||||
525 | |||||
526 | return $ret; |
||||
527 | } |
||||
528 | |||||
529 | /** |
||||
530 | * @public function renderFile |
||||
531 | * @param null |
||||
532 | * @return string |
||||
533 | */ |
||||
534 | public function renderFile() |
||||
535 | { |
||||
536 | $fileName = $this->getFileName(); |
||||
537 | $path = $this->getUploadPath() . '/' . $fileName; |
||||
538 | $created = $this->getCreated(); |
||||
539 | $notCreated = $this->getNotCreated(); |
||||
540 | $folderName = $this->getFolderName(); |
||||
541 | $mode = $this->getMode(); |
||||
542 | $ret = ''; |
||||
543 | if (!$this->xf->__construct($path, true)) { |
||||
544 | // Force to create file if not exist |
||||
545 | if ($this->xf->open($mode, true)) { |
||||
546 | if ($this->xf->writable()) { |
||||
547 | // Integration of the content in the file |
||||
548 | if (!$this->xf->write($this->getContent(), $mode, true)) { |
||||
549 | $ret .= \sprintf($notCreated, $fileName, $folderName); |
||||
0 ignored issues
–
show
$notCreated of type boolean is incompatible with the type string expected by parameter $format of sprintf() .
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||
550 | $GLOBALS['xoopsTpl']->assign('created', false); |
||||
551 | return $ret; |
||||
552 | } |
||||
553 | // Created |
||||
554 | $ret .= \sprintf($created, $fileName, $folderName); |
||||
555 | $GLOBALS['xoopsTpl']->assign('created', true); |
||||
556 | $this->xf->close(); |
||||
557 | } else { |
||||
558 | $ret .= \sprintf($notCreated, $fileName, $folderName); |
||||
559 | $GLOBALS['xoopsTpl']->assign('created', false); |
||||
560 | } |
||||
561 | } else { |
||||
562 | $ret .= \sprintf($notCreated, $fileName, $folderName); |
||||
563 | $GLOBALS['xoopsTpl']->assign('created', false); |
||||
564 | } |
||||
565 | } |
||||
566 | |||||
567 | return $ret; |
||||
568 | } |
||||
569 | } |
||||
570 |