Add. Speed dial respects contacts user. (#2249)
* Add. Speed dial respects contacts user. One user can not use speed dial numbers from contacts associated with another user * Make SQL query more efficient * Add. Support find contacts by user groups as well If contact has set any `user` or `group` then only this users can use speed dial numbers in other case speed dial numbers are global for domain.
This commit is contained in:
parent
1ee633cd10
commit
8f2782e8dd
|
|
@ -34,12 +34,14 @@
|
|||
domain_name = session:getVariable("domain_name");
|
||||
domain_uuid = session:getVariable("domain_uuid");
|
||||
context = session:getVariable("context");
|
||||
user = session:getVariable("sip_auth_username")
|
||||
or session:getVariable("username");
|
||||
|
||||
--get the argv values
|
||||
destination = argv[2];
|
||||
|
||||
-- search in memcache first
|
||||
local key = "app:dialplan:outbound:speed_dial:" .. destination .. "@" .. domain_name
|
||||
local key = "app:dialplan:outbound:speed_dial:" .. user .. ":" .. destination .. "@" .. domain_name
|
||||
local source = "memcache"
|
||||
local value = cache.get(key)
|
||||
|
||||
|
|
@ -63,13 +65,39 @@
|
|||
local dbh = Database.new('system');
|
||||
|
||||
-- search for the phone number in database using the speed dial
|
||||
local sql = "SELECT phone_number "
|
||||
sql = sql .. "FROM v_contact_phones "
|
||||
sql = sql .. "WHERE phone_speed_dial = :phone_speed_dial "
|
||||
sql = sql .. "AND domain_uuid = :domain_uuid "
|
||||
sql = sql .. "AND (phone_number <> '' AND phone_number IS NOT NULL) "
|
||||
local sql = [[
|
||||
-- find all contacts with correct user or withot users and groups at all
|
||||
select t0.phone_number --, t6.extension, 'GROUP:' || t3.group_name as user_name
|
||||
from v_contact_phones t0
|
||||
inner join v_contacts t1 on t0.contact_uuid = t1.contact_uuid
|
||||
left outer join v_contact_groups t2 on t1.contact_uuid = t2.contact_uuid
|
||||
left outer join v_group_users t3 on t2.group_uuid = t3.group_uuid
|
||||
left outer join v_users t4 on t3.user_uuid = t4.user_uuid
|
||||
left outer join v_extension_users t5 on t4.user_uuid = t5.user_uuid
|
||||
left outer join v_extensions t6 on t5.extension_uuid = t6.extension_uuid
|
||||
where t0.domain_uuid = :domain_uuid and t0.phone_speed_dial = :phone_speed_dial
|
||||
and ( (1 = 0)
|
||||
or (t6.domain_uuid = :domain_uuid and (t6.extension = :user or t6.number_alias = :user))
|
||||
or (t2.contact_uuid is null and not exists(select 1 from v_contact_users t where t.contact_uuid = t0.contact_uuid) )
|
||||
)
|
||||
|
||||
local params = {phone_speed_dial = destination, domain_uuid = domain_uuid};
|
||||
union
|
||||
|
||||
-- find all contacts with correct group or withot users and groups at all
|
||||
select t0.phone_number -- , t5.extension, 'USER:' || t3.username as user_name
|
||||
from v_contact_phones t0
|
||||
inner join v_contacts t1 on t0.contact_uuid = t1.contact_uuid
|
||||
left outer join v_contact_users t2 on t1.contact_uuid = t2.contact_uuid
|
||||
left outer join v_users t3 on t2.user_uuid = t3.user_uuid
|
||||
left outer join v_extension_users t4 on t3.user_uuid = t4.user_uuid
|
||||
left outer join v_extensions t5 on t4.extension_uuid = t5.extension_uuid
|
||||
where t0.domain_uuid = :domain_uuid and t0.phone_speed_dial = :phone_speed_dial
|
||||
and ( (1 = 0)
|
||||
or (t5.domain_uuid = :domain_uuid and (t5.extension = :user or t5.number_alias = :user))
|
||||
or (t2.contact_user_uuid is null and not exists(select 1 from v_contact_groups t where t.contact_uuid = t0.contact_uuid))
|
||||
)
|
||||
]];
|
||||
local params = {phone_speed_dial = destination, domain_uuid = domain_uuid, user = user};
|
||||
|
||||
if (debug["sql"]) then
|
||||
log.noticef("SQL: %s; params: %s", sql, json.encode(params));
|
||||
|
|
|
|||
Loading…
Reference in New Issue