/**
 *  Copyright (C) 2010 Cloud.com, Inc.  All rights reserved.
 * 
 * This software is licensed under the GNU General Public License v3 or later.
 * 
 * It is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or any later version.
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see 
Please confirm you want to enable account: " + accountName + "
") .dialog('option', 'buttons', { "Yes": function() { $(this).dialog("close"); $.ajax({ data: createURL("command=enableAccount&account="+accountName+"&domainId="+domainId+"&response=json"), dataType: "json", success: function(json) { template.find("#account_state").text("enabled"); template.find("#account_enable_container").hide(); template.find("#account_disable_container").show(); } }); }, "Cancel": function() { $(this).dialog("close"); } }).dialog("open"); return false; //event.preventDefault() + event.stopPropagation() }); $("#account_template #account_disable").bind("click", function(event) { var accountId = $(this).data("accountId"); var template = $("#account"+accountId); var accountName = template.data("accountName"); var domainId = template.data("domainId"); var dialogDisableAccount = $("#dialog_disable_account"); dialogDisableAccount.find("#change_state_type").val("disable"); dialogDisableAccount .dialog('option', 'buttons', { "Save": function() { dialogDisableAccount.dialog("close"); if(dialogDisableAccount.find("#change_state_type").val()=="disable") { //disable the account var loadingImg = template.find(".adding_loading"); var rowContainer = template.find("#account_body"); loadingImg.find(".adding_text").text("Disabling...."); loadingImg.show(); rowContainer.hide(); $.ajax({ data: createURL("command=disableAccount&account="+accountName+"&domainId="+domainId+"&response=json"), dataType: "json", success: function(json) { var jobId = json.disableaccountresponse.jobid; var timerKey = "disableAccountJob"+jobId; $("body").everyTime(2000, timerKey, function() { $.ajax({ data: createURL("command=queryAsyncJobResult&jobId="+json.disableaccountresponse.jobid+"&response=json"), dataType: "json", success: function(json) { var result = json.queryasyncjobresultresponse; if (result.jobstatus == 0) { return; //Job has not completed } else { $("body").stopTime(timerKey); if (result.jobstatus == 1) { // Succeeded template.find("#account_state").text("disabled"); template.find("#account_disable_container").hide(); template.find("#account_enable_container").show(); loadingImg.hide(); rowContainer.show(); } else if (result.jobstatus == 2) { $("#dialog_alert").html("" + sanitizeXSS(result.jobresult) + "
").dialog("open"); loadingImg.hide(); rowContainer.show(); } } }, error: function(XMLHttpResponse) { $("body").stopTime(timerKey); handleError(XMLHttpResponse); loadingImg.hide(); rowContainer.show(); } }); }, 0); }, error: function(XMLHttpResponse) { handleError(XMLHttpResponse); loadingImg.hide(); rowContainer.show(); } }); } else { //lock the account if(template.find("#account_state").text() == "locked") //if the state is locked already, do nothing. return; $.ajax({ data: createURL("command=lockAccount&account="+accountName+"&domainId="+domainId+"&response=json"), dataType: "json", success: function(json) { template.find("#account_state").text("locked"); template.find("#account_enable_container").show(); } }); } }, "Cancel": function() { $(this).dialog("close"); } }).dialog("open"); return false; //event.preventDefault() + event.stopPropagation() }); function accountJSONToTemplate(json, template) { (index++ % 2 == 0)? template.addClass("smallrow_even"): template.addClass("smallrow_odd"); var accountId = json.id; var accountName = json.name; var domainId = json.domainid; template.attr("id", "account"+accountId).data("accountId", accountId).data("accountName", sanitizeXSS(accountName)).data("domainId", sanitizeXSS(domainId)); template.find("#account_role").text(toRole(json.accounttype)); template.find("#account_accountid").text(json.id); template.find("#account_accountname").text(accountName); template.find("#account_domain").text(json.domain); template.find("#account_vms_link").text(json.vmtotal); template.find("#account_ips_link").text(json.iptotal); template.find("#account_received").text(convertBytes(json.receivedbytes)); template.find("#account_sent").text(convertBytes(json.sentbytes)); template.find("#account_state").text(json.state); template.find("#account_vms_link").bind("click", function(event) { $("#menutab_vm").data("domainId", domainId).data("account", accountName).click(); return false; //event.preventDefault() + event.stopPropagation() }); template.find("#account_ips_link").bind("click", function(event) { $("#menutab_networking").data("domainId", domainId).data("account", accountName).click(); return false; //event.preventDefault() + event.stopPropagation() }); if(accountId == systemAccountId || accountId == adminAccountId) template.find("#action_links").hide(); if(json.state == "enabled") template.find("#account_enable_container").hide(); else if(json.state == "disabled") template.find("#account_disable_container").hide(); template.find("#account_enable, #account_disable").data("accountId", accountId); if (json.accounttype == roleTypeUser || json.accounttype == roleTypeDomainAdmin) { template.find("#account_resource_limits_container").show(); var that = template; template.find("#account_resource_limits").bind("click", function() { var domainId = that.data("domainId"); var account = that.data("accountName"); $.ajax({ cache: false, data: createURL("command=listResourceLimits&domainid="+domainId+"&account="+account+"&response=json"), dataType: "json", success: function(json) { var limits = json.listresourcelimitsresponse.resourcelimit; var preInstanceLimit, preIpLimit, preDiskLimit, preSnapshotLimit, preTemplateLimit = -1; if (limits != null) { for (var i = 0; i < limits.length; i++) { var limit = limits[i]; switch (limit.resourcetype) { case "0": preInstanceLimit = limit.max; $("#dialog_resource_limits #limits_vm").val(limit.max); break; case "1": preIpLimit = limit.max; $("#dialog_resource_limits #limits_ip").val(limit.max); break; case "2": preDiskLimit = limit.max; $("#dialog_resource_limits #limits_volume").val(limit.max); break; case "3": preSnapshotLimit = limit.max; $("#dialog_resource_limits #limits_snapshot").val(limit.max); break; case "4": preTemplateLimit = limit.max; $("#dialog_resource_limits #limits_template").val(limit.max); break; } } } $("#dialog_resource_limits") .dialog('option', 'buttons', { "Save": function() { // validate values var isValid = true; isValid &= validateNumber("Instance Limit", $("#dialog_resource_limits #limits_vm"), $("#dialog_resource_limits #limits_vm_errormsg"), -1, 32000, false); isValid &= validateNumber("Public IP Limit", $("#dialog_resource_limits #limits_ip"), $("#dialog_resource_limits #limits_ip_errormsg"), -1, 32000, false); isValid &= validateNumber("Disk Volume Limit", $("#dialog_resource_limits #limits_volume"), $("#dialog_resource_limits #limits_volume_errormsg"), -1, 32000, false); isValid &= validateNumber("Snapshot Limit", $("#dialog_resource_limits #limits_snapshot"), $("#dialog_resource_limits #limits_snapshot_errormsg"), -1, 32000, false); isValid &= validateNumber("Template Limit", $("#dialog_resource_limits #limits_template"), $("#dialog_resource_limits #limits_template_errormsg"), -1, 32000, false); if (!isValid) return; var instanceLimit = trim($("#dialog_resource_limits #limits_vm").val()); var ipLimit = trim($("#dialog_resource_limits #limits_ip").val()); var diskLimit = trim($("#dialog_resource_limits #limits_volume").val()); var snapshotLimit = trim($("#dialog_resource_limits #limits_snapshot").val()); var templateLimit = trim($("#dialog_resource_limits #limits_template").val()); $(this).dialog("close"); if (instanceLimit != preInstanceLimit) { updateResourceLimit(domainId, account, 0, instanceLimit); } if (ipLimit != preIpLimit) { updateResourceLimit(domainId, account, 1, ipLimit); } if (diskLimit != preDiskLimit) { updateResourceLimit(domainId, account, 2, diskLimit); } if (snapshotLimit != preSnapshotLimit) { updateResourceLimit(domainId, account, 3, snapshotLimit); } if (templateLimit != preTemplateLimit) { updateResourceLimit(domainId, account, 4, templateLimit); } }, "Cancel": function() { $(this).dialog("close"); } }).dialog("open"); } }); return false; }); } else { template.find("#account_resource_limits_container").hide(); } } function listAccounts() { var submenuContent = $("#submenu_content_account"); var commandString; var advanced = submenuContent.find("#search_button").data("advanced"); if (advanced != null && advanced) { var name = submenuContent.find("#advanced_search #adv_search_name").val(); var role = submenuContent.find("#advanced_search #adv_search_role").val(); var moreCriteria = []; if (name!=null && trim(name).length > 0) moreCriteria.push("&name="+encodeURIComponent(trim(name))); if (trim(role).length > 0) moreCriteria.push("&accounttype="+role); commandString = "command=listAccounts&page="+currentPage+moreCriteria.join("")+"&response=json"; } else { var moreCriteria = []; if(domainId!=null) moreCriteria.push("&domainid="+domainId); var searchInput = submenuContent.find("#search_input").val(); if (searchInput != null && searchInput.length > 0) commandString = "command=listAccounts&page="+currentPage+moreCriteria.join("")+"&keyword="+searchInput+"&response=json" else commandString = "command=listAccounts&page="+currentPage+moreCriteria.join("")+"&response=json"; } //listItems(submenuContent, commandString, jsonResponse1, jsonResponse2, template, fnJSONToTemplate); listItems(submenuContent, commandString, "listaccountsresponse", "account", $("#account_template"), accountJSONToTemplate); } submenuContentEventBinder($("#submenu_content_account"), listAccounts); var index; currentPage = 1; listAccounts(); }); }