Initial commit
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
<?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)'],
|
||||
];
|
||||
}
|
||||
Reference in New Issue
Block a user