MT#65662 Support domain/profile/subscriber level inheritance (group load)

For grouped loading of preferences, add support of the levels:
- domain
- profile
- subscriber

This allows to be consistent with the existing caller/callee preferences
loading (of the subscriber level) which takes other levels of inheritance
into account.

Change-Id: Ic3be3d21ff3eb67b6ce9dc4ef79a3b9df446a2ba
(cherry picked from commit 640143483e)
mr26.0
Donat Zenichev 3 weeks ago committed by Talha Omair
parent d77a02074f
commit a9bc727a7c

@ -27,6 +27,15 @@ NGCPDomainPrefs.__class__ = 'NGCPDomainPrefs'
NGCPDomainPrefs.group = "dom_prefs"
NGCPDomainPrefs.db_table = "dom_preferences"
NGCPDomainPrefs.query = "SELECT * FROM %s WHERE domain ='%s'"
NGCPDomainPrefs.group_query = [[
SELECT prefs.*
FROM %s AS prefs
JOIN provisioning.voip_preferences AS vp
ON vp.attribute = prefs.attribute
JOIN provisioning.voip_preference_groups AS vpg
ON vpg.id = vp.voip_preference_groups_id
WHERE prefs.domain = '%s' AND vpg.id = %s
]]
-- luacheck: globals KSR
function NGCPDomainPrefs:new(config)
local instance = NGCPDomainPrefs:create()

@ -127,10 +127,27 @@ function NGCP:caller_usr_load(uuid, domain)
return unique_keys
end
function NGCP:caller_load_group(uuid, group_name)
local keys = self.prefs.usr:caller_load_group(uuid, group_name)
self.prefs.real:caller_usr_load_group(keys)
return keys
function NGCP:caller_usr_load_group(uuid, domain, group_name)
if not group_name then
group_name = domain
domain = nil
end
local group_id = self.prefs.usr:get_pref_group_id(group_name)
if not group_id then
return {}
end
local keys = {
domain = self.prefs.dom:load_group("caller", domain, group_id),
prof = self.prefs.prof:load_group("caller", uuid, group_id),
user = self.prefs.usr:load_group("caller", uuid, group_id),
}
local unique_keys = utable.deepcopy(keys.domain)
utable.merge(unique_keys, keys.prof)
utable.merge(unique_keys, keys.user)
self.prefs.real:caller_usr_load_group(unique_keys)
return unique_keys
end
function NGCP:callee_usr_load(uuid, domain)
@ -149,10 +166,27 @@ function NGCP:callee_usr_load(uuid, domain)
return unique_keys
end
function NGCP:callee_load_group(uuid, group_name)
local keys = self.prefs.usr:callee_load_group(uuid, group_name)
self.prefs.real:callee_usr_load_group(keys)
return keys
function NGCP:callee_usr_load_group(uuid, domain, group_name)
if not group_name then
group_name = domain
domain = nil
end
local group_id = self.prefs.usr:get_pref_group_id(group_name)
if not group_id then
return {}
end
local keys = {
domain = self.prefs.dom:load_group("callee", domain, group_id),
prof = self.prefs.prof:load_group("callee", uuid, group_id),
user = self.prefs.usr:load_group("callee", uuid, group_id),
}
local unique_keys = utable.deepcopy(keys.domain)
utable.merge(unique_keys, keys.prof)
utable.merge(unique_keys, keys.user)
self.prefs.real:callee_usr_load_group(unique_keys)
return unique_keys
end
function NGCP:log_pref(level, vtype)

@ -28,6 +28,17 @@ NGCPProfilePrefs.db_table = "prof_preferences"
NGCPProfilePrefs.query = "SELECT prefs.* FROM provisioning.voip_subscribers "..
"as usr LEFT JOIN %s AS prefs ON usr.profile_id = prefs.uuid "..
"WHERE usr.uuid = '%s'"
NGCPProfilePrefs.group_query = [[
SELECT prefs.*
FROM provisioning.voip_subscribers AS usr
LEFT JOIN %s AS prefs
ON usr.profile_id = prefs.uuid
JOIN provisioning.voip_preferences AS vp
ON vp.attribute = prefs.attribute
JOIN provisioning.voip_preference_groups AS vpg
ON vpg.id = vp.voip_preference_groups_id
WHERE usr.uuid = '%s' AND vpg.id = %s
]]
-- luacheck: globals KSR
function NGCPProfilePrefs:new(config)
local instance = NGCPProfilePrefs:create()

Loading…
Cancel
Save