39 lines
1.2 KiB
PHP
39 lines
1.2 KiB
PHP
<?php
|
|
|
|
/** Select foreign key in edit form
|
|
* @link https://www.adminer.org/plugins/#use
|
|
* @author Jakub Vrana, http://www.vrana.cz/
|
|
* @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 AdminerEditForeign {
|
|
var $_limit;
|
|
|
|
function __construct($limit = 0) {
|
|
$this->_limit = $limit;
|
|
}
|
|
|
|
function editInput($table, $field, $attrs, $value) {
|
|
static $foreignTables = array();
|
|
static $values = array();
|
|
$foreignKeys = &$foreignTables[$table];
|
|
if ($foreignKeys === null) {
|
|
$foreignKeys = column_foreign_keys($table);
|
|
}
|
|
foreach ((array) $foreignKeys[$field["field"]] as $foreignKey) {
|
|
if (count($foreignKey["source"]) == 1) {
|
|
$target = $foreignKey["table"];
|
|
$id = $foreignKey["target"][0];
|
|
$options = &$values[$target][$id];
|
|
if (!$options) {
|
|
$options = array("" => "") + get_vals("SELECT " . idf_escape($id) . " FROM " . table($target) . " ORDER BY 1");
|
|
if ($this->_limit && count($options) - 1 > $this->_limit) {
|
|
return;
|
|
}
|
|
}
|
|
return "<select$attrs>" . optionlist($options, $value) . "</select>";
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|