From 78604cc8a87d331e7c61383f84e1c76cb1bd40ae Mon Sep 17 00:00:00 2001 From: Jorge Lobo Date: Fri, 29 Mar 2019 12:42:07 +0100 Subject: [PATCH] F #3167 add Sunstone Banner Signed-off-by: Jorge Lobo --- src/sunstone/public/app/app.js | 3 +- src/sunstone/public/app/opennebula.js | 114 +++++++-------- src/sunstone/public/app/opennebula/action.js | 45 ++++-- src/sunstone/public/app/opennebula/support.js | 16 ++- src/sunstone/public/app/sunstone-config.js | 94 ++++++------- src/sunstone/public/app/sunstone.js | 119 ++++++++-------- .../public/app/tabs/groups-tab/panels/info.js | 35 +++-- src/sunstone/public/app/tabs/settings-tab.js | 42 +++--- .../tabs/settings-tab/panels/user-config.js | 48 +++---- src/sunstone/public/app/tabs/support-tab.js | 133 ++++++++++-------- .../public/app/tabs/support-tab/actions.js | 36 +++-- .../public/app/tabs/support-tab/title.hbs | 48 +++++-- .../app/tabs/support-tab/utils/common.js | 35 +++-- .../public/app/tabs/users-tab/actions.js | 73 +++++----- .../app/tabs/users-tab/dialogs/login-token.js | 53 ++++--- src/sunstone/public/scss/_menu.scss | 42 +++++- src/sunstone/routes/support.rb | 40 ++++++ src/sunstone/views/index.erb | 2 +- 18 files changed, 565 insertions(+), 413 deletions(-) diff --git a/src/sunstone/public/app/app.js b/src/sunstone/public/app/app.js index 7502a1c8c3..611194738e 100644 --- a/src/sunstone/public/app/app.js +++ b/src/sunstone/public/app/app.js @@ -51,7 +51,7 @@ define(function(require) { //$(window).load(function() { // $('#loading').hide(); //}); - + $(document).ready(function() { Sunstone.addDialogs(_commonDialogs); Sunstone.addMainTabs(); @@ -152,7 +152,6 @@ define(function(require) { groups = groups.toString(); groups = [groups]; } - that = this; OpenNebula.Group.list({ timeout: true, diff --git a/src/sunstone/public/app/opennebula.js b/src/sunstone/public/app/opennebula.js index 5bd2a55695..640e3795a5 100644 --- a/src/sunstone/public/app/opennebula.js +++ b/src/sunstone/public/app/opennebula.js @@ -15,41 +15,41 @@ /* -------------------------------------------------------------------------- */ define(function(require) { - require('jquery'); + require("jquery"); - var Helper = require('./opennebula/helper'), - Action = require('./opennebula/action'), - Auth = require('./opennebula/auth'), - Error = require('./opennebula/error'), + var Helper = require("./opennebula/helper"), + Action = require("./opennebula/action"), + Auth = require("./opennebula/auth"), + Error = require("./opennebula/error"), - Acl = require('./opennebula/acl'), - Cluster = require('./opennebula/cluster'), - Datastore = require('./opennebula/datastore'), - Group = require('./opennebula/group'), - Host = require('./opennebula/host'), - Image = require('./opennebula/image'), - Network = require('./opennebula/network'), - VNTemplate = require('./opennebula/vntemplate'), - Role = require('./opennebula/role'), - securitygroup = require('./opennebula/securitygroup'), - Service = require('./opennebula/service'), - ServiceTemplate = require('./opennebula/servicetemplate'), - Support = require('./opennebula/support'), - Template = require('./opennebula/template'), - User = require('./opennebula/user'), - Vdc = require('./opennebula/vdc'), - Vm = require('./opennebula/vm'), - VMGroup = require('./opennebula/vmgroup'), - Zone = require('./opennebula/zone'), - VirtualRouter = require('./opennebula/virtualrouter'); - MarketPlace = require('./opennebula/marketplace'); - MarketPlaceApp = require('./opennebula/marketplaceapp'); + Acl = require("./opennebula/acl"), + Cluster = require("./opennebula/cluster"), + Datastore = require("./opennebula/datastore"), + Group = require("./opennebula/group"), + Host = require("./opennebula/host"), + Image = require("./opennebula/image"), + Network = require("./opennebula/network"), + VNTemplate = require("./opennebula/vntemplate"), + Role = require("./opennebula/role"), + securitygroup = require("./opennebula/securitygroup"), + Service = require("./opennebula/service"), + ServiceTemplate = require("./opennebula/servicetemplate"), + Support = require("./opennebula/support"), + Template = require("./opennebula/template"), + User = require("./opennebula/user"), + Vdc = require("./opennebula/vdc"), + Vm = require("./opennebula/vm"), + VMGroup = require("./opennebula/vmgroup"), + Zone = require("./opennebula/zone"), + VirtualRouter = require("./opennebula/virtualrouter"); + MarketPlace = require("./opennebula/marketplace"); + MarketPlaceApp = require("./opennebula/marketplaceapp"); - if (typeof(csrftoken) != "undefined") { + if (typeof(csrftoken) !== "undefined") { $.ajaxPrefilter(function(options, originalOptions, jqXHR) { var params = originalOptions.data; - if (typeof(params) == "string") { + if (typeof(params) === "string") { params = JSON.parse(params); params["csrftoken"] = csrftoken; options.data = JSON.stringify(params); @@ -62,34 +62,34 @@ define(function(require) { } var OpenNebula = { - 'Helper': Helper, - 'Action': Action, - 'Auth': Auth, - 'Error': Error, - 'Acl': Acl, - 'Cluster': Cluster, - 'Datastore': Datastore, - 'Group': Group, - 'Host': Host, - 'Image': Image, - 'File': Image, - 'Network': Network, - 'VNTemplate': VNTemplate, - 'Role': Role, - 'SecurityGroup': securitygroup, - 'Service': Service, - 'ServiceTemplate': ServiceTemplate, - 'Support': Support, - 'Template': Template, - 'VirtualRouterTemplate': Template, - 'User': User, - 'Vdc': Vdc, - 'VM': Vm, - 'VMGroup': VMGroup, - 'Zone': Zone, - 'VirtualRouter': VirtualRouter, - 'MarketPlace': MarketPlace, - 'MarketPlaceApp': MarketPlaceApp + "Helper": Helper, + "Action": Action, + "Auth": Auth, + "Error": Error, + "Acl": Acl, + "Cluster": Cluster, + "Datastore": Datastore, + "Group": Group, + "Host": Host, + "Image": Image, + "File": Image, + "Network": Network, + "VNTemplate": VNTemplate, + "Role": Role, + "SecurityGroup": securitygroup, + "Service": Service, + "ServiceTemplate": ServiceTemplate, + "Support": Support, + "Template": Template, + "VirtualRouterTemplate": Template, + "User": User, + "Vdc": Vdc, + "VM": Vm, + "VMGroup": VMGroup, + "Zone": Zone, + "VirtualRouter": VirtualRouter, + "MarketPlace": MarketPlace, + "MarketPlaceApp": MarketPlaceApp }; return OpenNebula; diff --git a/src/sunstone/public/app/opennebula/action.js b/src/sunstone/public/app/opennebula/action.js index 25c212ca7d..3e96720369 100644 --- a/src/sunstone/public/app/opennebula/action.js +++ b/src/sunstone/public/app/opennebula/action.js @@ -15,9 +15,9 @@ /* -------------------------------------------------------------------------- */ define(function(require) { - var OpenNebulaHelper = require('./helper'); - var OpenNebulaError = require('./error'); - var Config = require('sunstone-config'); + var OpenNebulaHelper = require("./helper"); + var OpenNebulaError = require("./error"); + var Config = require("sunstone-config"); var listCache = {}; var listWaiting = {}; @@ -30,7 +30,7 @@ define(function(require) { var _clearCache = function(cache_name) { listCache[cache_name] = null; //console.log(cache_name+" cache cleaned"); - } + }; //Example: Simple action: publish. Simple action with action obj: deploy var _simple_action = function(params, resource, method, action_obj, path) { @@ -48,7 +48,6 @@ define(function(require) { var reqPath = path ? path : resource.toLowerCase(); var cache_name = params.cache_name ? params.cache_name : resource; - $.ajax({ url: reqPath + "/" + id + "/action", type: "POST", @@ -64,7 +63,7 @@ define(function(require) { callbackError(request, OpenNebulaError(response)) : null; } }); - } + }; var Action = { "create": function(params, resource, path) { @@ -120,6 +119,29 @@ define(function(require) { return listCache[resource]; }, + "check": function(params, path){ + if(params && + params.success && + typeof params.success === "function" && + params && + params.error && + typeof params.error === "function"){ + var reqPath = path.toLowerCase(); + $.ajax({ + url: reqPath, + type: "GET", + success: function(response) { + params.success(response); + return false; + }, + error: function(response) { + params.error(response); + return false; + } + }); + } + }, + "list": function(params, resource, path, process) { var callback = params.success; var callbackError = params.error; @@ -169,7 +191,6 @@ 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", @@ -198,7 +219,6 @@ define(function(require) { var callback = listCallbacks[cache_name][i].success; if (callback) { - //console.log(cache_name+" list. Callback called"); try{ callback(request, list, response); }catch(err){ @@ -236,14 +256,13 @@ define(function(require) { var timeout = params.timeout || false; var request = OpenNebulaHelper.request(resource, "list"); var reqPath = path ? path : resource.toLowerCase(); - $.ajax({ url: reqPath, type: "GET", data: {timeout: timeout, zone_id: params.data.zone_id, pool_filter: params.data.pool_filter}, dataType: "json", success: function(response) { - var list = OpenNebulaHelper.pool(resource, response) + var list = OpenNebulaHelper.pool(resource, response); return callback ? callback(request, list) : null; }, @@ -267,7 +286,6 @@ define(function(require) { var reqPath = path ? path : resource.toLowerCase(); var url = reqPath + "/" + id; url = subresource ? url + "/" + subresource : url; - $.ajax({ url: url, type: "GET", @@ -318,11 +336,10 @@ define(function(require) { var url = path ? path : resource.toLowerCase(); url = all ? url + "/monitor" : url + "/" + params.data.id + "/monitor"; - $.ajax({ url: url, type: "GET", - data: data['monitor'], + data: data["monitor"], dataType: "json", success: function(response) { return callback ? callback(request, response) : null; @@ -343,7 +360,6 @@ define(function(require) { var request = OpenNebulaHelper.request(resource, method, data); var url = path ? path : resource.toLowerCase() + "/accounting"; - $.ajax({ url: url, type: "GET", @@ -368,7 +384,6 @@ define(function(require) { var request = OpenNebulaHelper.request(resource, method, data); var url = path ? path : resource.toLowerCase() + "/showback"; - $.ajax({ url: url, type: "GET", diff --git a/src/sunstone/public/app/opennebula/support.js b/src/sunstone/public/app/opennebula/support.js index fab6073ef4..cad1052baf 100644 --- a/src/sunstone/public/app/opennebula/support.js +++ b/src/sunstone/public/app/opennebula/support.js @@ -15,10 +15,11 @@ /* -------------------------------------------------------------------------- */ define(function(require) { - var OpenNebulaAction = require('./action'); + var OpenNebulaAction = require("./action"); var RESOURCE = "REQUEST"; - var PATH = 'support/request'; + var PATH = "support/request"; + var PATH_CHECK_SUPPORT = "support/check"; var CACHE_NAME = "REQUEST"; var Support = { @@ -29,15 +30,18 @@ define(function(require) { "update": function(params) { OpenNebulaAction.simple_action(params, RESOURCE, "update", params.data.extra_param, PATH); }, + "check": function(params){ + OpenNebulaAction.check(params, PATH_CHECK_SUPPORT); + }, "list" : function(params) { params.cache_name = CACHE_NAME; OpenNebulaAction.clear_cache(params.cache_name); - OpenNebulaAction.list(params, RESOURCE, PATH) + OpenNebulaAction.list(params, RESOURCE, PATH); }, "show" : function(params) { - OpenNebulaAction.show(params, RESOURCE, false, PATH) + OpenNebulaAction.show(params, RESOURCE, false, PATH); } - } + }; return Support; -}) +}); diff --git a/src/sunstone/public/app/sunstone-config.js b/src/sunstone/public/app/sunstone-config.js index 7576e209b9..05c595b9ad 100644 --- a/src/sunstone/public/app/sunstone-config.js +++ b/src/sunstone/public/app/sunstone-config.js @@ -15,34 +15,32 @@ /* -------------------------------------------------------------------------- */ define(function(require) { - require('jquery'); - + require("jquery"); // Clone the local config object in a private var var _config = $.extend(true, {}, config); - var Config = { - 'isTabEnabled': function(tabName) { - var enabled = _config['view']['enabled_tabs'].indexOf(tabName) != -1; + "isTabEnabled": function(tabName) { + var enabled = _config["view"]["enabled_tabs"].indexOf(tabName) != -1; return enabled; }, "changeFilter": function(bool) { - _config['pool_filter'] = bool; + _config["pool_filter"] = bool; }, "isChangedFilter": function(){ - return _config['pool_filter']; + return _config["pool_filter"]; }, "isTabActionEnabled": function(tabName, actionName, panelName) { var enabled = false; - var configTab = _config['view']['tabs'][tabName]; + var configTab = _config["view"]["tabs"][tabName]; if (configTab != undefined) { if (panelName) { - enabled = configTab['panel_tabs_actions'][panelName][actionName]; + enabled = configTab["panel_tabs_actions"][panelName][actionName]; } else { - enabled = configTab['actions'][actionName]; + enabled = configTab["actions"][actionName]; } } @@ -50,8 +48,8 @@ define(function(require) { }, "isTabPanelEnabled": function(tabName, panelTabName) { - if (_config['view']['tabs'][tabName]) { - var enabled = _config['view']['tabs'][tabName]['panel_tabs'][panelTabName]; + if (_config["view"]["tabs"][tabName]) { + var enabled = _config["view"]["tabs"][tabName]["panel_tabs"][panelTabName]; return enabled; } else { return false; @@ -59,13 +57,13 @@ define(function(require) { }, "isProvisionTabEnabled": function(tabName, panelTabName) { - if (_config['view']['tabs'][tabName]) { - if (_config['view']['tabs'][tabName]['provision_tabs']) { - return _config['view']['tabs'][tabName]['provision_tabs'][panelTabName]; + if (_config["view"]["tabs"][tabName]) { + if (_config["view"]["tabs"][tabName]["provision_tabs"]) { + return _config["view"]["tabs"][tabName]["provision_tabs"][panelTabName]; } else { // if provision_tabs is not defined use panel_tabs. // This attribute was used in before 4.14, provision_tabs was include in 4.14.2 - return _config['view']['tabs'][tabName]['panel_tabs'][panelTabName]; + return _config["view"]["tabs"][tabName]["panel_tabs"][panelTabName]; } } else { return false; @@ -73,7 +71,7 @@ define(function(require) { }, "isFeatureEnabled": function(featureName) { - if (_config['view']['features'] && _config['view']['features'][featureName]) { + if (_config["view"]["features"] && _config["view"]["features"][featureName]) { return true; } else { return false; @@ -81,19 +79,19 @@ define(function(require) { }, "isAdvancedEnabled": function(featureName) { - if (_config['view']['features'] && featureName in _config['view']['features']) { - return _config['view']['features'][featureName]; + if (_config["view"]["features"] && featureName in _config["view"]["features"]) { + return _config["view"]["features"][featureName]; } else { return true; } }, "tabTableColumns": function(tabName) { - if (!_config['view']['tabs'][tabName]) { + if (!_config["view"]["tabs"][tabName]) { return []; } - var columns = _config['view']['tabs'][tabName]['table_columns']; + var columns = _config["view"]["tabs"][tabName]["table_columns"]; if (columns) { return columns; @@ -105,19 +103,19 @@ define(function(require) { "isTemplateCreationTabEnabled": function(tabName, wizardTabName) { var enabled = false; - if (_config['view']['tabs'][tabName] && _config['view']['tabs'][tabName]['template_creation_tabs']) { - enabled = _config['view']['tabs'][tabName]['template_creation_tabs'][wizardTabName]; + if (_config["view"]["tabs"][tabName] && _config["view"]["tabs"][tabName]["template_creation_tabs"]) { + enabled = _config["view"]["tabs"][tabName]["template_creation_tabs"][wizardTabName]; } return (enabled == true); }, "dashboardWidgets": function(perRow) { - if (!_config['view']['tabs']['dashboard-tab']) { - return [] + if (!_config["view"]["tabs"]["dashboard-tab"]) { + return []; } - var widgets = _config['view']['tabs']['dashboard-tab'][perRow]; + var widgets = _config["view"]["tabs"]["dashboard-tab"][perRow]; if (widgets) { return widgets; @@ -127,14 +125,14 @@ define(function(require) { }, "tableOrder": function() { - return _config['user_config']["table_order"]; + return _config["user_config"]["table_order"]; }, "provision": { "dashboard": { "isEnabled": function(widget) { - if (_config['view']['tabs']['provision-tab']) { - var enabled = _config['view']['tabs']['provision-tab']['dashboard'][widget]; + if (_config["view"]["tabs"]["provision-tab"]) { + var enabled = _config["view"]["tabs"]["provision-tab"]["dashboard"][widget]; return enabled; } else { return false; @@ -143,35 +141,35 @@ define(function(require) { }, "create_vm": { "isEnabled": function(widget) { - if (_config['view']['tabs']['provision-tab'] && _config['view']['tabs']['provision-tab']["create_vm"]) { - return _config['view']['tabs']['provision-tab']['create_vm'][widget]; + if (_config["view"]["tabs"]["provision-tab"] && _config["view"]["tabs"]["provision-tab"]["create_vm"]) { + return _config["view"]["tabs"]["provision-tab"]["create_vm"][widget]; } else { return false; } } }, - "logo": (_config['view']["provision_logo"] || "images/one_small_logo.png"), + "logo": (_config["view"]["provision_logo"] || "images/one_small_logo.png"), }, - 'tableOrder': _config['user_config']['table_order'], - 'vncProxyPort': _config['system_config']['vnc_client_port'] || _config['system_config']['vnc_proxy_port'].split(':')[1] || _config['system_config']['vnc_proxy_port'], - 'vncWSS': _config['user_config']['vnc_wss'], - 'requestVNCPassword': _config['system_config']['vnc_request_password'], - 'logo': (_config['view']["small_logo"] || "images/one_small_logo.png"), - "link_logo": (_config['view']["link_logo"] || false), - "text_link_logo": (_config['view']["text_link_logo"] || false), - 'vmLogos': (_config['vm_logos']), - 'enabledTabs': _config['view']['enabled_tabs'], - 'onedConf': _config['oned_conf'], - 'confirmVMActions': _config['view']['confirm_vms'], - 'scaleFactor': _config['view']['features']['instantiate_cpu_factor'], - 'filterView': _config['view']['filter-view'], - 'doCountAnimation': _config['view']['do_count_animation'], + "tableOrder": _config["user_config"]["table_order"], + "vncProxyPort": _config["system_config"]["vnc_client_port"] || _config["system_config"]["vnc_proxy_port"].split(":")[1] || _config["system_config"]["vnc_proxy_port"], + "vncWSS": _config["user_config"]["vnc_wss"], + "requestVNCPassword": _config["system_config"]["vnc_request_password"], + "logo": (_config["view"]["small_logo"] || "images/one_small_logo.png"), + "link_logo": (_config["view"]["link_logo"] || false), + "text_link_logo": (_config["view"]["text_link_logo"] || false), + "vmLogos": (_config["vm_logos"]), + "enabledTabs": _config["view"]["enabled_tabs"], + "onedConf": _config["oned_conf"], + "confirmVMActions": _config["view"]["confirm_vms"], + "scaleFactor": _config["view"]["features"]["instantiate_cpu_factor"], + "filterView": _config["view"]["filter-view"], + "doCountAnimation": _config["view"]["do_count_animation"], "allTabs": function() { - return Object.keys(_config['view']['tabs']); + return Object.keys(_config["view"]["tabs"]); } - } + }; return Config; }); diff --git a/src/sunstone/public/app/sunstone.js b/src/sunstone/public/app/sunstone.js index 64061b2c67..36274df4bb 100644 --- a/src/sunstone/public/app/sunstone.js +++ b/src/sunstone/public/app/sunstone.js @@ -79,42 +79,40 @@ define(function(require) { "tabs" : {} }; + var _addMainTab = function(tabName){ + var name = "./tabs/" + tabName; + if (DefaultTabsArr.indexOf(tabName) == -1){ + name = "./addons/tabs/" + tabName; + } + var tabObj = require(name); + var _tabId = tabObj.tabId; + SunstoneCfg["tabs"][_tabId] = tabObj; + var panels = tabObj.panels; + if (panels) { + _addPanels(_tabId, panels); + } + var panelsHooks = tabObj.panelsHooks; + if (panelsHooks) { + _addPanelsHooks(_tabId, panelsHooks); + } + var initHooks = tabObj.initHooks; + if (initHooks) { + _addInitHooks(_tabId, initHooks); + } + var dialogs = tabObj.dialogs; + if (dialogs) { + _addDialogs(dialogs); + } + var formPanels = tabObj.formPanels; + if (formPanels) { + _addFormPanels(_tabId, formPanels); + } + }; + var _addMainTabs = function() { _addActions(); - $.each(Config.enabledTabs, function(i, tabName){ - var name = "./tabs/" + tabName; - if (DefaultTabsArr.indexOf(tabName) == -1){ - name = "./addons/tabs/" + tabName; - } - var tabObj = require(name); - var _tabId = tabObj.tabId; - SunstoneCfg["tabs"][_tabId] = tabObj; - - var panels = tabObj.panels; - if (panels) { - _addPanels(_tabId, panels); - } - - var panelsHooks = tabObj.panelsHooks; - if (panelsHooks) { - _addPanelsHooks(_tabId, panelsHooks); - } - - var initHooks = tabObj.initHooks; - if (initHooks) { - _addInitHooks(_tabId, initHooks); - } - - var dialogs = tabObj.dialogs; - if (dialogs) { - _addDialogs(dialogs); - } - - var formPanels = tabObj.formPanels; - if (formPanels) { - _addFormPanels(_tabId, formPanels); - } + _addMainTab(tabName); }); }; @@ -185,20 +183,35 @@ define(function(require) { hook.init(); }); } - - // TODO Add openenbula actions - /*if (config['view']['autorefresh']) { - var tabContext = $("#" + tabName); - var refreshButton = $(".fa-sync-alt", $(".action_blocks", tabContext).first()); - setInterval(function() { - if (Sunstone.rightListVisible(tabContext)) { - refreshButton.click(); - } - }, TOP_INTERVAL); - }*/ } - + if(SunstoneCfg && + SunstoneCfg.tabs && + config && + config.user_config && + config.user_config.default_view && + config.user_config.default_view === "admin" + ){ + var support_tab = "support-tab"; + if(!SunstoneCfg.tabs[support_tab]){ + SunstoneCfg.tabs[support_tab] = { + actions: { + "Support.create_dialog": true, + "Support.refresh": true + }, + panels_tabs:{ + "support_info_tab": true + }, + table_columns: [1,2,3,4] + }; + _addMainTab(support_tab); + _insertTab(support_tab); + _setupDataTable(support_tab); + } + } _setupTabs(); + $().on("click",function(){ + + }) }; var _setupDataTable = function(tabName) { @@ -236,23 +249,14 @@ define(function(require) { title += tabInfo.title; if (parent !== "") { - liItem = "
  • " + - "" + title + "" + - "
  • "; - + liItem = "
  • " + "" + title + "" + "
  • "; if ($("#menu ul#navigation #li_" + parent + " .menu").length > 0) { $("#menu ul#navigation #li_" + parent + " .menu").append(liItem); } else { - $("#menu ul#navigation #li_" + parent).append( - ""); + $("#menu ul#navigation #li_" + parent).append(""); } } else { - liItem = "
  • " + - "" + title + "" + - "
  • "; - + liItem = "
  • " + "" + title + "" + "
  • "; $("div#menu ul#navigation").append(liItem); } @@ -1281,6 +1285,7 @@ define(function(require) { var Sunstone = { "addMainTabs": _addMainTabs, + "addMainTab": _addMainTab, "addDialogs": _addDialogs, "insertTabs": _insertTabs, diff --git a/src/sunstone/public/app/tabs/groups-tab/panels/info.js b/src/sunstone/public/app/tabs/groups-tab/panels/info.js index d9dc13c9ef..44e8cb7298 100644 --- a/src/sunstone/public/app/tabs/groups-tab/panels/info.js +++ b/src/sunstone/public/app/tabs/groups-tab/panels/info.js @@ -19,23 +19,23 @@ define(function(require) { DEPENDENCIES */ - var TemplateInfo = require('hbs!./info/html'); - var Locale = require('utils/locale'); - var Views = require('../utils/views'); - var Tips = require('utils/tips'); + var TemplateInfo = require("hbs!./info/html"); + var Locale = require("utils/locale"); + var Views = require("../utils/views"); + var Tips = require("utils/tips"); /* TEMPLATES */ - var TemplateTable = require('utils/panel/template-table'); + var TemplateTable = require("utils/panel/template-table"); /* CONSTANTS */ - var TAB_ID = require('../tabId'); - var PANEL_ID = require('./info/panelId'); + var TAB_ID = require("../tabId"); + var PANEL_ID = require("./info/panelId"); var RESOURCE = "Group"; var XML_ROOT = "GROUP"; @@ -65,7 +65,6 @@ define(function(require) { function _html() { var adminViews = []; var userViews = []; - var sunstone_template = this.element.TEMPLATE.SUNSTONE; if (sunstone_template) { adminViews = _processViews( @@ -87,10 +86,10 @@ define(function(require) { //==== return TemplateInfo({ - 'element': this.element, - 'adminViews': adminViews, - 'userViews': userViews, - 'templateTableHTML': templateTableHTML + "element": this.element, + "adminViews": adminViews, + "userViews": userViews, + "templateTableHTML": templateTableHTML }); } @@ -130,24 +129,24 @@ define(function(require) { var viewsArray = []; if (viewsStr){ - $.each(viewsStr.split(','), function(index, view){ + $.each(viewsStr.split(","), function(index, view){ var viewElem; var knownView = Views.info[view]; if (knownView){ viewElem = { - 'name': knownView.name, - 'description': knownView.description + "name": knownView.name, + "description": knownView.description }; } else { viewElem = { - 'name': view, - 'description': '' + "name": view, + "description": "" }; } if (view == defaultView){ - viewElem.name += ' (' + Locale.tr("default") + ')'; + viewElem.name += " (" + Locale.tr("default") + ")"; } viewsArray.push(viewElem); diff --git a/src/sunstone/public/app/tabs/settings-tab.js b/src/sunstone/public/app/tabs/settings-tab.js index 989e089052..f82af23aae 100644 --- a/src/sunstone/public/app/tabs/settings-tab.js +++ b/src/sunstone/public/app/tabs/settings-tab.js @@ -15,12 +15,12 @@ /* -------------------------------------------------------------------------- */ define(function(require) { - var Locale = require('utils/locale'); - var OpenNebulaUser = require('opennebula/user'); - var Sunstone = require('sunstone'); - var _actions = require('./users-tab/actions'); + var Locale = require("utils/locale"); + var OpenNebulaUser = require("opennebula/user"); + var Sunstone = require("sunstone"); + var _actions = require("./users-tab/actions"); - var TAB_ID = require('./settings-tab/tabId'); + var TAB_ID = require("./settings-tab/tabId"); _actions["Settings.refresh"] = { type: "custom", @@ -28,34 +28,34 @@ define(function(require) { }; var _dialogs = [ - require('tabs/users-tab/dialogs/password'), - require('./users-tab/dialogs/login-token') + require("tabs/users-tab/dialogs/password"), + require("./users-tab/dialogs/login-token") ]; var _panels = [ - require('tabs/settings-tab/panels/info'), - require('tabs/settings-tab/panels/user-config'), - require('tabs/settings-tab/panels/quotas'), - require('tabs/settings-tab/panels/group-quotas'), - require('tabs/settings-tab/panels/accounting'), - require('tabs/settings-tab/panels/showback'), - require('tabs/settings-tab/panels/auth') + require("tabs/settings-tab/panels/info"), + require("tabs/settings-tab/panels/user-config"), + require("tabs/settings-tab/panels/quotas"), + require("tabs/settings-tab/panels/group-quotas"), + require("tabs/settings-tab/panels/accounting"), + require("tabs/settings-tab/panels/showback"), + require("tabs/settings-tab/panels/auth") ]; var _formPanels = [ - require('./acls-tab/form-panels/create') + require("./acls-tab/form-panels/create") ]; var Tab = { tabId: TAB_ID, title: Locale.tr("Settings"), listHeader: Locale.tr("Settings"), - resource: 'Settings', + resource: "Settings", actions: _actions, - content: '' + - '' + - '' + - '', + content: "" + + "" + + "" + + "", dialogs: _dialogs, panels: _panels, }; @@ -68,7 +68,7 @@ define(function(require) { id: -1 }, success: function(request, user_json) { - Sunstone.insertPanels(TAB_ID, user_json, TAB_ID, $(".sunstone-list", $("#" + TAB_ID))) + Sunstone.insertPanels(TAB_ID, user_json, TAB_ID, $(".sunstone-list", $("#" + TAB_ID))); } }); } diff --git a/src/sunstone/public/app/tabs/settings-tab/panels/user-config.js b/src/sunstone/public/app/tabs/settings-tab/panels/user-config.js index 3da34647b9..d3a7f3ad46 100644 --- a/src/sunstone/public/app/tabs/settings-tab/panels/user-config.js +++ b/src/sunstone/public/app/tabs/settings-tab/panels/user-config.js @@ -20,29 +20,29 @@ define(function(require) { */ // require('foundation.accordion'); - var Locale = require('utils/locale'); - var Config = require('sunstone-config'); - var OpenNebula = require('opennebula'); - var TemplateUtils = require('utils/template-utils'); - var Sunstone = require('sunstone'); - var Notifier = require('utils/notifier'); - var Humanize = require('utils/humanize'); + var Locale = require("utils/locale"); + var Config = require("sunstone-config"); + var OpenNebula = require("opennebula"); + var TemplateUtils = require("utils/template-utils"); + var Sunstone = require("sunstone"); + var Notifier = require("utils/notifier"); + var Humanize = require("utils/humanize"); /* TEMPLATES */ - var TemplateEasyInfo = require('hbs!./user-config/html'); + var TemplateEasyInfo = require("hbs!./user-config/html"); /* CONSTANTS */ - var TAB_ID = require('../tabId'); - var PANEL_ID = require('./user-config/panelId'); + var TAB_ID = require("../tabId"); + var PANEL_ID = require("./user-config/panelId"); var RESOURCE = "User"; var XML_ROOT = "USER"; - var LOGIN_TOKEN_DIALOG_ID = require('tabs/users-tab/dialogs/login-token/dialogId'); + var LOGIN_TOKEN_DIALOG_ID = require("tabs/users-tab/dialogs/login-token/dialogId"); /* CONSTRUCTOR @@ -69,12 +69,12 @@ define(function(require) { */ function _html() { - return TemplateEasyInfo({'languageOptions': Locale.language_options}); + return TemplateEasyInfo({"languageOptions": Locale.language_options}); } function _setup(context) { var that = this; - Foundation.reflow(context, 'accordion'); + Foundation.reflow(context, "accordion"); var ssh_key = this.element.TEMPLATE.SSH_PUBLIC_KEY; if (ssh_key && ssh_key.length) { $("#provision_ssh_key", context).val(ssh_key); @@ -85,13 +85,13 @@ define(function(require) { $(".provision_update_ssh_key_button", context).hide(); } - $('#provision_new_language option[value="' + config['user_config']["lang"] + '"]', context).attr('selected', 'selected'); + $("#provision_new_language option[value=\"" + config["user_config"]["lang"] + "\"]", context).attr("selected", "selected"); - $.each(config['available_views'], function(id, view) { - $('select#provision_user_views_select', context).append('') + $.each(config["available_views"], function(id, view) { + $("select#provision_user_views_select", context).append(""); }); - $('#provision_user_views_select option[value="' + config['user_config']["default_view"] + '"]', context).attr('selected', 'selected'); + $("#provision_user_views_select option[value=\"" + config["user_config"]["default_view"] + "\"]", context).attr("selected", "selected"); // Login token button context.off("click", ".provision_login_token_button"); @@ -102,8 +102,8 @@ define(function(require) { }); $("#provision_change_password_form").submit(function() { - var pw = $('#provision_new_password', this).val(); - var confirm_password = $('#provision_new_confirm_password', this).val(); + var pw = $("#provision_new_password", this).val(); + var confirm_password = $("#provision_new_confirm_password", this).val(); if (!pw.length) { Notifier.notifyError(Locale.tr("Fill in a new password")); @@ -117,19 +117,19 @@ define(function(require) { Sunstone.runAction("User.passwd", ["-1"], pw); - Sunstone.runAction('Settings.refresh'); + Sunstone.runAction("Settings.refresh"); return false; }); $("#provision_add_ssh_key_form").submit(function() { - var keypair = $('#provision_ssh_key', this).val(); + var keypair = $("#provision_ssh_key", this).val(); if (!keypair.length) { Notifier.notifyError(Locale.tr("You have to provide an SSH key")); return false; } - var template_str = 'SSH_PUBLIC_KEY = "'+TemplateUtils.escapeDoubleQuotes(keypair)+'"'; + var template_str = "SSH_PUBLIC_KEY = \""+TemplateUtils.escapeDoubleQuotes(keypair)+"\""; Sunstone.runAction("User.append_template", "-1", template_str); @@ -137,14 +137,14 @@ define(function(require) { }); $("#provision_change_view_form").submit(function() { - var sunstone_setting = {DEFAULT_VIEW : $('#provision_user_views_select', this).val()}; + var sunstone_setting = {DEFAULT_VIEW : $("#provision_user_views_select", this).val()}; Sunstone.runAction("User.append_sunstone_setting_refresh", that.element.ID, sunstone_setting); return false; }); $("#provision_change_language_form").submit(function() { - var sunstone_setting = {LANG : $('#provision_new_language', this).val()}; + var sunstone_setting = {LANG : $("#provision_new_language", this).val()}; Sunstone.runAction("User.append_sunstone_setting_refresh", that.element.ID, sunstone_setting); return false; diff --git a/src/sunstone/public/app/tabs/support-tab.js b/src/sunstone/public/app/tabs/support-tab.js index 25d9e5ec68..d14d061c28 100644 --- a/src/sunstone/public/app/tabs/support-tab.js +++ b/src/sunstone/public/app/tabs/support-tab.js @@ -15,42 +15,42 @@ /* -------------------------------------------------------------------------- */ define(function(require) { - var Buttons = require('./support-tab/buttons'); - var Actions = require('./support-tab/actions'); - var Table = require('./support-tab/datatable'); - var Notifier = require('utils/notifier'); - var SupportUtils = require('./support-tab/utils/common'); - var Sunstone = require('sunstone'); + var Buttons = require("./support-tab/buttons"); + var Actions = require("./support-tab/actions"); + var Table = require("./support-tab/datatable"); + var Notifier = require("utils/notifier"); + var SupportUtils = require("./support-tab/utils/common"); + var Sunstone = require("sunstone"); + var Locale = require("utils/locale"); + var TemplateTitle = require("hbs!./support-tab/title"); + var TemplateSubheader = require("hbs!./support-tab/subheader"); - var TemplateTitle = require('hbs!./support-tab/title'); - var TemplateSubheader = require('hbs!./support-tab/subheader'); - - var TAB_ID = require('./support-tab/tabId'); + var TAB_ID = require("./support-tab/tabId"); var DATATABLE_ID = "dataTableSupport"; var _dialogs = [ - require('./support-tab/dialogs/upload') + require("./support-tab/dialogs/upload") ]; var _panels = [ - require('./support-tab/panels/info') + require("./support-tab/panels/info") ]; var _formPanels = [ - require('./support-tab/form-panels/create') + require("./support-tab/form-panels/create") ]; var Tab = { tabId: TAB_ID, - resource: 'Support', + resource: "Support", title: TemplateTitle(), - listHeader: 'Commercial Support Requests', - infoHeader: 'Commercial Support Request', + listHeader: "Commercial Support Requests", + infoHeader: "Commercial Support Request", subheader: TemplateSubheader({ - 'support_subscription': config['support']['support_subscription'], - 'account': config['support']['account'], - 'docs': config['support']['docs'], - 'community': config['support']['community'] + "support_subscription": config["support"]["support_subscription"], + "account": config["support"]["account"], + "docs": config["support"]["docs"], + "community": config["support"]["community"] }), buttons: Buttons, actions: Actions, @@ -64,52 +64,63 @@ define(function(require) { return Tab; function _setup(context) { - - SupportUtils.showSupportConnect(); - SupportUtils.startIntervalRefresh(); - - $(".support_button").on("click", function(){ - $("#li_support-tab > a").trigger("click"); - $(".create_dialog_button", "#support-tab").trigger("click"); - return false; + //SupportUtils.startIntervalRefresh(); //esto de debe de borrar porque me esta listando el login de un usuario + SupportUtils.checkValidateOfficialSupport(); + $("#li_support-tab > a").on("click", function(e){ + e.preventDefault(); }); + $(".support_not_connected > button").on("click", function(e){ + e.stopPropagation(); + window.open("http://opennebula.systems/opennebula-support/", "_blank"); + }); + if(config && config.user_config && config.user_config.default_view === "admin"){ + $("#support_credentials_form", context).on("submit", function(){ + $(".support_button").on("click", function(e){ + e.stopPropagation(); + $(".create_dialog_button", "#support-tab").trigger("click"); + return false; + }); - $("#support_credentials_form", context).on("submit", function(){ - $(".submit_support_credentials_button", context).attr("disabled", "disabled"); - $(".submit_support_credentials_button", context).html(''); + $(".support_connect_button").on("click", function(e){ + window.location.assign("#support-tab"); + }); - var data = { - email : $("#support_email", this).val(), - password : $("#support_password", this).val() - }; - - $.ajax({ - url: 'support/credentials', - type: "POST", - data: JSON.stringify(data), - success: function(){ - $(".submit_support_credentials_button", context).removeAttr("disabled"); - $(".submit_support_credentials_button", context).html('Sign in'); - - Sunstone.runAction("Support.refresh"); - - SupportUtils.showSupportList(); - SupportUtils.startIntervalRefresh(); - }, - error: function(response){ - if (response.status=="401") { - Notifier.notifyError("Support credentials are incorrect"); - } else { - Notifier.notifyError(response.responseText); + $(".submit_support_credentials_button", context).attr("disabled", "disabled"); + $(".submit_support_credentials_button", context).html(""); + var data = { + email : $("#support_email", this).val(), + password : $("#support_password", this).val() + }; + $.ajax({ + url: "support/credentials", + type: "POST", + data: JSON.stringify(data), + success: function(){ + $(".submit_support_credentials_button", context).removeAttr("disabled"); + $(".submit_support_credentials_button", context).html(Locale.tr("Sign in")); + Sunstone.runAction("Support.refresh"); + SupportUtils.showSupportList(); + SupportUtils.startIntervalRefresh(); + }, + error: function(response){ + if (response && response.status && response.status == "401") { + Notifier.notifyError("Support credentials are incorrect"); + } else { + Notifier.notifyError(response.responseText); + } + $(".submit_support_credentials_button", context).removeAttr("disabled"); + $(".submit_support_credentials_button", context).html(Locale.tr("Sign in")); } - - $(".submit_support_credentials_button", context).removeAttr("disabled"); - $(".submit_support_credentials_button", context).html('Sign in'); - } + }); + return false; }); - - return false; - }); + }else{ + $(".only_admin_view").remove(); + $("#li_support-tab > a").on("click", function(e){ + e.preventDefault(); + e.stopPropagation(); + }); + } } }); diff --git a/src/sunstone/public/app/tabs/support-tab/actions.js b/src/sunstone/public/app/tabs/support-tab/actions.js index 58a24e8903..668f37c21e 100644 --- a/src/sunstone/public/app/tabs/support-tab/actions.js +++ b/src/sunstone/public/app/tabs/support-tab/actions.js @@ -15,17 +15,30 @@ /* -------------------------------------------------------------------------- */ define(function(require) { - var Sunstone = require('sunstone'); - var Notifier = require('utils/notifier'); - var OpenNebulaSupport = require('opennebula/support'); - var SupportUtils = require('./utils/common'); + var Sunstone = require("sunstone"); + var Notifier = require("utils/notifier"); + var OpenNebulaSupport = require("opennebula/support"); + var SupportUtils = require("./utils/common"); var RESOURCE = "Support"; - var TAB_ID = require('./tabId'); - var CREATE_DIALOG_ID = require('./form-panels/create/formPanelId'); - var UPLOAD_DIALOG_ID = require('./dialogs/upload/dialogId'); + var TAB_ID = require("./tabId"); + var CREATE_DIALOG_ID = require("./form-panels/create/formPanelId"); + var UPLOAD_DIALOG_ID = require("./dialogs/upload/dialogId"); var _actions = { + "Support.check":{ + type: "list", + call: OpenNebulaSupport.check, + callback: function(req, lst, res){ + SupportUtils.showSupportConnect(); + }, + error: function(request){ + if (request && request.status && request.status >= 400) { + SupportUtils.stopIntervalRefresh(); + } + SupportUtils.hideSupportConnect(); + } + }, "Support.list" : { type: "list", call: OpenNebulaSupport.list, @@ -33,26 +46,23 @@ define(function(require) { SupportUtils.showSupportList(); $(".support_open_value").text(res.open_requests); $(".support_pending_value").text(res.pending_requests); - var elements = []; if(res.REQUEST_POOL.REQUEST){ elements = res.REQUEST_POOL.REQUEST; } - Sunstone.getDataTable(TAB_ID).updateView(req, elements); }, error: function(request, error_json) { if (error_json.error.http_status=="401") { SupportUtils.stopIntervalRefresh(); } - SupportUtils.showSupportConnect(); } }, "Support.refresh" : { type: "custom", call: function() { - var tab = $('#' + TAB_ID); + var tab = $("#" + TAB_ID); if (Sunstone.rightInfoVisible(tab)) { Sunstone.runAction(RESOURCE+".show", Sunstone.rightInfoResourceId(tab)); } else { @@ -69,7 +79,7 @@ define(function(require) { call: OpenNebulaSupport.show, callback: function(request, response) { //Sunstone.getDataTable(TAB_ID).updateElement(request, response); - if (Sunstone.rightInfoVisible($('#'+TAB_ID))) { + if (Sunstone.rightInfoVisible($("#"+TAB_ID))) { Sunstone.insertPanels(TAB_ID, response); } }, @@ -118,7 +128,7 @@ define(function(require) { type: "single", call: function() { $.ajax({ - url: 'support/credentials', + url: "support/credentials", type: "DELETE", dataType: "text", success: function(){ diff --git a/src/sunstone/public/app/tabs/support-tab/title.hbs b/src/sunstone/public/app/tabs/support-tab/title.hbs index e11c980042..f7e85bcdc5 100644 --- a/src/sunstone/public/app/tabs/support-tab/title.hbs +++ b/src/sunstone/public/app/tabs/support-tab/title.hbs @@ -14,17 +14,45 @@ {{! limitations under the License. }} {{! -------------------------------------------------------------------------- }} -Support -
    + +
    + +
    + diff --git a/src/sunstone/public/app/tabs/support-tab/utils/common.js b/src/sunstone/public/app/tabs/support-tab/utils/common.js index 17144e35b5..4a810f0975 100644 --- a/src/sunstone/public/app/tabs/support-tab/utils/common.js +++ b/src/sunstone/public/app/tabs/support-tab/utils/common.js @@ -19,31 +19,44 @@ define(function(require) { Common functions for the support tab */ - var Sunstone = require('sunstone'); + var Sunstone = require("sunstone"); - var TAB_ID = require('../tabId'); + var TAB_ID = require("../tabId"); var support_interval_function; function _show_support_connect() { $(".support_info").hide(); $("#"+Sunstone.getDataTable(TAB_ID).dataTableId+"Container", "#"+TAB_ID).hide(); - $(".support_connect").show(); $(".actions_row", "#"+TAB_ID).hide(); + $(".support_not_connected").hide(); + $(".support_connect").show(); + } + + function _hide_support_connect() { + $(".support_info").hide(); + $("#"+Sunstone.getDataTable(TAB_ID).dataTableId+"Container", "#"+TAB_ID).hide(); + $(".support_connect").hide(); + $(".actions_row", "#"+TAB_ID).hide(); + $(".support_not_connected").show(); + } + + function _check_validate_official_support(){ + Sunstone.runAction("Support.check"); } function _show_support_list() { $(".support_info").show(); $(".support_connect").hide(); + $(".support_not_connected").hide(); $(".actions_row", "#"+TAB_ID).show(); $("#"+Sunstone.getDataTable(TAB_ID).dataTableId+"Container", "#"+TAB_ID).show(); } function _startIntervalRefresh() { - Sunstone.runAction('Support.list'); - + //Sunstone.runAction("Support.list"); //esto no se que pinta!!! support_interval_function = setInterval(function(){ - Sunstone.runAction('Support.list'); + Sunstone.runAction("Support.list"); }, Sunstone.TOP_INTERVAL); } @@ -52,9 +65,11 @@ define(function(require) { } return { - 'showSupportConnect': _show_support_connect, - 'showSupportList': _show_support_list, - 'startIntervalRefresh': _startIntervalRefresh, - 'stopIntervalRefresh': _stopIntervalRefresh, + "showSupportConnect": _show_support_connect, + "showSupportList": _show_support_list, + "hideSupportConnect": _hide_support_connect, + "startIntervalRefresh": _startIntervalRefresh, + "stopIntervalRefresh": _stopIntervalRefresh, + "checkValidateOfficialSupport": _check_validate_official_support }; }); diff --git a/src/sunstone/public/app/tabs/users-tab/actions.js b/src/sunstone/public/app/tabs/users-tab/actions.js index fbfeff869f..9ca8664bf4 100644 --- a/src/sunstone/public/app/tabs/users-tab/actions.js +++ b/src/sunstone/public/app/tabs/users-tab/actions.js @@ -15,20 +15,20 @@ /* -------------------------------------------------------------------------- */ define(function(require) { - var Sunstone = require('sunstone'); - var Notifier = require('utils/notifier'); - var Locale = require('utils/locale'); - var DataTable = require('./datatable'); - var OpenNebulaResource = require('opennebula/user'); - var CommonActions = require('utils/common-actions'); - var TemplateUtils = require('utils/template-utils'); + var Sunstone = require("sunstone"); + var Notifier = require("utils/notifier"); + var Locale = require("utils/locale"); + var DataTable = require("./datatable"); + var OpenNebulaResource = require("opennebula/user"); + var CommonActions = require("utils/common-actions"); + var TemplateUtils = require("utils/template-utils"); - var TAB_ID = require('./tabId'); - var CREATE_DIALOG_ID = require('./form-panels/create/formPanelId'); - var PASSWORD_DIALOG_ID = require('./dialogs/password/dialogId'); - var AUTH_DRIVER_DIALOG_ID = require('./dialogs/auth-driver/dialogId'); - var QUOTAS_DIALOG_ID = require('./dialogs/quotas/dialogId'); - var GROUPS_DIALOG_ID = require('./dialogs/groups/dialogId'); + var TAB_ID = require("./tabId"); + var CREATE_DIALOG_ID = require("./form-panels/create/formPanelId"); + var PASSWORD_DIALOG_ID = require("./dialogs/password/dialogId"); + var AUTH_DRIVER_DIALOG_ID = require("./dialogs/auth-driver/dialogId"); + var QUOTAS_DIALOG_ID = require("./dialogs/quotas/dialogId"); + var GROUPS_DIALOG_ID = require("./dialogs/groups/dialogId"); var RESOURCE = "User"; var XML_ROOT = "USER"; @@ -43,9 +43,9 @@ define(function(require) { "User.show" : _commonActions.show(), "User.refresh" : _commonActions.refresh(), "User.delete" : _commonActions.del(), - "User.chgrp": _commonActions.multipleAction('chgrp'), - "User.addgroup": _commonActions.multipleAction('addgroup'), - "User.delgroup": _commonActions.multipleAction('delgroup'), + "User.chgrp": _commonActions.multipleAction("chgrp"), + "User.addgroup": _commonActions.multipleAction("addgroup"), + "User.delgroup": _commonActions.multipleAction("delgroup"), "User.groups_dialog" : _commonActions.checkAndShow("groups"), "User.groups" : { @@ -95,13 +95,13 @@ define(function(require) { callback: function(request) { var reqId = request.request.data[0]; - Sunstone.runAction(RESOURCE+'.show',reqId); + Sunstone.runAction(RESOURCE+".show",reqId); - if (reqId == config['user_id'] || reqId == "-1") { - Sunstone.runAction('Settings.refresh'); + if (reqId == config["user_id"] || reqId == "-1") { + Sunstone.runAction("Settings.refresh"); $.ajax({ - url: 'config', + url: "config", type: "POST", dataType: "json", success: function() { @@ -121,13 +121,13 @@ define(function(require) { callback: function(request) { var reqId = request.request.data[0]; - Sunstone.runAction(RESOURCE+'.show',reqId); + Sunstone.runAction(RESOURCE+".show",reqId); - if (reqId == config['user_id'] || reqId == "-1") { - Sunstone.runAction('Settings.refresh'); + if (reqId == config["user_id"] || reqId == "-1") { + Sunstone.runAction("Settings.refresh"); $.ajax({ - url: 'config', + url: "config", type: "POST", dataType: "json", success: function() { @@ -147,9 +147,10 @@ define(function(require) { callback: function(request) { var reqId = request.request.data[0]; - if (reqId == config['user_id'] || reqId == "-1") { + if (reqId == config["user_id"] || reqId == "-1") { + $.ajax({ - url: 'config', + url: "config", type: "POST", dataType: "json", success: function() { @@ -159,7 +160,7 @@ define(function(require) { } }); } else { - Sunstone.runAction(RESOURCE+'.show',reqId); + Sunstone.runAction(RESOURCE+".show",reqId); } }, error: Notifier.onError @@ -178,8 +179,8 @@ define(function(require) { $.extend(sunstone_template, response[XML_ROOT].TEMPLATE.SUNSTONE); } - $.extend(sunstone_template, params.data.extra_param) - var template_str = TemplateUtils.templateToString({'SUNSTONE': sunstone_template}); + $.extend(sunstone_template, params.data.extra_param); + var template_str = TemplateUtils.templateToString({"SUNSTONE": sunstone_template}); Sunstone.runAction("User.append_template_refresh", params.data.id, template_str); }, error: Notifier.onError @@ -200,8 +201,8 @@ define(function(require) { $.extend(sunstone_template, response[XML_ROOT].TEMPLATE.SUNSTONE); } - $.extend(sunstone_template, params.data.extra_param) - var template_str = TemplateUtils.templateToString({'SUNSTONE': sunstone_template}); + $.extend(sunstone_template, params.data.extra_param); + var template_str = TemplateUtils.templateToString({"SUNSTONE": sunstone_template}); Sunstone.runAction("User.append_template", params.data.id, template_str); }, error: Notifier.onError @@ -223,15 +224,15 @@ define(function(require) { "User.quotas_dialog" : { type: "custom", call: function() { - var tab = $('#' + TAB_ID); + var tab = $("#" + TAB_ID); if (Sunstone.rightInfoVisible(tab)) { - $('a[href="#user_quotas_tab"]', tab).click(); - $('#edit_quotas_button', tab).click(); + $("a[href=\"#user_quotas_tab\"]", tab).click(); + $("#edit_quotas_button", tab).click(); } else { var sel_elems = Sunstone.getDataTable(TAB_ID).elements(); //If only one user is selected we fecth the user's quotas if (sel_elems.length == 1){ - Sunstone.runAction(RESOURCE+'.fetch_quotas',sel_elems[0]); + Sunstone.runAction(RESOURCE+".fetch_quotas",sel_elems[0]); } else { // More than one, shows '0' usage Sunstone.getDialog(QUOTAS_DIALOG_ID).setParams({element: {}}); @@ -251,7 +252,7 @@ define(function(require) { callback: function(request) { Sunstone.getDialog(QUOTAS_DIALOG_ID).hide(); - Sunstone.runAction(RESOURCE+'.show',request.request.data[0]); + Sunstone.runAction(RESOURCE+".show",request.request.data[0]); }, error: Notifier.onError } diff --git a/src/sunstone/public/app/tabs/users-tab/dialogs/login-token.js b/src/sunstone/public/app/tabs/users-tab/dialogs/login-token.js index f73eaf042a..76a16d3254 100644 --- a/src/sunstone/public/app/tabs/users-tab/dialogs/login-token.js +++ b/src/sunstone/public/app/tabs/users-tab/dialogs/login-token.js @@ -19,20 +19,20 @@ define(function(require) { DEPENDENCIES */ - var BaseDialog = require('utils/dialogs/dialog'); - var TemplateHTML = require('hbs!./login-token/html'); - var Sunstone = require('sunstone'); - var Notifier = require('utils/notifier'); - var Locale = require('utils/locale'); - var OpenNebula = require('opennebula'); - var ResourceSelect = require('utils/resource-select'); + var BaseDialog = require("utils/dialogs/dialog"); + var TemplateHTML = require("hbs!./login-token/html"); + var Sunstone = require("sunstone"); + var Notifier = require("utils/notifier"); + var Locale = require("utils/locale"); + var OpenNebula = require("opennebula"); + var ResourceSelect = require("utils/resource-select"); /* CONSTANTS */ - var DIALOG_ID = require('./login-token/dialogId'); - var USERS_TAB_ID = require('../tabId'); + var DIALOG_ID = require("./login-token/dialogId"); + var USERS_TAB_ID = require("../tabId"); /* CONSTRUCTOR @@ -87,8 +87,8 @@ define(function(require) { }); return TemplateHTML({ - 'dialogId': this.dialogId, - 'tokens': tokens + "dialogId": this.dialogId, + "tokens": tokens }); } @@ -96,25 +96,25 @@ define(function(require) { var that = this; ResourceSelect.insert({ - context: $('.token-group-selector', context), - resourceName: 'Group', - initValue: '-1', - extraOptions: '' + context: $(".token-group-selector", context), + resourceName: "Group", + initValue: "-1", + extraOptions: "" }); context.on("click", "i.remove-tab", function(){ - var tr = $(this).closest('tr'); + var tr = $(this).closest("tr"); - $(this).closest('td').html('') + $(this).closest("td").html(""); var token = $(".token-text", tr).text(); OpenNebula.User.login({ data : { id: "-1", - 'username': that.element.NAME, - 'token': token, - 'expire': 0 + "username": that.element.NAME, + "token": token, + "expire": 0 }, success: function(req, response){ OpenNebula.User.show({ @@ -136,7 +136,7 @@ define(function(require) { }); $("#token_btn", context).click(function(){ - $("#token_btn", context).html('') + $("#token_btn", context).html(""); var expire = $(".token-expiration", context).val(); var egid = $(".token-group-selector .resource_list_select").val(); @@ -144,9 +144,9 @@ define(function(require) { OpenNebula.User.login({ data : { id: "-1", - 'username': that.element.NAME, - 'expire': expire, - 'egid': egid + "username": that.element.NAME, + "expire": expire, + "egid": egid }, success: function(req, response){ OpenNebula.User.show({ @@ -172,7 +172,6 @@ define(function(require) { function _loginSuccess(req, response){ var that = this; - OpenNebula.User.show({ data : { id: that.element.ID @@ -184,9 +183,9 @@ define(function(require) { Sunstone.getDialog(DIALOG_ID).show(); if (Sunstone.getTab() == USERS_TAB_ID){ - Sunstone.runAction('User.refresh'); + Sunstone.runAction("User.refresh"); } else { - Sunstone.runAction('Settings.refresh'); + Sunstone.runAction("Settings.refresh"); } }, error: function(request, error_json){ diff --git a/src/sunstone/public/scss/_menu.scss b/src/sunstone/public/scss/_menu.scss index 42ec934929..16aa0d5889 100644 --- a/src/sunstone/public/scss/_menu.scss +++ b/src/sunstone/public/scss/_menu.scss @@ -11,15 +11,15 @@ text-overflow: ellipsis; overflow: hidden; white-space: nowrap; + padding: 0; + margin: 1.4rem 0.5rem; &.topTab { - - & > a { color: $light-black; } } - &.subTab > a { + &.subTab > * { padding: 0.5rem 1rem; color: $dark-gray; } @@ -31,11 +31,16 @@ a { font-weight: bold; + padding: 0px; } a:hover { color: $black; } + + li { + margin: .5rem 0; + } } .nested { @@ -47,33 +52,56 @@ } #li_support-tab { + margin-top: 1rem; a { - margin-top: 1rem; border: 1px solid #dfdfdf; padding: 1rem; background: $bg-li-support-tab; + cursor: default; .support_connect { + .officialy_support{ + padding: 0px; + color: #4DBBD3; + } span { - display: inline-box; + display: block; color: $dark-gray; padding: 0.5rem 0 0 0; } - .button { margin-top: 1rem; } } + .support_not_connected { + text-align: center; + + button.alert { + margin: 0.5rem auto; + } + } + .support_info { .support_open, .support_pending, .support_open_value, .support_pending_value { - display: inline-block; + display: block; color: $dark-gray; padding: 0.5rem 0 0 0; } + .table{ + display: table; + width: 100%; + *{ + display: table-cell !important; + } + } + .officialy_support{ + padding: 0px; + color: #4DBBD3; + } .button { margin-top: 1rem; diff --git a/src/sunstone/routes/support.rb b/src/sunstone/routes/support.rb index 7a84b847e2..05160bed96 100644 --- a/src/sunstone/routes/support.rb +++ b/src/sunstone/routes/support.rb @@ -13,6 +13,8 @@ # See the License for the specific language governing permissions and # # limitations under the License. # #--------------------------------------------------------------------------- # +require 'curb' +require 'base64' UNSUPPORTED_RUBY = (RUBY_VERSION =~ /^1.8/) != nil @@ -186,6 +188,44 @@ post '/support/request' do end end +get '/support/check' do + if(!OpenNebula::VERSION.empty? && + !$conf[:check_remote_support].nil? && + !$conf[:check_remote_support].empty? && + !$conf[:token_remote_support].nil? && + !$conf[:token_remote_support].empty?) + !$conf[:opennebula_support] = !$conf[:opennebula_support].nil? ? $conf[:opennebula_support] : 0 + now = Time.now.to_i + validateTime = now - $conf[:opennebula_support] + if(validateTime > 86400) + version = OpenNebula::VERSION.slice(0..OpenNebula::VERSION.rindex('.')-1) + minorVersion = version.slice(version.rindex('.')+1..-1).to_i + majorVersion = version.slice(0..version.rindex('.')-1) + minorVersion = minorVersion%2 === 0 ? minorVersion : minorVersion-1 + url = $conf[:check_remote_support].sub '', majorVersion.to_s+"."+minorVersion.to_s + begin + http = Curl.get(url) do |http| + http.headers['Authorization'] = 'Basic ' + Base64.strict_encode64($conf[:token_remote_support]) + end + rescue Exception => e + raise e + end + if !http.nil? && http.response_code < 400 + $conf[:opennebula_support] = now + [200, JSON.pretty_generate({:pass => true})] + else + session["opennebula_support"] = 0 + [400, JSON.pretty_generate({:pass => false})] + end + else + [200, JSON.pretty_generate({:pass => true})] + end + else + session["opennebula_support"] = 0 + [400, JSON.pretty_generate({:pass => false})] + end +end + post '/support/request/:id/action' do check_zendesk_api_gem diff --git a/src/sunstone/views/index.erb b/src/sunstone/views/index.erb index a506fcef78..a9ba4eb164 100644 --- a/src/sunstone/views/index.erb +++ b/src/sunstone/views/index.erb @@ -36,7 +36,7 @@ 'lang' : '<%= session[:lang] %>', 'vnc_wss' : '<%= session[:vnc_wss] %>', 'table_order' : '<%= session[:table_order] %>', - 'default_view' : '<%= session[:defaqult_view] %>', + 'default_view' : '<%= session[:default_view] %>', 'page_length' : '<%= session[:page_length] %>' }, 'system_config' : {