if ( typeof WebGUI.Form == "undefined" ) { WebGUI.Form = {}; } if ( typeof WebGUI.Form.GroupManager == "undefined" ) { WebGUI.Form.GroupManager = {}; WebGUI.Form.GroupManager.users_added = new Array(); WebGUI.Form.GroupManager.users_deleted = new Array(); WebGUI.Form.GroupManager.groups_added = new Array(); WebGUI.Form.GroupManager.groups_deleted = new Array(); WebGUI.Form.GroupManager.last_groupId = ''; WebGUI.Form.GroupManager.last_userId = ''; } WebGUI.Form.GroupManager.handleCancel = function () { this.cancel(); } YAHOO.util.Event.onDOMReady(function () { WebGUI.Form.GroupManager.i18n = new WebGUI.i18n( { namespaces : { 'WebGUI' : [ 'submit', 'Cancel', '84', '89', '149' ], 'Form_Group' : [ 'Group Manager', 'Add Group...', 'Add User...', 'New Group' ] }, onpreload : { fn : WebGUI.Form.GroupManager.initDialog } }); }); var groupId = ""; WebGUI.Form.GroupManager.initDialog = function () { var tabWrapper = document.getElementById('application_workarea'); document.body.className= "yui-skin-sam"; var headID = document.getElementsByTagName("head")[0]; var dialogBox = document.createElement('div'); dialogBox.id= "dialog1"; dialogBox.className= "yui-pe-content"; dialogBox.innerHTML = '
' + WebGUI.Form.GroupManager.i18n.get('Form_Group','Group Manager') + '
' + '
' + '
' + '
' + '' +'
' + '
' + '
' + '
' + '
    ' + '
    ' + '
    ' + '
      ' + '
      ' + '
      ' + '
      '; tabWrapper.appendChild(dialogBox); // Define various event handlers for Dialog var handleSubmit = function() { this.cancel(); var url = "?op=formHelper;class=Group;sub=saveGroup;"; var form_target = document.getElementById("gm_form_target"); for(var i=0; i < WebGUI.Form.GroupManager.users_added.length; i++) { var formlet = document.createElement('input'); formlet.setAttribute('name', 'usersAdded'); formlet.setAttribute('type', 'hidden'); formlet.setAttribute('value', WebGUI.Form.GroupManager.users_added[i]); form_target.appendChild(formlet); } for(var i=0; i < WebGUI.Form.GroupManager.users_deleted.length; i++) { var formlet = document.createElement('input'); formlet.setAttribute('name', 'usersDeleted'); formlet.setAttribute('type', 'hidden'); formlet.setAttribute('value', WebGUI.Form.GroupManager.users_deleted[i]); form_target.appendChild(formlet); } for(var i=0; i < WebGUI.Form.GroupManager.groups_added.length; i++) { var formlet = document.createElement('input'); formlet.setAttribute('name', 'groupsAdded'); formlet.setAttribute('type', 'hidden'); formlet.setAttribute('value', WebGUI.Form.GroupManager.groups_added[i]); form_target.appendChild(formlet); } for(var i=0; i < WebGUI.Form.GroupManager.groups_deleted.length; i++) { var formlet = document.createElement('input'); formlet.setAttribute('name', 'groupsDeleted'); formlet.setAttribute('type', 'hidden'); formlet.setAttribute('value', WebGUI.Form.GroupManager.groups_deleted[i]); form_target.appendChild(formlet); } YAHOO.util.Connect.setForm('groupManagerForm', false); YAHOO.util.Connect.asyncRequest('POST', url,{ success: function (o) { var groupObj = YAHOO.lang.JSON.parse(o.responseText); var dropdown = document.getElementById(WebGUI.Form.GroupManager.original_form); if (groupObj.originalGroupId === 'new') { //Insert this option into the list in the right place, and make it the selected option. var groupOption = new Option(groupObj.groupName, groupObj.groupId, false, true); var groupInserted = false; for(var i=0, dlen = dropdown.options.length; i < dlen; i++) { var gOption = dropdown.options[i]; gOption.defaultSelected = false; if(gOption.text > groupObj.groupName && !groupInserted) { groupInserted = true; dropdown.add(groupOption, gOption); } } } else { dropdown.options[dropdown.selectedIndex].innerHTML = groupObj.groupName; } } }); }; var handleCancel = function() { this.cancel(); }; var handleSuccess = function(o) { }; var handleFailure = function(o) { alert("Submission failed: " + o.status); }; // Remove progressively enhanced content class, just before creating the module YAHOO.util.Dom.removeClass("dialog1", "yui-pe-content"); // Instantiate the Dialog WebGUI.Form.GroupManager.dialog = new YAHOO.widget.Dialog("dialog1", { width : "40em", fixedcenter : true, visible : false, //constraintoviewport : true, buttons : [ { text:WebGUI.Form.GroupManager.i18n.get('WebGUI', 'submit'), handler:handleSubmit, isDefault:true }, { text:WebGUI.Form.GroupManager.i18n.get('WebGUI', 'Cancel'), handler:handleCancel } ] }); // Wire up the success and failure handlers WebGUI.Form.GroupManager.dialog.callback = { success: handleSuccess, failure: handleFailure }; // Render the Dialog WebGUI.Form.GroupManager.dialog.render(); }; WebGUI.Form.GroupManager.show_dialog = function(formName, isNew) { var e = document.getElementById(formName + "_formId"); groupId = e.options[e.selectedIndex].value; WebGUI.Form.GroupManager.original_form = formName + "_formId"; //Clear out all stored data. WebGUI.Form.GroupManager.users_added = new Array(); WebGUI.Form.GroupManager.users_deleted = new Array(); WebGUI.Form.GroupManager.groups_added = new Array(); WebGUI.Form.GroupManager.groups_deleted = new Array(); WebGUI.Form.GroupManager.last_userId = ''; WebGUI.Form.GroupManager.last_groupId = ''; var form_target = document.getElementById("gm_form_target"); form_target.innerHTML = ''; var groupsAdded = document.getElementById("list_of_groups"); var usersAdded = document.getElementById("list_of_users"); var groupTextbox = document.getElementById("group_lookup"); var userTextbox = document.getElementById("user_lookup"); groupsAdded.innerHTML = ""; usersAdded.innerHTML = ""; userTextbox.value = WebGUI.Form.GroupManager.i18n.get('Form_Group','Add User...'); groupTextbox.value = WebGUI.Form.GroupManager.i18n.get('Form_Group','Add Group...'); //TODO: groupFilter and userFilter never change. They don't depend on which group is being added or //edited. Move them into init to prevent memory leaks. //GROUPS AUTOCOMPLETE var groupFilter = { }; groupFilter.dataSource = new YAHOO.util.XHRDataSource( '?op=formHelper;class=Group;sub=searchGroups;'); groupFilter.dataSource.responseType = YAHOO.util.XHRDataSource.TYPE_JSON; groupFilter.dataSource.responseSchema = { resultsList : "results", fields : [ 'groupName', 'groupId' ] }; // Function to create an autocomplete field var createGroupAutocomplete = function ( groupFilter ) { groupFilter.autocomplete = new YAHOO.widget.AutoComplete("group_lookup", "groupResultsContainer", groupFilter.dataSource ); groupFilter.autocomplete.queryQuestionMark = false; groupFilter.autocomplete.animVert = true; groupFilter.autocomplete.animSpeed = 0.1; groupFilter.autocomplete.minQueryLength = 1; groupFilter.autocomplete.queryDelay = 0.2; groupFilter.autocomplete.typeAhead = true; groupFilter.autocomplete.resultTypeList = false; groupFilter.autocomplete.applyLocalFilter = true; var getGroupId = function (sType, args) { var oData = args[2]; WebGUI.Form.GroupManager.last_groupId = oData.groupId; } groupFilter.autocomplete.itemSelectEvent.subscribe(getGroupId); //This will override any of the functions that work with the default filterResults method groupFilter.autocomplete.filterResults = function ( sQuery , oFullResponse , oParsedResponse , oCallback ) { var allResults = oParsedResponse.results; var uniqueResults = []; for(var i=0, len=allResults.length; i' + result.groupName + ""; }; //TODO: groupFilter and userFilter never change. They don't depend on which group is being added or //edited. Move them into init to prevent memory leaks. //USERS AUTOCOMPLETE var userFilter = { }; userFilter.dataSource = new YAHOO.util.XHRDataSource( '?op=formHelper;class=User;sub=searchUsers;'); userFilter.dataSource.responseType = YAHOO.util.XHRDataSource.TYPE_JSON; userFilter.dataSource.responseSchema = { resultsList : "results", fields : [ 'username', 'userId' ] }; // Function to create an autocomplete field var createUserAutocomplete = function ( userFilter ) { userFilter.autocomplete = new YAHOO.widget.AutoComplete("user_lookup", "userResultsContainer", userFilter.dataSource ); userFilter.autocomplete.queryQuestionMark = false; userFilter.autocomplete.animVert = true; userFilter.autocomplete.animSpeed = 0.1; userFilter.autocomplete.minQueryLength = 1; userFilter.autocomplete.queryDelay = 0.2; userFilter.autocomplete.typeAhead = true; userFilter.autocomplete.resultTypeList = false; userFilter.autocomplete.applyLocalFilter = true; var getUserId = function (sType, args) { var oData = args[2]; WebGUI.Form.GroupManager.last_userId = oData.userId; } userFilter.autocomplete.itemSelectEvent.subscribe(getUserId); //This will override any of the functions that work with the default filterResults method userFilter.autocomplete.filterResults = function ( sQuery , oFullResponse , oParsedResponse , oCallback ) { var allResults = oParsedResponse.results; var uniqueResults = []; for(var i=0, len=allResults.length; i' + result.username + ''; var user_lookup = document.getElementById ("user_lookup"); user_lookup.setAttribute("name", result.userId); }; if (isNew != "new") { var requestUrl = "?op=formHelper;class=Group;sub=groupMembers;groupId=" + groupId; var callback = { failure : function ( o ) { // TODO: YUI logger for this }, success : function ( o ) { var responseObj = YAHOO.lang.JSON.parse( o.responseText ); //Insert groupname into the group field WebGUI.Form.GroupManager.dialog.form.groupName.value = responseObj[ 'groupName' ]; var responseObj = YAHOO.lang.JSON.parse( o.responseText ); var groups = responseObj.groups; var users = responseObj.users; for (var i = 0; i < groups.length; i++){ var groupId = responseObj.groups[i].groupId; var groupsAdded = document.getElementById("list_of_groups"); var groupsAddedRow = document.getElementById("groupsAdded_row"); groupsAddedRow.style.cssText= "min-height: 27px !important; height: auto !important; display: block !important;"; var newGroup = document.createElement('li'); newGroup.setAttribute('id', 'gm_groupId_'+groupId) newGroup.innerHTML = '' + responseObj.groups[i].groupName; groupsAdded.appendChild(newGroup); } for (var i = 0; i < users.length; i++){ var userId = responseObj.users[i].userId; var usersAdded = document.getElementById("list_of_users"); var usersAddedRow = document.getElementById("usersAdded_row"); usersAddedRow.style.cssText= "min-height: 27px !important; height: auto !important; display: block !important;"; var newUser = document.createElement('li'); newUser.setAttribute('id', 'gm_userId_'+userId) newUser.innerHTML = '' + responseObj.users[i].username; usersAdded.appendChild(newUser); } } }; var groupIdHidden = document.getElementById("groupManager_groupId"); groupIdHidden.setAttribute("value", groupId); YAHOO.util.Connect.asyncRequest( "POST", requestUrl, callback ); } else { WebGUI.Form.GroupManager.dialog.form.groupName.value = ''; var groupIdHidden = document.getElementById("groupManager_groupId"); groupIdHidden.setAttribute("value", "new"); } WebGUI.Form.GroupManager.dialog.show(); }; //ADD GROUPS WebGUI.Form.GroupManager.addGroups = function() { var groupTextbox = document.getElementById("group_lookup"); var groupsAdded = document.getElementById("list_of_groups"); var groupsAddedRow = document.getElementById("groupsAdded_row"); if (groupTextbox.value !== "" && groupTextbox.value !== WebGUI.Form.GroupManager.i18n.get('Form_Group','Add Group...') && WebGUI.Form.GroupManager.last_groupId !== '') { var last_groupId = WebGUI.Form.GroupManager.last_groupId; WebGUI.Form.GroupManager.last_groupId = ''; groupsAddedRow.style.cssText= "min-height: 27px !important; height: auto !important; display: block !important;"; var newGroup = document.createElement('li'); newGroup.setAttribute('id', 'gm_groupId_'+last_groupId) newGroup.innerHTML = '' +groupTextbox.value; groupsAdded.appendChild(newGroup); groupTextbox.value = WebGUI.Form.GroupManager.i18n.get('Form_Group','Add Group...'); var groupDeleted = false; for(var i=0; i < WebGUI.Form.GroupManager.groups_deleted.length; i++) { if(WebGUI.Form.GroupManager.groups_deleted[i] == last_groupId) { WebGUI.Form.GroupManager.groups_deleted.splice(i,1); groupDeleted = true; } } if (! groupDeleted) { WebGUI.Form.GroupManager.groups_added.push(last_groupId); } } } //REMOVE GROUPS WebGUI.Form.GroupManager.removeGroups = function(groupId) { var groupsAdded = document.getElementById("list_of_groups"); var group = document.getElementById('gm_groupId_'+groupId); groupsAdded.removeChild(group); var groupAdded = false; for(var i = WebGUI.Form.GroupManager.groups_added.length-1; i >= 0; i--){ if(WebGUI.Form.GroupManager.groups_added[i] == groupId) { WebGUI.Form.GroupManager.groups_added.splice(i,1); groupAdded = true; } } if (! groupAdded) { WebGUI.Form.GroupManager.groups_deleted.push(groupId); } if (groupsAdded.innerHTML == "") { groupsAdded.setAttribute("style", "display: none !important;"); } } //ADD USERS WebGUI.Form.GroupManager.addUsers = function() { var userTextbox = document.getElementById("user_lookup"); var usersAdded = document.getElementById("list_of_users"); var userssAddedRow = document.getElementById("usersAdded_row"); if (userTextbox.value !== "" && userTextbox.value !== WebGUI.Form.GroupManager.i18n.get('Form_Group','Add User...') && WebGUI.Form.GroupManager.last_userId !== '') { var last_userId = WebGUI.Form.GroupManager.last_userId; WebGUI.Form.GroupManager.last_userId = ''; userssAddedRow.style.cssText= "min-height: 27px !important; height: auto !important; display: block !important;" var newUser = document.createElement('li'); newUser.setAttribute('id', 'gm_userId_'+last_userId) newUser.innerHTML = '' +userTextbox.value; usersAdded.appendChild(newUser); userTextbox.value = WebGUI.Form.GroupManager.i18n.get('Form_Group','Add User...'); var userDeleted = false; for(var i = WebGUI.Form.GroupManager.users_deleted.length-1; i >= 0; i--){ if(WebGUI.Form.GroupManager.users_deleted[i] == last_userId) { WebGUI.Form.GroupManager.users_deleted.splice(i,1); userDeleted = true; } } if (! userDeleted) { WebGUI.Form.GroupManager.users_added.push(last_userId); } } } //REMOVE USERS WebGUI.Form.GroupManager.removeUsers = function(userId) { var usersAdded = document.getElementById("list_of_users"); var user = document.getElementById('gm_userId_'+userId); usersAdded.removeChild(user); //Keep the lists up to date. If this user was added, then take them out of the //added list, and do not add them to the deleted list since the group doesn't know //about it yet. var userAdded = false; for(var i = WebGUI.Form.GroupManager.users_added.length-1; i >= 0; i--){ if(WebGUI.Form.GroupManager.users_added[i] == userId) { WebGUI.Form.GroupManager.users_added.splice(i,1); userAdded = true; } } if (! userAdded) { WebGUI.Form.GroupManager.users_deleted.push(userId); } if (usersAdded.innerHTML == "") { usersAdded.setAttribute("style", "display: none !important;"); } } //CREATE NEW GROUP WebGUI.Form.GroupManager.createNewGroup = function() { WebGUI.Form.GroupManager.dialog.form.groupName.value = ''; var groupIdHidden = document.getElementById("groupManager_groupId"); groupIdHidden.setAttribute("value", "new"); WebGUI.Form.GroupManager.users_added = new Array(); WebGUI.Form.GroupManager.users_deleted = new Array(); WebGUI.Form.GroupManager.groups_added = new Array(); WebGUI.Form.GroupManager.groups_deleted = new Array(); WebGUI.Form.GroupManager.last_groupId = ''; WebGUI.Form.GroupManager.last_userId = ''; var form_target = document.getElementById("gm_form_target"); form_target.innerHTML = ''; var groupsAdded = document.getElementById("list_of_groups"); var usersAdded = document.getElementById("list_of_users"); var groupTextbox = document.getElementById("group_lookup"); var userTextbox = document.getElementById("user_lookup"); groupsAdded.innerHTML = ""; usersAdded.innerHTML = ""; userTextbox.value = WebGUI.Form.GroupManager.i18n.get('Form_Group','Add User...'); groupTextbox.value = WebGUI.Form.GroupManager.i18n.get('Form_Group','Add Group...'); var groupName = document.getElementById("groupName"); groupName.focus(); var groupsAddedRow = document.getElementById("groupsAdded_row"); groupsAddedRow.setAttribute("style", "display: none; visibility: hidden;"); var usersAddedRow = document.getElementById("usersAdded_row"); usersAddedRow.setAttribute("style", "display: none; visibility: hidden;"); var createNewGroupRow = document.getElementById('createNewGroupRow'); createNewGroupRow.setAttribute("style", "display: none; visibility: hidden;"); } WebGUI.Form.GroupManager.showAutocomplete = function(showWhat) { var textInput = document.getElementById(showWhat); textInput.value = ""; var groupsDiv = document.getElementById("groupResultsContainer"); var usersDiv = document.getElementById("userResultsContainer"); switch (showWhat) { case "group_lookup": groupsDiv.setAttribute("style", "display: block;"); usersDiv.setAttribute("style", "display: none;"); break; case "user_lookup": usersDiv.setAttribute("style", "display: block;"); groupsDiv.setAttribute("style", "display: none;"); break; } }