databases.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. "use strict";
  2. /**
  3. * @fileoverview functions used on the server databases list page
  4. * @name Server Databases
  5. *
  6. * @requires jQuery
  7. * @requires jQueryUI
  8. * @required js/functions.js
  9. */
  10. /* global MicroHistory */
  11. // js/microhistory.js
  12. /**
  13. * Unbind all event handlers before tearing down a page
  14. */
  15. AJAX.registerTeardown('server/databases.js', function () {
  16. $(document).off('submit', '#dbStatsForm');
  17. $(document).off('submit', '#create_database_form.ajax');
  18. });
  19. /**
  20. * AJAX scripts for /server/databases
  21. *
  22. * Actions ajaxified here:
  23. * Drop Databases
  24. *
  25. */
  26. AJAX.registerOnload('server/databases.js', function () {
  27. /**
  28. * Attach Event Handler for 'Drop Databases'
  29. */
  30. $(document).on('submit', '#dbStatsForm', function (event) {
  31. event.preventDefault();
  32. var $form = $(this);
  33. /**
  34. * @var selected_dbs Array containing the names of the checked databases
  35. */
  36. var selectedDbs = []; // loop over all checked checkboxes, except the .checkall_box checkbox
  37. $form.find('input:checkbox:checked:not(.checkall_box)').each(function () {
  38. $(this).closest('tr').addClass('removeMe');
  39. selectedDbs[selectedDbs.length] = 'DROP DATABASE `' + Functions.escapeHtml($(this).val()) + '`;';
  40. });
  41. if (!selectedDbs.length) {
  42. Functions.ajaxShowMessage($('<div class="alert alert-primary" role="alert"></div>').text(Messages.strNoDatabasesSelected), 2000);
  43. return;
  44. }
  45. /**
  46. * @var question String containing the question to be asked for confirmation
  47. */
  48. var question = Messages.strDropDatabaseStrongWarning + ' ' + Functions.sprintf(Messages.strDoYouReally, selectedDbs.join('<br>'));
  49. var argsep = CommonParams.get('arg_separator');
  50. $(this).confirm(question, 'index.php?route=/server/databases/destroy&' + $(this).serialize() + argsep + 'drop_selected_dbs=1', function (url) {
  51. Functions.ajaxShowMessage(Messages.strProcessingRequest, false);
  52. var parts = url.split('?');
  53. var params = Functions.getJsConfirmCommonParam(this, parts[1]);
  54. $.post(parts[0], params, function (data) {
  55. if (typeof data !== 'undefined' && data.success === true) {
  56. Functions.ajaxShowMessage(data.message);
  57. var $rowsToRemove = $form.find('tr.removeMe');
  58. var $databasesCount = $('#filter-rows-count');
  59. var newCount = parseInt($databasesCount.text(), 10) - $rowsToRemove.length;
  60. $databasesCount.text(newCount);
  61. $rowsToRemove.remove();
  62. $form.find('tbody').sortTable('.name');
  63. if ($form.find('tbody').find('tr').length === 0) {
  64. // user just dropped the last db on this page
  65. CommonActions.refreshMain();
  66. }
  67. Navigation.reload();
  68. } else {
  69. $form.find('tr.removeMe').removeClass('removeMe');
  70. Functions.ajaxShowMessage(data.error, false);
  71. }
  72. }); // end $.post()
  73. });
  74. }); // end of Drop Database action
  75. /**
  76. * Attach Ajax event handlers for 'Create Database'.
  77. */
  78. $(document).on('submit', '#create_database_form.ajax', function (event) {
  79. event.preventDefault();
  80. var $form = $(this); // TODO Remove this section when all browsers support HTML5 "required" property
  81. var newDbNameInput = $form.find('input[name=new_db]');
  82. if (newDbNameInput.val() === '') {
  83. newDbNameInput.trigger('focus');
  84. alert(Messages.strFormEmpty);
  85. return;
  86. } // end remove
  87. Functions.ajaxShowMessage(Messages.strProcessingRequest);
  88. Functions.prepareForAjaxRequest($form);
  89. $.post($form.attr('action'), $form.serialize(), function (data) {
  90. if (typeof data !== 'undefined' && data.success === true) {
  91. Functions.ajaxShowMessage(data.message);
  92. var $databasesCountObject = $('#filter-rows-count');
  93. var databasesCount = parseInt($databasesCountObject.text(), 10) + 1;
  94. $databasesCountObject.text(databasesCount);
  95. Navigation.reload(); // make ajax request to load db structure page - taken from ajax.js
  96. var dbStructUrl = data.url;
  97. dbStructUrl = dbStructUrl.replace(/amp;/ig, '');
  98. var params = 'ajax_request=true' + CommonParams.get('arg_separator') + 'ajax_page_request=true';
  99. if (!(history && history.pushState)) {
  100. params += MicroHistory.menus.getRequestParam();
  101. }
  102. $.get(dbStructUrl, params, AJAX.responseHandler);
  103. } else {
  104. Functions.ajaxShowMessage(data.error, false);
  105. }
  106. }); // end $.post()
  107. }); // end $(document).on()
  108. /* Don't show filter if number of databases are very few */
  109. var databasesCount = $('#filter-rows-count').html();
  110. if (databasesCount <= 10) {
  111. $('#tableFilter').hide();
  112. }
  113. var tableRows = $('.server_databases');
  114. $.each(tableRows, function () {
  115. $(this).on('click', function () {
  116. CommonActions.setDb($(this).attr('data'));
  117. });
  118. });
  119. }); // end $()