Move backward keys to Editor

git-svn-id: https://adminer.svn.sourceforge.net/svnroot/adminer/trunk@1134 7c3ca157-0c34-0410-bff1-cbf682f78f5c
This commit is contained in:
jakubvrana 2009-09-23 14:28:06 +00:00
parent 06ce6828b1
commit 09e93ded96
3 changed files with 46 additions and 32 deletions

View file

@ -88,12 +88,21 @@ class Adminer {
/** Find backward keys for table
* @param string
* @return array $return[$target_table][$key_name][$target_column] = $source_column;
* @param string
* @return array $return[$target_table]["keys"][$key_name][$target_column] = $source_column; $return[$target_table]["name"] = $this->tableName($target_table);
*/
function backwardKeys($table) {
function backwardKeys($table, $tableName) {
return array();
}
/** Print backward keys for row
* @param array result of $this->backwardKeys()
* @param array
* @return null
*/
function backwardKeysPrint($backwardKeys, $row) {
}
/** Query printed in select before execution
* @param string query to be executed
* @return string
@ -461,7 +470,7 @@ class Adminer {
</p>
</form>
<?php
$this->printTables($missing);
$this->tablesPrint($missing);
}
}
@ -469,7 +478,7 @@ class Adminer {
* @param string can be "db" if there is no database selected
* @return null
*/
function printTables($missing) {
function tablesPrint($missing) {
global $connection;
if ($missing != "db" && strlen(DB) && $connection->select_db(DB)) {
$result = $connection->query("SHOW TABLES");

View file

@ -174,16 +174,7 @@ if (!$columns) {
: count($rows)
);
$backward_keys = $adminer->backwardKeys($TABLE);
$table_names = array();
if ($backward_keys) {
foreach ($backward_keys as $key => $val) {
$val = $adminer->tableName(table_status($key));
if (strlen($val)) {
$table_names[$key] = (preg_match('(^' . preg_quote($table_name) . '(:|\\s*-)?\\s+(.+))', $val, $match) ? $match[2] : $val);
}
}
}
$backward_keys = $adminer->backwardKeys($TABLE, $table_name);
echo "<table cellspacing='0' class='nowrap' onclick='table_click(event);'>\n";
echo "<thead><tr><td><input type='checkbox' id='all-page' onclick='form_check(this, /check/);'>";
@ -201,7 +192,7 @@ if (!$columns) {
}
next($select);
}
echo ($table_names ? "<th>" . lang('Relations') : "") . "</thead>\n";
echo ($backward_keys ? "<th>" . lang('Relations') : "") . "</thead>\n";
foreach ($adminer->rowDescriptions($rows, $foreign_keys) as $n => $row) {
$unique_idf = implode('&amp;', unique_idf($rows[$n], $indexes));
echo "<tr" . odd() . "><td><input type='checkbox' name='check[]' value='$unique_idf'" . (in_array(str_replace("&amp;", "&", $unique_idf), (array) $_POST["check"]) ? " checked" : "") . " onclick=\"this.form['all'].checked = false; form_uncheck('all-page');\">" . (count($select) != count($group) || information_schema(DB) ? '' : " <a href='" . h(ME) . "edit=" . urlencode($TABLE) . "&amp;$unique_idf'>" . lang('edit') . "</a>");
@ -245,19 +236,7 @@ if (!$columns) {
echo "<td>$val";
}
}
if ($table_names) {
echo "<td>";
foreach ($table_names as $table => $name) {
foreach ($backward_keys[$table] as $cols) {
$link = ME . 'select=' . urlencode($table);
$i = 0;
foreach ($cols as $column => $val) {
$link .= where_link($i++, $column, $rows[$n][$val]);
}
echo " <a href='" . h($link) . "'>$name</a>";
}
}
}
$adminer->backwardKeysPrint($backward_keys, $rows[$n]);
echo "\n";
}
echo "</table>\n";

View file

@ -46,7 +46,7 @@ class Adminer {
}
}
function backwardKeys($table) {
function backwardKeys($table, $tableName) {
global $connection;
$return = array();
$result = $connection->query("SELECT TABLE_NAME, CONSTRAINT_NAME, COLUMN_NAME, REFERENCED_COLUMN_NAME
@ -57,12 +57,38 @@ AND REFERENCED_TABLE_NAME = " . $connection->quote($table) . "
ORDER BY ORDINAL_POSITION"); //! requires MySQL 5
if ($result) {
while ($row = $result->fetch_assoc()) {
$return[$row["TABLE_NAME"]][$row["CONSTRAINT_NAME"]][$row["COLUMN_NAME"]] = $row["REFERENCED_COLUMN_NAME"];
$return[$row["TABLE_NAME"]]["keys"][$row["CONSTRAINT_NAME"]][$row["COLUMN_NAME"]] = $row["REFERENCED_COLUMN_NAME"];
}
}
foreach ($return as $key => $val) {
$name = $this->tableName(table_status($key));
if (strlen($name)) {
$search = preg_quote($tableName);
$separator = "(:|\\s*-)?\\s+";
$return[$key]["name"] = (preg_match("(^$search$separator(.+)|^(.+?)$separator$search\$)", $name, $match) ? $match[2] . $match[3] : $name);
} else {
unset($return[$key]);
}
}
return $return;
}
function backwardKeysPrint($backwardKeys, $row) {
if ($backwardKeys) {
echo "<td>";
foreach ($backwardKeys as $table => $backwardKey) {
foreach ($backwardKey["keys"] as $cols) {
$link = ME . 'select=' . urlencode($table);
$i = 0;
foreach ($cols as $column => $val) {
$link .= where_link($i++, $column, $row[$val]);
}
echo " <a href='" . h($link) . "'>$backwardKey[name]</a>";
}
}
}
}
function selectQuery($query) {
return "<!-- " . str_replace("--", "--><!--", $query) . " -->\n";
}
@ -389,11 +415,11 @@ ORDER BY ORDINAL_POSITION"); //! requires MySQL 5
</p>
</form>
<?php
$this->printTables($missing);
$this->tablesPrint($missing);
}
}
function printTables($missing) {
function tablesPrint($missing) {
if ($missing != "db") {
$table_status = table_status();
if (!$table_status) {