diff --git a/adminer/include/adminer.inc.php b/adminer/include/adminer.inc.php index 0dee1711..2b3158f5 100644 --- a/adminer/include/adminer.inc.php +++ b/adminer/include/adminer.inc.php @@ -723,10 +723,30 @@ class Adminer { */ function editInput($table, $field, $attrs, $value) { if ($field["type"] == "enum") { - return (isset($_GET["select"]) ? " " : "") - . ($field["null"] ? " " : "") - . enum_input("radio", $attrs, $field, $value, 0) // 0 - empty - ; + $options = array(); + $selected = $value; + if (isset($_GET["select"])) { + $options[-1] = lang('original'); + if ($selected === null) { + $selected = -1; + } + } + if ($field["null"]) { + $options[""] = "NULL"; + if ($value === null && !isset($_GET["select"])) { + $selected = ""; + } + } + $options[0] = lang('empty'); + preg_match_all("~'((?:[^']|'')*)'~", $field["length"], $matches); + foreach ($matches[1] as $i => $val) { + $val = stripcslashes(str_replace("''", "'", $val)); + $options[$i + 1] = $val; + if ($value === $val) { + $selected = $i + 1; + } + } + return "" . optionlist($options, (string) $selected, 1) . ""; // 1 - use keys } return ""; } diff --git a/editor/include/adminer.inc.php b/editor/include/adminer.inc.php index 01b636c1..8d39551c 100644 --- a/editor/include/adminer.inc.php +++ b/editor/include/adminer.inc.php @@ -478,9 +478,30 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5 function editInput($table, $field, $attrs, $value) { if ($field["type"] == "enum") { - return (isset($_GET["select"]) ? " " : "") - . enum_input("radio", $attrs, $field, ($value || isset($_GET["select"]) ? $value : 0), ($field["null"] ? "" : null)) - ; + $options = array(); + $selected = $value; + if (isset($_GET["select"])) { + $options[-1] = lang('original'); + if ($selected === null) { + $selected = -1; + } + } + if ($field["null"]) { + $options[""] = "NULL"; + if ($value === null && !isset($_GET["select"])) { + $selected = ""; + } + } + $options[0] = lang('empty'); + preg_match_all("~'((?:[^']|'')*)'~", $field["length"], $matches); + foreach ($matches[1] as $i => $val) { + $val = stripcslashes(str_replace("''", "'", $val)); + $options[$i + 1] = $val; + if ($value === $val) { + $selected = $i + 1; + } + } + return "" . optionlist($options, (string) $selected, 1) . ""; // 1 - use keys } $options = $this->_foreignKeyOptions($table, $field["field"], $value); if ($options !== null) { diff --git a/plugins/enum-option.php b/plugins/enum-option.php index cc82a125..6069a671 100644 --- a/plugins/enum-option.php +++ b/plugins/enum-option.php @@ -5,9 +5,10 @@ * @author Jakub Vrana, https://www.vrana.cz/ * @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) +* @depreacted 4.8.4 is now default behavior */ class AdminerEnumOption { - + function editInput($table, $field, $attrs, $value) { if ($field["type"] == "enum") { $options = array(); @@ -36,5 +37,5 @@ class AdminerEnumOption { return "" . optionlist($options, (string) $selected, 1) . ""; // 1 - use keys } } - + }