// Copyright 2012 Citrix Systems, Inc. Licensed under the // Apache License, Version 2.0 (the "License"); you may not use this // file except in compliance with the License. Citrix Systems, Inc. // reserves all rights not expressly granted by 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. // // Automatically generated by addcopyright.py at 04/03/2012 (function(cloudStack, $) { cloudStack.sections.templates = { title: 'label.menu.templates', id: 'templates', sectionSelect: { label: 'label.select-view' }, sections: { templates: { type: 'select', title: 'label.menu.templates', listView: { id: 'templates', label: 'label.menu.templates', filters: { all: { preFilter: function(args) { if (isAdmin()) //"listTemplates&templatefilter=all" only works for root-admin, but no domain-admin. Domain-admin is unable to see all templates until listTemplates API supports a new type of templatefilter for domain-admin to see all templates in his domain. return true; else return false; }, label: 'ui.listView.filters.all' }, mine: { label: 'ui.listView.filters.mine' }, featured: { label: 'label.featured' }, community: { label: 'label.community' } }, fields: { name: { label: 'label.name' }, zonename: { label: 'label.zone' }, hypervisor: { label: 'label.hypervisor' } }, reorder: cloudStack.api.actions.sort('updateTemplate', 'templates'), actions: { add: { label: 'label.action.create.template', messages: { confirm: function(args) { return "create.template.confirm"; }, success: function(args) { return "create.template.success"; }, notification: function(args) { return "create.template.notification"; }, complete: function(args) { return "create.template.complete"; } }, createForm: { title: 'label.action.create.template', desc: 'label.action.create.template', preFilter: cloudStack.preFilter.createTemplate, fields: { name: { label: 'label.name', validation: { required: true } }, description: { label: 'label.description', validation: { required: true } }, url: { label: 'URL', validation: { required: true } }, zone: { label: 'label.zone', select: function(args) { $.ajax({ url: createURL("listZones&available=true"), dataType: "json", async: true, success: function(json) { var zoneObjs = json.listzonesresponse.zone; var items = []; if (isAdmin() && !(cloudStack.context.projects && cloudStack.context.projects[0])) items.push({id: -1, description: "All Zones"}); $(zoneObjs).each(function() { items.push({id: this.id, description: this.name}); }); args.response.success({data: items}); } }); } }, hypervisor: { label: 'label.hypervisor', dependsOn: 'zone', select: function(args) { if(args.zone == null) return; var apiCmd; if(args.zone == -1) apiCmd = "listHypervisors&zoneid=-1"; else apiCmd = "listHypervisors&zoneid=" + args.zone; $.ajax({ url: createURL(apiCmd), dataType: "json", async: false, success: function(json) { var hypervisorObjs = json.listhypervisorsresponse.hypervisor; var items = []; $(hypervisorObjs).each(function(){ items.push({id: this.name, description: this.name}); }); args.response.success({data: items}); } }); args.$select.change(function() { var $form = $(this).closest('form'); if($(this).val() == "VMware") { $form.find('.form-item[rel=rootDiskControllerType]').css('display', 'inline-block'); $form.find('.form-item[rel=nicAdapterType]').css('display', 'inline-block'); $form.find('.form-item[rel=keyboardType]').css('display', 'inline-block'); } else { $form.find('.form-item[rel=rootDiskControllerType]').hide(); $form.find('.form-item[rel=nicAdapterType]').hide(); $form.find('.form-item[rel=keyboardType]').hide(); } }); } }, //fields for hypervisor == "VMware" (starts here) rootDiskControllerType: { label: 'label.root.disk.controller', isHidden: true, select: function(args) { var items = [] items.push({id: "", description: ""}); items.push({id: "scsi", description: "scsi"}); items.push({id: "ide", description: "ide"}); args.response.success({data: items}); } }, nicAdapterType: { label: 'label.nic.adapter.type', isHidden: true, select: function(args) { var items = [] items.push({id: "", description: ""}); items.push({id: "E1000", description: "E1000"}); items.push({id: "PCNet32", description: "PCNet32"}); items.push({id: "Vmxnet2", description: "Vmxnet2"}); items.push({id: "Vmxnet3", description: "Vmxnet3"}); args.response.success({data: items}); } }, keyboardType: { label: 'label.keyboard.type', isHidden: true, select: function(args) { var items = [] items.push({id: "", description: ""}); items.push({id: "us", description: "US"}); items.push({id: "jp", description: "Japanese"}); args.response.success({data: items}); } }, //fields for hypervisor == "VMware" (ends here) format: { label: 'label.format', dependsOn: 'hypervisor', select: function(args) { var items = []; if(args.hypervisor == "XenServer") { //formatSelect.append(""); items.push({id:'VHD', description: 'VHD'}); } else if(args.hypervisor == "VMware") { //formatSelect.append(""); items.push({id:'OVA', description: 'OVA'}); } else if(args.hypervisor == "KVM") { //formatSelect.append(""); items.push({id:'QCOW2', description: 'QCOW2'}); } else if(args.hypervisor == "BareMetal") { //formatSelect.append(""); items.push({id:'BareMetal', description: 'BareMetal'}); } else if(args.hypervisor == "Ovm") { //formatSelect.append(""); items.push({id:'RAW', description: 'RAW'}); } args.response.success({data: items}); } }, osTypeId: { label: 'label.os.type', select: function(args) { $.ajax({ url: createURL("listOsTypes"), dataType: "json", async: true, success: function(json) { var items = json.listostypesresponse.ostype; args.response.success({data: items}); } }); } }, isExtractable: { label: "extractable", isBoolean: true }, isPasswordEnabled: { label: "label.password.enabled", isBoolean: true }, isPublic: { label: "label.public", isBoolean: true, isHidden: true }, isFeatured: { label: "label.featured", isBoolean: true, isHidden: true } } }, action: function(args) { var array1 = []; array1.push("&name=" + todb(args.data.name)); array1.push("&displayText=" + todb(args.data.description)); array1.push("&url=" + todb(args.data.url)); array1.push("&zoneid=" + args.data.zone); array1.push("&format=" + args.data.format); array1.push("&isextractable=" + (args.data.isExtractable=="on")); array1.push("&passwordEnabled=" + (args.data.isPasswordEnabled=="on")); array1.push("&osTypeId=" + args.data.osTypeId); array1.push("&hypervisor=" + args.data.hypervisor); if(args.$form.find('.form-item[rel=isPublic]').css("display") != "none") array1.push("&ispublic=" + (args.data.isPublic == "on")); if(args.$form.find('.form-item[rel=isFeatured]').css("display") != "none") array1.push("&isfeatured=" + (args.data.isFeatured == "on")); //VMware only (starts here) if(args.$form.find('.form-item[rel=rootDiskControllerType]').css("display") != "none" && args.data.rootDiskControllerType != "") array1.push("&details[0].rootDiskController=" + args.data.rootDiskControllerType); if(args.$form.find('.form-item[rel=nicAdapterType]').css("display") != "none" && args.data.nicAdapterType != "") array1.push("&details[0].nicAdapter=" + args.data.nicAdapterType); if(args.$form.find('.form-item[rel=keyboardType]').css("display") != "none" && args.data.keyboardType != "") array1.push("&details[0].keyboard=" + args.data.keyboardType); //VMware only (ends here) $.ajax({ url: createURL("registerTemplate" + array1.join("")), dataType: "json", success: function(json) { var items = json.registertemplateresponse.template; //items might have more than one array element if it's create templates for all zones. args.response.success({data:items[0]}); /* if(items.length > 1) { for(var i=1; i 0) array1.push("&keyword=" + args.filterBy.search.value); break; } } } $.ajax({ url: createURL("listTemplates&page=" + args.page + "&pagesize=" + pageSize + array1.join(""), { ignoreProject: ignoreProject }), dataType: "json", async: true, success: function(json) { var items = json.listtemplatesresponse.template; args.response.success({ actionFilter: templateActionfilter, data: items }); } }); } , detailView: { name: 'Template details', actions: { edit: { label: 'label.edit', action: function(args) { var array1 = []; array1.push("&name=" + todb(args.data.name)); array1.push("&displaytext=" + todb(args.data.displaytext)); array1.push("&ostypeid=" + args.data.ostypeid); array1.push("&passwordenabled=" + (args.data.passwordenabled=="on")); $.ajax({ url: createURL("updateTemplate&id=" + args.context.templates[0].id + "&zoneid=" + args.context.templates[0].zoneid + array1.join("")), dataType: "json", async: false, success: function(json) { //API returns an incomplete embedded object (some properties are missing in the embedded template object) } }); var array2 = []; array2.push("&ispublic=" + (args.data.ispublic=="on")); array2.push("&isfeatured=" + (args.data.isfeatured=="on")); array2.push("&isextractable=" + (args.data.isextractable=="on")); $.ajax({ url: createURL("updateTemplatePermissions&id=" + args.context.templates[0].id + "&zoneid=" + args.context.templates[0].zoneid + array2.join("")), dataType: "json", async: false, success: function(json) { //API doesn't return an embedded object } }); //So, we call listTemplates API to get a complete template object $.ajax({ url: createURL("listTemplates&id=" + args.context.templates[0].id + "&zoneid=" + args.context.templates[0].zoneid + "&templatefilter=self"), dataType: "json", async: false, success: function(json){ var item = json.listtemplatesresponse.template; args.response.success({data: item}); } }); } }, copyTemplate: { label: 'label.action.copy.template', messages: { confirm: function(args) { return 'Are you sure you want to copy template?'; }, success: function(args) { return 'Template is being copied.'; }, notification: function(args) { return 'label.action.copy.template'; } }, createForm: { title: 'label.action.copy.template', desc: '', fields: { destinationZoneId: { label: 'label.destination.zone', validation: { required: true }, select: function(args) { $.ajax({ url: createURL("listZones&available=true"), dataType: "json", async: true, success: function(json) { var zoneObjs = json.listzonesresponse.zone; var items = []; $(zoneObjs).each(function() { if(this.id != args.context.templates[0].zoneid) items.push({id: this.id, description: this.name}); }); args.response.success({data: items}); } }); } } } }, action: function(args) { $.ajax({ url: createURL("copyTemplate&id=" + args.context.templates[0].id + "&sourcezoneid=" + args.context.templates[0].zoneid + "&destzoneid=" + args.data.destinationZoneId), dataType: "json", async: true, success: function(json) { var jid = json.copytemplateresponse.jobid; args.response.success( {_custom: {jobId: jid, getUpdatedItem: function(json) { return {}; //nothing in this template needs to be updated }, getActionFilter: function() { return templateActionfilter; } } } ); } }); }, notification: { poll: pollAsyncJobResult } }, downloadTemplate: { label: 'label.action.download.template', messages: { confirm: function(args) { return 'message.action.download.template'; }, notification: function(args) { return 'Downloading template'; }, complete: function(args) { var url = decodeURIComponent(args.url); var htmlMsg = _l('message.download.template'); var htmlMsg2 = htmlMsg.replace(/#/, url).replace(/00000/, url); return htmlMsg2; } }, action: function(args) { var apiCmd = "extractTemplate&mode=HTTP_DOWNLOAD&id=" + args.context.templates[0].id; if(args.context.templates[0].zoneid != null) apiCmd += "&zoneid=" + args.context.templates[0].zoneid; $.ajax({ url: createURL(apiCmd), dataType: "json", async: true, success: function(json) { var jid = json.extracttemplateresponse.jobid; args.response.success( {_custom: {jobId: jid, getUpdatedItem: function(json) { return json.queryasyncjobresultresponse.jobresult.template; }, getActionFilter: function() { return templateActionfilter; } } } ); } }); }, notification: { poll: pollAsyncJobResult } }, remove: { label: 'label.action.delete.template', messages: { confirm: function(args) { return 'message.action.delete.template'; }, notification: function(args) { return 'label.action.delete.template'; } }, action: function(args) { var array1 = []; if (args.context.templates[0].zoneid != null) array1.push("&zoneid=" + args.context.templates[0].zoneid); $.ajax({ url: createURL("deleteTemplate&id=" + args.context.templates[0].id + array1.join("")), dataType: "json", async: true, success: function(json) { var jid = json.deletetemplateresponse.jobid; args.response.success( {_custom: {jobId: jid } } ); } }); }, notification: { poll: pollAsyncJobResult } } }, tabs: { details: { title: 'label.details', preFilter: function(args) { var hiddenFields; if(isAdmin()) { hiddenFields = []; } else { hiddenFields = ["hypervisor"]; } return hiddenFields; }, fields: [ { name: { label: 'label.name', isEditable: true } }, { id: { label: 'ID' }, zonename: { label: 'label.zone.name' }, zoneid: { label: 'label.zone.id' }, displaytext: { label: 'label.description', isEditable: true }, hypervisor: { label: 'label.hypervisor' }, templatetype: { label: 'label.type' }, isready: { label: 'state.ready', converter:cloudStack.converters.toBooleanText }, status: { label: 'label.status' }, size : { label: 'label.size', converter: function(args) { if (args == null || args == 0) return ""; else return cloudStack.converters.convertBytes(args); } }, isextractable: { label: 'extractable', isBoolean: true, isEditable: true, converter:cloudStack.converters.toBooleanText }, passwordenabled: { label: 'label.password.enabled', isBoolean: true, isEditable: true, converter:cloudStack.converters.toBooleanText }, ispublic: { label: 'label.public', isBoolean: true, isEditable: true, converter:cloudStack.converters.toBooleanText }, isfeatured: { label: 'label.featured', isBoolean: true, isEditable: true, converter:cloudStack.converters.toBooleanText }, crossZones: { label: 'label.cross.zones', converter:cloudStack.converters.toBooleanText }, ostypeid: { label: 'label.os.type', isEditable: true, select: function(args) { $.ajax({ url: createURL("listOsTypes"), dataType: "json", async: true, success: function(json) { var ostypes = json.listostypesresponse.ostype; var items = []; $(ostypes).each(function() { items.push({id: this.id, description: this.description}); }); args.response.success({data: items}); } }); } }, domain: { label: 'label.domain' }, account: { label: 'label.account' }, created: { label: 'label.created', converter: cloudStack.converters.toLocalDate } } ], dataProvider: function(args) { var jsonObj = args.context.templates[0]; var apiCmd = "listTemplates&templatefilter=self&id=" + jsonObj.id; if(jsonObj.zoneid != null) apiCmd = apiCmd + "&zoneid=" + jsonObj.zoneid; $.ajax({ url: createURL(apiCmd), dataType: "json", success: function(json) { args.response.success({ actionFilter: templateActionfilter, data: json.listtemplatesresponse.template[0] }); } }); } } } } } }, isos: { type: 'select', title: 'label.iso', listView: { label: 'label.iso', filters: { all: { preFilter: function(args) { if (isAdmin()) //"listIsos&filter=all" only works for root-admin, but no domain-admin. Domain-admin is unable to see all Isos until listIsos API supports a new type of isofilter for domain-admin to see all Isos in his domain. return true; else return false; }, label: 'ui.listView.filters.all' }, mine: { label: 'ui.listView.filters.mine' }, featured: { label: 'label.featured' }, community: { label: 'label.community' } }, fields: { name: { label: 'label.name' }, zonename: { label: 'label.zone' } }, reorder: cloudStack.api.actions.sort('updateIso', 'isos'), actions: { add: { label: 'label.add.iso', messages: { notification: function(args) { return 'label.add.iso'; } }, createForm: { title: 'label.add.iso', desc: 'label.add.iso', preFilter: cloudStack.preFilter.createTemplate, fields: { name: { label: 'label.name', validation: { required: true } }, description: { label: 'label.description', validation: { required: true } }, url: { label: 'URL', validation: { required: true } }, zone: { label: 'label.zone', select: function(args) { $.ajax({ url: createURL("listZones&available=true"), dataType: "json", async: true, success: function(json) { var zoneObjs = json.listzonesresponse.zone; var items = []; if (isAdmin() && !(cloudStack.context.projects && cloudStack.context.projects[0])) items.push({id: -1, description: "All Zones"}); $(zoneObjs).each(function() { items.push({id: this.id, description: this.name}); }); args.response.success({data: items}); } }); } }, isBootable: { label: "label.bootable", isBoolean: true, isChecked: true }, osTypeId: { label: 'label.os.type', dependsOn: 'isBootable', isHidden: false, validation: { required: true }, select: function(args) { $.ajax({ url: createURL("listOsTypes"), dataType: "json", async: true, success: function(json) { var osTypeObjs = json.listostypesresponse.ostype; var items = []; //items.push({id: "", description: "None"}); //shouldn't have None option when bootable is checked $(osTypeObjs).each(function(){ items.push({id: this.id, description: this.description}); }); args.response.success({data: items}); } }); } }, isExtractable: { label: "extractable", isBoolean: true }, isPublic: { label: "label.public", isBoolean: true, isHidden: true }, isFeatured: { label: "label.featured", isBoolean: true, isHidden: true } } }, action: function(args) { var array1 = []; array1.push("&name=" + todb(args.data.name)); array1.push("&displayText=" + todb(args.data.description)); array1.push("&url=" + todb(args.data.url)); array1.push("&zoneid=" + args.data.zone); array1.push("&isextractable=" + (args.data.isExtractable=="on")); array1.push("&bootable=" + (args.data.isBootable=="on")); if(args.$form.find('.form-item[rel=osTypeId]').css("display") != "none") array1.push("&osTypeId=" + args.data.osTypeId); if(args.$form.find('.form-item[rel=isPublic]').css("display") != "none") array1.push("&ispublic=" + (args.data.isPublic == "on")); if(args.$form.find('.form-item[rel=isFeatured]').css("display") != "none") array1.push("&isfeatured=" + (args.data.isFeatured == "on")); $.ajax({ url: createURL("registerIso" + array1.join("")), dataType: "json", success: function(json) { var items = json.registerisoresponse.iso; //items might have more than one array element if it's create ISOs for all zones. args.response.success({data:items[0]}); /* if(items.length > 1) { for(var i=1; i 0) array1.push("&keyword=" + args.filterBy.search.value); break; } } } $.ajax({ url: createURL("listIsos&page=" + args.page + "&pagesize=" + pageSize + array1.join(""), { ignoreProject: ignoreProject }), dataType: "json", async: true, success: function(json) { var items = json.listisosresponse.iso; args.response.success({ actionFilter: isoActionfilter, data: items }); } }); }, detailView: { name: 'label.details', actions: { edit: { label: 'label.edit', action: function(args) { var array1 = []; array1.push("&name=" + todb(args.data.name)); array1.push("&displaytext=" + todb(args.data.displaytext)); array1.push("&ostypeid=" + args.data.ostypeid); $.ajax({ url: createURL("updateIso&id=" + args.context.isos[0].id + "&zoneid=" + args.context.isos[0].zoneid + array1.join("")), dataType: "json", async: false, success: function(json) { //updateIso API returns an incomplete ISO object (isextractable and isfeatured are missing) } }); var array2 = []; array2.push("&ispublic=" + (args.data.ispublic=="on")); array2.push("&isfeatured=" + (args.data.isfeatured=="on")); array2.push("&isextractable=" + (args.data.isextractable=="on")); $.ajax({ url: createURL("updateIsoPermissions&id=" + args.context.isos[0].id + "&zoneid=" + args.context.isos[0].zoneid + array2.join("")), dataType: "json", async: false, success: function(json) { //updateIsoPermissions API doesn't return ISO object } }); //So, we call listIsos API to get a complete ISO object $.ajax({ url: createURL("listIsos&id=" + args.context.isos[0].id + "&zoneid=" + args.context.isos[0].zoneid + "&isofilter=self"), dataType: "json", async: false, success: function(json){ var item = json.listisosresponse.iso; args.response.success({data: item}); } }); } }, copyISO: { label: 'label.action.copy.iso', messages: { notification: function(args) { return 'Copying ISO'; } }, createForm: { title: 'label.action.copy.iso', desc: 'label.action.copy.iso', fields: { destinationZoneId: { label: 'label.destinaton.zone', validation: { required: true }, select: function(args) { $.ajax({ url: createURL("listZones&available=true"), dataType: "json", async: true, success: function(json) { var zoneObjs = json.listzonesresponse.zone; var items = []; $(zoneObjs).each(function() { if(this.id != args.context.isos[0].zoneid) items.push({id: this.id, description: this.name}); }); args.response.success({data: items}); } }); } } } }, action: function(args) { $.ajax({ url: createURL("copyIso&id=" + args.context.isos[0].id + "&sourcezoneid=" + args.context.isos[0].zoneid + "&destzoneid=" + args.data.destinationZoneId), dataType: "json", async: true, success: function(json) { var jid = json.copytemplateresponse.jobid; args.response.success( {_custom: {jobId: jid, getUpdatedItem: function(json) { return {}; //nothing in this ISO needs to be updated }, getActionFilter: function() { return isoActionfilter; } } } ); } }); }, notification: { poll: pollAsyncJobResult } }, downloadISO: { label: 'label.action.download.ISO', messages: { confirm: function(args) { return 'message.action.download.iso'; }, notification: function(args) { return 'label.action.download.ISO'; }, complete: function(args) { var url = decodeURIComponent(args.url); var htmlMsg = _l('message.download.ISO'); var htmlMsg2 = htmlMsg.replace(/#/, url).replace(/00000/, url); return htmlMsg2; } }, action: function(args) { var apiCmd = "extractIso&mode=HTTP_DOWNLOAD&id=" + args.context.isos[0].id; if(args.context.isos[0].zoneid != null) apiCmd += "&zoneid=" + args.context.isos[0].zoneid; $.ajax({ url: createURL(apiCmd), dataType: "json", async: true, success: function(json) { var jid = json.extractisoresponse.jobid; args.response.success( {_custom: {jobId: jid, getUpdatedItem: function(json) { return json.queryasyncjobresultresponse.jobresult.iso; }, getActionFilter: function() { return isoActionfilter; } } } ); } }); }, notification: { poll: pollAsyncJobResult } }, remove: { label: 'label.action.delete.ISO', messages: { confirm: function(args) { return 'message.action.delete.ISO'; }, notification: function(args) { return 'label.action.delete.ISO'; } }, action: function(args) { var array1 = []; if (args.context.isos[0].zoneid != null) array1.push("&zoneid=" + args.context.isos[0].zoneid); $.ajax({ url: createURL("deleteIso&id=" + args.context.isos[0].id + array1.join("")), dataType: "json", async: true, success: function(json) { var jid = json.deleteisosresponse.jobid; args.response.success( {_custom: {jobId: jid } } ); } }); }, notification: { poll: pollAsyncJobResult } } }, tabs: { details: { title: 'label.details', fields: [ { name: { label: 'label.name', isEditable: true } }, { id: { label: 'ID' }, zonename: { label: 'label.zone.name' }, zoneid: { label: 'label.zone.id' }, displaytext: { label: 'label.description', isEditable: true }, isready: { label: 'state.Ready', converter:cloudStack.converters.toBooleanText }, status: { label: 'label.status' }, size : { label: 'label.size', converter: function(args) { if (args == null || args == 0) return ""; else return cloudStack.converters.convertBytes(args); } }, isextractable: { label: 'extractable', isBoolean: true, isEditable: true, converter:cloudStack.converters.toBooleanText }, bootable: { label: 'label.bootable', converter:cloudStack.converters.toBooleanText }, ispublic: { label: 'label.public', isBoolean: true, isEditable: true, converter:cloudStack.converters.toBooleanText }, isfeatured: { label: 'label.featured', isBoolean: true, isEditable: true, converter:cloudStack.converters.toBooleanText }, crossZones: { label: 'label.cross.zones', converter:cloudStack.converters.toBooleanText }, ostypeid: { label: 'label.os.type', isEditable: true, select: function(args) { $.ajax({ url: createURL("listOsTypes"), dataType: "json", async: true, success: function(json) { var ostypes = json.listostypesresponse.ostype; var items = []; $(ostypes).each(function() { items.push({id: this.id, description: this.description}); }); args.response.success({data: items}); } }); } }, domain: { label: 'label.domain' }, account: { label: 'label.account' }, created: { label: 'label.created', converter: cloudStack.converters.toLocalDate } } ], dataProvider: function(args) { var jsonObj = args.context.isos[0]; var apiCmd = "listIsos&isofilter=self&id="+jsonObj.id; if(jsonObj.zoneid != null) apiCmd = apiCmd + "&zoneid="+jsonObj.zoneid; $.ajax({ url: createURL(apiCmd), dataType: "json", success: function(json) { args.response.success({ actionFilter: isoActionfilter, data: json.listisosresponse.iso[0] }); } }); } } } } } } } }; var templateActionfilter = function(args) { var jsonObj = args.context.item; var allowedActions = []; // "Edit Template", "Copy Template", "Create VM" if ((isAdmin() == false && !(jsonObj.domainid == g_domainid && jsonObj.account == g_account)) //if neither root-admin, nor item owner || jsonObj.templatetype == "SYSTEM" || jsonObj.isready == false) { //do nothing } else { allowedActions.push("edit"); if(havingSwift == false) allowedActions.push("copyTemplate"); //allowedActions.push("createVm"); // For Beta2, this simply doesn't work without a network. } // "Download Template" if (((isAdmin() == false && !(jsonObj.domainid == g_domainid && jsonObj.account == g_account))) //if neither root-admin, nor item owner || (jsonObj.isready == false) || jsonObj.templatetype == "SYSTEM") { //do nothing } else { allowedActions.push("downloadTemplate"); } // "Delete Template" //if (((isUser() && jsonObj.ispublic == true && !(jsonObj.domainid == g_domainid && jsonObj.account == g_account))) if (((isAdmin() == false && !(jsonObj.domainid == g_domainid && jsonObj.account == g_account))) //if neither root-admin, nor item owner || (jsonObj.isready == false && jsonObj.status != null && jsonObj.status.indexOf("Downloaded") != -1) || (jsonObj.account == "system")) { //do nothing } else { allowedActions.push("remove"); } return allowedActions; } var isoActionfilter = function(args) { var jsonObj = args.context.item; var allowedActions = []; if ((isAdmin() == false && !(jsonObj.domainid == g_domainid && jsonObj.account == g_account)) //if neither root-admin, nor item owner || (jsonObj.isready == false) || (jsonObj.domainid == 1 && jsonObj.account == "system") ) { //do nothing } else { allowedActions.push("edit"); if(havingSwift == false) allowedActions.push("copyISO"); } // "Create VM" // Commenting this out for Beta2 as it does not support the new network. /* //if (((isUser() && jsonObj.ispublic == true && !(jsonObj.domainid == g_domainid && jsonObj.account == g_account)) if (((isAdmin() == false && !(jsonObj.domainid == g_domainid && jsonObj.account == g_account)) //if neither root-admin, nor item owner || jsonObj.isready == false) || (jsonObj.bootable == false) || (jsonObj.domainid == 1 && jsonObj.account == "system") ) { //do nothing } else { allowedActions.push("createVm"); } */ // "Download ISO" //if (((isUser() && jsonObj.ispublic == true && !(jsonObj.domainid == g_domainid && jsonObj.account == g_account))) if (((isAdmin() == false && !(jsonObj.domainid == g_domainid && jsonObj.account == g_account))) //if neither root-admin, nor item owner || (jsonObj.isready == false) || (jsonObj.domainid == 1 && jsonObj.account == "system") ) { //do nothing } else { allowedActions.push("downloadISO"); } // "Delete ISO" //if (((isUser() && jsonObj.ispublic == true && !(jsonObj.domainid == g_domainid && jsonObj.account == g_account))) if (((isAdmin() == false && !(jsonObj.domainid == g_domainid && jsonObj.account == g_account))) //if neither root-admin, nor item owner || (jsonObj.isready == false && jsonObj.status != null && jsonObj.status.indexOf("Downloaded") != -1) || (jsonObj.account == "system") ) { //do nothing } else { allowedActions.push("remove"); } return allowedActions; } })(cloudStack, jQuery);