diff --git a/js/functions.js b/js/functions.js index 1425354ab5..8719627b44 100644 --- a/js/functions.js +++ b/js/functions.js @@ -2064,6 +2064,30 @@ function PMA_previewSQL($form) }); } +/** + * check for reserved keyword column name + * + * @param jQuery Object $form Form + * + * @returns true|false + */ + +function PMA_checkReservedWordColumns($form) { + var is_confirmed = true; + $.ajax({ + type: 'POST', + url: "tbl_structure.php", + data: $form.serialize() + '&reserved_word_check=1', + success: function (data) { + if (typeof data.success != 'undefined' && data.success === true) { + is_confirmed = confirm(data.message); + } + }, + async:false + }); + return is_confirmed; +} + // This event only need to be fired once after the initial page load $(function () { /** @@ -2474,73 +2498,75 @@ AJAX.registerOnload('functions.js', function () { */ if (checkTableEditForm($form[0], $form.find('input[name=orig_num_fields]').val())) { - PMA_ajaxShowMessage(PMA_messages.strProcessingRequest); PMA_prepareForAjaxRequest($form); - //User wants to submit the form - $.post($form.attr('action'), $form.serialize() + "&do_save_data=1", function (data) { - if (typeof data !== 'undefined' && data.success === true) { - $('#properties_message') - .removeClass('error') - .html(''); - PMA_ajaxShowMessage(data.message); - // Only if the create table dialog (distinct panel) exists - if ($("#create_table_dialog").length > 0) { - $("#create_table_dialog").dialog("close").remove(); - } - $('#tableslistcontainer').before(data.formatted_sql); + if (PMA_checkReservedWordColumns($form)) { + PMA_ajaxShowMessage(PMA_messages.strProcessingRequest); + //User wants to submit the form + $.post($form.attr('action'), $form.serialize() + "&do_save_data=1", function (data) { + if (typeof data !== 'undefined' && data.success === true) { + $('#properties_message') + .removeClass('error') + .html(''); + PMA_ajaxShowMessage(data.message); + // Only if the create table dialog (distinct panel) exists + if ($("#create_table_dialog").length > 0) { + $("#create_table_dialog").dialog("close").remove(); + } + $('#tableslistcontainer').before(data.formatted_sql); - /** - * @var tables_table Object referring to the element that holds the list of tables - */ - var tables_table = $("#tablesForm").find("tbody").not("#tbl_summary_row"); - // this is the first table created in this db - if (tables_table.length === 0) { - PMA_commonActions.refreshMain( - PMA_commonParams.get('opendb_url') - ); + /** + * @var tables_table Object referring to the element that holds the list of tables + */ + var tables_table = $("#tablesForm").find("tbody").not("#tbl_summary_row"); + // this is the first table created in this db + if (tables_table.length === 0) { + PMA_commonActions.refreshMain( + PMA_commonParams.get('opendb_url') + ); + } else { + /** + * @var curr_last_row Object referring to the last element in {@link tables_table} + */ + var curr_last_row = $(tables_table).find('tr:last'); + /** + * @var curr_last_row_index_string String containing the index of {@link curr_last_row} + */ + var curr_last_row_index_string = $(curr_last_row).find('input:checkbox').attr('id').match(/\d+/)[0]; + /** + * @var curr_last_row_index Index of {@link curr_last_row} + */ + var curr_last_row_index = parseFloat(curr_last_row_index_string); + /** + * @var new_last_row_index Index of the new row to be appended to {@link tables_table} + */ + var new_last_row_index = curr_last_row_index + 1; + /** + * @var new_last_row_id String containing the id of the row to be appended to {@link tables_table} + */ + var new_last_row_id = 'checkbox_tbl_' + new_last_row_index; + + data.new_table_string = data.new_table_string.replace(/checkbox_tbl_/, new_last_row_id); + //append to table + $(data.new_table_string) + .appendTo(tables_table); + + //Sort the table + $(tables_table).PMA_sort_table('th'); + + // Adjust summary row + PMA_adjustTotals(); + } + + //Refresh navigation as a new table has been added + PMA_reloadNavigation(); } else { - /** - * @var curr_last_row Object referring to the last element in {@link tables_table} - */ - var curr_last_row = $(tables_table).find('tr:last'); - /** - * @var curr_last_row_index_string String containing the index of {@link curr_last_row} - */ - var curr_last_row_index_string = $(curr_last_row).find('input:checkbox').attr('id').match(/\d+/)[0]; - /** - * @var curr_last_row_index Index of {@link curr_last_row} - */ - var curr_last_row_index = parseFloat(curr_last_row_index_string); - /** - * @var new_last_row_index Index of the new row to be appended to {@link tables_table} - */ - var new_last_row_index = curr_last_row_index + 1; - /** - * @var new_last_row_id String containing the id of the row to be appended to {@link tables_table} - */ - var new_last_row_id = 'checkbox_tbl_' + new_last_row_index; - - data.new_table_string = data.new_table_string.replace(/checkbox_tbl_/, new_last_row_id); - //append to table - $(data.new_table_string) - .appendTo(tables_table); - - //Sort the table - $(tables_table).PMA_sort_table('th'); - - // Adjust summary row - PMA_adjustTotals(); + PMA_ajaxShowMessage( + '
' + data.error + '
', + false + ); } - - //Refresh navigation as a new table has been added - PMA_reloadNavigation(); - } else { - PMA_ajaxShowMessage( - '
' + data.error + '
', - false - ); - } - }); // end $.post() + }); // end $.post() + } } // end if (checkTableEditForm() ) }); // end create table form (save) diff --git a/js/tbl_structure.js b/js/tbl_structure.js index db8c5388ce..583adfc64b 100644 --- a/js/tbl_structure.js +++ b/js/tbl_structure.js @@ -108,31 +108,33 @@ AJAX.registerOnload('tbl_structure.js', function () { if (checkTableEditForm($form[0], $form.find('input[name=orig_num_fields]').val())) { // OK, form passed validation step PMA_prepareForAjaxRequest($form); - //User wants to submit the form - $msg = PMA_ajaxShowMessage(); - $.post($form.attr('action'), $form.serialize() + '&do_save_data=1', function (data) { - if ($(".sqlqueryresults").length !== 0) { - $(".sqlqueryresults").remove(); - } else if ($(".error:not(.tab)").length !== 0) { - $(".error:not(.tab)").remove(); - } - if (typeof data.success != 'undefined' && data.success === true) { - $("#page_content") - .empty() - .append(data.message) - .append(data.sql_query) - .show(); - PMA_highlightSQL($('#page_content')); - $(".result_query .notice").remove(); - reloadFieldForm(); - $form.remove(); - PMA_ajaxRemoveMessage($msg); - PMA_init_slider(); - PMA_reloadNavigation(); - } else { - PMA_ajaxShowMessage(data.error, false); - } - }); // end $.post() + if (PMA_checkReservedWordColumns($form)) { + //User wants to submit the form + $msg = PMA_ajaxShowMessage(); + $.post($form.attr('action'), $form.serialize() + '&do_save_data=1', function (data) { + if ($(".sqlqueryresults").length !== 0) { + $(".sqlqueryresults").remove(); + } else if ($(".error:not(.tab)").length !== 0) { + $(".error:not(.tab)").remove(); + } + if (typeof data.success != 'undefined' && data.success === true) { + $("#page_content") + .empty() + .append(data.message) + .append(data.sql_query) + .show(); + PMA_highlightSQL($('#page_content')); + $(".result_query .notice").remove(); + reloadFieldForm(); + $form.remove(); + PMA_ajaxRemoveMessage($msg); + PMA_init_slider(); + PMA_reloadNavigation(); + } else { + PMA_ajaxShowMessage(data.error, false); + } + }); // end $.post() + } } }); // end change table button "do_save_data" diff --git a/libraries/structure.lib.php b/libraries/structure.lib.php index efe064461e..efc7288f46 100644 --- a/libraries/structure.lib.php +++ b/libraries/structure.lib.php @@ -2118,7 +2118,7 @@ function PMA_getHtmlForActionsInTableStructure($type, $tbl_storage_engine, ); } $html_output .= PMA_getHtmlForDistinctValueAction($url_query, $row, $titles); - if (isset($GLOBALS['cfgRelation']['central_columnswork']) + if (isset($GLOBALS['cfgRelation']['central_columnswork']) && $GLOBALS['cfgRelation']['central_columnswork'] ) { $html_output .= '
  • '; @@ -2763,33 +2763,6 @@ function PMA_getColumnsWithUniqueIndex($db ,$table) return $columns_with_unique_index; } -/** - * Check column names for MySQL reserved words - * - * @param string $db database name - * @param string $table tablename - * - * @return array $messages array of PMA_Messages - */ -function PMA_getReservedWordColumnNameMessages($db ,$table) -{ - $messages = array(); - if ($GLOBALS['cfg']['ReservedWordDisableWarning'] === false) { - $pma_table = new PMA_Table($table, $db); - $columns = $pma_table->getReservedColumnNames(); - if (!empty($columns)) { - foreach ($columns as $column) { - $msg = PMA_message::notice( - __('The column name \'%s\' is a MySQL reserved keyword.') - ); - $msg->addParam($column); - $messages[] = $msg; - } - } - } - return $messages; -} - /** * Function to get the type of command for multiple field handling * diff --git a/tbl_structure.php b/tbl_structure.php index b40c57dabc..db980b0e82 100644 --- a/tbl_structure.php +++ b/tbl_structure.php @@ -38,6 +38,33 @@ if (isset($_REQUEST['move_columns']) exit; } +/** + * handle MySQL reserved words columns check + */ +if (isset($_REQUEST['reserved_word_check'])) { + $response = PMA_Response::getInstance(); + if ($GLOBALS['cfg']['ReservedWordDisableWarning'] === false) { + $columns_names = $_REQUEST['field_name']; + $cols = ""; + foreach ($columns_names as $column) { + if (PMA_SQP_isKeyWord($column)) { + $cols .= $column . ", "; + } + } + if ($cols == "") { + $response->isSuccess(false); + } + $response->addJSON( + 'message', sprintf( + __('The column name(s) \'%s\' are MySQL reserved keyword.'), + trim($cols, ", ") + ) + ); + } else { + $response->isSuccess(false); + } + exit; +} /** * A click on Change has been made for one column */ @@ -107,10 +134,6 @@ $url_query .= '&goto=tbl_structure.php&back=tbl_structure.php'; $url_params['goto'] = 'tbl_structure.php'; $url_params['back'] = 'tbl_structure.php'; -// Check column names for MySQL reserved words -$reserved_word_column_messages = PMA_getReservedWordColumnNameMessages($db, $table); -$response->addHTML($reserved_word_column_messages); - /** * Prepares the table structure display */