Files
base-deploy/services/adminer/idsmk-edit-foreign.php
T
2026-04-28 22:59:35 +03:00

93 lines
2.8 KiB
PHP

<?php
/**
* Select foreign key in edit form
* @link https://www.adminer.org/plugins/#use
* @author WiRight, IDSMK
* @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 AdminerIDSMKEditForeign extends Adminer\Plugin {
protected $limit;
function __construct($limit = 0) {
$this->limit = $limit;
}
function editInput($table, $field, $attrs, $value) {
static $foreignTables = [];
static $values = [];
$foreignKeys = &$foreignTables[$table];
if ($foreignKeys === null) {
$foreignKeys = Adminer\column_foreign_keys($table);
}
$titleFields = [
'name',
'title',
'nickname',
'email',
];
$titleFieldName = null;
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) {
$column = Adminer\idf_escape($id);
if (preg_match('~binary~', $field["type"])) {
$column = "HEX($column)";
}
$selectFields = [
$column,
];
$targetFields = array_keys(Adminer\fields($target));
foreach ($targetFields as $targetField) {
if (in_array($targetField, $titleFields)) {
$selectFields[] = Adminer\idf_escape($targetField);
$titleFieldName = $targetField;
break;
}
}
$rows = Adminer\get_rows('SELECT ' . implode(',', $selectFields) . ' FROM ' . Adminer\table($target) . ' ORDER BY 1');
$options = [
'',
];
foreach ($rows as $row) {
$options[$row[$id]] = $row[$titleFieldName ?? $id];
}
if ($this->limit && count($options) - 1 > $this->limit) {
return;
}
}
return "<select$attrs>" . Adminer\optionlist($options, $value, true) . "</select>";
}
}
}
protected $translations = [
'cs' => ['' => 'Výběr cizího klíče v editačním formuláři'],
'de' => ['' => 'Wählen Sie im Bearbeitungsformular den Fremdschlüssel aus'],
'pl' => ['' => 'Wybierz klucz obcy w formularzu edycji'],
'ro' => ['' => 'Selectați cheia străină în formularul de editare'],
'ja' => ['' => '外部キーを編集フォームで選択'],
'ru' => ['' => 'Выбор внешнего ключа при редактировании таблицы (с подстановкой Title)'],
];
}