$match) { $table_pos[$match[1]] = array($match[2], $match[3]); $table_pos_js[] = "\n\t'" . js_escape($match[1]) . "': [ $match[2], $match[3] ]"; } $top = 0; $base_left = -1; $schema = array(); // table => array("fields" => array(name => field), "pos" => array(top, left), "references" => array(table => array(left => array(source, target)))) $referenced = array(); // target_table => array(table => array(left => target_column)) $lefts = array(); // float => bool foreach (table_status('', true) as $table => $table_status) { if (is_view($table_status)) { continue; } $pos = 0; $schema[$table]["fields"] = array(); foreach (fields($table) as $name => $field) { $pos += 1.25; $field["pos"] = $pos; $schema[$table]["fields"][$name] = $field; } $schema[$table]["pos"] = ($table_pos[$table] ? $table_pos[$table] : array($top, 0)); foreach ($adminer->foreignKeys($table) as $val) { if (!$val["db"]) { $left = $base_left; if ($table_pos[$table][1] || $table_pos[$val["table"]][1]) { $left = min(floatval($table_pos[$table][1]), floatval($table_pos[$val["table"]][1])) - 1; } else { $base_left -= .1; } while ($lefts[(string) $left]) { // find free $left $left -= .0001; } $schema[$table]["references"][$val["table"]][(string) $left] = array($val["source"], $val["target"]); $referenced[$val["table"]][$table][(string) $left] = $val["target"]; $lefts[(string) $left] = true; } } $top = max($top, $schema[$table]["pos"][0] + 2.5 + $pos); } ?>
> qs('#schema').onselectstart = function () { return false; }; var tablePos = {}; var em = qs('#schema').offsetHeight / ; document.onmousemove = schemaMousemove; document.onmouseup = partialArg(schemaMouseup, ''); $table) { echo "
"; echo '' . h($name) . ""; echo script("qsl('div').onmousedown = schemaMousedown;"); foreach ($table["fields"] as $field) { $val = '' . h($field["field"]) . ''; echo "
" . ($field["primary"] ? "$val" : $val); } foreach ((array) $table["references"] as $target_name => $refs) { foreach ($refs as $left => $ref) { $left1 = $left - $table_pos[$name][1]; $i = 0; foreach ($ref[0] as $source) { echo "\n
"; } } } foreach ((array) $referenced[$name] as $target_name => $refs) { foreach ($refs as $left => $columns) { $left1 = $left - $table_pos[$name][1]; $i = 0; foreach ($columns as $target) { echo "\n
"; } } } echo "\n
\n"; } foreach ($schema as $name => $table) { foreach ((array) $table["references"] as $target_name => $refs) { foreach ($refs as $left => $ref) { $min_pos = $top; $max_pos = -10; foreach ($ref[0] as $key => $source) { $pos1 = $table["pos"][0] + $table["fields"][$source]["pos"]; $pos2 = $schema[$target_name]["pos"][0] + $schema[$target_name]["fields"][$ref[1][$key]]["pos"]; $min_pos = min($min_pos, $pos1, $pos2); $max_pos = max($max_pos, $pos1, $pos2); } echo "
\n"; } } } ?>