From 3dd7f49e9357708b88e96c87a5ff86021976c5ee Mon Sep 17 00:00:00 2001 From: Abel Coronado Date: Tue, 18 Apr 2017 09:59:20 +0200 Subject: [PATCH 1/3] F #5065 Added group selector in UserSelector (#256) * F #5065 Added group selector in UserSelector * F #4913 Optimized ajax * Added pool_filter --- src/sunstone/public/app/app.js | 74 +++++++++++++++++++ src/sunstone/public/app/sunstone-config.js | 4 + .../public/app/sunstone/user_and_zone.hbs | 9 ++- 3 files changed, 86 insertions(+), 1 deletion(-) diff --git a/src/sunstone/public/app/app.js b/src/sunstone/public/app/app.js index 37bc96f5d5..b3465b99d0 100644 --- a/src/sunstone/public/app/app.js +++ b/src/sunstone/public/app/app.js @@ -37,6 +37,7 @@ define(function(require) { var Notifier = require('utils/notifier'); var Menu = require('utils/menu'); var Locale = require('utils/locale'); + var OpenNebulaGroup = require('opennebula/group'); var UserAndZoneTemplate = require('hbs!sunstone/user_and_zone'); @@ -97,6 +98,10 @@ define(function(require) { } function _insertUserAndZoneSelector() { + + this.idGroup = -2; /*All*/ + Config.changeFilter(false); + $(".user-zone-info").html(UserAndZoneTemplate({ displayName: config['display_name'], settingsTabEnabled: Config.isTabEnabled(SETTINGS_TAB_ID), @@ -104,6 +109,8 @@ define(function(require) { zoneName: config['zone_name'] })).foundation(); + groupsRefresh(); + $('.quickconf_view[view="' + config['user_config']["default_view"] + '"] i').addClass('fa-check'); $(".user-zone-info a.quickconf_view_header").click(function() { var context = $(this).closest('ul'); @@ -117,6 +124,73 @@ define(function(require) { Sunstone.runAction("User.append_sunstone_setting_refresh", -1, sunstone_setting); }); + function groupsRefresh() { + + OpenNebula.User.show({ + timeout: true, + data : { + id: config['user_id'] + }, + success: function (request, obj_user) { + var groups = obj_user.USER.GROUPS.ID; + var groupsHTML = "
  • \ + " + Locale.tr("All") + "
  • "; + if(this.idGroup == -2){ + var groupsHTML = "
  • \ + " + Locale.tr("All") + "
  • "; + } + + if (!$.isArray(groups)){ + groups = groups.toString(); + groups = [groups]; + } + + that = this; + OpenNebula.Group.list({ + timeout: true, + success: function(request, group_list) { + var group_list_aux = group_list; + $.each(groups, function(key, value){ + var id = value; + $.each(group_list_aux, function(key, value){ + if(id == value.GROUP.ID){ + if(id == that.idGroup){ + groupsHTML += "
  • \ + " + value.GROUP.NAME + "\ +
  • "; + } else { + groupsHTML += "
  • \ + " + value.GROUP.NAME + "\ +
  • "; + } + return false; + } + }); + }); + }, + error: Notifier.onError + }); + + $('#userselector').on('click', function(){ + $('.groups-menu').empty(); + $('.groups-menu').append(groupsHTML); + $('.groups').on('click', function(){ + that.idGroup = $(this).attr('value'); + $('.groups-menu a i').removeClass('fa-check'); + $('a i', this).addClass('fa-check'); + groupsRefresh(); + if(that.idGroup != -2){ + Config.changeFilter(true); + } else { + Config.changeFilter(false); + } + }); + }); + }, + error: Notifier.onError + }); + } + function zoneRefresh() { // Populate Zones dropdown OpenNebula.Zone.list({ diff --git a/src/sunstone/public/app/sunstone-config.js b/src/sunstone/public/app/sunstone-config.js index a6c1f9a576..a3c7146e72 100644 --- a/src/sunstone/public/app/sunstone-config.js +++ b/src/sunstone/public/app/sunstone-config.js @@ -26,6 +26,10 @@ define(function(require) { return enabled; }, + "changeFilter": function(bool) { + _config['pool_filter'] = bool; + }, + "isTabActionEnabled": function(tabName, actionName, panelName) { var enabled = false; var configTab = _config['view']['tabs'][tabName]; diff --git a/src/sunstone/public/app/sunstone/user_and_zone.hbs b/src/sunstone/public/app/sunstone/user_and_zone.hbs index 922feb3b89..59101ad5aa 100644 --- a/src/sunstone/public/app/sunstone/user_and_zone.hbs +++ b/src/sunstone/public/app/sunstone/user_and_zone.hbs @@ -16,7 +16,7 @@ {{/if}} +
  • + + + {{tr "Groups"}} + + +
  • From 5681d03d86e72fad86c6e699d3274bdde87c61a8 Mon Sep 17 00:00:00 2001 From: juanmont Date: Wed, 19 Apr 2017 14:29:05 +0200 Subject: [PATCH 2/3] Feature 5065 Use filter flag to implement group views (#265) * F #5065 changed ruby to acept filter * F #5065 added posibility to change group and filter the resources pool * Bug resolved bug when change primary group * F #5065 click refresh button when you select a group --- src/sunstone/models/SunstoneServer.rb | 10 ++-------- src/sunstone/public/app/app.js | 7 +++++-- src/sunstone/public/app/opennebula/action.js | 5 +++-- src/sunstone/public/app/opennebula/datastore.js | 2 ++ src/sunstone/public/app/sunstone-config.js | 4 ++++ .../public/app/tabs/users-tab/panels/groups.js | 2 +- src/sunstone/public/app/utils/tab-datatable.js | 7 +++++-- src/sunstone/sunstone-server.rb | 2 +- 8 files changed, 23 insertions(+), 16 deletions(-) diff --git a/src/sunstone/models/SunstoneServer.rb b/src/sunstone/models/SunstoneServer.rb index dafc69f500..301f112825 100644 --- a/src/sunstone/models/SunstoneServer.rb +++ b/src/sunstone/models/SunstoneServer.rb @@ -24,8 +24,6 @@ require 'OpenNebulaJSON/JSONUtils' #include JSONUtils class SunstoneServer < CloudServer - # FLAG that will filter the elements retrieved from the Pools - POOL_FILTER = Pool::INFO_ALL # Secs to sleep between checks to see if image upload to repo is finished IMAGE_POLL_SLEEP_TIME = 5 @@ -38,14 +36,10 @@ class SunstoneServer < CloudServer ############################################################################ # ############################################################################ - def get_pool(kind,gid, client=nil) + def get_pool(kind,user_flag, client=nil) client = @client if !client - if gid == "0" - user_flag = Pool::INFO_ALL - else - user_flag = POOL_FILTER - end + user_flag = Integer(user_flag) pool = case kind when "group" then GroupPoolJSON.new(client) diff --git a/src/sunstone/public/app/app.js b/src/sunstone/public/app/app.js index b3465b99d0..c293b59343 100644 --- a/src/sunstone/public/app/app.js +++ b/src/sunstone/public/app/app.js @@ -37,8 +37,6 @@ define(function(require) { var Notifier = require('utils/notifier'); var Menu = require('utils/menu'); var Locale = require('utils/locale'); - var OpenNebulaGroup = require('opennebula/group'); - var UserAndZoneTemplate = require('hbs!sunstone/user_and_zone'); var _commonDialogs = [ @@ -176,6 +174,9 @@ define(function(require) { $('.groups-menu').append(groupsHTML); $('.groups').on('click', function(){ that.idGroup = $(this).attr('value'); + if(that.idGroup != -2){ + Sunstone.runAction("User.chgrp", [parseInt(config['user_id'])], parseInt(that.idGroup)); + } $('.groups-menu a i').removeClass('fa-check'); $('a i', this).addClass('fa-check'); groupsRefresh(); @@ -184,6 +185,8 @@ define(function(require) { } else { Config.changeFilter(false); } + $('.refresh').click(); + $('.refresh-table').click(); }); }); }, diff --git a/src/sunstone/public/app/opennebula/action.js b/src/sunstone/public/app/opennebula/action.js index f00b5448b1..f99c7b705f 100644 --- a/src/sunstone/public/app/opennebula/action.js +++ b/src/sunstone/public/app/opennebula/action.js @@ -17,6 +17,7 @@ define(function(require) { var OpenNebulaHelper = require('./helper'); var OpenNebulaError = require('./error'); + var Config = require('sunstone-config'); var listCache = {}; var listWaiting = {}; @@ -162,13 +163,13 @@ define(function(require) { } listWaiting[cache_name] = true; - + var pool_filter = Config.isChangedFilter()?-4:-2; //console.log(cache_name+" list. NO cache, calling ajax"); $.ajax({ url: reqPath, type: "GET", - data: {timeout: timeout}, + data: {timeout: timeout, pool_filter: pool_filter}, dataType: "json", success: function(response) { var list; diff --git a/src/sunstone/public/app/opennebula/datastore.js b/src/sunstone/public/app/opennebula/datastore.js index 429578aaaa..6ebe7a386a 100644 --- a/src/sunstone/public/app/opennebula/datastore.js +++ b/src/sunstone/public/app/opennebula/datastore.js @@ -131,7 +131,9 @@ define(function(require) { return support; }, "initMarketExportSupported": function(){ + var pool_filter = Config.isChangedFilter()? -4 : -2; this.list({ + data : {pool_filter : pool_filter}, timeout: true, success: function (request, obj_list) {}, //error: Notifier.onError diff --git a/src/sunstone/public/app/sunstone-config.js b/src/sunstone/public/app/sunstone-config.js index a3c7146e72..68d5899f66 100644 --- a/src/sunstone/public/app/sunstone-config.js +++ b/src/sunstone/public/app/sunstone-config.js @@ -30,6 +30,10 @@ define(function(require) { _config['pool_filter'] = bool; }, + "isChangedFilter": function(){ + return _config['pool_filter']; + }, + "isTabActionEnabled": function(tabName, actionName, panelName) { var enabled = false; var configTab = _config['view']['tabs'][tabName]; diff --git a/src/sunstone/public/app/tabs/users-tab/panels/groups.js b/src/sunstone/public/app/tabs/users-tab/panels/groups.js index 1345b0b550..639cb3f81c 100644 --- a/src/sunstone/public/app/tabs/users-tab/panels/groups.js +++ b/src/sunstone/public/app/tabs/users-tab/panels/groups.js @@ -108,7 +108,7 @@ define(function(require) { this.groupsTableEdit.selectResourceTableSelect({ids: this.groups}); $("#cancel_update_group").hide(); - that = this; + var that = this; context.off("click", "#update_group"); context.on("click", "#update_group", function() { ResourceSelect.insert({ diff --git a/src/sunstone/public/app/utils/tab-datatable.js b/src/sunstone/public/app/utils/tab-datatable.js index f5c562cb33..a1ab9744b6 100644 --- a/src/sunstone/public/app/utils/tab-datatable.js +++ b/src/sunstone/public/app/utils/tab-datatable.js @@ -1231,16 +1231,17 @@ define(function(require) { success_func(request, []); Notifier.onError(request, error_json, container); } - + var pool_filter = SunstoneConfig.isChangedFilter()? -4 : -2; if (that.selectOptions.zone_id == undefined) { OpenNebula[that.resource].list({ + data : {pool_filter : pool_filter}, timeout: true, success: success_func, error: error_func }); } else { OpenNebula[that.resource].list_in_zone({ - data: {zone_id: that.selectOptions.zone_id}, + data: {zone_id: that.selectOptions.zone_id, pool_filter : pool_filter}, timeout: true, success: success_func, error: error_func @@ -1251,7 +1252,9 @@ define(function(require) { // TODO: This is probably duplicated somewhere function _list() { var that = this; + var pool_filter = SunstoneConfig.isChangedFilter()? -4 : -2; OpenNebula[that.resource].list({ + data : {pool_filter : pool_filter}, success: function(req, resp) { that.updateView(req, resp); }, diff --git a/src/sunstone/sunstone-server.rb b/src/sunstone/sunstone-server.rb index ec0ccb895b..765379415d 100755 --- a/src/sunstone/sunstone-server.rb +++ b/src/sunstone/sunstone-server.rb @@ -702,7 +702,7 @@ get '/:pool' do end @SunstoneServer.get_pool(params[:pool], - session[:user_gid], + params[:pool_filter], zone_client) end From 5ec325018de1376cff188450ca13393f8d0babde Mon Sep 17 00:00:00 2001 From: Abel Coronado Date: Thu, 20 Apr 2017 12:24:30 +0200 Subject: [PATCH 3/3] F #5056 Added filter view and primary group (#267) * F #5056 Added filter view and primary group * F #5065 filter view configurable --- src/sunstone/etc/sunstone-views/admin.yaml | 1 + .../etc/sunstone-views/admin_vcenter.yaml | 1 + .../etc/sunstone-views/groupadmin.yaml | 1 + .../sunstone-views/groupadmin_vcenter.yaml | 1 + src/sunstone/etc/sunstone-views/user.yaml | 1 + src/sunstone/public/app/app.js | 38 ++++++++++++------- src/sunstone/public/app/sunstone-config.js | 1 + .../public/app/sunstone/user_and_zone.hbs | 8 ++++ 8 files changed, 38 insertions(+), 14 deletions(-) diff --git a/src/sunstone/etc/sunstone-views/admin.yaml b/src/sunstone/etc/sunstone-views/admin.yaml index 71a38c86c1..370a0ffde2 100644 --- a/src/sunstone/etc/sunstone-views/admin.yaml +++ b/src/sunstone/etc/sunstone-views/admin.yaml @@ -3,6 +3,7 @@ provision_logo: images/opennebula-5.0.png link_logo: text_link_logo: confirm_vms: false +filter-view: true enabled_tabs: - dashboard-tab - instances-top-tab diff --git a/src/sunstone/etc/sunstone-views/admin_vcenter.yaml b/src/sunstone/etc/sunstone-views/admin_vcenter.yaml index 75ef5ef014..298f1d73d4 100644 --- a/src/sunstone/etc/sunstone-views/admin_vcenter.yaml +++ b/src/sunstone/etc/sunstone-views/admin_vcenter.yaml @@ -3,6 +3,7 @@ provision_logo: images/opennebula-5.0.png link_logo: text_link_logo: confirm_vms: false +filter-view: true enabled_tabs: - dashboard-tab - instances-top-tab diff --git a/src/sunstone/etc/sunstone-views/groupadmin.yaml b/src/sunstone/etc/sunstone-views/groupadmin.yaml index 942acdc0bf..9156eeb5f5 100644 --- a/src/sunstone/etc/sunstone-views/groupadmin.yaml +++ b/src/sunstone/etc/sunstone-views/groupadmin.yaml @@ -3,6 +3,7 @@ provision_logo: images/opennebula-5.0.png link_logo: text_link_logo: confirm_vms: false +filter-view: true enabled_tabs: - dashboard-tab - instances-top-tab diff --git a/src/sunstone/etc/sunstone-views/groupadmin_vcenter.yaml b/src/sunstone/etc/sunstone-views/groupadmin_vcenter.yaml index bd8324a778..add261ea06 100644 --- a/src/sunstone/etc/sunstone-views/groupadmin_vcenter.yaml +++ b/src/sunstone/etc/sunstone-views/groupadmin_vcenter.yaml @@ -3,6 +3,7 @@ provision_logo: images/opennebula-5.0.png link_logo: text_link_logo: confirm_vms: false +filter-view: true enabled_tabs: - dashboard-tab - instances-top-tab diff --git a/src/sunstone/etc/sunstone-views/user.yaml b/src/sunstone/etc/sunstone-views/user.yaml index 389a1d7887..51abd88b9b 100644 --- a/src/sunstone/etc/sunstone-views/user.yaml +++ b/src/sunstone/etc/sunstone-views/user.yaml @@ -3,6 +3,7 @@ provision_logo: images/opennebula-5.0.png link_logo: text_link_logo: confirm_vms: false +filter-view: true enabled_tabs: - dashboard-tab - instances-top-tab diff --git a/src/sunstone/public/app/app.js b/src/sunstone/public/app/app.js index c293b59343..5fce883695 100644 --- a/src/sunstone/public/app/app.js +++ b/src/sunstone/public/app/app.js @@ -101,12 +101,14 @@ define(function(require) { Config.changeFilter(false); $(".user-zone-info").html(UserAndZoneTemplate({ + filterView: Config['filterView'], displayName: config['display_name'], settingsTabEnabled: Config.isTabEnabled(SETTINGS_TAB_ID), availableViews: config['available_views'], zoneName: config['zone_name'] })).foundation(); + $('#filter-view').hide(); groupsRefresh(); $('.quickconf_view[view="' + config['user_config']["default_view"] + '"] i').addClass('fa-check'); @@ -131,6 +133,7 @@ define(function(require) { }, success: function (request, obj_user) { var groups = obj_user.USER.GROUPS.ID; + this.primaryGroup = obj_user.USER.GID; var groupsHTML = "
  • \ " + Locale.tr("All") + "
  • "; if(this.idGroup == -2){ @@ -172,21 +175,28 @@ define(function(require) { $('#userselector').on('click', function(){ $('.groups-menu').empty(); $('.groups-menu').append(groupsHTML); + var primaryGroupChar = ''; + $('#'+ that.primaryGroup + ' a').append(primaryGroupChar); $('.groups').on('click', function(){ - that.idGroup = $(this).attr('value'); - if(that.idGroup != -2){ - Sunstone.runAction("User.chgrp", [parseInt(config['user_id'])], parseInt(that.idGroup)); - } - $('.groups-menu a i').removeClass('fa-check'); - $('a i', this).addClass('fa-check'); - groupsRefresh(); - if(that.idGroup != -2){ - Config.changeFilter(true); - } else { - Config.changeFilter(false); - } - $('.refresh').click(); - $('.refresh-table').click(); + that.idGroup = $(this).attr('value'); + if(that.idGroup != -2){ + $('#primary-char').remove(); + Sunstone.runAction("User.chgrp", [parseInt(config['user_id'])], parseInt(that.idGroup)); + $('a', this).append(primaryGroupChar); + Config.changeFilter(true); + var filterName = $(this).text(); + $('#filter-view').show(); + $('.filter-name').html(filterName); + } else { + $('#filter-view').hide(); + Config.changeFilter(false); + } + $('.groups-menu a i').removeClass('fa-check'); + $('a i', this).addClass('fa-check'); + groupsRefresh(); + $('.refresh').click(); + $('.refresh-table').click(); }); }); }, diff --git a/src/sunstone/public/app/sunstone-config.js b/src/sunstone/public/app/sunstone-config.js index 68d5899f66..6faef5f89c 100644 --- a/src/sunstone/public/app/sunstone-config.js +++ b/src/sunstone/public/app/sunstone-config.js @@ -157,6 +157,7 @@ define(function(require) { 'enabledTabs': _config['view']['enabled_tabs'], 'onedConf': _config['oned_conf'], 'confirmVMActions': _config['view']['confirm_vms'], + 'filterView': _config['view']['filter_view'], "allTabs": function() { return Object.keys(_config['view']['tabs']); diff --git a/src/sunstone/public/app/sunstone/user_and_zone.hbs b/src/sunstone/public/app/sunstone/user_and_zone.hbs index 59101ad5aa..91cd2a3a0c 100644 --- a/src/sunstone/public/app/sunstone/user_and_zone.hbs +++ b/src/sunstone/public/app/sunstone/user_and_zone.hbs @@ -15,6 +15,14 @@ {{! -------------------------------------------------------------------------- }}