diff --git a/libraries/display_indexes.lib.php b/libraries/display_indexes.lib.php deleted file mode 100644 index 24f4362726..0000000000 --- a/libraries/display_indexes.lib.php +++ /dev/null @@ -1,219 +0,0 @@ -getColumnCount(); - if (isset($_REQUEST['add_fields'])) { - $add_fields += $_REQUEST['added_fields']; - } -} elseif (isset($_REQUEST['create_index'])) { - $add_fields = $_REQUEST['added_fields']; -} else { - $add_fields = 1; -}// end preparing form values - -$html = ""; -$html .= '
'; - -$form_params = array( - 'db' => $db, - 'table' => $table, -); - -if (isset($_REQUEST['create_index'])) { - $form_params['create_index'] = 1; -} elseif (isset($_REQUEST['old_index'])) { - $form_params['old_index'] = $_REQUEST['old_index']; -} elseif (isset($_REQUEST['index'])) { - $form_params['old_index'] = $_REQUEST['index']; -} - -$html .= PMA_URL_getHiddenInputs($form_params); - -$html .= '
'; - -if ($GLOBALS['is_ajax_request'] != true) { - $html .= ''; - if (isset($_REQUEST['create_index'])) { - $html .= __('Add index'); - } else { - $html .= __('Edit index'); - } - $html .= ''; -} - -$html .= '
'; - -$html .= '
' - . '
' - . '' - . '' - . '' - . '
' - . '' - . '
'; - -if (PMA_MYSQL_INT_VERSION > 50500) { - $html .= '
' - . '
' - . '' - . '' - . '' - . '
' - . '' - . '
'; -} - -$html .= '
' - . '
' - . '' - . '' - . '' - . '
' - . '' - . '
'; - -$html .= '
'; - -$html .= '
'; - -$html .= ''; - -$html .= '' - . '' - . '' - . '' - . '' - . ''; - -$odd_row = true; -$spatial_types = array( - 'geometry', 'point', 'linestring', 'polygon', 'multipoint', - 'multilinestring', 'multipolygon', 'geomtrycollection' -); -$html .= ''; -foreach ($index->getColumns() as $column) { - $html .= ''; - $html .= ''; - $html .= ''; - $html .= ''; - $odd_row = !$odd_row; -} // end foreach $edited_index_info['Sequences'] - -for ($i = 0; $i < $add_fields; $i++) { - $html .= ''; - $html .= ''; - $html .= ''; - $html .= ''; - $odd_row = !$odd_row; -} // end foreach $edited_index_info['Sequences'] - -$html .= ''; - -$html .= '
' . __('Column') . '' . __('Size') . '
'; - $html .= ''; - $html .= ''; - $html .= ''; - $html .= '
'; - $html .= ''; - $html .= '' - . '' - . '
'; - -$html .= '
'; - -$html .= '
'; -if ($GLOBALS['is_ajax_request'] != true || ! empty($_REQUEST['ajax_page_request'])) { - $html .= ''; - $html .= ''; - $html .= __('Or') . ' '; - $html .= printf( - __('Add %s column(s) to index') . "\n", - '' - ); - $html .= '' . "\n"; - $html .= ''; -} else { - $btn_value = sprintf(__('Add %s column(s) to index'), 1); - $html .= '
'; - $html .= '
'; - $html .= ''; - $html .= '
'; -} -$html .= '
'; - -$html .= '
'; - -$response = PMA_Response::getInstance(); -$response->addHTML($html); -$header = $response->getHeader(); -$scripts = $header->getScripts(); -$scripts->addFile('indexes.js'); -?> diff --git a/libraries/tbl_indexes.lib.php b/libraries/tbl_indexes.lib.php new file mode 100644 index 0000000000..bd4a1b3a47 --- /dev/null +++ b/libraries/tbl_indexes.lib.php @@ -0,0 +1,406 @@ +getColumnsFull($db, $table) as $row) { + if (preg_match('@^(set|enum)\((.+)\)$@i', $row['Type'], $tmp)) { + $tmp[2] = substr( + preg_replace('@([^,])\'\'@', '\\1\\\'', ',' . $tmp[2]), 1 + ); + $columns[$row['Field']] = $tmp[1] . '(' + . str_replace(',', ', ', $tmp[2]) . ')'; + } else { + $columns[$row['Field']] = $row['Type']; + } + } // end while + + return $columns; +} + +/** + * Function to handle the creation or edit of an index + * + * @param string $db current db + * @param string $table current table + * @param Object $index current index + * + * @return void + */ +function PMA_handleCreateOrEditIndex($db, $table, $index) +{ + $error = false; + + $sql_query = PMA_getSqlQueryForIndexCreateOrEdit($db, $table, $index, $error); + + if (! $error) { + $GLOBALS['dbi']->query($sql_query); + $message = PMA_Message::success( + __('Table %1$s has been altered successfully') + ); + $message->addParam($table); + + if ($GLOBALS['is_ajax_request'] == true) { + $response = PMA_Response::getInstance(); + $response->addJSON('message', $message); + $response->addJSON('index_table', PMA_Index::getView($table, $db)); + $response->addJSON( + 'sql_query', + PMA_Util::getMessage(null, $sql_query) + ); + } else { + $active_page = 'tbl_structure.php'; + include 'tbl_structure.php'; + } + exit; + } else { + $response = PMA_Response::getInstance(); + $response->isSuccess(false); + $response->addJSON('message', $error); + exit; + } +} + +/** + * Function to get the sql query for index creation or edit + * + * @param string $db current db + * @param string $table current table + * @param Object $index current index + * @param bool &$error whether error occoured or not + * + * @return string + */ +function PMA_getSqlQueryForIndexCreateOrEdit($db, $table, $index, &$error) +{ + // $sql_query is the one displayed in the query box + $sql_query = 'ALTER TABLE ' . PMA_Util::backquote($db) + . '.' . PMA_Util::backquote($table); + + // Drops the old index + if (! empty($_REQUEST['old_index'])) { + if ($_REQUEST['old_index'] == 'PRIMARY') { + $sql_query .= ' DROP PRIMARY KEY,'; + } else { + $sql_query .= ' DROP INDEX ' + . PMA_Util::backquote($_REQUEST['old_index']) . ','; + } + } // end if + + // Builds the new one + switch ($index->getType()) { + case 'PRIMARY': + if ($index->getName() == '') { + $index->setName('PRIMARY'); + } elseif ($index->getName() != 'PRIMARY') { + $error = PMA_Message::error( + __('The name of the primary key must be "PRIMARY"!') + ); + } + $sql_query .= ' ADD PRIMARY KEY'; + break; + case 'FULLTEXT': + case 'UNIQUE': + case 'INDEX': + case 'SPATIAL': + if ($index->getName() == 'PRIMARY') { + $error = PMA_Message::error(__('Can\'t rename index to PRIMARY!')); + } + $sql_query .= ' ADD ' . $index->getType() . ' ' + . ($index->getName() ? PMA_Util::backquote($index->getName()) : ''); + break; + } // end switch + + $index_fields = array(); + foreach ($index->getColumns() as $key => $column) { + $index_fields[$key] = PMA_Util::backquote($column->getName()); + if ($column->getSubPart()) { + $index_fields[$key] .= '(' . $column->getSubPart() . ')'; + } + } // end while + + if (empty($index_fields)) { + $error = PMA_Message::error(__('No index parts defined!')); + } else { + $sql_query .= ' (' . implode(', ', $index_fields) . ')'; + } + + if (PMA_MYSQL_INT_VERSION > 50500) { + $sql_query .= "COMMENT '" + . PMA_Util::sqlAddSlashes($index->getComment()) + . "'"; + } + $sql_query .= ';'; + + return $sql_query; +} + +/** + * Function to prepare the form values for index + * + * @param string $db curent database + * @param string $table current table + * + * @return PMA_Index + */ +function PMA_prepareFormValues($db, $table) +{ + if (isset($_REQUEST['index'])) { + if (is_array($_REQUEST['index'])) { + // coming already from form + $index = new PMA_Index($_REQUEST['index']); + } else { + $index = PMA_Index::singleton($db, $table, $_REQUEST['index']); + } + } else { + $index = new PMA_Index; + } + + return $index; +} + +/** + * Function to get the number of fields for the form + * + * @param Object $index index + * + * @return int + */ +function PMA_getNumberOfFieldsForForm($index) +{ + if (isset($_REQUEST['index']) && is_array($_REQUEST['index'])) { + // coming already from form + $add_fields + = count($_REQUEST['index']['columns']['names']) + - $index->getColumnCount(); + if (isset($_REQUEST['add_fields'])) { + $add_fields += $_REQUEST['added_fields']; + } + } elseif (isset($_REQUEST['create_index'])) { + $add_fields = $_REQUEST['added_fields']; + } else { + $add_fields = 1; + }// end preparing form values + + return $add_fields; +} + +/** + * Function to get form parameters + * + * @param string $db current db + * @param string $table current table + * + * @return array + */ +function PMA_getFormParameters($db, $table) +{ + $form_params = array( + 'db' => $db, + 'table' => $table, + ); + + if (isset($_REQUEST['create_index'])) { + $form_params['create_index'] = 1; + } elseif (isset($_REQUEST['old_index'])) { + $form_params['old_index'] = $_REQUEST['old_index']; + } elseif (isset($_REQUEST['index'])) { + $form_params['old_index'] = $_REQUEST['index']; + } + + return $form_params; +} + +/** + * Function to get html for displaying the index form + * + * @param array $fields fields + * @param Object $index index + * @param array $form_params form parameters + * @param int $add_fields number of fields in the form + * + * @return string + */ +function PMA_getHtmlForIndexForm($fields, $index, $form_params,$add_fields) +{ + $html = ""; + $html .= '
'; + + $html .= PMA_URL_getHiddenInputs($form_params); + + $html .= '
'; + + $html .= '
'; + + $html .= '
' + . '
' + . '' + . '' + . '' + . '
' + . '' + . '
'; + + if (PMA_MYSQL_INT_VERSION > 50500) { + $html .= '
' + . '
' + . '' + . '' + . '' + . '
' + . '' + . '
'; + } + + $html .= '
' + . '
' + . '' + . '' + . '' + . '
' + . '' + . '
'; + + $html .= '
'; + + $html .= '
'; + + $html .= ''; + + $html .= '' + . '' + . '' + . '' + . '' + . ''; + + $odd_row = true; + $spatial_types = array( + 'geometry', 'point', 'linestring', 'polygon', 'multipoint', + 'multilinestring', 'multipolygon', 'geomtrycollection' + ); + $html .= ''; + foreach ($index->getColumns() as $column) { + $html .= ''; + $html .= ''; + $html .= ''; + $html .= ''; + $odd_row = !$odd_row; + } // end foreach $edited_index_info['Sequences'] + + for ($i = 0; $i < $add_fields; $i++) { + $html .= ''; + $html .= ''; + $html .= ''; + $html .= ''; + $odd_row = !$odd_row; + } // end foreach $edited_index_info['Sequences'] + + $html .= ''; + + $html .= '
' . __('Column') . '' . __('Size') . '
'; + $html .= ''; + $html .= ''; + $html .= ''; + $html .= '
'; + $html .= ''; + $html .= '' + . '' + . '
'; + + $html .= '
'; + + $html .= '
'; + + $btn_value = sprintf(__('Add %s column(s) to index'), 1); + $html .= '
'; + $html .= '
'; + $html .= ''; + $html .= '
'; + + $html .= '
'; + + $html .= '
'; + + return $html; +} +?> \ No newline at end of file diff --git a/tbl_indexes.php b/tbl_indexes.php index 94d337d819..e095ded833 100644 --- a/tbl_indexes.php +++ b/tbl_indexes.php @@ -12,130 +12,17 @@ require_once 'libraries/common.inc.php'; require_once 'libraries/Index.class.php'; require_once 'libraries/tbl_common.inc.php'; +require_once 'libraries/tbl_indexes.lib.php'; -// Get fields and stores their name/type -$fields = array(); -foreach ($GLOBALS['dbi']->getColumnsFull($db, $table) as $row) { - if (preg_match('@^(set|enum)\((.+)\)$@i', $row['Type'], $tmp)) { - $tmp[2] = substr( - preg_replace('@([^,])\'\'@', '\\1\\\'', ',' . $tmp[2]), 1 - ); - $fields[$row['Field']] = $tmp[1] . '(' - . str_replace(',', ', ', $tmp[2]) . ')'; - } else { - $fields[$row['Field']] = $row['Type']; - } -} // end while - -// Prepares the form values -if (isset($_REQUEST['index'])) { - if (is_array($_REQUEST['index'])) { - // coming already from form - $index = new PMA_Index($_REQUEST['index']); - } else { - $index = PMA_Index::singleton($db, $table, $_REQUEST['index']); - } -} else { - $index = new PMA_Index; -} +$index = PMA_prepareFormValues($db, $table); /** * Process the data from the edit/create index form, * run the query to build the new index * and moves back to "tbl_sql.php" */ if (isset($_REQUEST['do_save_data'])) { - $error = false; - - // $sql_query is the one displayed in the query box - $sql_query = 'ALTER TABLE ' . PMA_Util::backquote($db) - . '.' . PMA_Util::backquote($table); - - // Drops the old index - if (! empty($_REQUEST['old_index'])) { - if ($_REQUEST['old_index'] == 'PRIMARY') { - $sql_query .= ' DROP PRIMARY KEY,'; - } else { - $sql_query .= ' DROP INDEX ' - . PMA_Util::backquote($_REQUEST['old_index']) . ','; - } - } // end if - - // Builds the new one - switch ($index->getType()) { - case 'PRIMARY': - if ($index->getName() == '') { - $index->setName('PRIMARY'); - } elseif ($index->getName() != 'PRIMARY') { - $error = PMA_Message::error( - __('The name of the primary key must be "PRIMARY"!') - ); - } - $sql_query .= ' ADD PRIMARY KEY'; - break; - case 'FULLTEXT': - case 'UNIQUE': - case 'INDEX': - case 'SPATIAL': - if ($index->getName() == 'PRIMARY') { - $error = PMA_Message::error(__('Can\'t rename index to PRIMARY!')); - } - $sql_query .= ' ADD ' . $index->getType() . ' ' - . ($index->getName() ? PMA_Util::backquote($index->getName()) : ''); - break; - } // end switch - - $index_fields = array(); - foreach ($index->getColumns() as $key => $column) { - $index_fields[$key] = PMA_Util::backquote($column->getName()); - if ($column->getSubPart()) { - $index_fields[$key] .= '(' . $column->getSubPart() . ')'; - } - } // end while - - if (empty($index_fields)) { - $error = PMA_Message::error(__('No index parts defined!')); - } else { - $sql_query .= ' (' . implode(', ', $index_fields) . ')'; - } - - if (PMA_MYSQL_INT_VERSION > 50500) { - $sql_query .= "COMMENT '" - . PMA_Util::sqlAddSlashes($index->getComment()) - . "'"; - } - $sql_query .= ';'; - - if (! $error) { - $GLOBALS['dbi']->query($sql_query); - $message = PMA_Message::success( - __('Table %1$s has been altered successfully') - ); - $message->addParam($table); - - if ($GLOBALS['is_ajax_request'] == true) { - $response = PMA_Response::getInstance(); - $response->addJSON('message', $message); - $response->addJSON('index_table', PMA_Index::getView($table, $db)); - $response->addJSON( - 'sql_query', - PMA_Util::getMessage(null, $sql_query) - ); - } else { - $active_page = 'tbl_structure.php'; - include 'tbl_structure.php'; - } - exit; - } else { - if ($GLOBALS['is_ajax_request'] == true) { - $response = PMA_Response::getInstance(); - $response->isSuccess(false); - $response->addJSON('message', $error); - exit; - } else { - $error->display(); - } - } + PMA_handleCreateOrEditIndex($db, $table, $index); } // end builds the new index @@ -143,5 +30,19 @@ if (isset($_REQUEST['do_save_data'])) { * Display the form to edit/create an index */ require_once 'libraries/tbl_info.inc.php'; -require_once 'libraries/display_indexes.lib.php'; + +$add_fields = PMA_getNumberOfFieldsForForm($index); + +$form_params = PMA_getFormParameters($db, $table); + +// Get fields and stores their name/type +$fields = PMA_getNameAndTypeOfTheColumns($db, $table); + +$html = PMA_getHtmlForIndexForm($fields, $index, $form_params, $add_fields); + +$response = PMA_Response::getInstance(); +$response->addHTML($html); +$header = $response->getHeader(); +$scripts = $header->getScripts(); +$scripts->addFile('indexes.js'); ?>