This is an automated email from the ASF dual-hosted git repository.

rohit pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/master by this push:
     new f72b61e  ui: Update ISO permissions (#4017)
f72b61e is described below

commit f72b61edb82592c5e17a4f73bac54cea7e8c3702
Author: Nicolas Vazquez <nicovazque...@gmail.com>
AuthorDate: Sun Jun 7 23:05:28 2020 -0300

    ui: Update ISO permissions (#4017)
    
    Update ISO permissions
    
    Co-Authored-By: Abhishek Kumar <abhishek.mr...@gmail.com>
    Co-authored-by: Abhishek Kumar <abhishek.mr...@gmail.com>
---
 ui/css/cloudstack3.css  |   8 ++
 ui/l10n/en.js           |   1 +
 ui/scripts/templates.js | 318 +++++++++++++++++++++++++++++++++++++++++++++++-
 3 files changed, 326 insertions(+), 1 deletion(-)

diff --git a/ui/css/cloudstack3.css b/ui/css/cloudstack3.css
index a2da335..98871c9 100644
--- a/ui/css/cloudstack3.css
+++ b/ui/css/cloudstack3.css
@@ -12458,6 +12458,14 @@ div.ui-dialog div.autoscaler div.field-group 
div.form-container form div.form-it
   background-position: -165px -704px;
 }
 
+.shareISO .icon {
+  background-position: -165px -122px;
+}
+
+.shareISO:hover .icon {
+  background-position: -165px -704px;
+}
+
 .createVolume .icon {
   background-position: -70px -124px;
 }
diff --git a/ui/l10n/en.js b/ui/l10n/en.js
index cb967be..fa7d388 100644
--- a/ui/l10n/en.js
+++ b/ui/l10n/en.js
@@ -286,6 +286,7 @@ var dictionary = {
 "label.action.run.diagnostics":"Run Diagnostics",
 "label.action.secure.host":"Provision Host Security Keys",
 "label.action.start.instance":"Start Instance",
+"label.action.share.iso": "Update ISO Permissions",
 "label.action.share.template": "Update Template Permissions",
 "label.action.start.instance.processing":"Starting Instance....",
 "label.action.start.router":"Start Router",
diff --git a/ui/scripts/templates.js b/ui/scripts/templates.js
index 9216733..1516286 100644
--- a/ui/scripts/templates.js
+++ b/ui/scripts/templates.js
@@ -3357,6 +3357,319 @@
                                 notification: {
                                     poll: pollAsyncJobResult
                                 }
+                            },
+
+                            shareISO: {
+                                label: 'label.action.share.iso',
+                                messages: {
+                                    notification: function (args) {
+                                        return 'label.action.share.iso';
+                                    }
+                                },
+
+                                createForm: {
+                                    title: 'label.action.share.iso',
+                                    desc: '',
+                                    fields: {
+                                        operation: {
+                                            label: 'label.operation',
+                                            docID: 
'helpUpdateTemplateOperation',
+                                            validation: {
+                                                required: true
+                                            },
+                                            select: function (args) {
+                                                var items = [];
+                                                items.push({
+                                                    id: "add",
+                                                    description: "Add"
+                                                });
+                                                items.push({
+                                                    id: "remove",
+                                                    description: "Remove"
+                                                });
+                                                items.push({
+                                                    id: "reset",
+                                                    description: "Reset"
+                                                });
+
+                                                args.response.success({
+                                                    data: items
+                                                });
+
+                                                // Select change
+                                                args.$select.change(function 
() {
+                                                    var $form = 
$(this).closest('form');
+                                                    var selectedOperation = 
$(this).val();
+                                                    if (selectedOperation === 
"reset") {
+                                                        
$form.find('[rel=projects]').hide();
+                                                        
$form.find('[rel=sharewith]').hide();
+                                                        
$form.find('[rel=accounts]').hide();
+                                                        
$form.find('[rel=accountlist]').hide();
+                                                    } else {
+                                                        // 
allow.user.view.domain.accounts = true
+                                                        // Populate List of 
accounts in domain as dropdown multiselect
+                                                        
$form.find('[rel=sharewith]').css('display', 'inline-block');
+                                                        if (!isUser() || 
g_allowUserViewAllDomainAccounts === true) {
+                                                            
$form.find('[rel=projects]').css('display', 'inline-block');
+                                                            
$form.find('[rel=accounts]').css('display', 'inline-block');
+                                                            
$form.find('[rel=accountlist]').hide();
+                                                        } else {
+                                                            // If users are 
not allowed to see accounts in the domain, show input text field for Accounts
+                                                            // Projects will 
always be shown as dropdown multiselect
+                                                            
$form.find('[rel=projects]').css('display', 'inline-block');
+                                                            
$form.find('[rel=accountslist]').css('display', 'inline-block');
+                                                            
$form.find('[rel=accounts]').hide();
+                                                        }
+                                                    }
+                                                });
+                                            }
+                                        },
+                                        shareWith: {
+                                            label: 'label.share.with',
+                                            docID: 
'helpUpdateTemplateShareWith',
+                                            validation: {
+                                                required: true
+                                            },
+                                            dependsOn: 'operation',
+                                            select: function (args) {
+                                                var items = [];
+                                                items.push({
+                                                    id: "account",
+                                                    description: "Account"
+                                                });
+                                                items.push({
+                                                    id: "project",
+                                                    description: "Project"
+                                                });
+
+                                                args.response.success({ data: 
items });
+
+                                                // Select change
+                                                args.$select.change(function 
() {
+                                                    var $form = 
$(this).closest('form');
+                                                    var sharedWith = 
$(this).val();
+                                                    if (args.operation !== 
"reset") {
+                                                        if (sharedWith === 
"project") {
+                                                            
$form.find('[rel=accounts]').hide();
+                                                            
$form.find('[rel=accountlist]').hide();
+                                                            
$form.find('[rel=projects]').css('display', 'inline-block');
+                                                        } else {
+                                                            // 
allow.user.view.domain.accounts = true
+                                                            // Populate List 
of accounts in domain as dropdown multiselect
+                                                            if (!isUser() || 
g_allowUserViewAllDomainAccounts === true) {
+                                                                
$form.find('[rel=projects]').hide();
+                                                                
$form.find('[rel=accountlist]').hide();
+                                                                
$form.find('[rel=accounts]').css('display', 'inline-block');
+                                                            } else {
+                                                                // If users 
are not allowed to see accounts in the domain, show input text field for 
Accounts
+                                                                // Projects 
will always be shown as dropdown multiselect
+                                                                
$form.find('[rel=projects]').hide();
+                                                                
$form.find('[rel=accounts]').hide();
+                                                                
$form.find('[rel=accountlist]').css('display', 'inline-block');
+                                                            }
+                                                        }
+                                                    }
+                                                });
+                                            }
+                                        },
+
+                                        accountlist: {
+                                            label: 'label.accounts',
+                                            docID: 
'helpUpdateTemplateAccountList'
+                                        },
+
+                                        accounts: {
+                                            label: 'label.accounts',
+                                            docID: 
'helpUpdateTemplateAccounts',
+                                            dependsOn: 'shareWith',
+                                            isMultiple: true,
+                                            select: function (args) {
+                                                var operation = args.operation;
+                                                if (operation !== "reset") {
+                                                    $.ajax({
+                                                        url: 
createURL("listAccounts&listall=true"),
+                                                        dataType: "json",
+                                                        async: true,
+                                                        success: function 
(jsonAccounts) {
+                                                            var accountByName 
= {};
+                                                            
$.each(jsonAccounts.listaccountsresponse.account, function(idx, account) {
+                                                                // Only add 
current domain's accounts for add as update template permissions supports that
+                                                                if 
(account.domainid === g_domainid && operation === "add") {
+                                                                    
accountByName[account.name] = {
+                                                                        
projName: account.name,
+                                                                        
hasPermission: false
+                                                                    };
+                                                                }
+                                                            });
+                                                            $.ajax({
+                                                                url: 
createURL('listIsoPermissions&id=' + args.context.isos[0].id),
+                                                                dataType: 
"json",
+                                                                async: true,
+                                                                success: 
function (json) {
+                                                                    items = 
json.listtemplatepermissionsresponse.templatepermission.account;
+                                                                    
$.each(items, function(idx, accountName) {
+                                                                        if 
(accountByName[accountName]) {
+                                                                            
accountByName[accountName].hasPermission = true;
+                                                                        }
+                                                                    });
+
+                                                                    var 
accountObjs = [];
+                                                                    if 
(operation === "add") {
+                                                                        // 
Skip already permitted accounts
+                                                                        
$.each(Object.keys(accountByName), function(idx, accountName) {
+                                                                            if 
(accountByName[accountName].hasPermission == false) {
+                                                                               
 accountObjs.push({
+                                                                               
     name: accountName,
+                                                                               
     description: accountName
+                                                                               
 });
+                                                                            }
+                                                                        });
+                                                                    } else if 
(items != null) {
+                                                                        
$.each(items, function(idx, accountName) {
+                                                                            if 
(accountName !== g_account) {
+                                                                               
 accountObjs.push({
+                                                                               
     name: accountName,
+                                                                               
     description: accountName
+                                                                               
 });
+                                                                            }
+                                                                        });
+                                                                    }
+                                                                    
args.$select.html('');
+                                                                    
args.response.success({data: accountObjs});
+                                                                }
+                                                            });
+                                                        }
+                                                    });
+                                                }
+                                            }
+                                        },
+
+                                        projects: {
+                                            label: 'label.projects',
+                                            docID: 
'helpUpdateTemplateProjectIds',
+                                            dependsOn: 'shareWith',
+                                            isMultiple: true,
+                                            select: function (args) {
+                                                var operation = args.operation;
+                                                if (operation !== "reset") {
+                                                    $.ajax({
+                                                        url: 
createURL("listProjects&listall=true"),
+                                                        dataType: "json",
+                                                        async: true,
+                                                        success: function 
(jsonProjects) {
+                                                            var projectsByIds 
= {};
+                                                            
$.each(jsonProjects.listprojectsresponse.project, function(idx, project) {
+                                                                // Only add 
current domain's projects for add operation as update template permissions 
supports that
+                                                                if 
((project.domainid === g_domainid && operation === "add") || operation === 
"remove") {
+                                                                    
projectsByIds[project.id] = {
+                                                                        
projName: project.name,
+                                                                        
hasPermission: false
+                                                                    };
+                                                                }
+                                                            });
+
+                                                            $.ajax({
+                                                                url: 
createURL('listIsoPermissions&id=' + args.context.isos[0].id),
+                                                                dataType: 
"json",
+                                                                async: true,
+                                                                success: 
function (json) {
+                                                                    items = 
json.listtemplatepermissionsresponse.templatepermission.projectids;
+                                                                    
$.each(items, function(idx, projectId) {
+                                                                        if 
(projectsByIds[projectId]) {
+                                                                            
projectsByIds[projectId].hasPermission = true;
+                                                                        }
+                                                                    });
+
+                                                                    var 
projectObjs = [];
+                                                                    if 
(operation === "add") {
+                                                                        // 
Skip already permitted accounts
+                                                                        
$.each(Object.keys(projectsByIds), function(idx, projectId) {
+                                                                            if 
(projectsByIds[projectId].hasPermission == false) {
+                                                                               
 projectObjs.push({
+                                                                               
     id: projectId,
+                                                                               
     description: projectsByIds[projectId].projName
+                                                                               
 });
+                                                                            }
+                                                                        });
+                                                                    } else if 
(items != null) {
+                                                                        
$.each(items, function(idx, projectId) {
+                                                                            if 
(projectId !== g_account) {
+                                                                               
 projectObjs.push({
+                                                                               
     id: projectId,
+                                                                               
     description: projectsByIds[projectId] ? projectsByIds[projectId].projName 
: projectId
+                                                                               
 });
+                                                                            }
+                                                                        });
+                                                                    }
+                                                                    
args.$select.html('');
+                                                                    
args.response.success({data: projectObjs});
+                                                                }
+                                                            });
+                                                        }
+                                                    });
+                                                }
+                                            }
+                                        }
+                                    }
+                                },
+
+                                action: function (args) {
+                                    // Load data from form
+                                    var data = {
+                                        id: args.context.isos[0].id,
+                                        op: args.data.operation
+                                    };
+                                    var selectedOperation = 
args.data.operation;
+                                    if (selectedOperation === "reset") {
+                                        // Do not append Project ID or Account 
to data object
+                                    } else {
+                                        var projects = args.data.projects;
+                                        var accounts = args.data.accounts;
+                                        var accountList = 
args.data.accountlist;
+
+                                        if (accounts !== undefined || 
(accountList !== undefined && accountList.length > 0)) {
+                                            var accountNames = "";
+                                            if (accountList !== undefined && 
accounts === undefined) {
+                                                accountNames = accountList;
+                                            } else {
+                                                if 
(Object.prototype.toString.call(accounts) === '[object Array]') {
+                                                    accountNames = 
accounts.join(",");
+                                                } else {
+                                                    accountNames = accounts;
+                                                }
+                                            }
+                                            $.extend(data, {
+                                                accounts: accountNames
+                                            });
+                                        }
+
+                                        if (projects !== undefined) {
+                                            var projectIds = "";
+                                            if 
(Object.prototype.toString.call(projects) === '[object Array]') {
+                                                projectIds = 
projects.join(",");
+                                            } else {
+                                                projectIds = projects;
+                                            }
+
+                                            $.extend(data, {
+                                                projectids: projectIds
+                                            });
+                                        }
+                                    }
+
+                                    $.ajax({
+                                        url: createURL('updateIsoPermissions'),
+                                        data: data,
+                                        dataType: "json",
+                                        async: false,
+                                        success: function (json) {
+                                            var item = 
json.updateisopermissionsresponse.success;
+                                            args.response.success({
+                                                data: item
+                                            });
+                                        }
+                                    }); //end ajax
+                                }
                             }
                         },
 
@@ -3873,7 +4186,10 @@
         ) {
             //do nothing
         } else {
-            allowedActions.push("downloadISO");
+            if (jsonObj.isextractable){
+                allowedActions.push("downloadISO");
+            }
+            allowedActions.push("shareISO");
         }
 
         // "Delete ISO"

Reply via email to