Completed
Push — master ( e82279...672ea8 )
by Maxim
02:54
created

DLTemplate::loadTwig()   A

Complexity

Conditions 3
Paths 2

Size

Total Lines 4
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 12

Importance

Changes 0
Metric Value
eloc 3
c 0
b 0
f 0
dl 0
loc 4
ccs 0
cts 3
cp 0
rs 10
cc 3
nc 2
nop 0
crap 12
1
<?php
2
3 1
include_once(MODX_BASE_PATH . 'assets/lib/APIHelpers.class.php');
4
5
/**
6
 * Class DLTemplate
7
 */
8
class DLTemplate
9
{
10
    /**
11
     * Объект DocumentParser - основной класс MODX
12
     * @var DocumentParser $modx
13
     * @access protected
14
     */
15
    protected $modx = null;
16
17
    /**
18
     * @var DLTemplate cached reference to singleton instance
19
     */
20
    protected static $instance;
21
22
    protected $templatePath = 'assets/templates/';
23
24
    protected $templateExtension = 'html';
25
26
    /**
27
     * @var null|Twig_Environment twig object
0 ignored issues
show
Bug introduced by
The type Twig_Environment was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
28
     */
29
    protected $twig;
30
31
    protected $twigEnabled = false;
32
    protected $bladeEnabled = false;
33
        
34
    protected $templateData = array();
35
36
    public $phx;
37
38
    /**
39
     * gets the instance via lazy initialization (created on first usage)
40
     *
41
     * @return self
42
     */
43 58
    public static function getInstance(DocumentParser $modx)
44
    {
45
46 58
        if (null === self::$instance) {
47 1
            self::$instance = new self($modx);
48 1
        }
49
50 58
        return self::$instance;
51
    }
52
53
    /**
54
     * is not allowed to call from outside: private!
55
     *
56
     */
57 1
    private function __construct(DocumentParser $modx)
58
    {
59 1
        $this->modx = $modx;
60 1
    }
61
62
    /**
63
     * prevent the instance from being cloned
64
     *
65
     * @return void
66
     */
67
    private function __clone()
68
    {
69
    }
70
71
    /**
72
     * prevent from being unserialized
73
     *
74
     * @return void
75
     */
76
    private function __wakeup()
77
    {
78
    }
79
80
    public function getTemplatePath()
81
    {
82
        return $this->templatePath;
83
    }
84
85
    /**
86
     * Задает относительный путь к папке с шаблонами
87
     *
88
     * @param string $path
89
     * @param bool $supRoot
90
     * @return $this
91
     */
92
    public function setTemplatePath($path, $supRoot = false)
93
    {
94
        $path = trim($path);
95
        if ($supRoot === false) {
96
            $path = $this->cleanPath($path);
97
        }
98
99
        if (!empty($path)) {
0 ignored issues
show
Coding Style introduced by
Expected 1 space(s) after NOT operator; 0 found
Loading history...
100
            $this->templatePath = $path;
101
            if ($this->twigEnabled) {
102
                $this->twig->setLoader(new Twig_Loader_Filesystem(MODX_BASE_PATH . $path));
0 ignored issues
show
Bug introduced by
The method setLoader() does not exist on null. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

102
                $this->twig->/** @scrutinizer ignore-call */ 
103
                             setLoader(new Twig_Loader_Filesystem(MODX_BASE_PATH . $path));

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
Bug introduced by
The type Twig_Loader_Filesystem was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
103
            }
104
        }
105
106
        return $this;
107
    }
108
109
    /**
110
     * @param string $path
111
     * @return string
112
     */
113
    protected function cleanPath($path)
114
    {
115
        return preg_replace(array('/\.*[\/|\\\]/i', '/[\/|\\\]+/i'), array('/', '/'), $path);
116
    }
117
118
    public function getTemplateExtension()
119
    {
120
        return $this->templateExtension;
121
    }
122
123
    /**
124
     * Задает расширение файла с шаблоном
125
     *
126
     * @param $ext
127
     * @return $this
128
     */
129
    public function setTemplateExtension($ext)
130
    {
131
        $ext = $this->cleanPath(trim($ext, ". \t\n\r\0\x0B"));
132
133
        if (!empty($ext)) {
0 ignored issues
show
Coding Style introduced by
Expected 1 space(s) after NOT operator; 0 found
Loading history...
134
            $this->templateExtension = $ext;
135
        }
136
137
        return $this;
138
    }
139
140
    /**
141
     * Additional data for external templates
142
     *
143 58
     * @param array $data
144
     * @return $this
145 58
     */
146 58
    public function setTemplateData($data = array())
147 58
    {
148
        if (is_array($data)) {
0 ignored issues
show
introduced by
The condition is_array($data) is always true.
Loading history...
149 58
            $this->templateData = $data;
150
        }
151
152
        return $this;
153
    }
154
155
    /**
156
     * @param array $data
157
     * @return array
158
     */
159
    public function getTemplateData($data = array())
160
    {
161
        $plh = $this->templateData;
162
        $plh['data'] = $data;
163
        $plh['modx'] = $this->modx;
164
165
        return $plh;
166
    }
167
168
    /**
169
     * Сохранение данных в массив плейсхолдеров
170
     *
171
     * @param mixed $data данные
172
     * @param int $set устанавливать ли глобальнй плейсхолдер MODX
173
     * @param string $key ключ локального плейсхолдера
174
     * @param string $prefix префикс для ключей массива
175
     * @return string
176
     */
177
    public function toPlaceholders($data, $set = 0, $key = 'contentPlaceholder', $prefix = '')
178
    {
179
        $out = '';
180
        if ($set != 0) {
181
            $this->modx->toPlaceholder($key, $data, $prefix);
0 ignored issues
show
Bug introduced by
The method toPlaceholder() does not exist on DocumentParser. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

181
            $this->modx->/** @scrutinizer ignore-call */ 
182
                         toPlaceholder($key, $data, $prefix);

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
182
        } else {
183
            $out = $data;
184
        }
185
186
        return $out;
187
    }
188
189
    /**
190
     * refactor $modx->getChunk();
191
     *
192
     * @param string $name Template: chunk name || @CODE: template || @FILE: file with template
193
     * @return string html template with placeholders without data
194
     */
195
    public function getChunk($name)
0 ignored issues
show
Coding Style introduced by
Function's nesting level (5) exceeds 3; consider refactoring the function
Loading history...
196
    {
197
        $tpl = '';
198
        $ext = null;
199
        $this->bladeEnabled = substr($name, 0, 3) == '@B_';//(0 === strpos($name, '@B_'));
200
        if ($name != '' && !isset($this->modx->chunkCache[$name])) {
0 ignored issues
show
Coding Style introduced by
Expected 1 space(s) after NOT operator; 0 found
Loading history...
Bug introduced by
The property chunkCache does not seem to exist on DocumentParser.
Loading history...
201
            $mode = (preg_match(
202
                '/^((@[A-Z_]+)[:]{0,1})(.*)/Asu',
203
                trim($name),
204
                $tmp
205
            ) && isset($tmp[2], $tmp[3])) ? $tmp[2] : false;
206
            $subTmp = (isset($tmp[3])) ? trim($tmp[3]) : null;
207
            if ($this->bladeEnabled) {
208
                $mode = '@' . substr($mode, 3);
0 ignored issues
show
Bug introduced by
It seems like $mode can also be of type false; however, parameter $string of substr() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

208
                $mode = '@' . substr(/** @scrutinizer ignore-type */ $mode, 3);
Loading history...
209
                $ext = $this->getTemplateExtension();
210
                $this->setTemplateExtension('blade.php');
211
            }
212
            switch ($mode) {
213
                case '@T_FILE':
214
                    if ($subTmp != '' && $this->twigEnabled) {
215
                        $real = realpath(MODX_BASE_PATH . $this->templatePath);
216
                        $path = realpath(MODX_BASE_PATH . $this->templatePath . $this->cleanPath($subTmp) . '.' . $this->templateExtension);
217
                        if (basename($path, '.' . $this->templateExtension) !== '' &&
218
                            0 === strpos($path, $real) &&
219
                            file_exists($path)
220
                        ) {
221
                            $tpl = $this->twig->loadTemplate($this->cleanPath($subTmp) . '.' . $this->templateExtension);
222
                        }
223
                    }
224
                    break;
225
                case '@T_CODE':
226
                    if ($this->twigEnabled) {
227
                        $tpl = $tmp[3];
228
                        $tpl = $this->twig->createTemplate($tpl);
229
                    }
230
                    break;
231
                case '@FILE':
232
                    if ($subTmp != '') {
233
                        $real = realpath(MODX_BASE_PATH . $this->templatePath);
234
                        $path = realpath(MODX_BASE_PATH . $this->templatePath . $this->cleanPath($subTmp) . '.' . $this->templateExtension);
235
                        if (basename($path, '.' . $this->templateExtension) !== '' &&
236
                            0 === strpos($path, $real) &&
237
                            file_exists($path)
238
                        ) {
239
                            $tpl = file_get_contents($path);
240
                        }
241
                    }
242
                    break;
243
                case '@INLINE':
244
                case '@TPL':
245
                case '@CODE':
246
                    $tpl = $tmp[3]; //without trim
247
                    break;
248
                case '@DOCUMENT':
249
                case '@DOC':
250
                    switch (true) {
251
                        case ((int)$subTmp > 0):
252
                            $tpl = $this->modx->getPageInfo((int)$subTmp, 0, "content");
0 ignored issues
show
Bug introduced by
The method getPageInfo() does not exist on DocumentParser. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

252
                            /** @scrutinizer ignore-call */ 
253
                            $tpl = $this->modx->getPageInfo((int)$subTmp, 0, "content");

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
253
                            $tpl = isset($tpl['content']) ? $tpl['content'] : '';
254
                            break;
255
                        case ((int)$subTmp == 0):
256
                            $tpl = $this->modx->documentObject['content'];
0 ignored issues
show
Bug introduced by
The property documentObject does not seem to exist on DocumentParser.
Loading history...
257
                            break;
258
                    }
259
                    break;
260
                case '@PLH':
261
                case '@PLACEHOLDER':
262
                    if ($subTmp != '') {
263
                        $tpl = $this->modx->getPlaceholder($subTmp);
0 ignored issues
show
Bug introduced by
The method getPlaceholder() does not exist on DocumentParser. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

263
                        /** @scrutinizer ignore-call */ 
264
                        $tpl = $this->modx->getPlaceholder($subTmp);

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
264
                    }
265
                    break;
266
                case '@CFG':
267
                case '@CONFIG':
268
                case '@OPTIONS':
269
                    if ($subTmp != '') {
270
                        $tpl = $this->modx->getConfig($subTmp);
0 ignored issues
show
Bug introduced by
The method getConfig() does not exist on DocumentParser. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

270
                        /** @scrutinizer ignore-call */ 
271
                        $tpl = $this->modx->getConfig($subTmp);

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
271
                    }
272
                    break;
273
                case '@SNIPPET':
274
                    if ($subTmp != '') {
275
                        $tpl = $this->modx->runSnippet($subTmp, $this->modx->event->params);
0 ignored issues
show
Bug introduced by
The method runSnippet() does not exist on DocumentParser. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

275
                        /** @scrutinizer ignore-call */ 
276
                        $tpl = $this->modx->runSnippet($subTmp, $this->modx->event->params);

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
Bug introduced by
The property event does not seem to exist on DocumentParser.
Loading history...
276
                    }
277
                    break;
278
                case '@RENDERPAGE':
279
                    $tpl = $this->renderDoc($subTmp, false);
0 ignored issues
show
Bug introduced by
It seems like $subTmp can also be of type string; however, parameter $id of DLTemplate::renderDoc() does only seem to accept integer, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

279
                    $tpl = $this->renderDoc(/** @scrutinizer ignore-type */ $subTmp, false);
Loading history...
280
                    break;
281
                case '@LOADPAGE':
282
                    $tpl = $this->renderDoc($subTmp, true);
283
                    break;
284
                case '@TEMPLATE':
285
                    $tpl = $this->getTemplate($subTmp);
0 ignored issues
show
Bug introduced by
It seems like $subTmp can also be of type string; however, parameter $id of DLTemplate::getTemplate() does only seem to accept integer, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

285
                    $tpl = $this->getTemplate(/** @scrutinizer ignore-type */ $subTmp);
Loading history...
286
                    break;
287
                case '@CHUNK':
288
                    $tpl = $this->getBaseChunk($subTmp);
289
                    break;
290
                default:
291
                    $tpl = $this->getBaseChunk($name);
292
            }
293
            $this->modx->chunkCache[$name] = $tpl;
294
        } else {
295
            $tpl = $this->getBaseChunk($name);
296
        }
297
298
        if($ext !== null) {
0 ignored issues
show
Coding Style introduced by
Expected 1 space(s) after IF keyword; 0 found
Loading history...
299
            $this->setTemplateExtension($ext);
300
        }
301
        return $tpl;
302
    }
303
304
    protected function getBaseChunk($name)
305
    {
306
        if (empty($name)) {
307
            return null;
308
        }
309
310
        if (isset ($this->modx->chunkCache[$name])) {
0 ignored issues
show
Coding Style introduced by
Space before opening parenthesis of function call prohibited
Loading history...
Bug introduced by
The property chunkCache does not seem to exist on DocumentParser.
Loading history...
311
            $tpl = $this->modx->chunkCache[$name];
312
        } else {
313
            $table = $this->modx->getFullTableName('site_htmlsnippets');
314
            $query = $this->modx->db->query(
315
                "SELECT `snippet` FROM " . $table . " WHERE `name`='" . $this->modx->db->escape($name) . "' AND `disabled`=0"
316
            );
317
            if ($this->modx->db->getRecordCount($query) == 1) {
318
                $row = $this->modx->db->getRow($query);
319
                $tpl = $row['snippet'];
320
            } else {
321
                $tpl = null;
322
            }
323
        }
324
325
        return $tpl;
326
    }
327
328
    /**
329
     * Рендер документа с подстановкой плейсхолдеров и выполнением сниппетов
330
     *
331
     * @param int $id ID документа
332
     * @param bool $events Во время рендера документа стоит ли вызывать события OnLoadWebDocument и OnLoadDocumentObject (внутри метода getDocumentObject).
333
     * @param mixed $tpl Шаблон с которым необходимо отрендерить документ. Возможные значения:
334
     *                       null - Использовать шаблон который назначен документу
335
     *                       int(0-n) - Получить шаблон из базы данных с указанным ID и применить его к документу
336
     *                       string - Применить шаблон указанный в строке к документу
337
     * @return string
338
     *
339
     * Событие OnLoadWebDocument дополнительно передает параметры:
340
     *       - с источиком от куда произошел вызов события
341
     *       - оригинальный экземпляр класса DocumentParser
342
     */
343
    public function renderDoc($id, $events = false, $tpl = null)
344
    {
345
        $id = (int)$id;
346
        if ($id <= 0) {
347
            return '';
348
        }
349
350
        $m = clone $this->modx; //Чтобы была возможность вызывать события
351
        $m->documentIdentifier = $id;
352
        $m->documentObject = $m->getDocumentObject('id', (int)$id, $events ? 'prepareResponse' : null);
0 ignored issues
show
Bug introduced by
The method getDocumentObject() does not exist on DocumentParser. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

352
        /** @scrutinizer ignore-call */ 
353
        $m->documentObject = $m->getDocumentObject('id', (int)$id, $events ? 'prepareResponse' : null);

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
Bug introduced by
The property documentObject does not seem to exist on DocumentParser.
Loading history...
353
        if ($m->documentObject['type'] == "reference") {
354
            if (is_numeric($m->documentObject['content']) && $m->documentObject['content'] > 0) {
355
                $m->documentObject['content'] = $this->renderDoc($m->documentObject['content'], $events);
356
            }
357
        }
358
        switch (true) {
359
            case is_integer($tpl):
360
                $tpl = $this->getTemplate($tpl);
361
                break;
362
            case is_string($tpl):
363
                break;
364
            case is_null($tpl):
365
            default:
366
                $tpl = $this->getTemplate($m->documentObject['template']);
367
        }
368
        $m->documentContent = $tpl;
0 ignored issues
show
Bug introduced by
The property documentContent does not seem to exist on DocumentParser.
Loading history...
369
        if ($events) {
370
            $m->invokeEvent("OnLoadWebDocument", array(
0 ignored issues
show
Bug introduced by
The method invokeEvent() does not exist on DocumentParser. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

370
            $m->/** @scrutinizer ignore-call */ 
371
                invokeEvent("OnLoadWebDocument", array(

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
371
                'source'   => 'DLTemplate',
372
                'mainModx' => $this->modx,
373
            ));
374
        }
375
376
        return $this->parseDocumentSource($m->documentContent, $m);
377
    }
378
379
    /**
380
     * Получить содержимое шаблона с определенным номером
381
     * @param int $id Номер шаблона
382
     * @return string HTML код шаблона
383
     */
384
    public function getTemplate($id)
385
    {
386
        $tpl = null;
387
        $id = (int)$id;
388
        if ($id > 0) {
389
            $tpl = $this->modx->db->getValue("SELECT `content` FROM {$this->modx->getFullTableName("site_templates")} WHERE `id` = {$id}");
390
        }
391
        if (is_null($tpl)) {
392
            $tpl = '[*content*]';
393
        }
394
395
        return $tpl;
396
    }
397
398
    /**
399
     * refactor $modx->parseChunk();
400
     *
401
     * @param string $name Template: chunk name || @CODE: template || @FILE: file with template
402
     * @param array $data paceholder
403
     * @param bool $parseDocumentSource render html template via DocumentParser::parseDocumentSource()
404
     * @return string html template with data without placeholders
405
     */
406
    public function parseChunk($name, $data = array(), $parseDocumentSource = false, $disablePHx = false)
0 ignored issues
show
Coding Style introduced by
Function's nesting level (4) exceeds 3; consider refactoring the function
Loading history...
407
    {
408
        $out = $this->getChunk($name);
409
        $twig = strpos($name, '@T_') === 0;
410
        switch (true) {
411
            case $twig:
412
                $out = $out->render($this->getTemplateData($data));
413
                break;
414
            case $this->bladeEnabled && $out !== '' && ($blade = $this->getBlade($name, $out)):
415
                $out = $blade->with($this->getTemplateData($data))->render();
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $blade does not seem to be defined for all execution paths leading up to this point.
Loading history...
416
                break;
417
            case is_array($data) && ($out != ''):
418
                if (preg_match("/\[\+[A-Z0-9\.\_\-]+\+\]/is", $out)) {
419
                    $item = $this->renameKeyArr($data, '[', ']', '+');
420
                    $out = str_replace(array_keys($item), array_values($item), $out);
421
                }
422
                if (!$disablePHx && preg_match("/:([^:=]+)(?:=`(.*?)`(?=:[^:=]+|$))?/is", $out)) {
0 ignored issues
show
Coding Style introduced by
Expected 1 space(s) after NOT operator; 0 found
Loading history...
423
                    if (is_null($this->phx) || !($this->phx instanceof DLphx)) {
0 ignored issues
show
Coding Style introduced by
Expected 1 space(s) after NOT operator; 0 found
Loading history...
424
                        $this->phx = $this->createPHx(0, 1000);
425
                    }
426
                    $this->phx->placeholders = array();
427
                    $this->setPHxPlaceholders($data);
428
                    $out = $this->phx->Parse($out);
429
                }
430
                break;
431
        }
432
        if ($parseDocumentSource && !$twig) {
0 ignored issues
show
Coding Style introduced by
Expected 1 space(s) after NOT operator; 0 found
Loading history...
433
            $out = $this->parseDocumentSource($out);
434
        }
435
436
        return $out;
437
    }
438
439
    /**
440
     *
441
     * @param string|array $value
442
     * @param string $key
443
     * @param string $path
444
     */
445
    public function setPHxPlaceholders($value = '', $key = '', $path = '')
0 ignored issues
show
Coding Style introduced by
This method is not in camel caps format.

This check looks for method names that are not written in camelCase.

In camelCase names are written without any punctuation, the start of each new word being marked by a capital letter. Thus the name database connection seeker becomes databaseConnectionSeeker.

Loading history...
446
    {
447
        $keypath = !empty($path) ? $path . "." . $key : $key;
0 ignored issues
show
Coding Style introduced by
Expected 1 space(s) after NOT operator; 0 found
Loading history...
448
        $this->phx->curPass = 0;
449
        if (is_array($value)) {
450
            foreach ($value as $subkey => $subval) {
451
                $this->setPHxPlaceholders($subval, $subkey, $keypath);
452
            }
453
        } else {
454
            $this->phx->setPHxVariable($keypath, $value);
455
        }
456
    }
457
458
    public function loadTwig() {
459
        if (is_null($this->twig) && isset($this->modx->twig)) {
460
            $this->twig = clone $this->modx->twig;
461
            $this->twigEnabled = true;
462
        }
463
    }
464
465
    /**
466
     * Return clone of blade
467
     *
468
     * @param string $name
469
     * @param string $tpl
470
     * @return Illuminate\View\Factory
0 ignored issues
show
Bug introduced by
The type Illuminate\View\Factory was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
471
     */
472
    protected function getBlade($name, $tpl)
473
    {
474
        $out = null;
475
        try {
476
            /**
477
             * Illuminate\View\Factory $blade
478
             */
479
            $blade = $this->modx->blade;
0 ignored issues
show
Bug introduced by
The property blade does not seem to exist on DocumentParser.
Loading history...
480
            $cache = md5($name). '-'. sha1($tpl);
0 ignored issues
show
Coding Style introduced by
Concat operator must be surrounded by a single space
Loading history...
481
            $path = MODX_BASE_PATH . '/assets/cache/blade/' . $cache . '.blade.php';
482
            if (! file_exists($path)) {
483
                file_put_contents($path, $tpl);
484
            }
485
            $out = $blade->make('cache::' . $cache);
486
        } catch (\Exception $exception) {
487
            $this->modx->messageQuit($exception->getMessage());
0 ignored issues
show
Bug introduced by
The method messageQuit() does not exist on DocumentParser. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

487
            $this->modx->/** @scrutinizer ignore-call */ 
488
                         messageQuit($exception->getMessage());

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
488
        }
489
490
        return $out;
491
    }
492
493
    /**
494
     *
495
     * @param string $string
496
     * @return string
497
     */
498
    public function cleanPHx($string)
0 ignored issues
show
Coding Style introduced by
This method is not in camel caps format.

This check looks for method names that are not written in camelCase.

In camelCase names are written without any punctuation, the start of each new word being marked by a capital letter. Thus the name database connection seeker becomes databaseConnectionSeeker.

Loading history...
499
    {
500
        preg_match_all('~\[(\+|\*|\()([^:\+\[\]]+)([^\[\]]*?)(\1|\))\]~s', $string, $matches);
501
        if ($matches[0]) {
502
            $string = str_replace($matches[0], '', $string);
503
        }
504
505
        return $string;
506
    }
507
508
    /**
509
     * @param int $debug
510
     * @param int $maxpass
511
     * @return DLphx
512
     */
513
    public function createPHx($debug = 0, $maxpass = 50)
0 ignored issues
show
Coding Style introduced by
This method is not in camel caps format.

This check looks for method names that are not written in camelCase.

In camelCase names are written without any punctuation, the start of each new word being marked by a capital letter. Thus the name database connection seeker becomes databaseConnectionSeeker.

Loading history...
514
    {
515
        if (!class_exists('DLphx')) {
0 ignored issues
show
Coding Style introduced by
Expected 1 space(s) after NOT operator; 0 found
Loading history...
516
            include_once(__DIR__ . '/DLphx.class.php');
517
        }
518
519
        return new DLphx($this->modx, $debug, $maxpass);
520
    }
521
522
    /**
523
     * Переменовывание элементов массива
524
     *
525
     * @param array $data массив с данными
526
     * @param string $prefix префикс ключей
527
     * @param string $suffix суффикс ключей
528
     * @param string $sep разделитель суффиксов, префиксов и ключей массива
529
     * @return array массив с переименованными ключами
530
     */
531
    public function renameKeyArr($data, $prefix = '', $suffix = '', $sep = '.')
532
    {
533
        return APIhelpers::renameKeyArr($data, $prefix, $suffix, $sep);
534
    }
535
536
    /**
537
     * @param $out
538
     * @param DocumentParser|null $modx
539
     * @return mixed|string
540
     */
541
    public function parseDocumentSource($out, $modx = null)
542
    {
543
        if (!is_object($modx)) {
0 ignored issues
show
Coding Style introduced by
Expected 1 space(s) after NOT operator; 0 found
Loading history...
544
            $modx = $this->modx;
545
        }
546
        $_minPasses = (int)$modx->minParserPasses;
0 ignored issues
show
Bug introduced by
The property minParserPasses does not seem to exist on DocumentParser.
Loading history...
547
        $minPasses = $_minPasses <= 0 ? 2 : $_minPasses;
548
        $_maxPasses = (int)$modx->maxParserPasses;
0 ignored issues
show
Bug introduced by
The property maxParserPasses does not seem to exist on DocumentParser.
Loading history...
549
        $maxPasses = $_maxPasses <= 0 ? 10 : $_maxPasses;
550
        $modx->minParserPasses = $modx->maxParserPasses = 1;
551
        $site_status = $modx->getConfig('site_status');
552
        $modx->config['site_status'] = 0;
553
        for ($i = 1; $i <= $maxPasses; $i++) {
554
            $html = $out;
555
            if (preg_match('/\[\!(.*)\!\]/us', $out)) {
556
                $out = str_replace(array('[!', '!]'), array('[[', ']]'), $out);
557
            }
558
            if ($i <= $minPasses || $out != $html) {
559
                $out = $modx->parseDocumentSource($out);
0 ignored issues
show
Bug introduced by
The method parseDocumentSource() does not exist on DocumentParser. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

559
                /** @scrutinizer ignore-call */ 
560
                $out = $modx->parseDocumentSource($out);

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
560
            } else {
561
                break;
562
            }
563
        }
564
        $out = $modx->rewriteUrls($out);
0 ignored issues
show
Bug introduced by
The method rewriteUrls() does not exist on DocumentParser. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

564
        /** @scrutinizer ignore-call */ 
565
        $out = $modx->rewriteUrls($out);

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
565
        $out = $this->cleanPHx($out);
566
        $modx->config['site_status'] = $site_status;
567
        $modx->minParserPasses = $_minPasses;
568
        $modx->maxParserPasses = $_maxPasses;
569
        
570
        return $out;
571
    }
572
}
573