diff options
| author | Charles <sircharlesaze@gmail.com> | 2020-01-09 10:55:03 +0100 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2020-01-09 13:09:38 +0100 |
| commit | 04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa (patch) | |
| tree | 5c691241355c943a3c68ddb06b8cf8c60aa11319 /srcs/phpmyadmin/js/normalization.js | |
| parent | 7e0d85db834d6351ed85d01e5126ac31dc510b86 (diff) | |
| download | ft_server-04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa.tar.gz ft_server-04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa.tar.bz2 ft_server-04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa.zip | |
phpmyadmin working
Diffstat (limited to 'srcs/phpmyadmin/js/normalization.js')
| -rw-r--r-- | srcs/phpmyadmin/js/normalization.js | 757 |
1 files changed, 757 insertions, 0 deletions
diff --git a/srcs/phpmyadmin/js/normalization.js b/srcs/phpmyadmin/js/normalization.js new file mode 100644 index 0000000..982ce6e --- /dev/null +++ b/srcs/phpmyadmin/js/normalization.js @@ -0,0 +1,757 @@ +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * @fileoverview events handling from normalization page + * @name normalization + * + * @requires jQuery + */ + +// eslint-disable-next-line no-unused-vars +/* global centralColumnList:writable */ // js/functions.js + +/** + * AJAX scripts for normalization.php + * + */ + +var normalizeto = '1nf'; +var primaryKey; +var dataParsed = null; + +function appendHtmlColumnsList () { + $.post( + 'normalization.php', + { + 'ajax_request': true, + 'db': CommonParams.get('db'), + 'table': CommonParams.get('table'), + 'server': CommonParams.get('server'), + 'getColumns': true + }, + function (data) { + if (data.success === true) { + $('select[name=makeAtomic]').html(data.message); + } + } + ); +} + +function goTo3NFStep1 (newTables) { + var tables = newTables; + if (Object.keys(tables).length === 1) { + tables = [CommonParams.get('table')]; + } + $.post( + 'normalization.php', + { + 'ajax_request': true, + 'db': CommonParams.get('db'), + 'server': CommonParams.get('server'), + 'tables': tables, + 'step': '3.1' + }, function (data) { + $('#page_content').find('h3').html(Messages.str3NFNormalization); + $('#mainContent').find('legend').html(data.legendText); + $('#mainContent').find('h4').html(data.headText); + $('#mainContent').find('p').html(data.subText); + $('#mainContent').find('#extra').html(data.extra); + $('#extra').find('form').each(function () { + var formId = $(this).attr('id'); + var colName = $(this).data('colname'); + $('#' + formId + ' input[value=\'' + colName + '\']').next().remove(); + $('#' + formId + ' input[value=\'' + colName + '\']').remove(); + }); + $('#mainContent').find('#newCols').html(''); + $('.tblFooters').html(''); + + if (data.subText !== '') { + $('<input>') + .attr({ type: 'button', value: Messages.strDone }) + .on('click', function () { + processDependencies('', true); + }) + .appendTo('.tblFooters'); + } + } + ); +} + +function goTo2NFStep1 () { + $.post( + 'normalization.php', + { + 'ajax_request': true, + 'db': CommonParams.get('db'), + 'table': CommonParams.get('table'), + 'server': CommonParams.get('server'), + 'step': '2.1' + }, function (data) { + $('#page_content h3').html(Messages.str2NFNormalization); + $('#mainContent legend').html(data.legendText); + $('#mainContent h4').html(data.headText); + $('#mainContent p').html(data.subText); + $('#mainContent #extra').html(data.extra); + $('#mainContent #newCols').html(''); + if (data.subText !== '') { + $('<input>') + .attr({ type: 'submit', value: Messages.strDone, }) + .on('click', function () { + processDependencies(data.primary_key); + }) + .appendTo('.tblFooters'); + } else { + if (normalizeto === '3nf') { + $('#mainContent #newCols').html(Messages.strToNextStep); + setTimeout(function () { + goTo3NFStep1([CommonParams.get('table')]); + }, 3000); + } + } + }); +} + +function goToFinish1NF () { + if (normalizeto !== '1nf') { + goTo2NFStep1(); + return true; + } + $('#mainContent legend').html(Messages.strEndStep); + $('#mainContent h4').html( + '<h3>' + Functions.sprintf(Messages.strFinishMsg, Functions.escapeHtml(CommonParams.get('table'))) + '</h3>' + ); + $('#mainContent p').html(''); + $('#mainContent #extra').html(''); + $('#mainContent #newCols').html(''); + $('.tblFooters').html(''); +} + +// eslint-disable-next-line no-unused-vars +function goToStep4 () { + $.post( + 'normalization.php', + { + 'ajax_request': true, + 'db': CommonParams.get('db'), + 'table': CommonParams.get('table'), + 'server': CommonParams.get('server'), + 'step4': true + }, function (data) { + $('#mainContent legend').html(data.legendText); + $('#mainContent h4').html(data.headText); + $('#mainContent p').html(data.subText); + $('#mainContent #extra').html(data.extra); + $('#mainContent #newCols').html(''); + $('.tblFooters').html(''); + for (var pk in primaryKey) { + $('#extra input[value=\'' + Functions.escapeJsString(primaryKey[pk]) + '\']').attr('disabled','disabled'); + } + } + ); +} + +function goToStep3 () { + $.post( + 'normalization.php', + { + 'ajax_request': true, + 'db': CommonParams.get('db'), + 'table': CommonParams.get('table'), + 'server': CommonParams.get('server'), + 'step3': true + }, function (data) { + $('#mainContent legend').html(data.legendText); + $('#mainContent h4').html(data.headText); + $('#mainContent p').html(data.subText); + $('#mainContent #extra').html(data.extra); + $('#mainContent #newCols').html(''); + $('.tblFooters').html(''); + primaryKey = JSON.parse(data.primary_key); + for (var pk in primaryKey) { + $('#extra input[value=\'' + Functions.escapeJsString(primaryKey[pk]) + '\']').attr('disabled','disabled'); + } + } + ); +} + +function goToStep2 (extra) { + $.post( + 'normalization.php', + { + 'ajax_request': true, + 'db': CommonParams.get('db'), + 'table': CommonParams.get('table'), + 'server': CommonParams.get('server'), + 'step2': true + }, function (data) { + $('#mainContent legend').html(data.legendText); + $('#mainContent h4').html(data.headText); + $('#mainContent p').html(data.subText); + $('#mainContent #extra,#mainContent #newCols').html(''); + $('.tblFooters').html(''); + if (data.hasPrimaryKey === '1') { + if (extra === 'goToStep3') { + $('#mainContent h4').html(Messages.strPrimaryKeyAdded); + $('#mainContent p').html(Messages.strToNextStep); + } + if (extra === 'goToFinish1NF') { + goToFinish1NF(); + } else { + setTimeout(function () { + goToStep3(); + }, 3000); + } + } else { + // form to select columns to make primary + $('#mainContent #extra').html(data.extra); + } + } + ); +} + +function goTo2NFFinish (pd) { + var tables = {}; + for (var dependson in pd) { + tables[dependson] = $('#extra input[name="' + dependson + '"]').val(); + } + var datastring = { + 'ajax_request': true, + 'db': CommonParams.get('db'), + 'table': CommonParams.get('table'), + 'server': CommonParams.get('server'), + 'pd': JSON.stringify(pd), + 'newTablesName':JSON.stringify(tables), + 'createNewTables2NF':1 }; + $.ajax({ + type: 'POST', + url: 'normalization.php', + data: datastring, + async:false, + success: function (data) { + if (data.success === true) { + if (data.queryError === false) { + if (normalizeto === '3nf') { + $('#pma_navigation_reload').trigger('click'); + goTo3NFStep1(tables); + return true; + } + $('#mainContent legend').html(data.legendText); + $('#mainContent h4').html(data.headText); + $('#mainContent p').html(''); + $('#mainContent #extra').html(''); + $('.tblFooters').html(''); + } else { + Functions.ajaxShowMessage(data.extra, false); + } + $('#pma_navigation_reload').trigger('click'); + } else { + Functions.ajaxShowMessage(data.error, false); + } + } + }); +} + +function goTo3NFFinish (newTables) { + for (var table in newTables) { + for (var newtbl in newTables[table]) { + var updatedname = $('#extra input[name="' + newtbl + '"]').val(); + newTables[table][updatedname] = newTables[table][newtbl]; + if (updatedname !== newtbl) { + delete newTables[table][newtbl]; + } + } + } + var datastring = { + 'ajax_request': true, + 'db': CommonParams.get('db'), + 'server': CommonParams.get('server'), + 'newTables':JSON.stringify(newTables), + 'createNewTables3NF':1 }; + $.ajax({ + type: 'POST', + url: 'normalization.php', + data: datastring, + async:false, + success: function (data) { + if (data.success === true) { + if (data.queryError === false) { + $('#mainContent legend').html(data.legendText); + $('#mainContent h4').html(data.headText); + $('#mainContent p').html(''); + $('#mainContent #extra').html(''); + $('.tblFooters').html(''); + } else { + Functions.ajaxShowMessage(data.extra, false); + } + $('#pma_navigation_reload').trigger('click'); + } else { + Functions.ajaxShowMessage(data.error, false); + } + } + }); +} + +var backup = ''; + +function goTo2NFStep2 (pd, primaryKey) { + $('#newCols').html(''); + $('#mainContent legend').html(Messages.strStep + ' 2.2 ' + Messages.strConfirmPd); + $('#mainContent h4').html(Messages.strSelectedPd); + $('#mainContent p').html(Messages.strPdHintNote); + var extra = '<div class="dependencies_box">'; + var pdFound = false; + for (var dependson in pd) { + if (dependson !== primaryKey) { + pdFound = true; + extra += '<p class="displayblock desc">' + Functions.escapeHtml(dependson) + ' -> ' + Functions.escapeHtml(pd[dependson].toString()) + '</p>'; + } + } + if (!pdFound) { + extra += '<p class="displayblock desc">' + Messages.strNoPdSelected + '</p>'; + extra += '</div>'; + } else { + extra += '</div>'; + var datastring = { + 'ajax_request': true, + 'db': CommonParams.get('db'), + 'table': CommonParams.get('table'), + 'server': CommonParams.get('server'), + 'pd': JSON.stringify(pd), + 'getNewTables2NF':1 }; + $.ajax({ + type: 'POST', + url: 'normalization.php', + data: datastring, + async:false, + success: function (data) { + if (data.success === true) { + extra += data.message; + } else { + Functions.ajaxShowMessage(data.error, false); + } + } + }); + } + $('#mainContent #extra').html(extra); + $('.tblFooters').html('<input type="button" value="' + Messages.strBack + '" id="backEditPd"><input type="button" id="goTo2NFFinish" value="' + Messages.strGo + '">'); + $('#goTo2NFFinish').on('click', function () { + goTo2NFFinish(pd); + }); +} + +function goTo3NFStep2 (pd, tablesTds) { + $('#newCols').html(''); + $('#mainContent legend').html(Messages.strStep + ' 3.2 ' + Messages.strConfirmTd); + $('#mainContent h4').html(Messages.strSelectedTd); + $('#mainContent p').html(Messages.strPdHintNote); + var extra = '<div class="dependencies_box">'; + var pdFound = false; + for (var table in tablesTds) { + for (var i in tablesTds[table]) { + var dependson = tablesTds[table][i]; + if (dependson !== '' && dependson !== table) { + pdFound = true; + extra += '<p class="displayblock desc">' + Functions.escapeHtml(dependson) + ' -> ' + Functions.escapeHtml(pd[dependson].toString()) + '</p>'; + } + } + } + if (!pdFound) { + extra += '<p class="displayblock desc">' + Messages.strNoTdSelected + '</p>'; + extra += '</div>'; + } else { + extra += '</div>'; + var datastring = { + 'ajax_request': true, + 'db': CommonParams.get('db'), + 'tables': JSON.stringify(tablesTds), + 'server': CommonParams.get('server'), + 'pd': JSON.stringify(pd), + 'getNewTables3NF':1 }; + $.ajax({ + type: 'POST', + url: 'normalization.php', + data: datastring, + async:false, + success: function (data) { + dataParsed = data; + if (data.success === true) { + extra += dataParsed.html; + } else { + Functions.ajaxShowMessage(data.error, false); + } + } + }); + } + $('#mainContent #extra').html(extra); + $('.tblFooters').html('<input type="button" value="' + Messages.strBack + '" id="backEditPd"><input type="button" id="goTo3NFFinish" value="' + Messages.strGo + '">'); + $('#goTo3NFFinish').on('click', function () { + if (!pdFound) { + goTo3NFFinish([]); + } else { + goTo3NFFinish(dataParsed.newTables); + } + }); +} +function processDependencies (primaryKey, isTransitive) { + var pk = primaryKey; + var pd = {}; + var tablesTds = {}; + var dependsOn; + pd[pk] = []; + $('#extra form').each(function () { + var tblname; + if (isTransitive === true) { + tblname = $(this).data('tablename'); + pk = tblname; + if (!(tblname in tablesTds)) { + tablesTds[tblname] = []; + } + tablesTds[tblname].push(pk); + } + var formId = $(this).attr('id'); + $('#' + formId + ' input[type=checkbox]:not(:checked)').prop('checked', false); + dependsOn = ''; + $('#' + formId + ' input[type=checkbox]:checked').each(function () { + dependsOn += $(this).val() + ', '; + $(this).attr('checked','checked'); + }); + if (dependsOn === '') { + dependsOn = pk; + } else { + dependsOn = dependsOn.slice(0, -2); + } + if (! (dependsOn in pd)) { + pd[dependsOn] = []; + } + pd[dependsOn].push($(this).data('colname')); + if (isTransitive === true) { + if (!(tblname in tablesTds)) { + tablesTds[tblname] = []; + } + if ($.inArray(dependsOn, tablesTds[tblname]) === -1) { + tablesTds[tblname].push(dependsOn); + } + } + }); + backup = $('#mainContent').html(); + if (isTransitive === true) { + goTo3NFStep2(pd, tablesTds); + } else { + goTo2NFStep2(pd, pk); + } + return false; +} + +function moveRepeatingGroup (repeatingCols) { + var newTable = $('input[name=repeatGroupTable]').val(); + var newColumn = $('input[name=repeatGroupColumn]').val(); + if (!newTable) { + $('input[name=repeatGroupTable]').trigger('focus'); + return false; + } + if (!newColumn) { + $('input[name=repeatGroupColumn]').trigger('focus'); + return false; + } + var datastring = { + 'ajax_request': true, + 'db': CommonParams.get('db'), + 'table': CommonParams.get('table'), + 'server': CommonParams.get('server'), + 'repeatingColumns': repeatingCols, + 'newTable':newTable, + 'newColumn':newColumn, + 'primary_columns':primaryKey.toString() + }; + $.ajax({ + type: 'POST', + url: 'normalization.php', + data: datastring, + async:false, + success: function (data) { + if (data.success === true) { + if (data.queryError === false) { + goToStep3(); + } + Functions.ajaxShowMessage(data.message, false); + $('#pma_navigation_reload').trigger('click'); + } else { + Functions.ajaxShowMessage(data.error, false); + } + } + }); +} +AJAX.registerTeardown('normalization.js', function () { + $('#extra').off('click', '#selectNonAtomicCol'); + $('#splitGo').off('click'); + $('.tblFooters').off('click', '#saveSplit'); + $('#extra').off('click', '#addNewPrimary'); + $('.tblFooters').off('click', '#saveNewPrimary'); + $('#extra').off('click', '#removeRedundant'); + $('#mainContent p').off('click', '#createPrimaryKey'); + $('#mainContent').off('click', '#backEditPd'); + $('#mainContent').off('click', '#showPossiblePd'); + $('#mainContent').off('click', '.pickPd'); +}); + +AJAX.registerOnload('normalization.js', function () { + var selectedCol; + normalizeto = $('#mainContent').data('normalizeto'); + $('#extra').on('click', '#selectNonAtomicCol', function () { + if ($(this).val() === 'no_such_col') { + goToStep2(); + } else { + selectedCol = $(this).val(); + } + }); + + $('#splitGo').on('click', function () { + if (!selectedCol || selectedCol === '') { + return false; + } + var numField = $('#numField').val(); + $.post( + 'normalization.php', + { + 'ajax_request': true, + 'db': CommonParams.get('db'), + 'table': CommonParams.get('table'), + 'server': CommonParams.get('server'), + 'splitColumn': true, + 'numFields': numField + }, + function (data) { + if (data.success === true) { + $('#newCols').html(data.message); + $('.default_value').hide(); + $('.enum_notice').hide(); + + $('<input>') + .attr({ type: 'submit', id: 'saveSplit', value: Messages.strSave }) + .appendTo('.tblFooters'); + + $('<input>') + .attr({ type: 'submit', id: 'cancelSplit', value: Messages.strCancel }) + .on('click', function () { + $('#newCols').html(''); + $(this).parent().html(''); + }) + .appendTo('.tblFooters'); + } + } + ); + return false; + }); + $('.tblFooters').on('click','#saveSplit', function () { + centralColumnList = []; + if ($('#newCols #field_0_1').val() === '') { + $('#newCols #field_0_1').trigger('focus'); + return false; + } + var argsep = CommonParams.get('arg_separator'); + var datastring = $('#newCols :input').serialize(); + datastring += argsep + 'ajax_request=1' + argsep + 'do_save_data=1' + argsep + 'field_where=last'; + $.post('tbl_addfield.php', datastring, function (data) { + if (data.success) { + $.post( + 'sql.php', + { + 'ajax_request': true, + 'db': CommonParams.get('db'), + 'table': CommonParams.get('table'), + 'server': CommonParams.get('server'), + 'dropped_column': selectedCol, + 'purge' : 1, + 'sql_query': 'ALTER TABLE `' + CommonParams.get('table') + '` DROP `' + selectedCol + '`;', + 'is_js_confirmed': 1 + }, + function (data) { + if (data.success === true) { + appendHtmlColumnsList(); + $('#newCols').html(''); + $('.tblFooters').html(''); + } else { + Functions.ajaxShowMessage(data.error, false); + } + selectedCol = ''; + } + ); + } else { + Functions.ajaxShowMessage(data.error, false); + } + }); + }); + + $('#extra').on('click', '#addNewPrimary', function () { + $.post( + 'normalization.php', + { + 'ajax_request': true, + 'db': CommonParams.get('db'), + 'table': CommonParams.get('table'), + 'server': CommonParams.get('server'), + 'addNewPrimary': true + }, + function (data) { + if (data.success === true) { + $('#newCols').html(data.message); + $('.default_value').hide(); + $('.enum_notice').hide(); + + $('<input>') + .attr({ type: 'submit', id: 'saveNewPrimary', value: Messages.strSave }) + .appendTo('.tblFooters'); + $('<input>') + .attr({ type: 'submit', id: 'cancelSplit', value: Messages.strCancel }) + .on('click', function () { + $('#newCols').html(''); + $(this).parent().html(''); + }) + .appendTo('.tblFooters'); + } else { + Functions.ajaxShowMessage(data.error, false); + } + } + ); + return false; + }); + $('.tblFooters').on('click', '#saveNewPrimary', function () { + var datastring = $('#newCols :input').serialize(); + var argsep = CommonParams.get('arg_separator'); + datastring += argsep + 'field_key[0]=primary_0' + argsep + 'ajax_request=1' + argsep + 'do_save_data=1' + argsep + 'field_where=last'; + $.post('tbl_addfield.php', datastring, function (data) { + if (data.success === true) { + $('#mainContent h4').html(Messages.strPrimaryKeyAdded); + $('#mainContent p').html(Messages.strToNextStep); + $('#mainContent #extra').html(''); + $('#mainContent #newCols').html(''); + $('.tblFooters').html(''); + setTimeout(function () { + goToStep3(); + }, 2000); + } else { + Functions.ajaxShowMessage(data.error, false); + } + }); + }); + $('#extra').on('click', '#removeRedundant', function () { + var dropQuery = 'ALTER TABLE `' + CommonParams.get('table') + '` '; + $('#extra input[type=checkbox]:checked').each(function () { + dropQuery += 'DROP `' + $(this).val() + '`, '; + }); + dropQuery = dropQuery.slice(0, -2); + $.post( + 'sql.php', + { + 'ajax_request': true, + 'db': CommonParams.get('db'), + 'table': CommonParams.get('table'), + 'server': CommonParams.get('server'), + 'sql_query': dropQuery, + 'is_js_confirmed': 1 + }, + function (data) { + if (data.success === true) { + goToStep2('goToFinish1NF'); + } else { + Functions.ajaxShowMessage(data.error, false); + } + } + ); + }); + $('#extra').on('click', '#moveRepeatingGroup', function () { + var repeatingCols = ''; + $('#extra input[type=checkbox]:checked').each(function () { + repeatingCols += $(this).val() + ', '; + }); + + if (repeatingCols !== '') { + var newColName = $('#extra input[type=checkbox]:checked:first').val(); + repeatingCols = repeatingCols.slice(0, -2); + var confirmStr = Functions.sprintf(Messages.strMoveRepeatingGroup, Functions.escapeHtml(repeatingCols), Functions.escapeHtml(CommonParams.get('table'))); + confirmStr += '<input type="text" name="repeatGroupTable" placeholder="' + Messages.strNewTablePlaceholder + '">' + + '( ' + Functions.escapeHtml(primaryKey.toString()) + ', <input type="text" name="repeatGroupColumn" placeholder="' + Messages.strNewColumnPlaceholder + '" value="' + Functions.escapeHtml(newColName) + '">)' + + '</ol>'; + $('#newCols').html(confirmStr); + + $('<input>') + .attr({ type: 'submit', value: Messages.strCancel }) + .on('click', function () { + $('#newCols').html(''); + $('#extra input[type=checkbox]').prop('checked', false); + }) + .appendTo('.tblFooters'); + $('<input>') + .attr({ type: 'submit', value: Messages.strGo }) + .on('click', function () { + moveRepeatingGroup(repeatingCols); + }) + .appendTo('.tblFooters'); + } + }); + $('#mainContent p').on('click', '#createPrimaryKey', function (event) { + event.preventDefault(); + var url = { + 'create_index': 1, + 'server': CommonParams.get('server'), + 'db': CommonParams.get('db'), + 'table': CommonParams.get('table'), + 'added_fields': 1, + 'add_fields':1, + 'index': { 'Key_name':'PRIMARY' }, + 'ajax_request': true + }; + var title = Messages.strAddPrimaryKey; + Functions.indexEditorDialog(url, title, function () { + // on success + $('.sqlqueryresults').remove(); + $('.result_query').remove(); + $('.tblFooters').html(''); + goToStep2('goToStep3'); + }); + return false; + }); + $('#mainContent').on('click', '#backEditPd', function () { + $('#mainContent').html(backup); + }); + $('#mainContent').on('click', '#showPossiblePd', function () { + if ($(this).hasClass('hideList')) { + $(this).html('+ ' + Messages.strShowPossiblePd); + $(this).removeClass('hideList'); + $('#newCols').slideToggle('slow'); + return false; + } + if ($('#newCols').html() !== '') { + $('#showPossiblePd').html('- ' + Messages.strHidePd); + $('#showPossiblePd').addClass('hideList'); + $('#newCols').slideToggle('slow'); + return false; + } + $('#newCols').insertAfter('#mainContent h4'); + $('#newCols').html('<div class="center">' + Messages.strLoading + '<br>' + Messages.strWaitForPd + '</div>'); + $.post( + 'normalization.php', + { + 'ajax_request': true, + 'db': CommonParams.get('db'), + 'table': CommonParams.get('table'), + 'server': CommonParams.get('server'), + 'findPdl': true + }, function (data) { + $('#showPossiblePd').html('- ' + Messages.strHidePd); + $('#showPossiblePd').addClass('hideList'); + $('#newCols').html(data.message); + }); + }); + $('#mainContent').on('click', '.pickPd', function () { + var strColsLeft = $(this).next('.determinants').html(); + var colsLeft = strColsLeft.split(','); + var strColsRight = $(this).next().next().html(); + var colsRight = strColsRight.split(','); + for (var i in colsRight) { + $('form[data-colname="' + colsRight[i].trim() + '"] input[type="checkbox"]').prop('checked', false); + for (var j in colsLeft) { + $('form[data-colname="' + colsRight[i].trim() + '"] input[value="' + colsLeft[j].trim() + '"]').prop('checked', true); + } + } + }); +}); |
