-
Notifications
You must be signed in to change notification settings - Fork 0
/
login-options.php
138 lines (126 loc) · 5.57 KB
/
login-options.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
<?php
/** Display list of servers and their parameters and allows immediately login or automatically fill parameters into inputs
*
* PARAMS:
* label (compulsory) - label of server which is displayed
* server, username, password, database, pernament - values which will be filled
* immediate_login - login immediately after server is chosen otherwise only values are filled into inputs
* confirm - confirm that you really want choose server (for example: confirm="Warning! This is production database")
* focus - name of input which will be focused after server is chosen (for example: focus="password")
*
* @link https://www.adminer.org/plugins/#use
* @author Jan Bareš, http://www.janbares.cz/
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
* @version 1.0.0
*/
class AdminerLoginOptions {
const RENDER_SELECT = "render_select";
const RENDER_LIST = "render_list";
/** @access protected */
var $servers, $immediate_login, $render_mode;
/** Set options
* @param array array(array("name" => string[, "server" => string, "username" => string, "password" => string, "database" => string, "pernament" => bool, "immediate-login"=>bool, "confirm"=>string, "focus"=>string]))
* @param bool $immediate_login value of immediate login, every server can override it
* @param string $render_mode render as list or select
*/
function __construct($servers, $immediate_login = true, $render_mode = self::RENDER_LIST) {
$this->servers = $servers;
$this->immediate_login = $immediate_login;
$this->render_mode = $render_mode;
}
function head(){
?>
<script type="text/javascript">
function fill_login_form(item){
if(item.dataset.confirm === undefined || confirm(item.dataset.confirm)){
document.getElementsByName("auth[server]")[0].value = item.dataset.server !== undefined ? item.dataset.server : "";
document.getElementsByName("auth[username]")[0].value = username = item.dataset.username !== undefined ? username = item.dataset.username : "";
document.getElementsByName("auth[password]")[0].value = item.dataset.password !== undefined ? item.dataset.password : "";
document.getElementsByName("auth[db]")[0].value = item.dataset.database !== undefined ? item.dataset.database : "";
document.getElementsByName("auth[permanent]")[0].checked = item.dataset.pernament === "true";
var driver = item.dataset.driver;
if(driver !== undefined){
var driverSelect = document.getElementsByName("auth[driver]")[0];
for(var i = 0;i<driverSelect.options.length;i++){
var driverOption = driverSelect.options[i];
if(driverOption.value === driver){
driverOption.selected = true;
}
}
if(typeof driverSelect.onchange === "function"){
driverSelect.onchange();
}
}
if(item.dataset.focus !== undefined){
document.getElementsByName("auth["+item.dataset.focus+"]")[0].focus();
}
var immediate_login = item.dataset.immediateLogin !== undefined ? (item.dataset.immediateLogin === "true") : <?= $this->immediate_login?"true":"false";?>
if(immediate_login){
var parent = item.parentNode;
while(parent.nodeName.toLowerCase() !== "form" && parent.nodeName.toLowerCase() !== "html"){
parent = parent.parentNode;
}
if(parent.nodeName.toLowerCase() === "form"){
parent.submit();
}
}
}
}
</script>
<?php
}
function loginForm() {
?>
<table cellspacing="0">
<tr>
<th><?php echo lang('Database'); ?></th>
<td>
<?php if($this->render_mode === self::RENDER_LIST): ?>
<ul style="list-style-type: none;">
<?php else: ?>
<select onchange="fill_login_form(this.options[this.selectedIndex]);">
<option data-immediate-login="false"></option>
<?php endif;?>
<?php
foreach($this->servers as $server) {
if(is_array($server) && array_key_exists("label", $server)){
?>
<?php if($this->render_mode === self::RENDER_LIST): ?>
<li>
<a onclick="fill_login_form(this)" style="cursor: pointer;"
<?php else: ?>
<option
<?php endif;?>
<?= array_key_exists("server", $server) ? 'data-server="'.$server["server"].'"':'';?>
<?= array_key_exists("username", $server) ? 'data-username="'.$server["username"].'"':'';?>
<?= array_key_exists("password", $server) ? 'data-password="'.$server["password"].'"':'';?>
<?= array_key_exists("driver", $server) ? 'data-driver="'.$server["driver"].'"':'';?>
<?= array_key_exists("database", $server) ? 'data-database="'.$server["database"].'"':'';?>
<?= array_key_exists("pernament", $server) ? 'data-pernament="'.($server["pernament"]?"true":"false").'"':'';?>
<?= array_key_exists("immediate-login", $server) ? 'data-immediate-login="'.($server["immediate-login"]?"true":"false").'"':'';?>
<?= array_key_exists("confirm", $server) ? 'data-confirm="'.$server["confirm"].'"':'';?>
<?= array_key_exists("focus", $server) ? 'data-focus="'.$server["focus"].'"':'';?>
><?= $server['label']; ?>
<?php if($this->render_mode === self::RENDER_LIST): ?>
</a>
</li>
<?php else: ?>
</option>
<?php endif;?>
<?php
}
}
?>
<?php if($this->render_mode === self::RENDER_LIST): ?>
</ul>
<?php else: ?>
</select>
<?php endif;?>
</td>
</tr>
</table>
<?php
return null;
}
}