%
--[[
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
return m_utils.IncludeLibResources(params)
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})%>