normalization.js 27 KB

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