]> git.joonet.de Git - adminer.git/commitdiff
Plugin: Use <select> on custom user types in psql
authorAdam Kuśmierz <kusmierz@users.noreply.github.com>
Wed, 29 Jun 2016 16:34:58 +0000 (18:34 +0200)
committerJakub Vrana <jakub@vrana.cz>
Sat, 18 Feb 2017 17:01:17 +0000 (18:01 +0100)
plugins/enum-types.php [new file with mode: 0644]

diff --git a/plugins/enum-types.php b/plugins/enum-types.php
new file mode 100644 (file)
index 0000000..06eb876
--- /dev/null
@@ -0,0 +1,50 @@
+<?php
+
+/** Use <select><option> for enum edit instead of regular input text on enum type in PostgreSQL
+ * @link https://www.adminer.org/plugins/#use
+ * @author Adam Kuśmierz, http://kusmierz.be/
+ * @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)
+ */
+class AdminerEnumTypes {
+       var $_types = null;
+
+       function editInput($table, $field, $attrs, $value) {
+               // PostgreSQL only
+               if (!in_array(strtolower(connection()->extension), array('pgsql', 'pdo_pgsql'))) {
+                       return;
+               }
+
+               // read types and "cache" it
+               if (is_null($this->_types)) {
+                       $types = types();
+                       $this->_types = array();
+
+                       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 = array("" => array("" => "NULL")) + $options;
+                               if ($value === null && !isset($_GET["select"])) {
+                                       $selected = "";
+                               }
+                       }
+                       if (isset($_GET["select"])) {
+                               $options = array("" => array(-1 => lang('original'))) + $options;
+                       }
+
+                       return "<select$attrs>" . optionlist($options, (string) $selected, 1) . "</select>";
+               }
+       }
+
+}