Last active
March 16, 2025 06:41
-
-
Save marcbln/22dd713966cbda67af2e6bfc465a5c46 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
use Symfony\Component\VarDumper\Cloner\VarCloner; | |
use Symfony\Component\VarDumper\Dumper\AbstractDumper; | |
use Symfony\Component\VarDumper\Dumper\HtmlDumper; | |
/** | |
* Uses symfony's var-dumper for pretty treeview of decoded json in table and edit view. | |
* needs symfony/var-dumper, install with: | |
* | |
* composer require symfony/var-dumper:5.0.8 | |
* | |
* in the file, where you add the plugins to adminer, add composer's autoloader: | |
* | |
* include __DIR__ . "/vendor/autoload.php"; | |
* | |
* 05/2020 v1.0.0 | |
* | |
* @link https://www.adminer.org/plugins/#use | |
* @author Marc Christenfeldt, https://www.christenfeldt-edv.de/ | |
* @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 AdminerJsonVarDumper | |
{ | |
private $theme; | |
/** | |
* @param string $theme 'light' or 'dark' | |
*/ | |
public function __construct(string $theme = 'light') | |
{ | |
$this->theme = $theme; | |
} | |
private function _decodeJson($value) | |
{ | |
if ((substr($value, 0, 1) == '{' || substr($value, 0, 1) == '[')) { | |
return json_decode($value, true); | |
} | |
return null; | |
} | |
private function _getDump($obj, string $title = null) | |
{ | |
$cloner = new VarCloner(); | |
$dumper = new HtmlDumper(null, null, AbstractDumper::DUMP_LIGHT_ARRAY); | |
$dumper->setTheme($this->theme); | |
$html = $dumper->dump($cloner->cloneVar($obj), true, ['maxDepth' => 0]); | |
$html = str_replace('<script>', '<script ' . nonce() . '>', $html); | |
if (!is_null($title)) { | |
$html = preg_replace('#(<pre class=sf-dump.*?)>#', '$1 style="z-index:0" >' . $title, $html); | |
} | |
return $html; | |
} | |
function selectVal(&$val, $link, $field, $original) | |
{ | |
if (($json = $this->_decodeJson($original)) !== null) { | |
$val = $this->_getDump($json, $val); | |
} | |
} | |
function editInput($table, $field, $attrs, $value) | |
{ | |
if (($json = $this->_decodeJson($value)) !== null) { | |
echo $this->_getDump($json); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Adminer 5 wrapped itself into a namespace and plugins now need to call Adminer's functions via this namespace.
Please update this Gist to this: https://gist.github.com/vrana/22db840902f85ebdb9fec3d6f5c1259c