/system/application/third_party/adminer/adminer/indexes.inc.php
PHP | 140 lines | 130 code | 8 blank | 2 comment | 34 complexity | 8680fac1d9c2846c1e22ccbaba706563 MD5 | raw file
- <?php
- $TABLE = $_GET["indexes"];
- $index_types = array("PRIMARY", "UNIQUE", "INDEX");
- $table_status = table_status($TABLE, true);
- if (preg_match('~MyISAM|M?aria' . ($connection->server_info >= 5.6 ? '|InnoDB' : '') . '~i', $table_status["Engine"])) {
- $index_types[] = "FULLTEXT";
- }
- $indexes = indexes($TABLE);
- $primary = array();
- if ($jush == "mongo") { // doesn't support primary key
- $primary = $indexes["_id_"];
- unset($index_types[0]);
- unset($indexes["_id_"]);
- }
- $row = $_POST;
- if ($_POST && !$error && !$_POST["add"] && !$_POST["drop_col"]) {
- $alter = array();
- foreach ($row["indexes"] as $index) {
- $name = $index["name"];
- if (in_array($index["type"], $index_types)) {
- $columns = array();
- $lengths = array();
- $descs = array();
- $set = array();
- ksort($index["columns"]);
- foreach ($index["columns"] as $key => $column) {
- if ($column != "") {
- $length = $index["lengths"][$key];
- $desc = $index["descs"][$key];
- $set[] = idf_escape($column) . ($length ? "(" . (+$length) . ")" : "") . ($desc ? " DESC" : "");
- $columns[] = $column;
- $lengths[] = ($length ? $length : null);
- $descs[] = $desc;
- }
- }
- if ($columns) {
- $existing = $indexes[$name];
- if ($existing) {
- ksort($existing["columns"]);
- ksort($existing["lengths"]);
- ksort($existing["descs"]);
- if ($index["type"] == $existing["type"]
- && array_values($existing["columns"]) === $columns
- && (!$existing["lengths"] || array_values($existing["lengths"]) === $lengths)
- && array_values($existing["descs"]) === $descs
- ) {
- // skip existing index
- unset($indexes[$name]);
- continue;
- }
- }
- $alter[] = array($index["type"], $name, $set);
- }
- }
- }
- // drop removed indexes
- foreach ($indexes as $name => $existing) {
- $alter[] = array($existing["type"], $name, "DROP");
- }
- if (!$alter) {
- redirectx(ME . "table=" . urlencode($TABLE));
- }
- queries_redirect(ME . "table=" . urlencode($TABLE), lang('Indexes have been altered.'), alter_indexes($TABLE, $alter));
- }
- page_header(lang('Indexes'), $error, array("table" => $TABLE), h($TABLE));
- $fields = array_keys(fields($TABLE));
- if ($_POST["add"]) {
- foreach ($row["indexes"] as $key => $index) {
- if ($index["columns"][count($index["columns"])] != "") {
- $row["indexes"][$key]["columns"][] = "";
- }
- }
- $index = end($row["indexes"]);
- if ($index["type"] || array_filter($index["columns"], 'strlen')) {
- $row["indexes"][] = array("columns" => array(1 => ""));
- }
- }
- if (!$row) {
- foreach ($indexes as $key => $index) {
- $indexes[$key]["name"] = $key;
- $indexes[$key]["columns"][] = "";
- }
- $indexes[] = array("columns" => array(1 => ""));
- $row["indexes"] = $indexes;
- }
- ?>
- <form action="" method="post">
- <table cellspacing="0" class="nowrap">
- <thead><tr>
- <th><?php echo lang('Index Type'); ?>
- <th><input type="submit" style="left: -1000px; position: absolute;"><?php echo lang('Column (length)'); ?>
- <th><?php echo lang('Name'); ?>
- <th><noscript><input type='image' class='icon' name='add[0]' src='../adminer/static/plus.gif' alt='+' title='<?php echo lang('Add next'); ?>'></noscript>
- </thead>
- <?php
- if ($primary) {
- echo "<tr><td>PRIMARY<td>";
- foreach ($primary["columns"] as $key => $column) {
- echo select_input(" disabled", $fields, $column);
- echo "<label><input disabled type='checkbox'>" . lang('descending') . "</label> ";
- }
- echo "<td><td>\n";
- }
- $j = 1;
- foreach ($row["indexes"] as $index) {
- if (!$_POST["drop_col"] || $j != key($_POST["drop_col"])) {
- echo "<tr><td>" . html_select("indexes[$j][type]", array(-1 => "") + $index_types, $index["type"], ($j == count($row["indexes"]) ? "indexesAddRow(this);" : 1));
- echo "<td>";
- ksort($index["columns"]);
- $i = 1;
- foreach ($index["columns"] as $key => $column) {
- echo "<span>" . select_input(
- " name='indexes[$j][columns][$i]' onchange=\"" . ($i == count($index["columns"]) ? "indexesAddColumn" : "indexesChangeColumn") . "(this, '" . js_escape($jush == "sql" ? "" : $_GET["indexes"] . "_") . "');\"",
- ($fields ? array_combine($fields, $fields) : $fields),
- $column
- );
- echo ($jush == "sql" || $jush == "mssql" ? "<input type='number' name='indexes[$j][lengths][$i]' class='size' value='" . h($index["lengths"][$key]) . "'>" : "");
- echo ($jush != "sql" ? checkbox("indexes[$j][descs][$i]", 1, $index["descs"][$key], lang('descending')) : "");
- echo " </span>";
- $i++;
- }
- echo "<td><input name='indexes[$j][name]' value='" . h($index["name"]) . "' autocapitalize='off'>\n";
- echo "<td><input type='image' class='icon' name='drop_col[$j]' src='../adminer/static/cross.gif' alt='x' title='" . lang('Remove') . "' onclick=\"return !editingRemoveRow(this, 'indexes\$1[type]');\">\n";
- }
- $j++;
- }
- ?>
- </table>
- <p>
- <input type="submit" value="<?php echo lang('Save'); ?>">
- <input type="hidden" name="token" value="<?php echo $token; ?>">
- </form>