diff --git a/src/sunstone/etc/sunstone-views/admin.yaml b/src/sunstone/etc/sunstone-views/admin.yaml index d25f5ca374..40188e0d0d 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 3fe1c59d0e..0d4f479108 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 7432710763..e9e4f85a9c 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 fe70f51704..e1162f2644 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 c2b548e18a..4da1924150 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/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 37bc96f5d5..5fce883695 100644 --- a/src/sunstone/public/app/app.js +++ b/src/sunstone/public/app/app.js @@ -37,7 +37,6 @@ define(function(require) { var Notifier = require('utils/notifier'); var Menu = require('utils/menu'); var Locale = require('utils/locale'); - var UserAndZoneTemplate = require('hbs!sunstone/user_and_zone'); var _commonDialogs = [ @@ -97,13 +96,21 @@ define(function(require) { } function _insertUserAndZoneSelector() { + + this.idGroup = -2; /*All*/ + 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'); $(".user-zone-info a.quickconf_view_header").click(function() { var context = $(this).closest('ul'); @@ -117,6 +124,86 @@ 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; + this.primaryGroup = obj_user.USER.GID; + 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); + var primaryGroupChar = ''; + $('#'+ that.primaryGroup + ' a').append(primaryGroupChar); + $('.groups').on('click', function(){ + 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(); + }); + }); + }, + error: Notifier.onError + }); + } + function zoneRefresh() { // Populate Zones dropdown OpenNebula.Zone.list({ 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 e15d0e7d52..873341c94c 100644 --- a/src/sunstone/public/app/sunstone-config.js +++ b/src/sunstone/public/app/sunstone-config.js @@ -26,6 +26,14 @@ define(function(require) { return enabled; }, + "changeFilter": function(bool) { + _config['pool_filter'] = bool; + }, + + "isChangedFilter": function(){ + return _config['pool_filter']; + }, + "isTabActionEnabled": function(tabName, actionName, panelName) { var enabled = false; var configTab = _config['view']['tabs'][tabName]; @@ -150,6 +158,7 @@ define(function(require) { 'onedConf': _config['oned_conf'], 'confirmVMActions': _config['view']['confirm_vms'], 'scaleFactor': _config['view']['features']['instanciate_cpu_factor'], + '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 922feb3b89..91cd2a3a0c 100644 --- a/src/sunstone/public/app/sunstone/user_and_zone.hbs +++ b/src/sunstone/public/app/sunstone/user_and_zone.hbs @@ -15,8 +15,16 @@ {{! -------------------------------------------------------------------------- }} {{/if}} +
  • + + + {{tr "Groups"}} + + +
  • 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 4ce6a73ae9..593325552a 100644 --- a/src/sunstone/public/app/utils/tab-datatable.js +++ b/src/sunstone/public/app/utils/tab-datatable.js @@ -1226,16 +1226,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 @@ -1246,7 +1247,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