This repository was archived by the owner on Apr 17, 2024. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 19
/
Copy pathenum_types.php
64 lines (57 loc) · 1.92 KB
/
enum_types.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
<?php declare(strict_types=1);
/** Use <select><option> for enum edit instead of regular input text on enum type in PostgreSQL
*
* @see https://www.adminer.org/plugins/#use
*
* @author Adam Kuśmierz, http://kusmierz.be/
* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
*/
class AdminerEnumTypes
{
public $_types = null;
/**
* @param $table
* @param $field
* @param $attrs
* @param $value
*
* @return string|void
*/
public function editInput($table, $field, $attrs, $value)
{
// PostgreSQL only
if (!in_array(strtolower(connection()->extension), [
'pgsql',
'pdo_pgsql',
])) {
return;
}
// read types and "cache" it
if (is_null($this->_types)) {
$types = types();
$this->_types = [];
foreach ($types as $type) {
$values = get_vals("SELECT unnest(enum_range(NULL::$type))::text AS value");
if (!empty($values) && is_array($values)) {
$this->_types[$type] = $values;
}
}
}
if (array_key_exists($field['type'], $this->_types)) {
$options = $this->_types[$field['type']];
$options = array_combine($options, $options);
$selected = $value;
if ($field['null']) {
$options = ['' => ['' => 'NULL']] + $options;
if ($value === null && !isset($_GET['select'])) {
$selected = '';
}
}
if (isset($_GET['select'])) {
$options = ['' => [-1 => lang('original')]] + $options;
}
return "<select$attrs>" . optionlist($options, (string) $selected, 1) . '</select>';
}
}
}