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