]> git.joonet.de Git - adminer.git/commitdiff
Move backward keys to Editor
authorjakubvrana <jakubvrana@7c3ca157-0c34-0410-bff1-cbf682f78f5c>
Wed, 23 Sep 2009 14:28:06 +0000 (14:28 +0000)
committerjakubvrana <jakubvrana@7c3ca157-0c34-0410-bff1-cbf682f78f5c>
Wed, 23 Sep 2009 14:28:06 +0000 (14:28 +0000)
git-svn-id: https://adminer.svn.sourceforge.net/svnroot/adminer/trunk@1134 7c3ca157-0c34-0410-bff1-cbf682f78f5c

adminer/include/adminer.inc.php
adminer/select.inc.php
editor/include/adminer.inc.php

index 6d1cc457662df5dfa1771c8f1398df06264f962c..ebe8969d8541e9132ce53f826a2d93238cd2c6cc 100644 (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");
index a698e16dd75f8ce53db660dc1e6bfde1d7aa7706..ad77fdb66ff6240f0101ef51fc06aa5da5725079 100644 (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";
index aebe2920e1915f2bf0f065bb5d1589cc0e9785ee..52e0d5703fd62259d3aedb69c0038299cee7a0f0 100644 (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) {