381 lines
14 KiB
JavaScript
381 lines
14 KiB
JavaScript
var ProjectTree = new Object();
|
|
ProjectTree.dataObjects = new Array();
|
|
ProjectTree.buildProjectTree = function (url) {
|
|
$.post(url, null, function (data) {
|
|
if (data != undefined) {
|
|
ProjectTree.data = data;
|
|
ProjectTree.initData();
|
|
|
|
var table = $('<table class="tree"></table>');
|
|
$(table).append('<tr class="treegrid-1" style="border-top:0;"><td style="font-weight:600;border-top-width:0">Projects</td><td style="border-top-width:0;text-align: center;"> R W </td></tr>');
|
|
for (var i = 0; i < data.length; i++) {
|
|
var company = data[i];
|
|
var cmp = ProjectTree.getDataObjectById(data[i].Id);
|
|
var tr = ProjectTree.buildProjectTreeNode(company.Id, company.Name, 'company', company.Clients.length > 0, cmp.Read, cmp.Write, cmp.Enabled, true, true);
|
|
$(table).append(tr);
|
|
for (var c = 0; c < company.Clients.length; c++) {
|
|
var client = company.Clients[c];
|
|
var clt = ProjectTree.getDataObjectById(client.Id);
|
|
var tr = ProjectTree.buildProjectTreeNode(client.Id, client.Name, 'client', client.Projects.length > 0, clt.Read, clt.Write, clt.Enabled, true, true);
|
|
$(table).append(tr);
|
|
for (var p = 0; p < client.Projects.length; p++) {
|
|
var project = client.Projects[p];
|
|
var prg = ProjectTree.getDataObjectById(project.Id);
|
|
var tr = ProjectTree.buildProjectTreeNode(project.Id, project.Name, 'project', false, prg.Read, prg.Write, prg.Enabled, project.ReadInherited, project.WriteInherited);
|
|
$(table).append(tr);
|
|
}
|
|
}
|
|
}
|
|
|
|
$('#projectTree').append(table);
|
|
|
|
$('.tree > tbody > tr > td > input').click(function (event) {
|
|
var id = $(event.target).parent().parent()[0].id;
|
|
var attrName = $(event.target).attr('name');
|
|
var type = (attrName == 'projectlistread' || attrName == 'clientread' || attrName == 'companyread') ? 'read' : 'write';
|
|
|
|
//env-648 start
|
|
//var target = $(event.target)[0];
|
|
//if (target.checked)
|
|
$(event.target).attr("inherited", null);
|
|
//else
|
|
// $(event.target).attr("inherited", "inherited");
|
|
//ProjectTree.changeDataValue(id, type);
|
|
ProjectTree.changeDataValue(id, type, false);
|
|
//env-648 end
|
|
});
|
|
|
|
$('span.glyphicon').click(function (event) {
|
|
var id = $(event.target).parent().parent().attr('id');
|
|
ProjectTree.showHideTree(id);
|
|
if ($(event.target).hasClass('glyphicon-chevron-down')) {
|
|
$(event.target).removeClass('glyphicon-chevron-down');
|
|
$(event.target).addClass('glyphicon-chevron-right');
|
|
} else {
|
|
$(event.target).removeClass('glyphicon-chevron-right');
|
|
$(event.target).addClass('glyphicon-chevron-down');
|
|
}
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
ProjectTree.buildProjectTreeNode = function (id, name, type, hasChilds, readVal, writeVal, enabled, readInherited, writeInherited) {
|
|
var tr = $('<tr class="treegrid-' + id + '" id="' + id + '"></tr>');
|
|
if (hasChilds)
|
|
$(tr).addClass('treegrid-expanded');
|
|
|
|
var nameCol = '<td style="border-width=0px;">';
|
|
if (type == 'client')
|
|
nameCol += '<span class="treegrid-indent"></span>';
|
|
if (type == 'project')
|
|
nameCol += '<span class="treegrid-indent"></span><span class="treegrid-indent"></span>';
|
|
nameCol += '<span class="treegrid-expander ';
|
|
if (hasChilds)
|
|
nameCol += 'glyphicon glyphicon-chevron-down';
|
|
nameCol += '"></span>' + name + '</td>';
|
|
$(tr).append(nameCol);
|
|
|
|
var permCol = $('<td style="border-width=0px;"></td>');
|
|
var inheritedAttb = "";
|
|
if (readInherited)
|
|
inheritedAttb = 'inherited="inherited"';
|
|
|
|
var input = $('<input type="checkbox" class="custominput" '+inheritedAttb+' autocomplete="off" value="' + id + '">');
|
|
var hidden = $('<input type="hidden" name="overriden"/>');
|
|
|
|
var obj = ProjectTree.getDataObjectById(id);
|
|
if (obj.Type == 'company') {
|
|
$(input).attr('name', 'companyread');
|
|
} else if (obj.Type == 'client') {
|
|
$(input).attr('name', 'clientread');
|
|
$(input).attr('companyr', obj.Parent);
|
|
} else if (obj.Type == 'project') {
|
|
$(input).attr('name', 'projectlistread');
|
|
$(input).attr('clientr', obj.Parent);
|
|
var client = ProjectTree.getDataObjectById(obj.Parent);
|
|
$(input).attr('companyr', client.Parent);
|
|
}
|
|
|
|
|
|
if (readVal == 1) {
|
|
$(input).prop('checked', 'checked');
|
|
}
|
|
|
|
if (!enabled) {
|
|
$(input).prop('disabled', 'disabled');
|
|
}
|
|
|
|
$(permCol).append(input);
|
|
$(permCol).append(hidden);
|
|
inheritedAttb = "";
|
|
if (writeInherited)
|
|
inheritedAttb = 'inherited="inherited"';
|
|
|
|
var input = $('<input type="checkbox" class="custominput" '+inheritedAttb+' autocomplete="off" value="' + id + '"/>');
|
|
|
|
if (obj.Type == 'company') {
|
|
$(input).attr('name', 'companywrite');
|
|
} else if (obj.Type == 'client') {
|
|
$(input).attr('name', 'clientwrite');
|
|
$(input).attr('companyw', obj.Parent);
|
|
} else if (obj.Type == 'project') {
|
|
$(input).attr('name', 'projectlistwrite');
|
|
$(input).attr('clientw', obj.Parent);
|
|
var client = ProjectTree.getDataObjectById(obj.Parent);
|
|
$(input).attr('companyw', client.Parent);
|
|
}
|
|
|
|
if (writeVal == 1) {
|
|
$(input).attr('checked', 'checked');
|
|
}
|
|
|
|
if (!enabled) {
|
|
$(input).prop('disabled', 'disabled');
|
|
}
|
|
|
|
$(permCol).append(input);
|
|
$(permCol).append(hidden);
|
|
$(tr).append(permCol);
|
|
|
|
return tr;
|
|
}
|
|
|
|
ProjectTree.initData = function () {
|
|
if (ProjectTree.data != undefined) {
|
|
for (var i = 0; i < ProjectTree.data.length; i++) {
|
|
var company = ProjectTree.data[i];
|
|
var cmp = new Object();
|
|
cmp.Id = company.Id;
|
|
cmp.Type = 'company';
|
|
cmp.Parent = undefined;
|
|
cmp.Childs = new Array();
|
|
cmp.Enabled = false;
|
|
var isAllClientsReadEnabled = company.Clients.length > 0;
|
|
var isAllClientsWriteEnabled = company.Clients.length > 0;
|
|
for (var c = 0; c < company.Clients.length; c++) {
|
|
var client = company.Clients[c];
|
|
cmp.Childs.push(client.Id);
|
|
var clt = new Object();
|
|
clt.Id = client.Id;
|
|
clt.Type = 'client';
|
|
clt.Parent = cmp.Id;
|
|
clt.Childs = new Array();
|
|
clt.Enabled = client.Projects.length > 0;
|
|
// if at least one client is enabled we need to enable company
|
|
if (clt.Enabled)
|
|
cmp.Enabled = true;
|
|
var isAllProjectsReadEnabled = clt.Enabled;
|
|
var isAllProjectsWriteEnabled = clt.Enabled;
|
|
for (var p = 0; p < client.Projects.length; p++) {
|
|
var project = client.Projects[p];
|
|
clt.Childs.push(project.Id);
|
|
var prg = new Object();
|
|
prg.Id = project.Id;
|
|
prg.Type = 'project';
|
|
prg.Parent = clt.Id;
|
|
prg.Childs = new Array();
|
|
prg.Read = project.Read;
|
|
prg.Write = project.Write;
|
|
prg.Enabled = true;
|
|
|
|
if (prg.Read == 0)
|
|
isAllProjectsReadEnabled = false;
|
|
if (prg.Write == 0)
|
|
isAllProjectsWriteEnabled = false;
|
|
|
|
ProjectTree.dataObjects.push(prg);
|
|
}
|
|
|
|
if (isAllProjectsReadEnabled) {
|
|
clt.Read = 1;
|
|
} else {
|
|
clt.Read = 0;
|
|
if (clt.Enabled)
|
|
isAllClientsReadEnabled = false;
|
|
}
|
|
if (isAllProjectsWriteEnabled) {
|
|
clt.Write = 1;
|
|
} else {
|
|
clt.Write = 0;
|
|
if (clt.Enabled)
|
|
isAllClientsWriteEnabled = false;
|
|
}
|
|
|
|
ProjectTree.dataObjects.push(clt);
|
|
}
|
|
|
|
cmp.Read = isAllClientsReadEnabled && cmp.Enabled ? 1 : 0;
|
|
cmp.Write = isAllClientsWriteEnabled && cmp.Enabled ? 1 : 0;
|
|
ProjectTree.dataObjects.push(cmp);
|
|
}
|
|
}
|
|
}
|
|
|
|
ProjectTree.getDataObjectById = function (id) {
|
|
for (var i = 0; i < ProjectTree.dataObjects.length; i++) {
|
|
var item = ProjectTree.dataObjects[i];
|
|
if (item.Id == id)
|
|
return item;
|
|
}
|
|
|
|
return undefined;
|
|
}
|
|
//env-648 start
|
|
ProjectTree.changeDataValue = function (id, type) {
|
|
changeDataValue(id, type, true);
|
|
}
|
|
ProjectTree.changeDataValue = function (id, type, inherited) {
|
|
//env-648 end
|
|
var obj = ProjectTree.getDataObjectById(id);
|
|
var val = undefined;
|
|
if (type == 'read') {
|
|
val = obj.Read;
|
|
} else if (type == 'write') {
|
|
val = obj.Write;
|
|
}
|
|
|
|
|
|
var nextVal = ProjectTree.getNextVal(obj.Type, val);
|
|
obj = ProjectTree.setDataValue(id, type, nextVal, inherited);
|
|
|
|
ProjectTree.setParentValues(obj);
|
|
|
|
}
|
|
|
|
ProjectTree.getNextVal = function (type, val) {
|
|
if (val == 0)
|
|
return 1;
|
|
if (val == 1)
|
|
return 0;
|
|
}
|
|
|
|
ProjectTree.getReadWriteValById = function (id) {
|
|
var obj = ProjectTree.getDataObjectById(id);
|
|
var readWrite = new Object();
|
|
if (obj != undefined) {
|
|
readWrite.Read = obj.Read;
|
|
readWrite.Write = obj.Write;
|
|
}
|
|
|
|
return readWrite;
|
|
}
|
|
//env-648 start
|
|
ProjectTree.setDataValue = function (id, valType, val) {
|
|
ProjectTree.setDataValue(id, valType, val, true);
|
|
}
|
|
ProjectTree.setDataValue = function (id, valType, val, inherited) {
|
|
//env-648 end
|
|
var obj = ProjectTree.getDataObjectById(id);
|
|
if (!obj.Enabled)
|
|
return obj;
|
|
|
|
if (valType == 'read') {
|
|
obj.Read = val;
|
|
}
|
|
else if (valType == 'write') {
|
|
obj.Write = val;
|
|
if (val == 1 && obj.Read != 1) {
|
|
obj.Read = val;
|
|
ProjectTree.setCheckboxValue(obj, 'read', val, inherited);
|
|
}
|
|
}
|
|
ProjectTree.setCheckboxValue(obj, valType, val, inherited);
|
|
|
|
if (obj.Type != 'project') {
|
|
for (var i = 0; i < obj.Childs.length; i++) {
|
|
var ch = obj.Childs[i];
|
|
ProjectTree.setDataValue(ch, valType, val);
|
|
}
|
|
}
|
|
|
|
return obj;
|
|
}
|
|
|
|
ProjectTree.setParentValues = function (obj) {
|
|
if (obj.Parent != undefined) {
|
|
var parent = ProjectTree.getDataObjectById(obj.Parent);
|
|
var v = ProjectTree.checkIsAllChecked(obj.Parent, 'read') ? 1 : 0;
|
|
parent.Read = v;
|
|
|
|
ProjectTree.setCheckboxValue(parent, 'read', v,true);
|
|
|
|
v = ProjectTree.checkIsAllChecked(obj.Parent, 'write') ? 1 : 0;
|
|
parent.Write = v;
|
|
ProjectTree.setCheckboxValue(parent, 'write', v, true);
|
|
|
|
if (parent.Parent != undefined)
|
|
ProjectTree.setParentValues(parent);
|
|
}
|
|
}
|
|
|
|
ProjectTree.setCheckboxValue = function (obj, permissionType, permissionVal,inherited) {
|
|
var input = undefined;
|
|
if ('read' == permissionType) {
|
|
if ('project' == obj.Type) {
|
|
input = $($('tr#' + obj.Id).children('td')[1]).children('input[name="projectlistread"]');
|
|
}
|
|
else if ('client' == obj.Type) {
|
|
input = $($('tr#' + obj.Id).children('td')[1]).children('input[name="clientread"]');
|
|
}
|
|
else if ('company' == obj.Type) {
|
|
input = $($('tr#' + obj.Id).children('td')[1]).children('input[name="companyread"]');
|
|
}
|
|
}
|
|
else if ('write' == permissionType) {
|
|
if ('project' == obj.Type) {
|
|
input = $($('tr#' + obj.Id).children('td')[1]).children('input[name="projectlistwrite"]');
|
|
}
|
|
else if ('client' == obj.Type) {
|
|
input = $($('tr#' + obj.Id).children('td')[1]).children('input[name="clientwrite"]');
|
|
}
|
|
else if ('company' == obj.Type) {
|
|
input = $($('tr#' + obj.Id).children('td')[1]).children('input[name="companywrite"]');
|
|
}
|
|
}
|
|
|
|
if (input != undefined) {
|
|
$(input).prop('checked', (permissionVal == 1 || permissionVal == 2))
|
|
if (!inherited && (permissionVal == 1 || permissionVal == 2))
|
|
$(input).attr("inherited", null)
|
|
else
|
|
$(input).attr("inherited", "inherited")
|
|
|
|
}
|
|
}
|
|
|
|
ProjectTree.checkIsAllChecked = function (id, type) {
|
|
var obj = ProjectTree.getDataObjectById(id);
|
|
var allChecked = true;
|
|
for (var i = 0; i < obj.Childs.length; i++) {
|
|
var child = ProjectTree.getDataObjectById(obj.Childs[i]);
|
|
if (!child.Enabled)
|
|
continue;
|
|
|
|
if (type == 'read' && child.Read == 0) {
|
|
allChecked = false;
|
|
break;
|
|
}
|
|
if (type == 'write' && child.Write == 0) {
|
|
allChecked = false;
|
|
break;
|
|
}
|
|
}
|
|
|
|
return allChecked;
|
|
}
|
|
|
|
ProjectTree.showHideTree = function (id) {
|
|
var obj = ProjectTree.getDataObjectById(id);
|
|
for (var i = 0; i < obj.Childs.length; i++) {
|
|
var child = ProjectTree.getDataObjectById(obj.Childs[i]);
|
|
if (child.Childs.length > 0) {
|
|
ProjectTree.showHideTree(child.Id);
|
|
}
|
|
var isHide = $('.treegrid-' + child.Id).css('display') == 'none';
|
|
if (isHide)
|
|
$('.treegrid-' + child.Id).css('display', 'table-row');
|
|
else
|
|
$('.treegrid-' + child.Id).css('display', 'none');
|
|
}
|
|
} |