mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-11-04 00:02:37 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			323 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			323 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
 /**
 | 
						|
 *  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 <http://www.gnu.org/licenses/>.
 | 
						|
 * 
 | 
						|
 */
 | 
						|
 | 
						|
// Version: @VERSION@
 | 
						|
 | 
						|
function showAccountsTab(domainId) {
 | 
						|
    var systemAccountId = 1;
 | 
						|
    var adminAccountId = 2;
 | 
						|
 | 
						|
	activateDialog($("#dialog_resource_limits").dialog({ 
 | 
						|
		autoOpen: false,
 | 
						|
		modal: true,
 | 
						|
		zIndex: 2000
 | 
						|
	}));
 | 
						|
	
 | 
						|
	activateDialog($("#dialog_disable_account").dialog({ 
 | 
						|
		autoOpen: false,
 | 
						|
		modal: true,
 | 
						|
		zIndex: 2000
 | 
						|
	}));
 | 
						|
	
 | 
						|
	function updateResourceLimit(domainId, account, type, max) {
 | 
						|
		$.ajax({
 | 
						|
		       data: createURL("command=updateResourceLimit&domainid="+domainId+"&account="+account+"&resourceType="+type+"&max="+max+"&response=json"),
 | 
						|
			dataType: "json",
 | 
						|
			success: function(json) {								    												
 | 
						|
			}
 | 
						|
		});
 | 
						|
	}
 | 
						|
        
 | 
						|
    $("#account_template #account_enable").bind("click", function(event) {	        
 | 
						|
        var accountId = $(this).data("accountId");	       
 | 
						|
        var template = $("#account"+accountId);	  
 | 
						|
        var accountName = template.data("accountName"); 
 | 
						|
        var domainId = template.data("domainId");
 | 
						|
 | 
						|
        $("#dialog_confirmation")
 | 
						|
        .html("<p>Please confirm you want to enable account: </b>" + accountName + "</b></p>")
 | 
						|
        .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("<p>" + sanitizeXSS(result.jobresult) + "</p>").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();
 | 
						|
}
 |