';
var langs = DataStorage.langs;
for(let field in fields)
{
var fieldName = fields[field];
if(!$.isEmptyObject(langs) && typeof(langs[field]) !== 'undefined') fieldName = langs[field][clientLang] ? langs[field][clientLang] : fieldName;
head += '
' + fieldName + '
';
}
head += '
';
var html = '' + head + '';
var body = '';
for(let row of rows)
{
body += '
';
for(let index in row) body += '
' + row[index] + '
';
body += '
';
}
html += '' + body + '';
$('table.result').html(html);
});
}
/**
* Get text width.
*
* @param string text
* @access public
* @return float
*/
function getTextWidth(text)
{
var font = "bold 12pt arial"
var canvas = document.createElement("canvas");
var context = canvas.getContext("2d");
context.font = font;
var measure = context.measureText(text);
return measure.width;
}
/**
* Get field settings.
*
* @access public
* @return float
*/
function getFieldSettings()
{
var fieldSettings = DataStorage.clone('fieldSettings');
var fields = DataStorage.fields;
var columns = DataStorage.columns;
var relatedObject = DataStorage.relatedObject;
var objectFields = DataStorage.objectFields;
var fieldSettingsNew = {};
for(let index in fields)
{
var field = fields[index];
var defaultType = columns[index];
var defaultObject = relatedObject[index];
if(typeof(objectFields) != 'undefined' && typeof(objectFields[defaultObject]) != 'undefined' && typeof(objectFields[defaultObject][index]) != 'undefined') defaultType = objectFields[defaultObject][index].type == 'object' ? 'string' : objectFields[defaultObject][index].type;
if(!fieldSettings[index])
{
fieldSettingsNew[index] = {
name: field,
object: defaultObject,
field: index,
type: defaultType
};
}
else
{
var object = fieldSettings[index].object;
if(!object || object.length == 0) object = defaultObject;
fieldSettings[index].object = object;
var field = fieldSettings[index].field;
if(!field || field.length == 0)
{
fieldSettings[index].field = index;
fieldSettings[index].object = defaultObject;
fieldSettings[index].type = 'string';
}
if(!fieldSettings[index].name) fieldSettings[index].name = fields[index];
var type = fieldSettings[index].type;
if(object == defaultObject && type != defaultType) fieldSettings[index].type = defaultType;
fieldSettingsNew[index] = fieldSettings[index];
}
}
DataStorage.fieldSettings = fieldSettingsNew;
}
function submitForm()
{
if($('#fields').length == 0) $('#dataform table').before($('').attr({name: 'fields', id: 'fields'}).addClass('hidden'));
if($('#langs').length == 0) $('#dataform table').before($('').attr({name: 'langs', id: 'langs'}).addClass('hidden'));
getFieldSettings();
/* Fix bug #26716. */
var fieldSettings = DataStorage.clone('fieldSettings');
var fields = DataStorage.fields;
for(let index in fieldSettings)
{
if(!Object.keys(fields).includes(index)) delete fieldSettings[index];
}
DataStorage.fieldSettings = fieldSettings;
$('#fields').val(JSON.stringify(DataStorage.fieldSettings));
$('#langs').val(JSON.stringify(DataStorage.langs));
$('#dataform').submit();
}
/**
* Set related field.
*
* @param obj $obj
* @access public
* @return void
*/
function setRelatedField(obj)
{
var selectedTable = $(obj).val();
var relatedFields = [];
var objectFields = DataStorage.objectFields;
for(let index in objectFields[selectedTable]) relatedFields[index] = objectFields[selectedTable][index].name;
var relatedFieldOptions = Object.keys(relatedFields).map(function(key)
{
return {text: relatedFields[key], value: key};
});
var $relatedField = $(obj).closest('tr').find("select[name^='relatedField']");
var picker = $relatedField.data('zui.picker');
if(picker) picker.destroy();
$relatedField.picker({list: relatedFieldOptions, autoselectfirst: true});
}
/**
* handle click table item in data dictionary
*
* @param obj $event
* @access public
* @return void
*/
function handleClickDictTable(event)
{
if(!$(event.target).hasClass('list-toggle') && !$(event.target).closest('li').hasClass('field-item'))
{
const table = $(event.target).closest('li').data('dict');
appendTextToSqlForm(table);
event.stopPropagation();
}
}
/**
* handle click field item in data dictionary
*
* @param obj $event
* @access public
* @return void
*/
function handleClickDictField(event)
{
const field = $(event.target).closest('li').data('dict');
appendTextToSqlForm(field);
}
/**
* append text to sql form.
*
* @param string $text
* @access public
* @return void
*/
function appendTextToSqlForm(text)
{
const sqlForm = $('textarea[name="sql"]');
sqlForm.val(sqlForm.val() + text);
}
/**
* Active field.
*
* @param obj $obj
* @access public
* @return void
*/
function activeField(obj)
{
if(currentTheme == 'default')
{
$(obj).closest('tr').find('#' + $(obj).data('field')).css('color', '#2e7fff');
}
else
{
$(obj).closest('tr').find('#' + $(obj).data('field')).addClass('text-primary');
}
}
/**
* Remove field active.
*
* @param obj $obj
* @access public
* @return void
*/
function removeActive(obj)
{
if(currentTheme == 'default')
{
$(obj).closest('tr').find('#' + $(obj).data('field')).css('color', '#0b0f18');
}
else
{
$(obj).closest('tr').find('#' + $(obj).data('field')).removeClass('text-primary');
}
}
$(document).ready(function()
{
$('#sql').on('input', function()
{
$('.error').addClass('hidden');
// fieldSettings = {};
})
$('#sql').on('change', function()
{
DataStorage.fieldSettings = {};
DataStorage.langs = {};
})
if($('#sql').val()) setTimeout(query, 500);
$('.query').click(function()
{
DataStorage.pageID = 1;
query();
});
$('.fieldSettings').click(function() {
query(function() {
var formTpl = $('#fieldSettingTpl').html();
var formHtml = $(formTpl);
var tbodyTpl = $('#tbodyTpl').html();
var fieldTypeOptions = Object.keys(lang.objects).map(function(key)
{
return {text: lang.objects[key], value: key};
});
var fieldSettings = DataStorage.fieldSettings;
var objectFields = DataStorage.objectFields;
var langs = DataStorage.langs;
var tbodyHtmls = Object.keys(fieldSettings).map(function(field)
{
var relatedFields = [];
var relatedObjectFields = objectFields[fieldSettings[field].object];
for(let index in relatedObjectFields) relatedFields[index] = relatedObjectFields[index].name;
var relatedFieldOptions = Object.keys(relatedFields).map(function(key)
{
return {text: relatedFields[key], value: key};
});
var html = $($.zui.formatString(tbodyTpl, {field: field, name: fieldSettings[field].name}));
html.find('select#relatedTable' + field).picker({list: fieldTypeOptions, defaultValue: fieldSettings[field].object});
html.find('select#relatedField' + field).picker({list: relatedFieldOptions, defaultValue: fieldSettings[field].field});
html.find("input[name^='langs']").each(function()
{
var field = $(this).data('field');
var lang = $(this).data('lang');
var fieldName = '';
if(lang == clientLang)
{
var relatedFieldName = $(this).closest('tr').find('select#relatedField' + field + '~ div.picker').find('span.picker-selection-text').text();
fieldName = relatedFieldName ? relatedFieldName : DataStorage.fields[field];
}
fieldName = !$.isEmptyObject(langs) && typeof(langs[field]) != 'undefined' && typeof(langs[field][lang]) != 'undefined' && langs[field][lang] ? langs[field][lang] : fieldName;
$(this).val(fieldName);
});
return html;
});
formHtml.find('tbody').append(tbodyHtmls);
var modal = $('#addModal');
modal.find('.modal-body').html(formHtml);
modal.modal({width: 500});
})
});
$('#save').click(function()
{
if(typeof dataview !== 'undefined' && dataview.used)
{
bootbox.confirm(warningDesign, function(res) { if(res) query(submitForm); });
}
else
{
query(submitForm);
}
});
$('.first-page,.left-page,.last-page,.right-page').click(function()
{
DataStorage.pageID = $(this).data('page');
query();
});
$('.dropup li a').click(function()
{
DataStorage.pageID = 1;
DataStorage.recPerPage = $(this).data('size');
query();
})
});