| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- var rows = [];
- var modal;
- if(Array.isArray(fieldSettings)) fieldSettings = {};
- if(Array.isArray(allTypeOptions)) allTypeOptions = {};
- function query(callback) {
- $.post(createLink('dataset', 'ajaxQuery'), {sql: $('#sql').val()}, function(resp) {
- resp = JSON.parse(resp);
- if(resp.result !== 'success')
- {
- $('.error').removeClass('hidden');
- if(typeof resp.message.errorInfo != 'undefined')
- {
- $('.error td').html(resp.message.errorInfo.join(' '));
- }
- else
- {
- $('.error td').html(resp.message);
- }
- }
- else
- {
- fields = resp.fields;
- rows = resp.rows;
- vars = resp.vars;
- drawTable(resp.fields, resp.rows);
- if(typeof callback !== 'undefined') callback();
- }
- });
- }
- $(document).ready(function()
- {
- $('#sql').on('input', function() { $('.error').addClass('hidden'); })
- $('.query').click(function() {
- query();
- })
- $('.fieldSettings').click(function() {
- query(function() {
- modal = new $.zui.ModalTrigger({title: lang.fieldSettings, custom: function(el) {
- var html = '<form id="edit" onsubmit="javascript:saveSettings();return false;">';
- html += '<table class="table table-form">';
- html += '<thead><tr><th class="w-100px">' + lang.field + '</th><th class="w-250px">' + lang.fieldName + '</th><th class="w-300px">' + lang.fieldType + '</th></tr></thead><tbody>';
- for(let index in fields)
- {
- var field = fields[index];
- var typeOptions = genTypeOptions(index);
- var name = typeof fieldSettings[field] == 'undefined' ? '' : fieldSettings[field].name;
- html += '<tr><td>' + field + '</td><td><input name="name" id="name' + index + '" class="form-control" value="' + name + '" /></td><td class="td-row">' + typeOptions + '</td></tr>';
- }
- html += '</tbody>';
- html += '<tfoot><tr><td colspan="3" class="text-center"><button type="submit" id="submit" class="btn btn-wide btn-primary">' + lang.save + '</button></td></tr></tfoot>';
- html += '</table>';
- html += '</form>';
- return html;
- }});
- modal.show({onShow: function()
- {
- setTimeout(function() {
- $('.chosen').chosen();
- $('select[name^="object"]').change(function(e)
- {
- var object = $(this).val();
- var objectid = $(this).attr('id');
- var $that = $(this);
- if(!object) return false;
- $.get(createLink('dataset', 'ajaxGetTypeOptions', 'object=' + object), function(res)
- {
- var index = objectid.substring(6);
- var id = 'type' + index;
- var res = JSON.parse(res);
- var options = '';
- for(let key in res.options)
- {
- options += '<option value="' + key + '">' + res.options[key].name + '</option>';
- }
- allTypeOptions[object] = res.options;
- var html = '<select class="form-control chosen" name="type[]" id="' + id + '">'+ options + '</select>';
- $that.closest('.td-row').find('.typebox').html(html);
- $('.types').chosen();
- });
- });
- }, 20)
- return false;
- }})
- modal.show();
- });
- })
- $('.save').click(function() {
- query(function() {
- for(let field in fields)
- {
- if(typeof(fieldSettings[field]) == 'undefined')
- {
- fieldSettings[field] = {
- name: fields[field],
- object: '',
- field: '',
- type: 'string',
- };
- }
- }
- /* Fix bug #26716. */
- for(let index in fieldSettings)
- {
- if(!Object.keys(fields).includes(index)) delete fieldSettings[index];
- }
- $.post(createLink('dataset', 'edit', "dataset=" + dataset.id), {name: $('#name').val(), sql: $('#sql').val(), fields: JSON.stringify(fieldSettings), objects: JSON.stringify(allTypeOptions)}, function(res) {
- res = JSON.parse(res);
- if(res.result == 'fail')
- {
- $('.error').removeClass('hidden');
- if(typeof res.message.name != 'undefined') $('.error td').html(res.message.name);
- return;
- }
- window.location.href = createLink('dataset', 'browse', 'type=custom');
- })
- })
- })
- });
- function saveSettings()
- {
- for(let index in fields)
- {
- var object = $('#object' + index).val();
- var type = object ? allTypeOptions[object][$('#type' + index).val()].type : 'string';
- fieldSettings[fields[index]] = {
- name: $('#name' + index).val(),
- object: object,
- field: $('#type' + index).val(),
- type: type,
- }
- }
- modal.close();
- this.drawTable(fields, rows);
- return false;
- }
- function genTypeOptions(index)
- {
- var object = typeof fieldSettings[fields[index]] == 'undefined' ? '' : fieldSettings[fields[index]].object;
- var field = typeof fieldSettings[fields[index]] == 'undefined' ? '' : fieldSettings[fields[index]].field;
- var objectOptions = '<option value=""></option>';
- for(let value in lang.objects)
- {
- objectOptions += '<option value="' + value + '" ' + (value === object ? 'selected' : '') + '>' + lang.objects[value] + '</option>';
- }
- var typeOptions = '<option value=""></option>';
- for(let value in allTypeOptions[object])
- {
- typeOptions += '<option value="' + value + '" ' + (value === field ? 'selected' : '') + '>' + allTypeOptions[object][value].name + '</option>';
- }
- return '<div class="table-col"><select name="object[]" id="object' + index + '" class="form-control chosen">' + objectOptions + '</select></div><div class="table-col typebox"><select class="form-control types chosen" name="type[]" id="type' + index + '">' + typeOptions + '</select></div>';
- }
- function drawTable(fields, rows)
- {
- var head = '<tr>';
- for(let field in fields)
- {
- var fieldName = fields[field];
- head += '<th>' + (typeof fieldSettings[field] !== 'undefined' && fieldSettings[field].name ? fieldSettings[field].name : fieldName) + '</th>';
- }
- head += '</tr>';
- var html = '<thead>' + head + '</thead>';
- var body = '';
- for(let row of rows)
- {
- body += '<tr>';
- for(let index in row) body += '<td>' + row[index] + '</td>';
- body += '</tr>';
- }
- html += '<tbody>' + body + '</tbody>';
- $('table.result').html(html);
- }
|