From 0ed7b6b0582af432f7bf39208485c0e061983dc9 Mon Sep 17 00:00:00 2001 From: Zemistr Date: Thu, 18 Sep 2014 12:09:54 +0200 Subject: [PATCH] Improved plugin to display JSON values as the table in edit form --- plugins/json-column.php | 43 +++++++++++++++++++++++++++++++++-------- 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/plugins/json-column.php b/plugins/json-column.php index 2bb09770..1343114e 100644 --- a/plugins/json-column.php +++ b/plugins/json-column.php @@ -3,19 +3,46 @@ /** Display JSON values as table in edit * @link http://www.adminer.org/plugins/#use * @author Jakub Vrana, http://www.vrana.cz/ +* @author Martin Zeman (Zemistr), http://www.zemistr.eu/ * @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 AdminerJsonColumn { - - function editInput($table, $field, $attrs, $value) { - if (substr($value, 0, 1) == '{' && ($json = json_decode($value, true))) { - echo ""; - foreach ($json as $key => $val) { - echo "
" . h($key) . "" . h(json_encode($val)) . ""; - } - echo "
"; + private function _testJson($value) { + if ((substr($value, 0, 1) == '{' || substr($value, 0, 1) == '[') && ($json = json_decode($value, true))) { + return $json; } + return $value; } + private function _buildTable($json) { + echo ''; + foreach ($json as $key => $val) { + echo ''; + echo ''; + echo ''; + echo ''; + } + echo '
' . h($key) . ''; + if (is_scalar($val) || $val === null) { + if (is_bool($val)) { + $val = $val ? 'true' : 'false'; + } elseif ($val === null) { + $val = 'null'; + } elseif (!is_numeric($val)) { + $val = '"' . h(addcslashes($val, "\r\n\"")) . '"'; + } + echo '' . $val . ''; + } else { + $this->_buildTable($val); + } + echo '
'; + } + + function editInput($table, $field, $attrs, $value) { + $json = $this->_testJson($value); + if ($json !== $value) { + $this->_buildTable($json); + } + } }