Plugin   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 73
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 20
c 1
b 0
f 0
dl 0
loc 73
ccs 19
cts 19
cp 1
rs 10
wmc 6

4 Methods

Rating   Name   Duplication   Size   Complexity  
A onAfterRenderTemplate() 0 14 2
A generateToken() 0 3 1
A onConfigLoaded() 0 3 1
A insertVars() 0 8 2
1
<?php
2
/**
3
 * Plugin class
4
 */
5
namespace Phile\Plugin\Phile\SetupCheck;
6
7
use Phile\Core\Utility;
8
use Phile\Model\Page;
9
use Phile\Phile;
10
use Phile\Plugin\AbstractPlugin;
11
12
/**
13
 * Phile Setup Plugin Class
14
 *
15
 * @author  PhileCMS
16
 * @link    https://philecms.github.io
17
 * @license http://opensource.org/licenses/MIT
18
 * @package Phile\Plugin\Phile\PhileSetup
19
 */
20
class Plugin extends AbstractPlugin
21
{
22
    /**
23
     * @var bool setup is needed
24
     */
25
    protected $needsSetup = true;
26
27
    /**
28
     * @var array event subscription
29
     */
30
    protected $events = [
31
        'config_loaded' => 'onConfigLoaded',
32
        'after_render_template' => 'onAfterRenderTemplate'
33
    ];
34
35
    /**
36
     * 'config_loaded' event handler
37
     *
38
     * @param array $eventData
39
     * @return void
40
     */
41 34
    protected function onConfigLoaded($eventData)
42
    {
43 34
        $this->needsSetup = empty($eventData['class']->get('encryptionKey'));
44
    }
45
46
    /**
47
     * render setup message
48
     *
49
     * @param array $eventData
50
     * @return void
51
     */
52 5
    protected function onAfterRenderTemplate(array $eventData)
53
    {
54 5
        if (!$this->needsSetup) {
55 4
            return;
56
        }
57
58 1
        $engine = $eventData['templateEngine'];
59
60 1
        $page = new Page($this->getPluginPath('setup.md'));
61 1
        $vars = ['encryption_key' => $this->generateToken()];
62 1
        $this->insertVars($page, $vars);
63
64 1
        $engine->setCurrentPage($page);
65 1
        $eventData['output'] = $engine->render();
66
    }
67
68
    /**
69
     * replace twig like variables in page content
70
     *
71
     * @param Page $page
72
     * @param array $vars
73
     * @return void
74
     */
75 1
    protected function insertVars(Page $page, array $vars)
76
    {
77 1
        $content = $page->getRawContent();
78 1
        foreach ($vars as $key => $value) {
79 1
            $regex = '/\{\{(\s*?)' . $key . '(\s*?)\}\}/';
80 1
            $content = preg_replace($regex, $value, $content);
81
        }
82 1
        $page->setContent($content);
83
    }
84
85
    /**
86
     * generate encryption key
87
     *
88
     * @return string
89
     */
90 1
    protected function generateToken()
91
    {
92 1
        return Utility::generateSecureToken(64);
93
    }
94
}
95