From a2b2d45e401bd73a2261db461368b030c56f69c8 Mon Sep 17 00:00:00 2001 From: Brian Federle Date: Thu, 24 Jan 2013 13:43:15 -0800 Subject: [PATCH] Conditionally show select SG step Only show select security group step if at least one guest network with SecurityGroup service is selected. --- ui/scripts/instanceWizard.js | 33 +++++++++++++++++++++++--- ui/scripts/ui-custom/instanceWizard.js | 10 ++++++++ 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/ui/scripts/instanceWizard.js b/ui/scripts/instanceWizard.js index 8ebee623bf5..070f7e7b98d 100644 --- a/ui/scripts/instanceWizard.js +++ b/ui/scripts/instanceWizard.js @@ -16,7 +16,7 @@ // under the License. (function($, cloudStack) { - var zoneObjs, hypervisorObjs, featuredTemplateObjs, communityTemplateObjs, myTemplateObjs, featuredIsoObjs, community; + var zoneObjs, hypervisorObjs, featuredTemplateObjs, communityTemplateObjs, myTemplateObjs, featuredIsoObjs, community, networkObjs; var selectedZoneObj, selectedTemplateObj, selectedHypervisor, selectedDiskOfferingObj; var step5ContainerType = 'nothing-to-select'; //'nothing-to-select', 'select-network', 'select-security-group' @@ -40,6 +40,33 @@ !data.vpcid; }, + // Runs when advanced SG-enabled zone is run, before + // the security group step + // + // -- if it returns false, then 'Select Security Group' is skipped. + // + advSGFilter: function(args) { + var selectedNetworks; + + if ($.isArray(args.data['my-networks'])) { + selectedNetworks = $(args.data['my-networks']).map(function(index, myNetwork) { + return $.grep(networkObjs, function(networkObj) { + return networkObj.id == myNetwork; + }); + }); + } else { + selectedNetworks = $.grep(networkObjs, function(networkObj) { + return networkObj.id == args.data['my-networks']; + }); + } + + return $.grep(selectedNetworks, function(network) { + return $.grep(network.service, function(service) { + return service.name == 'SecurityGroup'; + }).length; + }).length; + }, + // Data providers for each wizard step steps: [ @@ -347,7 +374,7 @@ networkData.account = g_account; } - var networkObjs, vpcObjs; + var vpcObjs; //listVPCs without account/domainid/listAll parameter will return only VPCs belonging to the current login. That's what should happen in Instances page's VM Wizard. //i.e. If the current login is root-admin, do not show VPCs belonging to regular-user/domain-admin in Instances page's VM Wizard. @@ -365,7 +392,7 @@ async: false, success: function(json) { networkObjs = json.listnetworksresponse.network ? json.listnetworksresponse.network : []; - + if(networkObjs.length > 0) { for(var i = 0; i < networkObjs.length; i++) { var networkObj = networkObjs[i]; diff --git a/ui/scripts/ui-custom/instanceWizard.js b/ui/scripts/ui-custom/instanceWizard.js index d1f2507e120..67d2a69c968 100644 --- a/ui/scripts/ui-custom/instanceWizard.js +++ b/ui/scripts/ui-custom/instanceWizard.js @@ -821,6 +821,16 @@ cloudStack.dialog.notice({ message: 'message.step.4.continue' }); return false; } + + if ($activeStep.hasClass('next-use-security-groups')) { + var advSGFilter = args.advSGFilter({ + data: cloudStack.serializeForm($form) + }); + + if (!advSGFilter) { + showStep(6); + } + } } //step 6 - review (spcifiy displyname, group as well)