diff --git a/src/sunstone/etc/sunstone-views/admin.yaml b/src/sunstone/etc/sunstone-views/admin.yaml index ad8dcf3fcf..79966f13a1 100644 --- a/src/sunstone/etc/sunstone-views/admin.yaml +++ b/src/sunstone/etc/sunstone-views/admin.yaml @@ -89,6 +89,7 @@ tabs: #- 8 # Group ID #- 9 # Hidden User Data #- 10 # Labels + #- 11 # Search data actions: User.refresh: true User.create_dialog: true diff --git a/src/sunstone/etc/sunstone-views/admin_vcenter.yaml b/src/sunstone/etc/sunstone-views/admin_vcenter.yaml index f935048700..5edd7a3e16 100644 --- a/src/sunstone/etc/sunstone-views/admin_vcenter.yaml +++ b/src/sunstone/etc/sunstone-views/admin_vcenter.yaml @@ -87,6 +87,7 @@ tabs: #- 8 # Group ID #- 9 # Hidden User Data #- 10 # Labels + #- 11 # Search data actions: User.refresh: true User.create_dialog: true diff --git a/src/sunstone/etc/sunstone-views/groupadmin.yaml b/src/sunstone/etc/sunstone-views/groupadmin.yaml index dd88d4bef5..59d15005e1 100644 --- a/src/sunstone/etc/sunstone-views/groupadmin.yaml +++ b/src/sunstone/etc/sunstone-views/groupadmin.yaml @@ -87,6 +87,7 @@ tabs: #- 8 # Group ID #- 9 # Hidden User Data #- 10 # Labels + #- 11 # Search data actions: User.refresh: true User.create_dialog: true diff --git a/src/sunstone/etc/sunstone-views/groupadmin_vcenter.yaml b/src/sunstone/etc/sunstone-views/groupadmin_vcenter.yaml index 0d51619f8d..ed271c5f6e 100644 --- a/src/sunstone/etc/sunstone-views/groupadmin_vcenter.yaml +++ b/src/sunstone/etc/sunstone-views/groupadmin_vcenter.yaml @@ -87,6 +87,7 @@ tabs: #- 8 # Group ID #- 9 # Hidden User Data #- 10 # Labels + #- 11 # Search data actions: User.refresh: true User.create_dialog: true diff --git a/src/sunstone/etc/sunstone-views/user.yaml b/src/sunstone/etc/sunstone-views/user.yaml index 754a49fbc9..b87c2ae1d8 100644 --- a/src/sunstone/etc/sunstone-views/user.yaml +++ b/src/sunstone/etc/sunstone-views/user.yaml @@ -86,6 +86,7 @@ tabs: #- 8 # Group ID #- 9 # Hidden User Data #- 10 # Labels + #- 11 # Search data actions: User.refresh: true User.create_dialog: true diff --git a/src/sunstone/public/app/tabs/users-tab/datatable.js b/src/sunstone/public/app/tabs/users-tab/datatable.js index a0f16f6110..22c4e1af07 100644 --- a/src/sunstone/public/app/tabs/users-tab/datatable.js +++ b/src/sunstone/public/app/tabs/users-tab/datatable.js @@ -36,6 +36,7 @@ define(function(require) { var XML_ROOT = "USER"; var TAB_NAME = require('./tabId'); var LABELS_COLUMN = 10; + var SEARCH_COLUMN = 11; var TEMPLATE_ATTR = 'TEMPLATE'; /* @@ -73,7 +74,8 @@ define(function(require) { Locale.tr("CPU"), Locale.tr("Group ID"), Locale.tr("Hidden User Data"), - Locale.tr("Labels") + Locale.tr("Labels"), + "search_data" ]; this.selectOptions = { @@ -89,6 +91,9 @@ define(function(require) { this.conf.searchDropdownHTML = SearchDropdown(); + this.searchFields = ["NAME", "GNAME", "PASSWORD", "AUTH_DRIVER"]; + this.searchVals = {"NAME": "", "GNAME": "", "PASSWORD": "", "AUTH_DRIVER": ""}; + TabDataTable.call(this); } @@ -108,27 +113,27 @@ define(function(require) { function _setupSearch(context) { var that = this; - $(".pass-search", context).on('input', function(){ - var val = $(".pass-search", context).val(); + $("[search-field]", context).on('input change', function(){ + that.searchVals[$(this).attr("search-field")] = $(this).val(); + }); - if(val == undefined || val == ""){ + this.dataTable.on('search.dt', function() { + var empty = true; + + for(var i=0; i < that.searchFields.length; i++){ + var name = that.searchFields[i]; + empty = $("[search-field="+name+"]", context).val() == ""; + + if(!empty){ + break; + } + } + + if(empty){ $("button.search-dropdown", context).addClass("hollow"); } else { $("button.search-dropdown", context).removeClass("hollow"); } - - that.dataTable.fnDraw(true); - }).on("keyup keypress", function(e) { - var code = e.keyCode || e.which; - if (code == 13) { - $("button.advanced-search", context).click(); - } - }); - - $("a.advanced-search-clear", context).on('click', function(){ - $(".pass-search", context).val("").trigger("input"); - - $("button.advanced-search", context).click(); }); $.fn.dataTable.ext.search.push( @@ -139,17 +144,22 @@ define(function(require) { return true; } - var val = $(".pass-search", context).val(); - - if(val == undefined || val == ""){ - return true; - } - try { - var pass = $("input.check_item", that.dataTable.fnGetNodes(dataIndex)).attr("password64"); - pass = atob(pass); + var data = JSON.parse(atob(data[SEARCH_COLUMN])); - return pass == val; + var match = true; + + for(var i=0; i < that.searchFields.length; i++){ + var name = that.searchFields[i]; + + match = (data[name].match( that.searchVals[name] ) != null); + + if (!match){ + break; + } + } + + return match; } catch (err) {} return true; @@ -158,6 +168,8 @@ define(function(require) { } function _elementArray(element_json) { + var that = this; + this.totalUsers++; var element = element_json[XML_ROOT]; @@ -190,13 +202,23 @@ define(function(require) { // Build hidden user template var hidden_template = TemplateUtils.templateToString(element); - this.passwordList += '