db_operations.js

  1. /* vim: set expandtab sw=4 ts=4 sts=4: */
  2. import { PMA_commonActions } from './classes/CommonActions';
  3. import PMA_commonParams from './variables/common_params';
  4. import { PMA_Messages as PMA_messages } from './variables/export_variables';
  5. import { PMA_ajaxShowMessage } from './utils/show_ajax_messages';
  6. import { escapeHtml } from './utils/Sanitise';
  7. import { PMA_prepareForAjaxRequest } from './functions/AjaxRequest';
  8. import { PMA_sprintf } from './utils/sprintf';
  9. import { getJSConfirmCommonParam } from './functions/Common';
  10. /**
  11. * @fileoverview function used in server privilege pages
  12. * @name Database Operations
  13. *
  14. * @requires jQuery
  15. * @requires jQueryUI
  16. * @requires js/functions.js
  17. *
  18. */
  19. /**
  20. * Ajax event handlers here for db_operations.php
  21. *
  22. * Actions Ajaxified here:
  23. * Rename Database
  24. * Copy Database
  25. * Change Charset
  26. * Drop Database
  27. */
  28. /**
  29. * Unbind all event handlers before tearing down a page
  30. */
  31. export function teardownDbOperations () {
  32. $(document).off('submit', '#rename_db_form.ajax');
  33. $(document).off('submit', '#copy_db_form.ajax');
  34. $(document).off('submit', '#change_db_charset_form.ajax');
  35. $(document).off('click', '#drop_db_anchor.ajax');
  36. }
  37. export function onloadDbOperations () {
  38. /**
  39. * Ajax event handlers for 'Rename Database'
  40. */
  41. $(document).on('submit', '#rename_db_form.ajax', function (event) {
  42. event.preventDefault();
  43. var old_db_name = PMA_commonParams.get('db');
  44. var new_db_name = $('#new_db_name').val();
  45. if (new_db_name === old_db_name) {
  46. PMA_ajaxShowMessage(PMA_messages.strDatabaseRenameToSameName, false, 'error');
  47. return false;
  48. }
  49. var $form = $(this);
  50. var question = escapeHtml('CREATE DATABASE ' + new_db_name + ' / DROP DATABASE ' + old_db_name);
  51. PMA_prepareForAjaxRequest($form);
  52. $form.PMA_confirm(question, $form.attr('action'), function (url) {
  53. PMA_ajaxShowMessage(PMA_messages.strRenamingDatabases, false);
  54. $.post(url, $('#rename_db_form').serialize() + PMA_commonParams.get('arg_separator') + 'is_js_confirmed=1', function (data) {
  55. if (typeof data !== 'undefined' && data.success === true) {
  56. PMA_ajaxShowMessage(data.message);
  57. PMA_commonParams.set('db', data.newname);
  58. PMA_reloadNavigation(function () {
  59. $('#pma_navigation_tree')
  60. .find('a:not(\'.expander\')')
  61. .each(function (index) {
  62. var $thisAnchor = $(this);
  63. if ($thisAnchor.text() === data.newname) {
  64. // simulate a click on the new db name
  65. // in navigation
  66. $thisAnchor.trigger('click');
  67. }
  68. });
  69. });
  70. } else {
  71. PMA_ajaxShowMessage(data.error, false);
  72. }
  73. }); // end $.post()
  74. });
  75. }); // end Rename Database
  76. /**
  77. * Ajax Event Handler for 'Copy Database'
  78. */
  79. $(document).on('submit', '#copy_db_form.ajax', function (event) {
  80. event.preventDefault();
  81. PMA_ajaxShowMessage(PMA_messages.strCopyingDatabase, false);
  82. var $form = $(this);
  83. PMA_prepareForAjaxRequest($form);
  84. $.post($form.attr('action'), $form.serialize(), function (data) {
  85. // use messages that stay on screen
  86. $('div.success, div.error').fadeOut();
  87. if (typeof data !== 'undefined' && data.success === true) {
  88. if ($('#checkbox_switch').is(':checked')) {
  89. PMA_commonParams.set('db', data.newname);
  90. PMA_commonActions.refreshMain(false, function () {
  91. PMA_ajaxShowMessage(data.message);
  92. });
  93. } else {
  94. PMA_commonParams.set('db', data.db);
  95. PMA_ajaxShowMessage(data.message);
  96. }
  97. PMA_reloadNavigation();
  98. } else {
  99. PMA_ajaxShowMessage(data.error, false);
  100. }
  101. }); // end $.post()
  102. }); // end copy database
  103. /**
  104. * Change tables columns visible only if change tables is checked
  105. */
  106. $('#span_change_all_tables_columns_collations').hide();
  107. $('#checkbox_change_all_tables_collations').on('click', function () {
  108. $('#span_change_all_tables_columns_collations').toggle();
  109. });
  110. /**
  111. * Ajax Event handler for 'Change Charset' of the database
  112. */
  113. $(document).on('submit', '#change_db_charset_form.ajax', function (event) {
  114. event.preventDefault();
  115. var $form = $(this);
  116. PMA_prepareForAjaxRequest($form);
  117. PMA_ajaxShowMessage(PMA_messages.strChangingCharset);
  118. $.post($form.attr('action'), $form.serialize() + PMA_commonParams.get('arg_separator') + 'submitcollation=1', function (data) {
  119. if (typeof data !== 'undefined' && data.success === true) {
  120. PMA_ajaxShowMessage(data.message);
  121. } else {
  122. PMA_ajaxShowMessage(data.error, false);
  123. }
  124. }); // end $.post()
  125. }); // end change charset
  126. /**
  127. * Ajax event handlers for Drop Database
  128. */
  129. $(document).on('click', '#drop_db_anchor.ajax', function (event) {
  130. event.preventDefault();
  131. var $link = $(this);
  132. /**
  133. * @var question String containing the question to be asked for confirmation
  134. */
  135. var question = PMA_messages.strDropDatabaseStrongWarning + ' ';
  136. question += PMA_sprintf(
  137. PMA_messages.strDoYouReally,
  138. 'DROP DATABASE `' + escapeHtml(PMA_commonParams.get('db') + '`')
  139. );
  140. var params = getJSConfirmCommonParam(this, $link.getPostData());
  141. $(this).PMA_confirm(question, $(this).attr('href'), function (url) {
  142. PMA_ajaxShowMessage(PMA_messages.strProcessingRequest);
  143. $.post(url, params, function (data) {
  144. if (typeof data !== 'undefined' && data.success) {
  145. // Database deleted successfully, refresh both the frames
  146. PMA_reloadNavigation();
  147. PMA_commonParams.set('db', '');
  148. PMA_commonActions.refreshMain(
  149. 'server_databases.php',
  150. function () {
  151. PMA_ajaxShowMessage(data.message);
  152. }
  153. );
  154. } else {
  155. PMA_ajaxShowMessage(data.error, false);
  156. }
  157. });
  158. });
  159. });
  160. }