normalization.js 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710
  1. /* vim: set expandtab sw=4 ts=4 sts=4: */
  2. /**
  3. * @fileoverview events handling from normalization page
  4. * @name normalization
  5. *
  6. * @requires jQuery
  7. */
  8. /**
  9. * AJAX scripts for normalization.php
  10. *
  11. */
  12. var normalizeto = '1nf';
  13. var primary_key;
  14. var data_parsed = null;
  15. function appendHtmlColumnsList()
  16. {
  17. $.get(
  18. "normalization.php",
  19. {
  20. "token": PMA_commonParams.get('token'),
  21. "ajax_request": true,
  22. "db": PMA_commonParams.get('db'),
  23. "table": PMA_commonParams.get('table'),
  24. "getColumns": true
  25. },
  26. function(data) {
  27. if (data.success === true) {
  28. $('select[name=makeAtomic]').html(data.message);
  29. }
  30. }
  31. );
  32. }
  33. function goTo3NFStep1(newTables)
  34. {
  35. if (Object.keys(newTables).length === 1) {
  36. newTables = [PMA_commonParams.get('table')];
  37. }
  38. $.post(
  39. "normalization.php",
  40. {
  41. "token": PMA_commonParams.get('token'),
  42. "ajax_request": true,
  43. "db": PMA_commonParams.get('db'),
  44. "tables": newTables,
  45. "step": '3.1'
  46. }, function(data) {
  47. $("#page_content").find("h3").html(PMA_messages.str3NFNormalization);
  48. $("#mainContent").find("legend").html(data.legendText);
  49. $("#mainContent").find("h4").html(data.headText);
  50. $("#mainContent").find("p").html(data.subText);
  51. $("#mainContent").find("#extra").html(data.extra);
  52. $("#extra").find("form").each(function() {
  53. var form_id = $(this).attr('id');
  54. var colname = $(this).data('colname');
  55. $("#" + form_id + " input[value='" + colname + "']").next().remove();
  56. $("#" + form_id + " input[value='" + colname + "']").remove();
  57. });
  58. $("#mainContent").find("#newCols").html('');
  59. $('.tblFooters').html('');
  60. if (data.subText !== "") {
  61. $('.tblFooters').html('<input type="button" onClick="processDependencies(\'\', true);" value="' + PMA_messages.strDone + '"/>');
  62. }
  63. }
  64. );
  65. }
  66. function goTo2NFStep1() {
  67. $.post(
  68. "normalization.php",
  69. {
  70. "token": PMA_commonParams.get('token'),
  71. "ajax_request": true,
  72. "db": PMA_commonParams.get('db'),
  73. "table": PMA_commonParams.get('table'),
  74. "step": '2.1'
  75. }, function(data) {
  76. $("#page_content h3").html(PMA_messages.str2NFNormalization);
  77. $("#mainContent legend").html(data.legendText);
  78. $("#mainContent h4").html(data.headText);
  79. $("#mainContent p").html(data.subText);
  80. $("#mainContent #extra").html(data.extra);
  81. $("#mainContent #newCols").html('');
  82. if (data.subText !== '') {
  83. $('.tblFooters').html('<input type="submit" value="' + PMA_messages.strDone + '" onclick="processDependencies(\'' + data.primary_key + '\');">');
  84. } else {
  85. if (normalizeto === '3nf') {
  86. $("#mainContent #newCols").html(PMA_messages.strToNextStep);
  87. setTimeout(function() {
  88. goTo3NFStep1([PMA_commonParams.get('table')]);
  89. }, 3000);
  90. }
  91. }
  92. });
  93. }
  94. function goToFinish1NF()
  95. {
  96. if (normalizeto !== '1nf') {
  97. goTo2NFStep1();
  98. return true;
  99. }
  100. $("#mainContent legend").html(PMA_messages.strEndStep);
  101. $("#mainContent h4").html(
  102. "<h3>" + PMA_sprintf(PMA_messages.strFinishMsg, escapeHtml(PMA_commonParams.get('table'))) + "</h3>"
  103. );
  104. $("#mainContent p").html('');
  105. $("#mainContent #extra").html('');
  106. $("#mainContent #newCols").html('');
  107. $('.tblFooters').html('');
  108. }
  109. function goToStep4()
  110. {
  111. $.post(
  112. "normalization.php",
  113. {
  114. "token": PMA_commonParams.get('token'),
  115. "ajax_request": true,
  116. "db": PMA_commonParams.get('db'),
  117. "table": PMA_commonParams.get('table'),
  118. "step4": true
  119. }, function(data) {
  120. $("#mainContent legend").html(data.legendText);
  121. $("#mainContent h4").html(data.headText);
  122. $("#mainContent p").html(data.subText);
  123. $("#mainContent #extra").html(data.extra);
  124. $("#mainContent #newCols").html('');
  125. $('.tblFooters').html('');
  126. for(var pk in primary_key) {
  127. $("#extra input[value='" + primary_key[pk] + "']").attr("disabled","disabled");
  128. }
  129. }
  130. );
  131. }
  132. function goToStep3()
  133. {
  134. $.post(
  135. "normalization.php",
  136. {
  137. "token": PMA_commonParams.get('token'),
  138. "ajax_request": true,
  139. "db": PMA_commonParams.get('db'),
  140. "table": PMA_commonParams.get('table'),
  141. "step3": true
  142. }, function(data) {
  143. $("#mainContent legend").html(data.legendText);
  144. $("#mainContent h4").html(data.headText);
  145. $("#mainContent p").html(data.subText);
  146. $("#mainContent #extra").html(data.extra);
  147. $("#mainContent #newCols").html('');
  148. $('.tblFooters').html('');
  149. primary_key = $.parseJSON(data.primary_key);
  150. for(var pk in primary_key) {
  151. $("#extra input[value='" + primary_key[pk] + "']").attr("disabled","disabled");
  152. }
  153. }
  154. );
  155. }
  156. function goToStep2(extra)
  157. {
  158. $.post(
  159. "normalization.php",
  160. {
  161. "token": PMA_commonParams.get('token'),
  162. "ajax_request": true,
  163. "db": PMA_commonParams.get('db'),
  164. "table": PMA_commonParams.get('table'),
  165. "step2": true
  166. }, function(data) {
  167. $("#mainContent legend").html(data.legendText);
  168. $("#mainContent h4").html(data.headText);
  169. $("#mainContent p").html(data.subText);
  170. $("#mainContent #extra,#mainContent #newCols").html('');
  171. $('.tblFooters').html('');
  172. if (data.hasPrimaryKey === "1") {
  173. if(extra === 'goToStep3') {
  174. $("#mainContent h4").html(PMA_messages.strPrimaryKeyAdded);
  175. $("#mainContent p").html(PMA_messages.strToNextStep);
  176. }
  177. if(extra === 'goToFinish1NF') {
  178. goToFinish1NF();
  179. } else {
  180. setTimeout(function() {
  181. goToStep3();
  182. }, 3000);
  183. }
  184. } else {
  185. //form to select columns to make primary
  186. $("#mainContent #extra").html(data.extra);
  187. }
  188. }
  189. );
  190. }
  191. function goTo2NFFinish(pd)
  192. {
  193. var tables = {};
  194. for (var dependson in pd) {
  195. tables[dependson] = $('#extra input[name="' + dependson + '"]').val();
  196. }
  197. datastring = {"token": PMA_commonParams.get('token'),
  198. "ajax_request": true,
  199. "db": PMA_commonParams.get('db'),
  200. "table": PMA_commonParams.get('table'),
  201. "pd": JSON.stringify(pd),
  202. "newTablesName":JSON.stringify(tables),
  203. "createNewTables2NF":1};
  204. $.ajax({
  205. type: "GET",
  206. url: "normalization.php",
  207. data: datastring,
  208. async:false,
  209. success: function(data) {
  210. if (data.success === true) {
  211. if(data.queryError === false) {
  212. if (normalizeto === '3nf') {
  213. $("#pma_navigation_reload").click();
  214. goTo3NFStep1(tables);
  215. return true;
  216. }
  217. $("#mainContent legend").html(data.legendText);
  218. $("#mainContent h4").html(data.headText);
  219. $("#mainContent p").html('');
  220. $("#mainContent #extra").html('');
  221. $('.tblFooters').html('');
  222. } else {
  223. PMA_ajaxShowMessage(data.extra, false);
  224. }
  225. $("#pma_navigation_reload").click();
  226. } else {
  227. PMA_ajaxShowMessage(data.error, false);
  228. }
  229. }
  230. });
  231. }
  232. function goTo3NFFinish(newTables)
  233. {
  234. for (var table in newTables) {
  235. for (var newtbl in newTables[table]) {
  236. var updatedname = $('#extra input[name="' + newtbl + '"]').val();
  237. newTables[table][updatedname] = newTables[table][newtbl];
  238. if (updatedname !== newtbl) {
  239. delete newTables[table][newtbl];
  240. }
  241. }
  242. }
  243. datastring = {"token": PMA_commonParams.get('token'),
  244. "ajax_request": true,
  245. "db": PMA_commonParams.get('db'),
  246. "newTables":JSON.stringify(newTables),
  247. "createNewTables3NF":1};
  248. $.ajax({
  249. type: "GET",
  250. url: "normalization.php",
  251. data: datastring,
  252. async:false,
  253. success: function(data) {
  254. if (data.success === true) {
  255. if(data.queryError === false) {
  256. $("#mainContent legend").html(data.legendText);
  257. $("#mainContent h4").html(data.headText);
  258. $("#mainContent p").html('');
  259. $("#mainContent #extra").html('');
  260. $('.tblFooters').html('');
  261. } else {
  262. PMA_ajaxShowMessage(data.extra, false);
  263. }
  264. $("#pma_navigation_reload").click();
  265. } else {
  266. PMA_ajaxShowMessage(data.error, false);
  267. }
  268. }
  269. });
  270. }
  271. var backup = '';
  272. function goTo2NFStep2(pd, primary_key)
  273. {
  274. $("#newCols").html('');
  275. $("#mainContent legend").html(PMA_messages.strStep + ' 2.2 ' + PMA_messages.strConfirmPd);
  276. $("#mainContent h4").html(PMA_messages.strSelectedPd);
  277. $("#mainContent p").html(PMA_messages.strPdHintNote);
  278. var extra = '<div class="dependencies_box">';
  279. var pdFound = false;
  280. for (var dependson in pd) {
  281. if (dependson !== primary_key) {
  282. pdFound = true;
  283. extra += '<p class="displayblock desc">' + escapeHtml(dependson) + " -> " + escapeHtml(pd[dependson].toString()) + '</p>';
  284. }
  285. }
  286. if(!pdFound) {
  287. extra += '<p class="displayblock desc">' + PMA_messages.strNoPdSelected + '</p>';
  288. extra += '</div>';
  289. } else {
  290. extra += '</div>';
  291. datastring = {"token": PMA_commonParams.get('token'),
  292. "ajax_request": true,
  293. "db": PMA_commonParams.get('db'),
  294. "table": PMA_commonParams.get('table'),
  295. "pd": JSON.stringify(pd),
  296. "getNewTables2NF":1};
  297. $.ajax({
  298. type: "GET",
  299. url: "normalization.php",
  300. data: datastring,
  301. async:false,
  302. success: function(data) {
  303. if (data.success === true) {
  304. extra += data.message;
  305. } else {
  306. PMA_ajaxShowMessage(data.error, false);
  307. }
  308. }
  309. });
  310. }
  311. $("#mainContent #extra").html(extra);
  312. $('.tblFooters').html('<input type="button" value="' + PMA_messages.strBack + '" id="backEditPd"/><input type="button" id="goTo2NFFinish" value="' + PMA_messages.strGo + '"/>');
  313. $("#goTo2NFFinish").click(function(){
  314. goTo2NFFinish(pd);
  315. });
  316. }
  317. function goTo3NFStep2(pd, tablesTds)
  318. {
  319. $("#newCols").html('');
  320. $("#mainContent legend").html(PMA_messages.strStep + ' 3.2 ' + PMA_messages.strConfirmTd);
  321. $("#mainContent h4").html(PMA_messages.strSelectedTd);
  322. $("#mainContent p").html(PMA_messages.strPdHintNote);
  323. var extra = '<div class="dependencies_box">';
  324. var pdFound = false;
  325. for (var table in tablesTds) {
  326. for (var i in tablesTds[table]) {
  327. dependson = tablesTds[table][i];
  328. if (dependson !== '' && dependson !== table) {
  329. pdFound = true;
  330. extra += '<p class="displayblock desc">' + escapeHtml(dependson) + " -> " + escapeHtml(pd[dependson].toString()) + '</p>';
  331. }
  332. }
  333. }
  334. if(!pdFound) {
  335. extra += '<p class="displayblock desc">' + PMA_messages.strNoTdSelected + '</p>';
  336. extra += '</div>';
  337. } else {
  338. extra += '</div>';
  339. datastring = {"token": PMA_commonParams.get('token'),
  340. "ajax_request": true,
  341. "db": PMA_commonParams.get('db'),
  342. "tables": JSON.stringify(tablesTds),
  343. "pd": JSON.stringify(pd),
  344. "getNewTables3NF":1};
  345. $.ajax({
  346. type: "GET",
  347. url: "normalization.php",
  348. data: datastring,
  349. async:false,
  350. success: function(data) {
  351. data_parsed = $.parseJSON(data.message);
  352. if (data.success === true) {
  353. extra += data_parsed.html;
  354. } else {
  355. PMA_ajaxShowMessage(data.error, false);
  356. }
  357. }
  358. });
  359. }
  360. $("#mainContent #extra").html(extra);
  361. $('.tblFooters').html('<input type="button" value="' + PMA_messages.strBack + '" id="backEditPd"/><input type="button" id="goTo3NFFinish" value="' + PMA_messages.strGo + '"/>');
  362. $("#goTo3NFFinish").click(function(){
  363. if (!pdFound) {
  364. goTo3NFFinish([]);
  365. } else {
  366. goTo3NFFinish(data_parsed.newTables);
  367. }
  368. });
  369. }
  370. function processDependencies(primary_key, isTransitive)
  371. {
  372. var pd = {};
  373. var tablesTds = {};
  374. var dependsOn;
  375. pd[primary_key] = [];
  376. $("#extra form").each(function() {
  377. var tblname;
  378. if (isTransitive === true) {
  379. tblname = $(this).data('tablename');
  380. primary_key = tblname;
  381. if (!(tblname in tablesTds)) {
  382. tablesTds[tblname] = [];
  383. }
  384. tablesTds[tblname].push(primary_key);
  385. }
  386. var form_id = $(this).attr('id');
  387. $('#' + form_id + ' input[type=checkbox]:not(:checked)').removeAttr('checked');
  388. dependsOn = '';
  389. $('#' + form_id + ' input[type=checkbox]:checked').each(function(){
  390. dependsOn += $(this).val() + ', ';
  391. $(this).attr("checked","checked");
  392. });
  393. if (dependsOn === '') {
  394. dependsOn = primary_key;
  395. } else {
  396. dependsOn = dependsOn.slice(0, -2);
  397. }
  398. if (! (dependsOn in pd)) {
  399. pd[dependsOn] = [];
  400. }
  401. pd[dependsOn].push($(this).data('colname'));
  402. if (isTransitive === true) {
  403. if (!(tblname in tablesTds)) {
  404. tablesTds[tblname] = [];
  405. }
  406. if ($.inArray(dependsOn, tablesTds[tblname]) === -1) {
  407. tablesTds[tblname].push(dependsOn);
  408. }
  409. }
  410. });
  411. backup = $("#mainContent").html();
  412. if (isTransitive === true) {
  413. goTo3NFStep2(pd, tablesTds);
  414. } else {
  415. goTo2NFStep2(pd, primary_key);
  416. }
  417. return false;
  418. }
  419. function moveRepeatingGroup(repeatingCols) {
  420. var newTable = $("input[name=repeatGroupTable]").val();
  421. var newColumn = $("input[name=repeatGroupColumn]").val();
  422. if (!newTable) {
  423. $("input[name=repeatGroupTable]").focus();
  424. return false;
  425. }
  426. if (!newColumn) {
  427. $("input[name=repeatGroupColumn]").focus();
  428. return false;
  429. }
  430. datastring = {"token": PMA_commonParams.get('token'),
  431. "ajax_request": true,
  432. "db": PMA_commonParams.get('db'),
  433. "table": PMA_commonParams.get('table'),
  434. "repeatingColumns": repeatingCols,
  435. "newTable":newTable,
  436. "newColumn":newColumn,
  437. "primary_columns":primary_key.toString()
  438. };
  439. $.ajax({
  440. type: "POST",
  441. url: "normalization.php",
  442. data: datastring,
  443. async:false,
  444. success: function(data) {
  445. if (data.success === true) {
  446. if(data.queryError === false) {
  447. goToStep3();
  448. }
  449. PMA_ajaxShowMessage(data.message, false);
  450. $("#pma_navigation_reload").click();
  451. } else {
  452. PMA_ajaxShowMessage(data.error, false);
  453. }
  454. }
  455. });
  456. }
  457. AJAX.registerTeardown('normalization.js', function () {
  458. $("#extra").off("click", "#selectNonAtomicCol");
  459. $("#splitGo").unbind('click');
  460. $('.tblFooters').off("click", "#saveSplit");
  461. $("#extra").off("click", "#addNewPrimary");
  462. $(".tblFooters").off("click", "#saveNewPrimary");
  463. $("#extra").off("click", "#removeRedundant");
  464. $("#mainContent p").off("click", "#createPrimaryKey");
  465. $("#mainContent").off("click", "#backEditPd");
  466. $("#mainContent").off("click", "#showPossiblePd");
  467. $("#mainContent").off("click", ".pickPd");
  468. });
  469. AJAX.registerOnload('normalization.js', function() {
  470. var selectedCol;
  471. normalizeto = $("#mainContent").data('normalizeto');
  472. $("#extra").on("click", "#selectNonAtomicCol", function() {
  473. if ($(this).val() === 'no_such_col') {
  474. goToStep2();
  475. } else {
  476. selectedCol = $(this).val();
  477. }
  478. });
  479. $("#splitGo").click(function() {
  480. if(!selectedCol || selectedCol === '') {
  481. return false;
  482. }
  483. var numField = $("#numField").val();
  484. $.get(
  485. "normalization.php",
  486. {
  487. "token": PMA_commonParams.get('token'),
  488. "ajax_request": true,
  489. "db": PMA_commonParams.get('db'),
  490. "table": PMA_commonParams.get('table'),
  491. "splitColumn": true,
  492. "numFields": numField
  493. },
  494. function(data) {
  495. if (data.success === true) {
  496. $('#newCols').html(data.message);
  497. $('.default_value').hide();
  498. $('.enum_notice').hide();
  499. $('.tblFooters').html("<input type='submit' id='saveSplit' value='" + PMA_messages.strSave + "'/>" +
  500. "<input type='submit' id='cancelSplit' value='" + PMA_messages.strCancel + "' " +
  501. "onclick=\"$('#newCols').html('');$(this).parent().html('')\"/>");
  502. }
  503. }
  504. );
  505. return false;
  506. });
  507. $('.tblFooters').on("click","#saveSplit", function() {
  508. central_column_list = [];
  509. if ($("#newCols #field_0_1").val() === '') {
  510. $("#newCols #field_0_1").focus();
  511. return false;
  512. }
  513. datastring = $('#newCols :input').serialize();
  514. datastring += "&ajax_request=1&do_save_data=1&field_where=last";
  515. $.post("tbl_addfield.php", datastring, function(data) {
  516. if (data.success) {
  517. $.get(
  518. "sql.php",
  519. {
  520. "token": PMA_commonParams.get('token'),
  521. "ajax_request": true,
  522. "db": PMA_commonParams.get('db'),
  523. "table": PMA_commonParams.get('table'),
  524. "dropped_column": selectedCol,
  525. "purge" : 1,
  526. "sql_query": 'ALTER TABLE `' + PMA_commonParams.get('table') + '` DROP `' + selectedCol + '`;',
  527. "is_js_confirmed": 1
  528. },
  529. function(data) {
  530. if (data.success === true) {
  531. appendHtmlColumnsList();
  532. $('#newCols').html('');
  533. $('.tblFooters').html('');
  534. } else {
  535. PMA_ajaxShowMessage(data.error, false);
  536. }
  537. selectedCol = '';
  538. }
  539. );
  540. } else {
  541. PMA_ajaxShowMessage(data.error, false);
  542. }
  543. });
  544. });
  545. $("#extra").on("click", "#addNewPrimary", function() {
  546. $.get(
  547. "normalization.php",
  548. {
  549. "token": PMA_commonParams.get('token'),
  550. "ajax_request": true,
  551. "db": PMA_commonParams.get('db'),
  552. "table": PMA_commonParams.get('table'),
  553. "addNewPrimary": true
  554. },
  555. function(data) {
  556. if (data.success === true) {
  557. $('#newCols').html(data.message);
  558. $('.default_value').hide();
  559. $('.enum_notice').hide();
  560. $('.tblFooters').html("<input type='submit' id='saveNewPrimary' value='" + PMA_messages.strSave + "'/>" +
  561. "<input type='submit' id='cancelSplit' value='" + PMA_messages.strCancel + "' " +
  562. "onclick=\"$('#newCols').html('');$(this).parent().html('')\"/>");
  563. } else {
  564. PMA_ajaxShowMessage(data.error, false);
  565. }
  566. }
  567. );
  568. return false;
  569. });
  570. $(".tblFooters").on("click", "#saveNewPrimary", function() {
  571. var datastring = $('#newCols :input').serialize();
  572. datastring += "&field_key[0]=primary_0&ajax_request=1&do_save_data=1&field_where=last";
  573. $.post("tbl_addfield.php", datastring, function(data) {
  574. if (data.success === true) {
  575. $("#mainContent h4").html(PMA_messages.strPrimaryKeyAdded);
  576. $("#mainContent p").html(PMA_messages.strToNextStep);
  577. $("#mainContent #extra").html('');
  578. $("#mainContent #newCols").html('');
  579. $('.tblFooters').html('');
  580. setTimeout(function() {
  581. goToStep3();
  582. }, 2000);
  583. } else {
  584. PMA_ajaxShowMessage(data.error, false);
  585. }
  586. });
  587. });
  588. $("#extra").on("click", "#removeRedundant", function() {
  589. var dropQuery = 'ALTER TABLE `' + PMA_commonParams.get('table') + '` ';
  590. $("#extra input[type=checkbox]:checked").each(function() {
  591. dropQuery += 'DROP `' + $(this).val() + '`, ';
  592. });
  593. dropQuery = dropQuery.slice(0, -2);
  594. $.get(
  595. "sql.php",
  596. {
  597. "token": PMA_commonParams.get('token'),
  598. "ajax_request": true,
  599. "db": PMA_commonParams.get('db'),
  600. "table": PMA_commonParams.get('table'),
  601. "sql_query": dropQuery,
  602. "is_js_confirmed": 1
  603. },
  604. function(data) {
  605. if (data.success === true) {
  606. goToStep2('goToFinish1NF');
  607. } else {
  608. PMA_ajaxShowMessage(data.error, false);
  609. }
  610. }
  611. );
  612. });
  613. $("#extra").on("click", "#moveRepeatingGroup", function() {
  614. var repeatingCols = '';
  615. $("#extra input[type=checkbox]:checked").each(function() {
  616. repeatingCols += $(this).val() + ', ';
  617. });
  618. if (repeatingCols !== '') {
  619. var newColName = $("#extra input[type=checkbox]:checked:first").val();
  620. repeatingCols = repeatingCols.slice(0, -2);
  621. var confirmStr = PMA_sprintf(PMA_messages.strMoveRepeatingGroup, escapeHtml(repeatingCols), escapeHtml(PMA_commonParams.get('table')));
  622. confirmStr += '<input type="text" name="repeatGroupTable" placeholder="' + PMA_messages.strNewTablePlaceholder + '"/>' +
  623. '( ' + escapeHtml(primary_key.toString()) + ', <input type="text" name="repeatGroupColumn" placeholder="' + PMA_messages.strNewColumnPlaceholder + '" value="' + escapeHtml(newColName) + '">)' +
  624. '</ol>';
  625. $("#newCols").html(confirmStr);
  626. $('.tblFooters').html('<input type="submit" value="' + PMA_messages.strCancel + '" onclick="$(\'#newCols\').html(\'\');$(\'#extra input[type=checkbox]\').removeAttr(\'checked\')"/>' +
  627. '<input type="submit" value="' + PMA_messages.strGo + '" onclick="moveRepeatingGroup(\'' + repeatingCols + '\')"/>');
  628. }
  629. });
  630. $("#mainContent p").on("click", "#createPrimaryKey", function(event) {
  631. event.preventDefault();
  632. var url = { create_index: 1,
  633. server: PMA_commonParams.get('server'),
  634. db: PMA_commonParams.get('db'),
  635. table: PMA_commonParams.get('table'),
  636. token: PMA_commonParams.get('token'),
  637. added_fields: 1,
  638. add_fields:1,
  639. index: {Key_name:'PRIMARY'},
  640. ajax_request: true
  641. };
  642. var title = PMA_messages.strAddPrimaryKey;
  643. indexEditorDialog(url, title, function(){
  644. //on success
  645. $(".sqlqueryresults").remove();
  646. $('.result_query').remove();
  647. $('.tblFooters').html('');
  648. goToStep2('goToStep3');
  649. });
  650. return false;
  651. });
  652. $("#mainContent").on("click", "#backEditPd", function(){
  653. $("#mainContent").html(backup);
  654. });
  655. $("#mainContent").on("click", "#showPossiblePd", function(){
  656. if($(this).hasClass('hideList')) {
  657. $(this).html('+ ' + PMA_messages.strShowPossiblePd);
  658. $(this).removeClass('hideList');
  659. $("#newCols").slideToggle("slow");
  660. return false;
  661. }
  662. if($("#newCols").html() !== '') {
  663. $("#showPossiblePd").html('- ' + PMA_messages.strHidePd);
  664. $("#showPossiblePd").addClass('hideList');
  665. $("#newCols").slideToggle("slow");
  666. return false;
  667. }
  668. $("#newCols").insertAfter("#mainContent h4");
  669. $("#newCols").html('<div class="center">' + PMA_messages.strLoading + '<br/>' + PMA_messages.strWaitForPd + '</div>');
  670. $.post(
  671. "normalization.php",
  672. {
  673. "token": PMA_commonParams.get('token'),
  674. "ajax_request": true,
  675. "db": PMA_commonParams.get('db'),
  676. "table": PMA_commonParams.get('table'),
  677. "findPdl": true
  678. }, function(data) {
  679. $("#showPossiblePd").html('- ' + PMA_messages.strHidePd);
  680. $("#showPossiblePd").addClass('hideList');
  681. $("#newCols").html(data.message);
  682. });
  683. });
  684. $("#mainContent").on("click", ".pickPd", function(){
  685. var strColsLeft = $(this).next('.determinants').html();
  686. var colsLeft = strColsLeft.split(',');
  687. var strColsRight = $(this).next().next().html();
  688. var colsRight = strColsRight.split(',');
  689. for (var i in colsRight) {
  690. $('form[data-colname="' + colsRight[i].trim() + '"] input[type="checkbox"]').prop('checked', false);
  691. for (var j in colsLeft) {
  692. $('form[data-colname="' + colsRight[i].trim() + '"] input[value="' + colsLeft[j].trim() + '"]').prop('checked', true);
  693. }
  694. }
  695. });
  696. });