diff --git a/db_structure.php b/db_structure.php index e190025f7a..11bab14581 100644 --- a/db_structure.php +++ b/db_structure.php @@ -356,22 +356,23 @@ foreach ($tables as $keyname => $each_table) { $browse_table_label = '' . $truename . ''; if (! $db_is_information_schema) { - $empty_table = ''; if ($may_have_rows) { + $empty_table = ''; + $empty_table .= $titles['Empty']; + $empty_table .= ''; } else { - $empty_table .= $titles['NoEmpty']; + $empty_table = $titles['NoEmpty']; } - $empty_table .= ''; // truncating views doesn't work if ($table_is_view) { $empty_table = ' '; diff --git a/js/messages.php b/js/messages.php index eab572caa6..96e3c01bbf 100644 --- a/js/messages.php +++ b/js/messages.php @@ -231,6 +231,7 @@ $js_messages['strCancel'] = __('Cancel'); $js_messages['strLoading'] = __('Loading'); $js_messages['strProcessingRequest'] = __('Processing Request'); $js_messages['strErrorProcessingRequest'] = __('Error in Processing Request'); +$js_messages['strNoDatabasesSelected'] = __('No databases selected.'); $js_messages['strDroppingColumn'] = __('Dropping Column'); $js_messages['strAddingPrimaryKey'] = __('Adding Primary Key'); $js_messages['strOK'] = __('OK'); diff --git a/js/server_databases.js b/js/server_databases.js new file mode 100644 index 0000000000..6436e9f5fb --- /dev/null +++ b/js/server_databases.js @@ -0,0 +1,69 @@ +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * @fileoverview functions used on the server databases list page + * @name Server Databases + * + * @requires jQuery + * @requires jQueryUI + * @required js/functions.js + */ + +/** + * AJAX scripts for server_databases.php + * + * Actions ajaxified here: + * Drop Databases + * + */ +$(document).ready(function() { + /** + * Attach Event Handler for 'Drop Databases' + * + * (see $GLOBALS['cfg']['AjaxEnable']) + */ + $("button[name=drop_selected_dbs].ajax").live('click', function(event) { + event.preventDefault(); + + var $form = $(this.form); + + /** + * @var selected_dbs Array containing the names of the checked databases + */ + var selected_dbs = []; + $form.find('input:checkbox:checked').each(function () { + selected_dbs[selected_dbs.length] = 'DROP DATABASE `' + escapeHtml($(this).val()) + '`;'; + }); + if (! selected_dbs.length) { + PMA_ajaxShowMessage(PMA_messages.strNoDatabasesSelected, 2000); + return; + } + /** + * @var question String containing the question to be asked for confirmation + */ + var question = + PMA_messages.strDropDatabaseStrongWarning + ' ' + + $.sprintf(PMA_messages.strDoYouReally, selected_dbs.join('
')); + + $(this).PMA_confirm( + question, + $form.prop('action') + + '?' + $(this.form).serialize() + + '&drop_selected_dbs=1&is_js_confirmed=1&ajax_request=true', + function(url) { + PMA_ajaxShowMessage(PMA_messages.strProcessingRequest, false); + + $.post(url, function(data) { + if(data.success == true) { + PMA_ajaxShowMessage(data.message); + if (window.parent && window.parent.frame_navigation) { + window.parent.frame_navigation.location.reload(); + } + $('#tableslistcontainer').load('server_databases.php form#dbStatsForm'); + } + else { + PMA_ajaxShowMessage(PMA_messages.strErrorProcessingRequest + ": " + data.error, false); + } + }); // end $.post() + }); // end $.PMA_confirm() + }) ; //end of Drop Database action +}); // end $(document).ready() diff --git a/js/server_privileges.js b/js/server_privileges.js index 9edd6a71fe..8eefef7280 100644 --- a/js/server_privileges.js +++ b/js/server_privileges.js @@ -263,6 +263,7 @@ $(document).ready(function() { displayPasswordGenerateButton(); PMA_convertFootnotesToTooltips($div); PMA_ajaxRemoveMessage($msgbox); + $div.find("input[autofocus]").focus(); }); // end $.get() });//end of Add New User AJAX event handler diff --git a/js/server_variables.js b/js/server_variables.js index 55d2b41357..f81266d003 100644 --- a/js/server_variables.js +++ b/js/server_variables.js @@ -132,12 +132,14 @@ function editVariable(link) var mySaveLink = $(saveLink); var myCancelLink = $(cancelLink); var $cell = $(link).parent(); + var $msgbox = PMA_ajaxShowMessage(); $cell.addClass('edit'); // remove edit link $cell.find('a.editLink').remove(); mySaveLink.click(function() { + var $msgbox = PMA_ajaxShowMessage(PMA_messages.strProcessingRequest); $.get('server_variables.php?' + url_query, { ajax_request: true, type: 'setval', @@ -146,6 +148,7 @@ function editVariable(link) }, function(data) { if (data.success) { $cell.html(data.variable); + PMA_ajaxRemoveMessage($msgbox); } else { PMA_ajaxShowMessage(data.error, false); $cell.html($cell.find('span.oldContent').html()); @@ -184,6 +187,7 @@ function editVariable(link) // Escape key if(event.keyCode == 27) myCancelLink.trigger('click'); }); + PMA_ajaxRemoveMessage($msgbox); }); return false; diff --git a/libraries/Tracker.class.php b/libraries/Tracker.class.php index 590b81e376..eee5ffd6a4 100644 --- a/libraries/Tracker.class.php +++ b/libraries/Tracker.class.php @@ -874,7 +874,7 @@ class PMA_Tracker $result = self::parseQuery($query); // Get database name - $dbname = trim($GLOBALS['db'], '`'); + $dbname = trim(isset($GLOBALS['db']) ? $GLOBALS['db'] : '', '`'); // $dbname can be empty, for example when coming from Synchronize // and this is a query for the remote server if (empty($dbname)) { diff --git a/server_databases.php b/server_databases.php index 7ad910fcfb..b822e792e9 100644 --- a/server_databases.php +++ b/server_databases.php @@ -10,6 +10,9 @@ */ require_once 'libraries/common.inc.php'; +$GLOBALS['js_include'][] = 'server_databases.js'; +$GLOBALS['js_include'][] = 'functions.js'; + require 'libraries/server_common.inc.php'; if (! PMA_DRIZZLE) { include_once 'libraries/replication.inc.php'; @@ -85,11 +88,20 @@ if ((isset($_REQUEST['drop_selected_dbs']) || isset($_REQUEST['query_type'])) $message = PMA_Message::error(__('No databases selected.')); } else { $action = 'server_databases.php'; - $submit_mult = 'drop_db' ; + $submit_mult = 'drop_db'; $err_url = 'server_databases.php?' . PMA_generate_common_url(); - if (isset($_REQUEST['selected_dbs'])) { + if (isset($_REQUEST['selected_dbs']) + && !isset($_REQUEST['is_js_confirmed'])) { $selected_db = $_REQUEST['selected_dbs']; } + if (isset($_REQUEST['is_js_confirmed'])) { + $_REQUEST = array( + 'query_type' => $submit_mult, + 'selected' => $_REQUEST['selected_dbs'], + 'mult_btn' => __('Yes'), + 'db' => $GLOBALS['db'], + 'table' => $GLOBALS['table']); + } include 'libraries/mult_submits.inc.php'; unset($action, $submit_mult, $err_url, $selected_db, $GLOBALS['db']); if (empty($message)) { @@ -101,7 +113,9 @@ if ((isset($_REQUEST['drop_selected_dbs']) || isset($_REQUEST['query_type'])) $message = PMA_Message::success(_ngettext('%1$d database has been dropped successfully.', '%1$d databases have been dropped successfully.', $number_of_databases)); $message->addParam($number_of_databases); } - + } + if ($GLOBALS['is_ajax_request'] && $message instanceof PMA_Message) { + PMA_ajaxResponse($message, $message->isSuccess()); } } @@ -282,7 +296,7 @@ if ($databases_count > 0) { . '' . "\n" . ' ' . __('Uncheck All') . '' . "\n" . '' . __('With selected:') . '' . "\n"; - PMA_buttonOrImage('drop_selected_dbs', 'mult_submit', 'drop_selected_dbs', __('Drop'), 'b_deltbl.png'); + PMA_buttonOrImage('drop_selected_dbs', 'mult_submit' . ($cfg['AjaxEnable'] ? ' ajax' : ''), 'drop_selected_dbs', __('Drop'), 'b_deltbl.png'); } if (empty($dbstats)) { diff --git a/server_privileges.php b/server_privileges.php index 749e33e5bd..8c39fc2dff 100644 --- a/server_privileges.php +++ b/server_privileges.php @@ -882,7 +882,7 @@ function PMA_displayLoginInformationFields($mode = 'new') : $GLOBALS['username'] ) . '"' ) - . ' onchange="pred_username.value = \'userdefined\';" />' . "\n" + . ' onchange="pred_username.value = \'userdefined\';" autofocus="autofocus" />' . "\n" . '' . "\n" . '
' . "\n" . '