From d15047f9965803ba021eba226241c43d133930cb Mon Sep 17 00:00:00 2001 From: Peter Kozak Date: Mon, 4 Mar 2013 03:31:46 -0500 Subject: permission_targets method added --- misc/freeswitch/scripts/common/group.lua | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'misc/freeswitch/scripts/common/group.lua') diff --git a/misc/freeswitch/scripts/common/group.lua b/misc/freeswitch/scripts/common/group.lua index c4125bc..5bd866e 100644 --- a/misc/freeswitch/scripts/common/group.lua +++ b/misc/freeswitch/scripts/common/group.lua @@ -86,3 +86,26 @@ function Group.name_id_by_member(self, member_id, member_type) return group_names, group_ids; end + +function Group.permission_targets(self, group_ids, permission) + if not group_ids or not permission then + return {}; + end + + local sql_query = 'SELECT DISTINCT `b`.`id`, `b`.`name` \ + FROM `group_permissions` `a` \ + JOIN `groups` `b` ON `b`.`id` = `a`.`target_group_id` \ + WHERE `a`.`permission` = ' .. self.database:escape(permission, '"') .. ' \ + AND `a`.`group_id` IN (' .. table.concat(group_ids, ',') .. ') \ + AND `b`.`active` IS TRUE \ + GROUP BY `a`.`target_group_id` LIMIT ' .. MAX_GROUP_MEMBERSHIPS; + + + local groups = {}; + + self.database:query(sql_query, function(account_entry) + groups[account_entry.id] = account_entry.name; + end); + + return groups; +end -- cgit v1.2.3 From f19afefdda27a9661702d872c56b5d862e50452d Mon Sep 17 00:00:00 2001 From: Peter Kozak Date: Mon, 4 Mar 2013 03:32:03 -0500 Subject: combine method added --- misc/freeswitch/scripts/common/group.lua | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'misc/freeswitch/scripts/common/group.lua') diff --git a/misc/freeswitch/scripts/common/group.lua b/misc/freeswitch/scripts/common/group.lua index 5bd866e..ac2f542 100644 --- a/misc/freeswitch/scripts/common/group.lua +++ b/misc/freeswitch/scripts/common/group.lua @@ -109,3 +109,24 @@ function Group.permission_targets(self, group_ids, permission) return groups; end + + +function Group.combine(self, ...) + local groups = {}; + local group_sets = {...}; + for set_index=1, #group_sets do + if type(group_sets[set_index]) == 'table' then + local group_ids = group_sets[set_index]; + for index=1, #group_ids do + groups[tonumber(group_ids[index])] = true; + end + end + end + + local group_ids = {}; + for group_id, status in pairs(groups) do + table.insert(group_ids, group_id); + end + + return group_ids; +end -- cgit v1.2.3 From edb0e6cae9d39610739da9bf9c428468d9a53617 Mon Sep 17 00:00:00 2001 From: Peter Kozak Date: Mon, 4 Mar 2013 07:46:45 -0500 Subject: set theory --- misc/freeswitch/scripts/common/group.lua | 46 ++++++++++++++++++++++++++++---- 1 file changed, 41 insertions(+), 5 deletions(-) (limited to 'misc/freeswitch/scripts/common/group.lua') diff --git a/misc/freeswitch/scripts/common/group.lua b/misc/freeswitch/scripts/common/group.lua index ac2f542..db56129 100644 --- a/misc/freeswitch/scripts/common/group.lua +++ b/misc/freeswitch/scripts/common/group.lua @@ -87,6 +87,7 @@ function Group.name_id_by_member(self, member_id, member_type) return group_names, group_ids; end + function Group.permission_targets(self, group_ids, permission) if not group_ids or not permission then return {}; @@ -100,18 +101,36 @@ function Group.permission_targets(self, group_ids, permission) AND `b`.`active` IS TRUE \ GROUP BY `a`.`target_group_id` LIMIT ' .. MAX_GROUP_MEMBERSHIPS; - - local groups = {}; + local group_names = {}; + local group_ids = {}; self.database:query(sql_query, function(account_entry) - groups[account_entry.id] = account_entry.name; + table.insert(group_names, account_entry.name); + table.insert(group_ids, tonumber(account_entry.id)); end); - return groups; + return group_names, group_ids; +end + + +function Group.is_target(self, group_id, permission) + if not group_id or not permission then + return nil; + end + + local sql_query = 'SELECT `b`.`name` \ + FROM `group_permissions` `a` \ + JOIN `groups` `b` ON `b`.`id` = `a`.`target_group_id` \ + WHERE `a`.`permission` = ' .. self.database:escape(permission, '"') .. ' \ + AND `a`.`group_id` = ' .. tonumber(group_id) .. ' \ + AND `b`.`active` IS TRUE \ + LIMIT 1'; + + return self.database:query_return_value(sql_query); end -function Group.combine(self, ...) +function Group.union(self, ...) local groups = {}; local group_sets = {...}; for set_index=1, #group_sets do @@ -130,3 +149,20 @@ function Group.combine(self, ...) return group_ids; end + + +function Group.intersection(self, set_one, set_two) + local basic_set = {}; + for index=1, #set_one do + basic_set[set_one[index]] = true; + end + + local final_set = {}; + for index=1, #set_two do + if basic_set[set_two[index]] then + table.insert(final_set, set_two[index]); + end + end + + return final_set; +end -- cgit v1.2.3 From 39cfd26ddb2ac6b27932f82a486f04130bc3a646 Mon Sep 17 00:00:00 2001 From: Peter Kozak Date: Mon, 4 Mar 2013 08:00:40 -0500 Subject: group_ids can be empty --- misc/freeswitch/scripts/common/group.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'misc/freeswitch/scripts/common/group.lua') diff --git a/misc/freeswitch/scripts/common/group.lua b/misc/freeswitch/scripts/common/group.lua index db56129..1763e69 100644 --- a/misc/freeswitch/scripts/common/group.lua +++ b/misc/freeswitch/scripts/common/group.lua @@ -89,7 +89,7 @@ end function Group.permission_targets(self, group_ids, permission) - if not group_ids or not permission then + if not group_ids or #group_ids == 0 or not permission then return {}; end -- cgit v1.2.3 From c5ab74f9adb52228ef6583353b89d855f0dc4a3a Mon Sep 17 00:00:00 2001 From: Peter Kozak Date: Mon, 4 Mar 2013 08:02:50 -0500 Subject: sets can be nil --- misc/freeswitch/scripts/common/group.lua | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'misc/freeswitch/scripts/common/group.lua') diff --git a/misc/freeswitch/scripts/common/group.lua b/misc/freeswitch/scripts/common/group.lua index 1763e69..b9cae61 100644 --- a/misc/freeswitch/scripts/common/group.lua +++ b/misc/freeswitch/scripts/common/group.lua @@ -152,6 +152,10 @@ end function Group.intersection(self, set_one, set_two) + if not set_one or not set_two then + return {}; + end + local basic_set = {}; for index=1, #set_one do basic_set[set_one[index]] = true; -- cgit v1.2.3