Passed
Push — main ( 3310d4...08974e )
by Thierry
02:20
created

DbAdminPackage::getScript()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 4
nc 1
nop 0
dl 0
loc 6
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace Lagdo\DbAdmin\Db;
4
5
use Lagdo\DbAdmin\Ajax\Admin\Admin;
6
use Jaxon\Plugin\AbstractPackage;
7
use Jaxon\Plugin\CssCode;
8
use Jaxon\Plugin\CssCodeGeneratorInterface;
9
use Jaxon\Plugin\JsCode;
10
use Jaxon\Plugin\JsCodeGeneratorInterface;
11
12
use function in_array;
13
use function is_array;
14
use function realpath;
15
use function Jaxon\cl;
16
use function Jaxon\rq;
17
18
/**
19
 * Jaxon DbAdmin package
20
 */
21
class DbAdminPackage extends AbstractPackage implements CssCodeGeneratorInterface, JsCodeGeneratorInterface
22
{
23
    /**
24
     * Get the path to the config file
25
     *
26
     * @return string|array
27
     */
28
    public static function config(): string
29
    {
30
        return realpath(__DIR__ . '/../config/dbadmin.php');
31
    }
32
33
    /**
34
     * Get the database servers
35
     *
36
     * @return array
37
     */
38
    public function getServers(): array
39
    {
40
        return $this->getOption('servers', []);
41
    }
42
43
    /**
44
     * Get the name of a given server
45
     *
46
     * @param string $server    The server name in the configuration
47
     *
48
     * @return string
49
     */
50
    public function getServerName(string $server): string
51
    {
52
        return $this->getOption("servers.$server.name", '');
53
    }
54
55
    /**
56
     * Get a given server options
57
     *
58
     * @param string $server    The server name in the configuration
59
     *
60
     * @return array
61
     */
62
    public function getServerOptions(string $server): array
63
    {
64
        return $this->getOption("servers.$server", []);
65
    }
66
67
    /**
68
     * Get the driver of a given server
69
     *
70
     * @param string $server    The server name in the configuration
71
     *
72
     * @return string
73
     */
74
    public function getServerDriver(string $server): string
75
    {
76
        return $this->getOption("servers.$server.driver", '');
77
    }
78
79
    /**
80
     * Check if the user has access to a server
81
     *
82
     * @param string $server      The database server
83
     *
84
     * return bool
85
     */
86
    public function getServerAccess(string $server): bool
87
    {
88
        // Check in server options
89
        $serverAccess = $this->getOption("servers.$server.access.server", null);
90
        if($serverAccess === true || $serverAccess === false)
91
        {
92
            return $serverAccess;
93
        }
94
        // Check in global options
95
        return $this->getOption('access.server', true) === true;
96
    }
97
98
    /**
99
     * @return bool
100
     */
101
    public function hasAuditDatabase(): bool
102
    {
103
        $options = $this->getOption('audit.database');
104
        return is_array($options) && isset($options['driver']) &&
105
            in_array($options['driver'], ['pgsql', 'mysql', 'sqlite']);
106
    }
107
108
    /**
109
     * @inheritDoc
110
     */
111
    public function getCssCode(): CssCode
112
    {
113
        $sCode = "/* Spinner CSS code. */\n" .
114
            $this->view()->render('dbadmin::codes::spin.css') .
115
            "\n/* DbAdmin CSS code. */\n" .
116
            $this->view()->render('dbadmin::codes::styles.css');
117
118
        return new CssCode($sCode);
119
    }
120
121
    /**
122
     * @inheritDoc
123
     */
124
    public function getJsCode(): JsCode
125
    {
126
        $html = $this->view()->render('dbadmin::codes::js.html');
127
        $code = "// Spinner javascript code.\n\n" .
128
            $this->view()->render('dbadmin::codes::spin.js') . "\n\n" .
129
            $this->view()->render('dbadmin::codes::script.js') . "\n\n" .
130
            $this->view()->render('dbadmin::codes::editor.js');
131
132
        return new JsCode(sCode: $code, sHtml: $html);
133
    }
134
135
    /**
136
     * Get the javascript code to include into the page
137
     *
138
     * The code must NOT be enclosed in HTML tags.
139
     *
140
     * @return string
141
     */
142
    public function getReadyScript(): string
143
    {
144
        $defaultServer = $this->getOption('default');
145
        return !$defaultServer ||
146
            !$this->getOption("servers.$defaultServer") ? '' :
147
                rq(Admin::class)->server($defaultServer);
148
    }
149
150
    /**
151
     * Get the HTML code of the package home page
152
     *
153
     * @return string
154
     */
155
    public function getHtml(): string
156
    {
157
        return cl(Admin::class)->html();
158
    }
159
}
160