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).append('Projects R     W   '); 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 = $(''); if (hasChilds) $(tr).addClass('treegrid-expanded'); var nameCol = ''; if (type == 'client') nameCol += ''; if (type == 'project') nameCol += ''; nameCol += '' + name + ''; $(tr).append(nameCol); var permCol = $(''); var inheritedAttb = ""; if (readInherited) inheritedAttb = 'inherited="inherited"'; var input = $(''); var hidden = $(''); 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 = $(''); 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'); } }