/** 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
</p>
</form>
<?php
- $this->printTables($missing);
+ $this->tablesPrint($missing);
}
}
* @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");
: 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/);'>";
}
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('&', unique_idf($rows[$n], $indexes));
echo "<tr" . odd() . "><td><input type='checkbox' name='check[]' value='$unique_idf'" . (in_array(str_replace("&", "&", $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) . "&$unique_idf'>" . lang('edit') . "</a>");
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";
}
}
- function backwardKeys($table) {
+ function backwardKeys($table, $tableName) {
global $connection;
$return = array();
$result = $connection->query("SELECT TABLE_NAME, CONSTRAINT_NAME, COLUMN_NAME, REFERENCED_COLUMN_NAME
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";
}
</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) {