blob: b7b653a061f9cc57b4e53e5f2698965b4fbea647 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
var currentOver = '';
function RPCwrapper(data, CB, dojson) {
if(dojson) {
dojo.xhrPost({
url: 'index.php',
load: CB,
handleAs: "json",
error: errorHandler,
content: data,
timeout: 15000
});
}
else {
dojo.xhrPost({
url: 'index.php',
load: CB,
error: errorHandler,
content: data,
timeout: 15000
});
}
}
function generalPrivCB(data, ioArgs) {
eval(data);
unsetLoading2();
}
function setLoading2(duration) {
dijit.byId('workingDialog').duration = duration;
document.body.style.cursor = 'wait';
if(dijit.byId('workingDialog')) {
var obj = dijit.byId('workingDialog');
//dojo.addClass(obj.titleBar, 'hidden');
obj.show();
}
}
function unsetLoading2() {
document.body.style.cursor = 'default';
if(dijit.byId('workingDialog'))
dijit.byId('workingDialog').hide();
}
function nodeSelect(node) {
/* for some reason, _onLabelFocus does not get set up for tree nodes by
* Safari; so, we perform the same operations here */
if(dojo.isSafari) {
//dojo.addClass(node.labelNode, "dijitTreeLabelFocused");
node.tree._onNodeFocus(node);
}
var nodeid = node.item.name;
if(nodeid != parseInt(nodeid))
return;
var nodename = node.item.display;
var tree = dijit.byId('privtree');
if(tree.lastLabel)
dojo.removeClass(tree.lastLabel, 'privtreeselected');
tree.lastLabel = node.labelNode;
dojo.addClass(node.labelNode, 'privtreeselected');
updateNodeLabels(nodename);
setLoading2(250);
/*if(dojo.byId('activeNodeAdd'))
dojo.byId('activeNodeAdd').value = nodeid;
if(dojo.byId('activeNodeDel'))
dojo.byId('activeNodeDel').value = nodeid;*/
dojo.cookie('VCLACTIVENODE', nodeid, {expires: 365, path: '/', domain: cookiedomain});
var obj = dojo.byId('nodecont');
var data = {continuation: obj.value,
node: nodeid};
RPCwrapper(data, generalPrivCB, 0);
}
function updateNodeLabels(nodename) {
dojo.byId('addPaneNodeName').innerHTML = 'Node: <strong>' + nodename + '</strong>';
dojo.byId('addGroupPaneNodeName').innerHTML = 'Node: <strong>' + nodename + '</strong>';
dojo.byId('addResourceGroupPaneNodeName').innerHTML = 'Node: <strong>' + nodename + '</strong>';
dojo.byId('addChildNodeName').innerHTML = 'Node: <strong>' + nodename + '</strong>';
dojo.byId('deleteNodeName').innerHTML = 'Node: <strong>' + nodename + '</strong>';
dojo.byId('renameNodeName').innerHTML = 'Node: <strong>' + nodename + '</strong>';
}
function isChildFocused(focusid, nodes) {
for(var i in nodes) {
if(nodes[i].name == focusid)
return 1;
else if(nodes[i].children)
if(isChildFocused(focusid, nodes[i].children))
return 1;
}
return 0;
}
function showPrivPane(name) {
dijit.byId(name).show();
}
function getTreeIcon(item, opened) {
if(! item)
return '';
if(opened)
return 'openedtreefolder';
else
return 'closedtreefolder';
}
function focusFirstNode(id) {
var tree = dijit.byId('privtree');
if(tree._itemNodesMap && tree._itemNodesMap[id]) {
var children = tree.rootNode.getChildren();
var fc = children[0];
if(fc !== tree._itemNodesMap[id][0]) {
fc.setSelected(false);
}
tree._onNodeFocus(tree._itemNodesMap[id][0]);
tree.lastLabel = tree._itemNodesMap[id][0].labelNode;
dojo.addClass(tree._itemNodesMap[id][0].labelNode, 'privtreeselected');
tree.lastFocused = tree._itemNodesMap[id][0];
var nodename = tree.lastLabel.innerHTML;
updateNodeLabels(nodename);
}
else if(tree._itemNodesMap &&
tree.model.root.children &&
tree._itemNodesMap[tree.model.root.children[0].name[0]]) {
var pnodeids = new Array();
var node = tree.store._itemsByIdentity[id];
while(node._RRM) {
for(var pid in node._RRM) {
pnodeids.push(pid);
node = tree.store._itemsByIdentity[pid];
}
}
var pid;
while(pid = pnodeids.pop()) {
var pnode = tree._itemNodesMap[pid][0];
tree._expandNode(pnode);
}
setTimeout(function() {focusFirstNode(id);}, 10);
}
else {
setTimeout(function() {focusFirstNode(id);}, 500);
}
}
function submitAddChildNode() {
dojo.byId('addChildNodeStatus').innerHTML = '';
var obj = dojo.byId('childNodeName');
var newnode = obj.value;
if(! newnode.length)
return;
var contid = dojo.byId('addchildcont').value;
var tree = dijit.byId('privtree');
var data = {continuation: contid,
newnode: newnode,
activeNode: tree.lastFocused.item.name[0]};
setLoading2(150);
RPCwrapper(data, generalPrivCB, 0);
}
function addChildNode(name, id) {
var tree = dijit.byId('privtree');
var store = tree.store;
// determine selected node
var parentnode = tree.lastFocused.item;
// add new node to selected node
var nodedata = {name: id, display: name};
var parentdata = {parent: parentnode, attribute: 'children'};
var newnode = store.newItem(nodedata, parentdata);
// hide addNodePane
dojo.byId('childNodeName').value = '';
dojo.byId('addChildNodeStatus').innerHTML = '';
setTimeout(function() {dijit.byId('addNodePane').hide();}, 100);
}
function deleteNodes() {
var tree = dijit.byId('privtree');
var contid = dojo.byId('delchildcont').value;
var data = {continuation: contid,
activeNode: tree.lastFocused.item.name[0]};
RPCwrapper(data, generalPrivCB, 0);
}
function setSelectedPrivNode(nodeid) {
var tree = dijit.byId('privtree');
var store = tree.store;
dojo.addClass(tree._itemNodesMap[nodeid][0].labelNode, 'privtreeselected');
tree.lastLabel = tree._itemNodesMap[nodeid][0].labelNode;
tree.lastLabel.focus();
tree.lastFocused = tree._itemNodesMap[nodeid][0];
updateNodeLabels(tree.lastFocused.label);
setLoading2(250);
dojo.cookie('VCLACTIVENODE', nodeid, {expires: 365, path: '/', domain: cookiedomain});
var obj = dojo.byId('nodecont');
var nodeid = tree.lastFocused.item.name;
var data = {continuation: obj.value,
node: nodeid};
RPCwrapper(data, generalPrivCB, 0);
}
function removeNodesFromTree(idlist) {
var tree = dijit.byId('privtree');
var ids = idlist.split(',');
for(var i in ids) {
tree.store.fetchItemByIdentity({
identity: ids[i],
onItem: removeNodesFromTreeCB
});
}
}
function removeNodesFromTreeCB(item, request) {
if(item) {
var tree = dijit.byId('privtree');
tree.store.deleteItem(item);
}
}
function renameNode() {
var tree = dijit.byId('privtree');
var contid = dojo.byId('renamecont').value;
var newname = dojo.byId('newNodeName').value;
var curname = tree.lastFocused.item.display[0];
if(! newname.length)
return;
if(newname == tree.lastFocused.item.display[0]) {
dojo.byId('renameNodeStatus').innerHTML = 'You must enter a different name';
return;
}
var data = {continuation: contid,
newname: newname,
activeNode: tree.lastFocused.item.name[0]};
RPCwrapper(data, renameNodeCB, 1);
}
function renameNodeCB(data, ioArgs) {
if(data.items.error) {
if(data.items.error == 1) {
alert(data.items.message);
clearRenameBox();
return;
}
else if(data.items.error == 2) {
dojo.byId('renameNodeStatus').innerHTML = data.items.message;
return;
}
}
var newname = data.items.newname;
var nodeid = data.items.node;
var tree = dijit.byId('privtree');
tree.store.fetchItemByIdentity({
identity: nodeid,
onItem: function(item, request) {
var tree = dijit.byId('privtree');
var store = tree.store;
store.setValue(item, 'display', newname);
dojo.addClass(tree.lastLabel, 'privtreeselected');
}
});
clearRenameBox();
updateNodeLabels(newname);
}
function clearRenameBox() {
dojo.byId('newNodeName').value = '';
dojo.byId('renameNodeStatus').innerHTML = '';
dijit.byId('renameDialog').hide();
}
function refreshPerms() {
setLoading2(250);
var tree = dijit.byId('privtree');
var cont = dojo.byId('nodecont').value;
var data = {continuation: cont,
node: tree.lastFocused.item.name[0]};
RPCwrapper(data, generalPrivCB, 0);
}
function privChange(checked, row, col, type) {
var objname = 'ck' + row + ':' + col;
var obj = dijit.byId(objname);
if(obj.disabled)
return;
var nameArr = obj.name.split('[');
nameArr = nameArr[1].split(']');
nameArr = nameArr[0].split(':');
if(! checked && obj.value == 'single')
obj.value = '';
if(! checked && obj.value == 'cascadesingle')
obj.value = 'cascade';
else if(checked && obj.value == '')
obj.value = 'single';
else if(checked && obj.value == 'cascade')
obj.value = 'cascadesingle';
if(type == 1)
var contid = dojo.byId('changeuserprivcont').value;
else if(type == 2)
var contid = dojo.byId('changeusergroupprivcont').value;
else if(type == 3)
var contid = dojo.byId('changeresourceprivcont').value;
var tree = dijit.byId('privtree');
var data = {continuation: contid,
activeNode: tree.lastFocused.item.name[0],
item: nameArr[0],
priv: nameArr[1],
value: checked};
setLoading2(50);
RPCwrapper(data, generalPrivCB, 0);
}
function nodeCheck(checked, row, col, type) {
var objname = "cell" + row + ":" + col;
var color = dojo.byId(objname).bgColor;
if(color == '#008000') {
objname = "ck" + row + ":" + col;
var obj = dijit.byId(objname);
obj.setAttribute('checked', true);
}
else {
privChange(checked, row, col, type);
}
}
function changeCascadedRights(checked, row, count, fromclick, type) {
var i;
var objname;
var color;
var value;
var obj;
var obj2;
var namearr;
for(i = 1; i < count; i++) {
objname = "ck" + row + ":" + i;
obj = dijit.byId(objname);
if(! obj)
continue;
value = obj.value;
if(checked) {
if(value != 'single') {
objname = "cell" + row + ":" + i;
obj2 = dojo.byId(objname);
if(! obj2)
continue;
obj2.bgColor = '#FFFFFF';
if(value == 'cascade') {
objname = "ck" + row + ":" + i;
obj = dijit.byId(objname)
obj.setAttribute('checked', false);
}
}
}
else {
if(value == 'single')
obj.setAttribute('checked', true);
else if(value == 'cascadesingle' || value == 'cascade') {
obj.setAttribute('checked', true);
objname = "cell" + row + ":" + i;
obj2 = dojo.byId(objname);
if(! obj2)
continue;
obj2.bgColor = '#008000';
}
}
}
if(fromclick)
privChange(checked, row, 'block', type);
}
function addUserPaneHide() {
dijit.byId('addUserPane').hide();
var workingobj = dijit.byId('workingDialog');
dojo.connect(workingobj._fadeOut, 'onEnd', dijit.byId('addUserPane'), 'hide');
dojo.byId('addUserPrivStatus').innerHTML = '';
dojo.byId('newuser').value = '';
var obj = dijit.byId('blockchk');
if(obj.checked)
obj.setAttribute('checked', false);
for(var i = 0; obj = dijit.byId('userck0:' + i); i++) {
if(obj.checked)
obj.setAttribute('checked', false);
}
}
function submitAddUser() {
dojo.byId('addUserPrivStatus').innerHTML = '';
var userid = dojo.byId('newuser').value;
if(! userid.length)
return;
var perms = new Array();
var obj = dijit.byId('blockchk');
if(obj.checked)
perms.push('block');
for(var i = 0; obj = dijit.byId('userck0:' + i); i++) {
if(obj.checked)
perms.push(obj.name);
}
var perms2 = perms.join(':', perms);
var contid = dojo.byId('addusercont').value;
var tree = dijit.byId('privtree');
var data = {continuation: contid,
perms: perms2,
newuser: userid,
activeNode: tree.lastFocused.item.name[0]};
setLoading2(250);
RPCwrapper(data, generalPrivCB, 0);
}
function addUserGroupPaneHide() {
dijit.byId('addUserGroupPane').hide();
var workingobj = dijit.byId('workingDialog');
dojo.connect(workingobj._fadeOut, 'onEnd', dijit.byId('addUserGroupPane'), 'hide');
dojo.byId('addUserGroupPrivStatus').innerHTML = '';
dojo.byId('newgroupid').value = '';
var obj = dijit.byId('blockgrpchk');
if(obj.checked)
obj.setAttribute('checked', false);
for(var i = 0; obj = dijit.byId('usergrpck0:' + i); i++) {
if(obj.checked)
obj.setAttribute('checked', false);
}
}
function submitAddUserGroup() {
dojo.byId('addUserGroupPrivStatus').innerHTML = '';
var groupid = dojo.byId('newgroupid').value;
if(! groupid.length)
return;
var perms = new Array();
var obj = dijit.byId('blockgrpchk');
if(obj.checked)
perms.push('block');
for(var i = 0; obj = dijit.byId('usergrpck0:' + i); i++) {
if(obj.checked)
perms.push(obj.name);
}
var perms2 = perms.join(':', perms);
var contid = dojo.byId('addusergroupcont').value;
var tree = dijit.byId('privtree');
var data = {continuation: contid,
perms: perms2,
newgroupid: groupid,
activeNode: tree.lastFocused.item.name[0]};
setLoading2(250);
RPCwrapper(data, generalPrivCB, 0);
}
function addResourceGroupPaneHide() {
dijit.byId('addResourceGroupPane').hide();
var workingobj = dijit.byId('workingDialog');
dojo.connect(workingobj._fadeOut, 'onEnd', dijit.byId('addResourceGroupPane'), 'hide');
dojo.byId('addResourceGroupPrivStatus').innerHTML = '';
dojo.byId('newresourcegroupid').value = '';
var obj = dijit.byId('blockresgrpck');
if(obj.checked)
obj.setAttribute('checked', false);
for(var i = 0; obj = dijit.byId('resgrpck0:' + i); i++) {
if(obj.checked)
obj.setAttribute('checked', false);
}
}
function submitAddResourceGroup() {
dojo.byId('addResourceGroupPrivStatus').innerHTML = '';
var groupid = dojo.byId('newresourcegroupid').value;
if(! groupid.length)
return;
var perms = new Array();
var obj = dijit.byId('blockresgrpck');
if(obj.checked)
perms.push('block');
obj = dijit.byId('resgrpck0:0');
if(obj.checked)
perms.push('cascade');
for(var i = 1; obj = dijit.byId('resgrpck0:' + i); i++) {
if(obj.checked)
perms.push(obj.name);
}
var perms2 = perms.join(':', perms);
var contid = dojo.byId('addresourcegroupcont').value;
var tree = dijit.byId('privtree');
var data = {continuation: contid,
perms: perms2,
newgroupid: groupid,
activeNode: tree.lastFocused.item.name[0]};
setLoading2(250);
RPCwrapper(data, generalPrivCB, 0);
}
function getGroupMembers(resid, domid, cont) {
currentOver = domid;
dojo.byId(domid).onmouseover = '';
var contid = dojo.byId(cont).value;
var data = {continuation: contid,
groupid: resid,
domid: domid};
RPCwrapper(data, groupMembersCB, 1);
}
function getGroupMembersCancel(domid) {
currentOver = '';
dojo.byId(domid).onmouseout = '';
}
function groupMembersCB(data, ioArgs) {
var members = data.items.members;
var domid = data.items.domid;
var tt = new dijit.Tooltip({
connectId: [domid],
label: members
});
if(currentOver == domid)
tt.open(dojo.byId(domid));
}
function selectUserGroup(cont) {
var data = {continuation: cont,
groupid: dojo.byId('editusergroupid').value};
RPCwrapper(data, selectUserGroupCB, 1);
}
function selectUserGroupCB(data, ioArgs) {
if(data.items.failed) {
alert('You are not authorized to manage this group');
return;
}
dojo.removeClass('usergroupprivs', 'groupprivshidden');
dijit.byId('usergroupcopyprivsbtn').setAttribute('disabled', false);
dijit.byId('usergroupsaveprivsbtn').setAttribute('disabled', false);
var items = dojo.query('#usergroupprivs input[type=checkbox]');
for(var i = 0; i < items.length; i++) {
dijit.byId(items[i].id).setAttribute('checked', false);
}
for(var i = 0; i < data.items.perms.length; i++) {
obj = dijit.byId('grouptype' + data.items.perms[i]);
obj.setAttribute('checked', true);
}
}
function showUserGroupPrivHelp(help, id) {
dojo.byId('groupprivhelp').innerHTML = help;
dojo.addClass('grouptypespan' + id, 'hlperm');
}
function clearUserGroupPrivHelp(id) {
dojo.byId('groupprivhelp').innerHTML = '';
dojo.removeClass('grouptypespan' + id, 'hlperm');
}
function copyUserGroupPrivs(cont) {
var data = {continuation: cont,
groupid: dojo.byId('copyusergroupid').value};
RPCwrapper(data, copyUserGroupPrivsCB, 1);
}
function copyUserGroupPrivsCB(data, ioArgs) {
if(data.items.failed) {
alert('You are not authorized to manage this group');
return;
}
var items = dojo.query('#usergroupprivs input[type=checkbox]');
for(var i = 0; i < items.length; i++) {
dijit.byId(items[i].id).setAttribute('checked', false);
}
for(var i = 0; i < data.items.perms.length; i++) {
obj = dijit.byId('grouptype' + data.items.perms[i]);
obj.setAttribute('checked', true);
}
}
function saveUserGroupPrivs(cont) {
var permids = new Array();
var items = dojo.query('#usergroupprivs input[type=checkbox]:checked');
for(var i = 0; i < items.length; i++) {
permids.push(items[i].name);
}
var permids2 = permids.join(',');
var data = {continuation: cont,
permids: permids2,
groupid: dojo.byId('editusergroupid').value};
RPCwrapper(data, saveUserGroupPrivsCB, 1);
}
function saveUserGroupPrivsCB(data, ioArgs) {
if(data.items.failed) {
dojo.byId('userpermsubmitstatus').innerHTML = "Failed to save permissions: " + data.items.failed;
dojo.addClass('userpermsubmitstatus', 'statusfailed');
}
else if(data.items.success) {
dojo.byId('userpermsubmitstatus').innerHTML = "Permissions successfully saved";
dojo.addClass('userpermsubmitstatus', 'statussuccess');
}
setTimeout(clearUserPrivStatus, 10000);
}
function clearUserPrivStatus() {
dojo.byId('userpermsubmitstatus').innerHTML = "";
dojo.removeClass('userpermsubmitstatus', 'statussuccess');
dojo.removeClass('userpermsubmitstatus', 'statusfailed');
}
function hideUserGroupPrivs() {
dojo.addClass('usergroupprivs', 'groupprivshidden');
dijit.byId('usergroupcopyprivsbtn').setAttribute('disabled', true);
dijit.byId('usergroupsaveprivsbtn').setAttribute('disabled', true);
}