Release note v15.3

------------------
### Fixes
 * Fix issue: classes should be loaded even the module is disabled
 * Deleting the only Admin user is not allowed
 * Fixes for handling non UTF-8
 * Fix for non-mandatory select boxes are shown as mandatory
This commit is contained in:
Thilina Hasantha
2016-04-15 15:53:14 +05:30
parent 9ffa8617e9
commit 6fd9ba20c8
21 changed files with 1447 additions and 60 deletions

View File

@@ -680,6 +680,299 @@ ApproveModuleAdapter.method('getActionButtonsHtml', function(id,data) {
/**
* TableEditAdapter
*/
function TableEditAdapter(endPoint) {
this.initAdapter(endPoint);
this.cellDataUpdates = {};
this.modulePath = '';
this.rowFieldName = '';
this.columnFieldName = '';
this.rowTable = '';
this.columnTable = '';
this.valueTable = '';
this.csvData = [];
}
TableEditAdapter.inherits(AdapterBase);
TableEditAdapter.method('setModulePath', function(path) {
this.modulePath = path;
});
TableEditAdapter.method('setRowFieldName', function(name) {
this.rowFieldName = name;
});
TableEditAdapter.method('setTables', function(rowTable, columnTable, valueTable) {
this.rowTable = rowTable;
this.columnTable = columnTable;
this.valueTable = valueTable;
});
TableEditAdapter.method('setColumnFieldName', function(name) {
this.columnFieldName = name;
});
TableEditAdapter.method('getDataMapping', function() {
return [
];
});
TableEditAdapter.method('getFormFields', function() {
return [
];
});
TableEditAdapter.method('get', function() {
this.getAllData();
});
TableEditAdapter.method('getAllData', function(save) {
var req = {};
req.rowTable = this.rowTable;
req.columnTable = this.columnTable;
req.valueTable = this.valueTable;
req = this.addAdditionalRequestData('getAllData', req);
req.save = (save == undefined || save == null || save == false)?0:1;
var reqJson = JSON.stringify(req);
var callBackData = [];
callBackData['callBackData'] = [];
callBackData['callBackSuccess'] = 'getAllDataSuccessCallBack';
callBackData['callBackFail'] = 'getAllDataFailCallBack';
this.customAction('getAllData',this.modulePath,reqJson,callBackData);
});
TableEditAdapter.method('getDataItem', function(row,column,allData) {
var columnData = allData[1];
var rowData = allData[0];
var serverData = allData[2];
if(column == -1){
return rowData[row].name;
}else{
return this.getDataItemByKeyValues(this.rowFieldName, rowData[row].id, this.columnFieldName, columnData[column].id, serverData);
}
});
TableEditAdapter.method('getDataItemByKeyValues', function(rowKeyName, rowKeyVal, colKeyName, colKeyVal, data) {
for(var i=0;i<data.length;i++){
if(data[i][rowKeyName] == rowKeyVal && data[i][colKeyName] == colKeyVal){
return (data[i].amount != undefined && data[i].amount != null)?data[i].amount:"";
}
}
return "";
});
TableEditAdapter.method('getAllDataSuccessCallBack', function(allData) {
var serverData = allData[2];
var columnData = allData[1];
var rowData = allData[0];
var data = [];
for(var i=0;i<rowData.length;i++){
var row = [];
for(var j=-1;j<columnData.length;j++){
row[j+1] = this.getDataItem(i, j,allData);
}
data.push(this.preProcessTableData(row));
}
this.sourceData = serverData;
this.tableData = data;
this.setHeaders(columnData,rowData);
this.createTable(this.getTableName());
$("#"+this.getTableName()+'Form').hide();
$("#"+this.getTableName()).show();
this.csvData = [];
var tmpRow = [];
for(var i=0;i<columnData.length;i++){
tmpRow.push(columnData[i].name);
}
tmpRow = this.modifyCSVHeader(tmpRow);
this.csvData.push(tmpRow);
for(var i=0; i<data.length; i++){
this.csvData.push(data[i]);
}
});
TableEditAdapter.method('modifyCSVHeader', function(header) {
return header;
});
TableEditAdapter.method('getAllDataFailCallBack', function(callBackData,serverData) {
});
TableEditAdapter.method('setHeaders', function(columns, rows) {
var headers = [];
headers.push({ "sTitle": "", sWidth:"180px;"});
var sclass = "";
for(var i=0;i<columns.length;i++){
if(columns[i].editable == undefined || columns[i].editable == null || columns[i].editable == 'Yes'){
sclass = "editcell";
}else{
sclass = "";
}
headers.push({ "sTitle": columns[i].name,sClass: sclass,
"fnCreatedCell": function (nTd, sData, oData, iRow, iCol) {
$(nTd).data('colId',columns[iCol-1].id);
$(nTd).data('rowId',rows[iRow].id);
}});
}
this.headers = headers;
});
TableEditAdapter.method('getHeaders', function() {
return this.headers;
});
TableEditAdapter.method('createTable', function(elementId) {
var data = this.getTableData();
var headers = this.getHeaders();
if(this.showActionButtons()){
headers.push({ "sTitle": "", "sClass": "center" });
}
if(this.showActionButtons()){
for(var i=0;i<data.length;i++){
data[i].push(this.getActionButtonsHtml(data[i][0],data[i]));
}
}
var html = "";
html = this.getTableTopButtonHtml()+'<div class="box-body table-responsive"><table cellpadding="0" cellspacing="0" border="0" class="table table-bordered table-striped" id="grid"></table></div>';
//Find current page
var activePage = $('#'+elementId +" .dataTables_paginate .active a").html();
var start = 0;
if(activePage != undefined && activePage != null){
start = parseInt(activePage, 10)*15 - 15;
}
$('#'+elementId).html(html);
var dataTableParams = {
"oLanguage": {
"sLengthMenu": "_MENU_ records per page"
},
"aaData": data,
"aoColumns": headers,
"bSort": false,
"iDisplayLength": 15,
"iDisplayStart": start
};
var customTableParams = this.getCustomTableParams();
$.extend(dataTableParams, customTableParams);
$('#'+elementId+' #grid').dataTable( dataTableParams );
$(".dataTables_paginate ul").addClass("pagination");
$(".dataTables_length").hide();
$(".dataTables_filter input").addClass("form-control");
$(".dataTables_filter input").attr("placeholder","Search");
$(".dataTables_filter label").contents().filter(function(){
return (this.nodeType == 3);
}).remove();
//$('.tableActionButton').tooltip();
$('#'+elementId+' #grid').editableTableWidget();
$('#'+elementId+' #grid .editcell').on('validate', function(evt, newValue) {
return modJs.validateCellValue($(this), evt, newValue);
});
});
TableEditAdapter.method('addCellDataUpdate' , function(colId, rowId, data) {
this.cellDataUpdates[colId+"="+rowId] = [colId, rowId, data];
});
TableEditAdapter.method('addAdditionalRequestData' , function(type, req) {
return req;
});
TableEditAdapter.method('sendCellDataUpdates' , function() {
var req = this.cellDataUpdates;
req.rowTable = this.rowTable;
req.columnTable = this.columnTable;
req.valueTable = this.valueTable;
req = this.addAdditionalRequestData('updateData', req);
var reqJson = JSON.stringify(req);
var callBackData = [];
callBackData['callBackData'] = [];
callBackData['callBackSuccess'] = 'updateDataSuccessCallBack';
callBackData['callBackFail'] = 'updateDataFailCallBack';
this.showLoader();
this.customAction('updateData',this.modulePath,reqJson,callBackData);
});
TableEditAdapter.method('updateDataSuccessCallBack', function(callBackData,serverData) {
this.hideLoader();
modJs.cellDataUpdates = {};
modJs.get();
});
TableEditAdapter.method('updateDataFailCallBack', function(callBackData,serverData) {
this.hideLoader();
});
TableEditAdapter.method('sendAllCellDataUpdates' , function() {
var req = this.cellDataUpdates;
req.rowTable = this.rowTable;
req.columnTable = this.columnTable;
req.valueTable = this.valueTable;
req = this.addAdditionalRequestData('updateAllData', req);
var reqJson = JSON.stringify(req);
var callBackData = [];
callBackData['callBackData'] = [];
callBackData['callBackSuccess'] = 'updateDataAllSuccessCallBack';
callBackData['callBackFail'] = 'updateDataAllFailCallBack';
this.showLoader();
this.customAction('updateAllData',this.modulePath,reqJson,callBackData);
});
TableEditAdapter.method('updateDataAllSuccessCallBack', function(callBackData,serverData) {
this.hideLoader();
modJs.cellDataUpdates = {};
modJs.getAllData(true);
});
TableEditAdapter.method('updateDataAllFailCallBack', function(callBackData,serverData) {
this.hideLoader();
});
TableEditAdapter.method('showActionButtons' , function() {
return false;
});
/**
* RequestCache