aboutsummaryrefslogtreecommitdiff
path: root/srcs/phpmyadmin/js/table/relation.js
diff options
context:
space:
mode:
authorCharles <sircharlesaze@gmail.com>2020-01-09 10:55:03 +0100
committerCharles <sircharlesaze@gmail.com>2020-01-09 13:09:38 +0100
commit04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa (patch)
tree5c691241355c943a3c68ddb06b8cf8c60aa11319 /srcs/phpmyadmin/js/table/relation.js
parent7e0d85db834d6351ed85d01e5126ac31dc510b86 (diff)
downloadft_server-04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa.tar.gz
ft_server-04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa.tar.bz2
ft_server-04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa.zip
phpmyadmin working
Diffstat (limited to 'srcs/phpmyadmin/js/table/relation.js')
-rw-r--r--srcs/phpmyadmin/js/table/relation.js248
1 files changed, 248 insertions, 0 deletions
diff --git a/srcs/phpmyadmin/js/table/relation.js b/srcs/phpmyadmin/js/table/relation.js
new file mode 100644
index 0000000..600dfc1
--- /dev/null
+++ b/srcs/phpmyadmin/js/table/relation.js
@@ -0,0 +1,248 @@
+/* vim: set expandtab sw=4 ts=4 sts=4: */
+/**
+ * for tbl_relation.php
+ *
+ */
+
+var TableRelation = {};
+
+TableRelation.showHideClauses = function ($thisDropdown) {
+ if ($thisDropdown.val() === '') {
+ $thisDropdown.parent().nextAll('span').hide();
+ } else {
+ if ($thisDropdown.is('select[name^="destination_foreign_column"]')) {
+ $thisDropdown.parent().nextAll('span').show();
+ }
+ }
+};
+
+/**
+ * Sets dropdown options to values
+ */
+TableRelation.setDropdownValues = function ($dropdown, values, selectedValue) {
+ $dropdown.empty();
+ var optionsAsString = '';
+ // add an empty string to the beginning for empty selection
+ values.unshift('');
+ $.each(values, function () {
+ optionsAsString += '<option value=\'' + Functions.escapeHtml(this) + '\'' + (selectedValue === Functions.escapeHtml(this) ? ' selected=\'selected\'' : '') + '>' + Functions.escapeHtml(this) + '</option>';
+ });
+ $dropdown.append($(optionsAsString));
+};
+
+/**
+ * Retrieves and populates dropdowns to the left based on the selected value
+ *
+ * @param $dropdown the dropdown whose value got changed
+ */
+TableRelation.getDropdownValues = function ($dropdown) {
+ var foreignDb = null;
+ var foreignTable = null;
+ var $databaseDd;
+ var $tableDd;
+ var $columnDd;
+ var foreign = '';
+ // if the changed dropdown is for foreign key constraints
+ if ($dropdown.is('select[name^="destination_foreign"]')) {
+ $databaseDd = $dropdown.parent().parent().parent().find('select[name^="destination_foreign_db"]');
+ $tableDd = $dropdown.parent().parent().parent().find('select[name^="destination_foreign_table"]');
+ $columnDd = $dropdown.parent().parent().parent().find('select[name^="destination_foreign_column"]');
+ foreign = '_foreign';
+ } else { // internal relations
+ $databaseDd = $dropdown.parent().find('select[name^="destination_db"]');
+ $tableDd = $dropdown.parent().find('select[name^="destination_table"]');
+ $columnDd = $dropdown.parent().find('select[name^="destination_column"]');
+ }
+
+ // if the changed dropdown is a database selector
+ if ($dropdown.is('select[name^="destination' + foreign + '_db"]')) {
+ foreignDb = $dropdown.val();
+ // if no database is selected empty table and column dropdowns
+ if (foreignDb === '') {
+ TableRelation.setDropdownValues($tableDd, []);
+ TableRelation.setDropdownValues($columnDd, []);
+ return;
+ }
+ } else { // if a table selector
+ foreignDb = $databaseDd.val();
+ foreignTable = $dropdown.val();
+ // if no table is selected empty the column dropdown
+ if (foreignTable === '') {
+ TableRelation.setDropdownValues($columnDd, []);
+ return;
+ }
+ }
+ var $msgbox = Functions.ajaxShowMessage();
+ var $form = $dropdown.parents('form');
+ var $db = $form.find('input[name="db"]').val();
+ var $table = $form.find('input[name="table"]').val();
+ var argsep = CommonParams.get('arg_separator');
+ var params = 'getDropdownValues=true' + argsep + 'ajax_request=true' +
+ argsep + 'db=' + encodeURIComponent($db) +
+ argsep + 'table=' + encodeURIComponent($table) +
+ argsep + 'foreign=' + (foreign !== '') +
+ argsep + 'foreignDb=' + encodeURIComponent(foreignDb) +
+ (foreignTable !== null ?
+ argsep + 'foreignTable=' + encodeURIComponent(foreignTable) : ''
+ );
+ var $server = $form.find('input[name="server"]');
+ if ($server.length > 0) {
+ params += argsep + 'server=' + $form.find('input[name="server"]').val();
+ }
+ $.ajax({
+ type: 'POST',
+ url: 'tbl_relation.php',
+ data: params,
+ dataType: 'json',
+ success: function (data) {
+ Functions.ajaxRemoveMessage($msgbox);
+ if (typeof data !== 'undefined' && data.success) {
+ // if the changed dropdown is a database selector
+ if (foreignTable === null) {
+ // set values for table and column dropdowns
+ TableRelation.setDropdownValues($tableDd, data.tables);
+ TableRelation.setDropdownValues($columnDd, []);
+ } else { // if a table selector
+ // set values for the column dropdown
+ var primary = null;
+ if (typeof data.primary !== 'undefined'
+ && 1 === data.primary.length
+ ) {
+ primary = data.primary[0];
+ }
+ TableRelation.setDropdownValues($columnDd.first(), data.columns, primary);
+ TableRelation.setDropdownValues($columnDd.slice(1), data.columns);
+ }
+ } else {
+ Functions.ajaxShowMessage(data.error, false);
+ }
+ }
+ });
+};
+
+/**
+ * Unbind all event handlers before tearing down a page
+ */
+AJAX.registerTeardown('table/relation.js', function () {
+ $('body').off('change',
+ 'select[name^="destination_db"], ' +
+ 'select[name^="destination_table"], ' +
+ 'select[name^="destination_foreign_db"], ' +
+ 'select[name^="destination_foreign_table"]'
+ );
+ $('body').off('click', 'a.add_foreign_key_field');
+ $('body').off('click', 'a.add_foreign_key');
+ $('a.drop_foreign_key_anchor.ajax').off('click');
+});
+
+AJAX.registerOnload('table/relation.js', function () {
+ /**
+ * Ajax event handler to fetch table/column dropdown values.
+ */
+ $('body').on('change',
+ 'select[name^="destination_db"], ' +
+ 'select[name^="destination_table"], ' +
+ 'select[name^="destination_foreign_db"], ' +
+ 'select[name^="destination_foreign_table"]',
+ function () {
+ TableRelation.getDropdownValues($(this));
+ }
+ );
+
+ /**
+ * Ajax event handler to add a column to a foreign key constraint.
+ */
+ $('body').on('click', 'a.add_foreign_key_field', function (event) {
+ event.preventDefault();
+ event.stopPropagation();
+
+ // Add field.
+ $(this)
+ .prev('span')
+ .clone(true, true)
+ .insertBefore($(this))
+ .find('select')
+ .val('');
+
+ // Add foreign field.
+ var $sourceElem = $('select[name^="destination_foreign_column[' +
+ $(this).attr('data-index') + ']"]:last').parent();
+ $sourceElem
+ .clone(true, true)
+ .insertAfter($sourceElem)
+ .find('select')
+ .val('');
+ });
+
+ /**
+ * Ajax event handler to add a foreign key constraint.
+ */
+ $('body').on('click', 'a.add_foreign_key', function (event) {
+ event.preventDefault();
+ event.stopPropagation();
+
+ var $prevRow = $(this).closest('tr').prev('tr');
+ var $newRow = $prevRow.clone(true, true);
+
+ // Update serial number.
+ var currIndex = $newRow
+ .find('a.add_foreign_key_field')
+ .attr('data-index');
+ var newIndex = parseInt(currIndex) + 1;
+ $newRow.find('a.add_foreign_key_field').attr('data-index', newIndex);
+
+ // Update form parameter names.
+ $newRow.find('select[name^="foreign_key_fields_name"]:not(:first), ' +
+ 'select[name^="destination_foreign_column"]:not(:first)'
+ ).each(function () {
+ $(this).parent().remove();
+ });
+ $newRow.find('input, select').each(function () {
+ $(this).attr('name',
+ $(this).attr('name').replace(/\d/, newIndex)
+ );
+ });
+ $newRow.find('input[type="text"]').each(function () {
+ $(this).val('');
+ });
+ // Finally add the row.
+ $newRow.insertAfter($prevRow);
+ });
+
+ /**
+ * Ajax Event handler for 'Drop Foreign key'
+ */
+ $('a.drop_foreign_key_anchor.ajax').on('click', function (event) {
+ event.preventDefault();
+ var $anchor = $(this);
+
+ // Object containing reference to the current field's row
+ var $currRow = $anchor.parents('tr');
+
+ var dropQuery = Functions.escapeHtml(
+ $currRow.children('td')
+ .children('.drop_foreign_key_msg')
+ .val()
+ );
+
+ var question = Functions.sprintf(Messages.strDoYouReally, dropQuery);
+
+ $anchor.confirm(question, $anchor.attr('href'), function (url) {
+ var $msg = Functions.ajaxShowMessage(Messages.strDroppingForeignKey, false);
+ var params = Functions.getJsConfirmCommonParam(this, $anchor.getPostData());
+ $.post(url, params, function (data) {
+ if (data.success === true) {
+ Functions.ajaxRemoveMessage($msg);
+ CommonActions.refreshMain(false, function () {
+ // Do nothing
+ });
+ } else {
+ Functions.ajaxShowMessage(Messages.strErrorProcessingRequest + ' : ' + data.error, false);
+ }
+ }); // end $.post()
+ });
+ }); // end Drop Foreign key
+
+ var windowWidth = $(window).width();
+ $('.jsresponsive').css('max-width', (windowWidth - 35) + 'px');
+});