<% --[[ La definición de las versiones de jQuery y jQueryUI que se utilizan, se encuentra en "shared/apps/utils.lua" "LAST" = Versiones - jQuery (3.6.0 "Mar 02, 2021") y jQueryUI (1.13.0 "Oct 07, 2021") "STABLE" = Versiones - jQuery (3.4.1 "May 01, 2019") y jQueryUI (1.12.1 "Sep 14, 2016") ]]-- local m_version = "LAST" local jQuery, jQueryUI = m_utils.jQuery(m_version) %> <% --[[ NOTA: A este flag "m_forceIncludeAllJsFiles" lo debemos dejar en "true" en el caso que algo falle y necesitamos cargar todos los JAVASCRIPTS. Mientras se soluciona el problema ]]-- local m_helpers = require("helpers") local m_forceIncludeAllJsFiles = false --true local _, mainProcessElapsedTime = m_helpers.utils.ElapsedTime.Start() local INCONCERT_ENV_MODE = (os.getenv("INCONCERT_ENV_MODE") or "PRODUCTION"):upper() LogDebug("") LogInfo("---------------------------------------------------------") LogInfo(" START LOADING - INBOX MASTER - startTime: %s", mainProcessElapsedTime.startTime) LogInfo(" STARTING IN '%s' MODE................", INCONCERT_ENV_MODE) LogInfo("---------------------------------------------------------") local vcc = inconcert.authUser.virtualContactCenter local fullUserId = inconcert.authUser.userName.."@"..vcc local userRole = inconcert.authUser.userGroup --[[ Definicion de Apps por la cual se debe validar los permisos de visualizacion e insercion de Recursos (JS & CSS) ]]-- local m_apps = { administration = {hasPermission = false, appId = "administration" }, report_design = {hasPermission = false, appId = "report_design" }, outbound_engine = {hasPermission = false, appId = "outbound_engine" }, apps_launcher = {hasPermission = false, appId = "apps_launcher" }, batch_management = {hasPermission = false, appId = "batch_management" }, helpdesk_gui = {hasPermission = false, appId = "apps_integrations", -- Para tener permisos sobre "HelpDesk Gui", tiene que tener permisos al menos sobre una de las siguientes acciones. actions = { -- acceso al tab con todo la app HelpDesk "helpdesk_full_access", -- acceso a tickets dentro de la app Interaction "helpdesk_tickets_in_app_interaction" } }, interaction = {hasPermission = false, appId = "interaction" }, outbound_engine = {hasPermission = false, appId = "outbound_engine"}, provisioning = {hasPermission = false, appId = "provisioning" }, reports_viewer = {hasPermission = false, appId = "reports", -- Para tener permisos sobre "Reports Viewer", tiene que tener permisos sobre la siguiente accion. actions = { "reports_viewer" } }, reports_design = {hasPermission = false, appId = "reports", -- Para tener permisos sobre "Reports Design", tiene que tener permisos al menos sobre una de las siguientes acciones. actions = { -- custom reports "save_custom_reports", "delete_custom_reports", -- custom metrics "save_custom_metrics", "delete_custom_metrics", -- custom filters "save_custom_filters", "delete_custom_filters", -- dimensions "save_custom_fields", "delete_custom_fields", -- schedules "save_schedule", "delete_schedule", "activate_schedule", "activate_schedule", "execute_schedule" } }, settings = {hasPermission = false, appId = "settings" }, social_networks = {hasPermission = false, appId = "social_networks"}, supervisor = {hasPermission = false, appId = "supervisor" }, campaign_analytics = {hasPermission = false, appId = "campaign_analytics" }, monitoring = {hasPermission = false, appId = "monitoring" }, web_designer = {hasPermission = false, appId = "web_designer" }, flow_designer = {hasPermission = false, appId = "flow_designer" }, cognitive_services = {hasPermission = false, appId = "cognitive_services" }, knowledge_base = {hasPermission = false, appId = "knowledge_base" }, } --[[ Aca recorro la definicion de permisos y realizo la validacion de permisos para la visibiliad de Apps para el Logged User. ]]-- local ksAgent = m_utils.GetDatasource():CassandraConnection("Agent") for _, info in pairs(m_apps) do if not info.actions then info.hasPermission = m_permissions.HasPermissionToApplication( info.appId, fullUserId, userRole, nil, -- campaignid ksAgent ) else for _, actionId in ipairs(info.actions) do local hasPermission = m_permissions.IsPermissionEnabledForLoggedUser(info.appId, actionId, nil, ksAgent) --LogDebug("------ UserId: '%s', Role: '%s', info.appId : %s -> actionId %s = %s", fullUserId, userRole, info.appId, actionId, hasPermission) if hasPermission then info.hasPermission = true break end end end end --LogDebug("------ apps permissions : %s", json.encode(m_apps)) --LogDebug("-------------------------------") --LogDebug("") local m_hasAllegroIntegration = m_utils.HasAllegroIntegration(vcc, ksAgent) ksAgent:Close() function MustIncludeAllegroResources () if m_forceIncludeAllJsFiles then -- ACA forzamos a que se carguen TODOS los JS y CSS. Sin importar si es o no un VCC de Allegro. -- Utilizado para un caso de Debug por algun error return true end return m_hasAllegroIntegration end function HasPermissionToApp (appId) if m_forceIncludeAllJsFiles then -- ACA forzamos a que se carguen TODOS los JS y CSS al validar los permisos. Sin importar si tiene o NO permisos. -- Utilizado para un caso de Debug por algun error return true end local msgErr = ("Validation Permissions - Application '%s' does not exist !!!!"):format(appId) assert(m_apps[appId], msgErr) return m_apps[appId].hasPermission end function HasPermissionToAppConfiguration () local hasPermission = HasPermissionToApp("administration") if hasPermission then return true end hasPermission = HasPermissionToApp("batch_management") if hasPermission then return true end hasPermission = HasPermissionToApp("outbound_engine") if hasPermission then return true end hasPermission = HasPermissionToApp("provisioning") if hasPermission then return true end hasPermission = HasPermissionToApp("reports_design") if hasPermission then return true end hasPermission = HasPermissionToApp("supervisor") if hasPermission then return true end hasPermission = HasPermissionToApp("social_networks") if hasPermission then return true end hasPermission = HasPermissionToApp("web_designer") if hasPermission then return true end hasPermission = HasPermissionToApp("flow_designer") if hasPermission then return true end hasPermission = HasPermissionToApp("knowledge_base") if hasPermission then return true end hasPermission = HasPermissionToApp("cognitive_services") if hasPermission then return true end -- NO tiene permisos sobre "configuration" return false end function IsProductionMode () return "PRODUCTION" == INCONCERT_ENV_MODE end function IsDevelopmentMode () return not IsProductionMode() end --[[--------------------------------------------------- ANGULAR APPS -------------------------------------------------------]]-- function IsRequiredCommonAngularScripts () local hasPermission = HasPermissionToApp("administration") if hasPermission then return true end hasPermission = HasPermissionToApp("campaign_analytics") if hasPermission then return true end hasPermission = HasPermissionToApp("monitoring") if hasPermission then return true end hasPermission = HasPermissionToApp("provisioning") if hasPermission then return true end hasPermission = HasPermissionToApp("supervisor") if hasPermission then return true end -- Las aplicaciones a las cuales el Usuario tiene permisos NO necesitan Scrpits de Angular return false end function IsRequiredCommonAngularCss () local hasPermission = HasPermissionToApp("campaign_analytics") if hasPermission then return true end hasPermission = HasPermissionToApp("monitoring") if hasPermission then return true end -- Las aplicaciones a las cuales el Usuario tiene permisos NO necesitan Scrpits de Angular return false end --[[ Funcion encargada de Incluir los JS y CSS de APPS, LIB y SHARED, segun los permisos del Usuario. params: ----------------------------- - CalculateIncludes: (funcion) La cual se encarga de realizar un calculo personalizado de los includes a insertar. Este parametro se utiliza solo, es decir si viene este parametro, NO se tienen en cuenta los demas parametros que llegan (**). --(**)--------------------------- - MustInclude : (funcion) Funcion que valida si los includes Customs se deben de incluir (ej: validando permisos). - customInclusions : (string/function) Aca llegan los includes (markup de js y css) que se van a insertar si es que la respuesta de la funcion "MustInclude" ha dado true. - alwaysIncludes : (string) Aca llegan los includes (markup de js y css) que se van a insertar SIEMPRE, sin importar la respuesta de la funcion "MustInclude". - notIncludeMessage: (string) Texto que se va a incluir en la MasterPage indicando que estos resources (js & css) no fueron incluidos. ----------------------------- ]]-- local function IncludeLibResources (params) params._L = _L -- m_customInfo se obtiene del init.lua -> render_main del agent return m_utils.IncludeLibResources(params, m_customInfo) end %> inConcert OmniChannel <%=IncludeLibResources({ MustInclude = function() return HasPermissionToApp("supervisor") end, notIncludeMessage = "No Include LIB JavaScript Files of 'EJSChart' -> 'Supervisor App'", customInclusions = [[ ]] })%> <%=IncludeLibResources({ MustInclude = function() return HasPermissionToApp("administration") end, notIncludeMessage = "No Include JavaScript Files of Libs CLIPBOARD, GOLDEN LAYOUT, SPECTRUM, MXGRAPH", customInclusions = [[ ]] })%> <%=IncludeLibResources({ MustInclude = function() local hasPermissionToAdministration = HasPermissionToApp("administration") local hasPermissionToSocialNetworks = HasPermissionToApp("social_networks") local hasPermissionToBatchManagement = HasPermissionToApp("batch_management") local mustInclude = hasPermissionToAdministration or hasPermissionToSocialNetworks or hasPermissionToBatchManagement return mustInclude end, notIncludeMessage = "No Include LIB JavaScript & CSS Files of 'EMOJI-PICKER' -> 'administration accounts mail'", customInclusions = [[ ]] })%> <%=IncludeLibResources({ MustInclude = function() return HasPermissionToApp("social_networks") end, notIncludeMessage = "No Include JavaScript Files & CSS of Libs D3", customInclusions = [[ ]] })%> <%=IncludeLibResources({ MustInclude = function() local hasPermissionToAdministration = HasPermissionToApp("administration") local hasPermissionToSocialNetworks = HasPermissionToApp("social_networks") local hasPermissionToBatchManagement = HasPermissionToApp("batch_management") local hasPermissionReportsViewer = HasPermissionToApp("reports_viewer") local hasPermissionReportsDesign = HasPermissionToApp("reports_design") local mustInclude = hasPermissionToAdministration or hasPermissionToSocialNetworks or hasPermissionToBatchManagement or hasPermissionReportsViewer or hasPermissionReportsDesign return mustInclude end, notIncludeMessage = "No Include LIB JavaScriptFiles of 'JQUERY.SCROLLTO'", customInclusions = [[ ]] })%> <%=IncludeLibResources({ MustInclude = function() return HasPermissionToApp("administration") end, notIncludeMessage = "No Include JavaScript Files for 'shared/gui/password_strength", customInclusions = [[ ]] })%> <%=IncludeLibResources({ MustInclude = function() return HasPermissionToApp("supervisor") end, notIncludeMessage = "No Include JavaScript Files for 'shared/gui/campaign_selector", customInclusions = [[ ]] })%> <%=IncludeLibResources({ MustInclude = function() local hasPermissionToSocialNetworks = HasPermissionToApp("social_networks") local hasPermissionTorReportViewer = HasPermissionToApp("reports_viewer") local hasPermissionToBatchManagement = HasPermissionToApp("batch_management") local mustInclude = hasPermissionToSocialNetworks or hasPermissionTorReportViewer or hasPermissionToBatchManagement return mustInclude end, notIncludeMessage = "No Include JavaScript Files for 'shared/charts", customInclusions = [[ ]] })%> <%=IncludeLibResources({ MustInclude = function() local hasPermissionToAdministration = HasPermissionToApp("administration") local hasPermissionToProvisioning = HasPermissionToApp("provisioning") local hasPermissionToBatchManagement = HasPermissionToApp("batch_management") local mustInclude = hasPermissionToAdministration or hasPermissionToProvisioning or hasPermissionToBatchManagement return mustInclude end, notIncludeMessage = "No Include CSS & JavaScript Files for 'shared/MailManagement & /libs/wysiwyg", customInclusions = [[ ]] })%> <%=IncludeLibResources({ MustInclude = function() return IsRequiredCommonAngularCss() end, notIncludeMessage = "No Include ANGULAR BASE Css Files", customInclusions = [[ ]] })%> <%=IncludeLibResources({ MustInclude = function() return IsRequiredCommonAngularScripts() end, notIncludeMessage = "No Include ANGULAR BASE TypeScripts Files", customInclusions = [[ ]] })%> <%=IncludeLibResources({ MustInclude = function() return HasPermissionToApp("administration") end, notIncludeMessage = "No Include ANGULAR TypeScripts Files of Administration App", customInclusions = [[ ]] })%> <%=IncludeLibResources({ MustInclude = function() return HasPermissionToApp("campaign_analytics") end, notIncludeMessage = "No Include ANGULAR TypeScripts Files of Campaign Analytics App", customInclusions = [[ ]] })%> <%=IncludeLibResources({ MustInclude = function() return HasPermissionToApp("provisioning") end, notIncludeMessage = "No Include ANGULAR TypeScripts Files of Provisioning App", customInclusions = [[ ]] })%> <%=IncludeLibResources({ MustInclude = function() return HasPermissionToApp("supervisor") end, notIncludeMessage = "No Include ANGULAR TypeScripts Files of Supervisor App", customInclusions = [[ ]] })%> <%=IncludeLibResources({ MustInclude = function() -- a estos scripts los carga solo en modo de DEVELOPMENT y si los permisos del Usuario al menos requiere una App que use Angular if IsProductionMode() then return false end return IsRequiredCommonAngularScripts() end, notIncludeMessage = "No Include TypeScripts Files of Supervisor App", customInclusions = [[ ]] })%> <%=IncludeLibResources({ MustInclude = function() local hasPermissionToConfiguration = HasPermissionToAppConfiguration() local hasPermissionTorReportViewer = HasPermissionToApp("reports_viewer") local hasPermissionTorSupervisor = HasPermissionToApp("supervisor") local mustInclude = hasPermissionToConfiguration or hasPermissionTorReportViewer or hasPermissionTorSupervisor return mustInclude end, notIncludeMessage = "No Include JavaScript Files of Configuration App", customInclusions = [[ ]] })%> <%=IncludeLibResources({ MustInclude = function() return HasPermissionToAppConfiguration() end, notIncludeMessage = "No Include JavaScript Files of Configuration App", alwaysIncludes = nil, customInclusions = function() local includes = [[ ]] -- El JavaScript de blacklist los incluimos solo para las apps "administration" y "outbound engine", ya que otras apps no lo utilizan if HasPermissionToApp("administration") or HasPermissionToApp("outbound_engine") then includes = includes .. "\n" .. [[ ]] end return includes end })%> <%=IncludeLibResources({ MustInclude = function() return MustIncludeAllegroResources() end, notIncludeMessage = "No Include JavaScript Files of Allegro App", alwaysIncludes = nil, customInclusions = [[ ]] })%> <%=IncludeLibResources({ MustInclude = function() return HasPermissionToApp("helpdesk_gui") end, notIncludeMessage = "No Include JavaScript Files of HelpDesk GUI App", alwaysIncludes = [[ ]], customInclusions = [[ ]] })%> <%=IncludeLibResources({ MustInclude = function() return HasPermissionToApp("apps_launcher") end, notIncludeMessage = "No Include JavaScript Files of Launcher App", alwaysIncludes = nil, customInclusions = [[ ]] })%> <%=IncludeLibResources({ MustInclude = function() return HasPermissionToApp("supervisor") end, notIncludeMessage = "No Include JavaScript Files of Supervisor App", alwaysIncludes = nil, customInclusions = [[ ]] })%> <%=IncludeLibResources({ MustInclude = function() return HasPermissionToApp("administration") end, notIncludeMessage = "No Include JavaScript Files of Administration App", alwaysIncludes = nil, customInclusions = [[ ]] })%> <%=IncludeLibResources({ MustInclude = function() return HasPermissionToApp("outbound_engine") end, notIncludeMessage = "No Include JavaScript Files of OutboundEngine App", alwaysIncludes = [[ ]], customInclusions = function() local includes = [[ ]] if m_hasAllegroIntegration then includes = includes .. "\n" .. [[ ]] else includes = includes .. "\n" .. [[ ]] end return includes end })%> <%=IncludeLibResources({ CalculateIncludes = function() local hasPermissionReportsViewer = HasPermissionToApp("reports_viewer") local hasPermissionReportsDesign = HasPermissionToApp("reports_design") local includes = "" if hasPermissionReportsViewer or hasPermissionReportsDesign then includes = [[ ]] else local message = "No Include JavaScript Files of Reports Viewer App" --LogDebug(message) includes = string.format([[]], message):upper() end if hasPermissionReportsDesign then includes = includes .. "\n" .. [[ ]] else local message = "No Include JavaScript Files of Reports Designer App" --LogDebug(message) includes = includes .. "\n" .. string.format([[]], message):upper() end return includes end })%> <%=IncludeLibResources({ MustInclude = function() return HasPermissionToApp("social_networks") end, notIncludeMessage = "No Include JavaScript Files of Social Network App", alwaysIncludes = [[ ]], customInclusions = [[ ]] })%> <%=IncludeLibResources({ MustInclude = function() return HasPermissionToApp("batch_management") end, notIncludeMessage = "No Include JavaScript Files of Batch Management App", alwaysIncludes = [[ ]], customInclusions = [[ ]] })%> <%=IncludeLibResources({ MustInclude = function() return HasPermissionToApp("campaign_analytics") end, notIncludeMessage = "No Include JavaScript Files of Campaign Analytics App", alwaysIncludes = [[]], customInclusions = [[ ]] })%> <%=IncludeLibResources({ MustInclude = function() return HasPermissionToApp("web_designer") end, notIncludeMessage = "No Include JavaScript Files of Web Designer App", alwaysIncludes = nil, customInclusions = [[ ]] })%> <%=IncludeLibResources({ MustInclude = function() return HasPermissionToApp("knowledge_base") end, notIncludeMessage = "No Include JavaScript Files of knowledge base App", alwaysIncludes = nil, customInclusions = [[ ]] })%> <%=IncludeLibResources({ MustInclude = function() return HasPermissionToApp("cognitive_services") end, notIncludeMessage = "No Include JavaScript Files of cognitive services App", alwaysIncludes = nil, customInclusions = [[ ]] })%> <%=IncludeLibResources({ MustInclude = function() return HasPermissionToApp("flow_designer") end, notIncludeMessage = "No Include JavaScript Files of flow designer App", alwaysIncludes = [[ ]], customInclusions = [[ ]] })%> <%=IncludeLibResources({ MustInclude = function() return HasPermissionToApp("provisioning") end, notIncludeMessage = "No Include JavaScript Files of Provisioning App", alwaysIncludes = nil, customInclusions = function(customInfo) local includes = [[ ]] if not customInfo or not customInfo.widgets then -- no tiene widgets return includes end --[[ Se inlcuyen de forma dinamica los JavaScripts de PROVISIONING de cada uno de los "Widgets" de la App "INTEGRATION". -- Estos Javascript se definen en: \usr\lib\inconcert\agent\inconcert\apps\integrations\widgets\example\definitions.lua ]]-- for _, def in ipairs(customInfo.widgets.definitions or {}) do if def.provisioning and def.provisioning.html then -- incluyo los "Widgets" includes = includes .. "\n" .. (def.provisioning.html.js or "") end end -- Retorno todos los Js más los widgets return includes end })%> <%=IncludeLibResources({ MustInclude=function() return HasPermissionToApp("monitoring") end, notIncludeMessage="No Include JavaScript & TypeScripts Files of Monitoring App", alwaysIncludes=nil, customInclusions=function(customInfo) return [[ ]] end })%> <%=m_utils.InclueAnalyticsLibResources({includeType = "head", _L = _L})%> <%=m_utils.InclueAnalyticsLibResources({includeType = "body", _L = _L})%>
<% local _, mainProcessElapsedTime = m_helpers.utils.ElapsedTime.End(mainProcessElapsedTime.processId) LogInfo("---------------------------------------------------------") LogInfo("------ END LOADED INBOX MASTER. endTime: %s, ELAPSED TIME: '%s' seconds.", mainProcessElapsedTime.endTime, mainProcessElapsedTime.humanElapsedTime.formattedTime) LogInfo("---------------------------------------------------------") LogDebug("") %>