Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save scr4bble/b472f3683b7e03200df60c7366f08b97 to your computer and use it in GitHub Desktop.

Select an option

Save scr4bble/b472f3683b7e03200df60c7366f08b97 to your computer and use it in GitHub Desktop.
Adminer plugin that displays the first CHAR/VARCHAR/ENUM column of the foreign key
<?php
/**
* Adminer plugin that displays the first CHAR/VARCHAR/ENUM column of the foreign key
*
* @category Plugin
* @link http://www.adminer.org/plugins/#use
* @author Bruno VIBERT <http://www.netapsys.fr>
* @modified by Peter Hostačný <hostacny.peter AT gmail.com>
* @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 AdminerDisplayForeignKeyName
{
protected static $_valueCache = array();
/**
* Get a cache entry
*/
protected static function _getCache($key)
{
if (array_key_exists($key, self::$_valueCache)) {
return self::$_valueCache[$key];
}
return false;
}
/**
* Set a cache entry
*/
protected static function _setCache($key, $value)
{
self::$_valueCache[$key] = $value;
}
/**
* Render a foreign key value
*/
function selectVal($val, $link, $field, $original)
{
$return = ($val === null ? "<i>NULL</i>" : (preg_match("~char|binary~", $field["type"]) && !preg_match("~var~", $field["type"]) ? "<code>$val</code>" : $val));
if (preg_match('~blob|bytea|raw|file~', $field["type"]) && !Adminer\is_utf8($val)) {
$return = Adminer\lang('%d byte(s)', strlen($original));
} else {
parse_str(substr($link, 1), $params);
if (true == is_array($params) && true == array_key_exists('where', $params) && !preg_match("~var~", $field["type"])) {
$where = array();
foreach ($params['where'] as $param) {
if (!is_array($param)) {
return ($link ? "<a href='" . Adminer\h($link) . "'" . (Adminer\is_url($link) ? " rel='noreferrer'" : "") . ">$return</a>" : $return);
}
$where[] = join(' ', $param);
}
// Find the first char/varchar/enum field to display
$fieldName = false;
foreach (Adminer\fields($params['select']) as $field) {
if (true == in_array($field['type'], array('char', 'varchar', 'enum'))) {
$fieldName = $field['field'];
break;
}
}
if (false !== $fieldName) {
$query = sprintf('SELECT %s FROM %s WHERE %s LIMIT 1', $fieldName, $params['select'], join(' AND ', $where));
$return = self::_getCache(md5($query));
if (false === $return) {
$result = Adminer\connection()->query($query);
if ($result->num_rows == 1) {
$row = $result->fetch_assoc();
$value = $row[$fieldName];
$length = (isset($_GET['text_length'])) ? (int) $_GET['text_length'] : 100;
if (strlen($value) > $length)
$value = substr($value, 0, $length) . '...';
$return = sprintf('<strong>[%s]</strong> %s', $original, $value);
self::_setCache(md5($query), $return);
}
}
}
}
}
return ($link ? "<a href='" . Adminer\h($link) . "'" . (Adminer\is_url($link) ? " rel='noreferrer'" : "") . ">$return</a>" : $return);
}
}
@scr4bble
Copy link
Copy Markdown
Author

I have updated the file.

  1. Fixed error: PHP Fatal error: Uncaught TypeError: join(): Argument #2 ($array) must be of type ?array, string given.
  2. VSCode auto-linting for better consistency in style

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment