small fixes in requests system, working towards process support
This commit is contained in:
parent
10f6adc544
commit
358aacba0a
0
modpol/modules/consent.lua
Normal file
0
modpol/modules/consent.lua
Normal file
0
modpol/modules/defer_to.lua
Normal file
0
modpol/modules/defer_to.lua
Normal file
@ -288,7 +288,8 @@ function modpol.orgs:set_policy(policy_type, process, must_be_member)
|
||||
process = process,
|
||||
must_be_member = must_be_member
|
||||
}
|
||||
self.policies[policy_type] = policy
|
||||
self.policies[policy_type] = new_policy
|
||||
modpol.ocutil.log('Added policy for ' .. policy_type .. ' in ' .. self.name)
|
||||
end
|
||||
|
||||
|
||||
|
@ -47,6 +47,20 @@ function modpol.orgs.comp_req(req1, req2)
|
||||
return true
|
||||
end
|
||||
|
||||
-- ===============================
|
||||
-- returns string of all active requests
|
||||
function modpol.orgs:list_request()
|
||||
local str
|
||||
for id, req in ipairs(self.requests) do
|
||||
if str then
|
||||
str = str .. '\n' .. req.type .. ' (' .. req.user .. ') '
|
||||
else
|
||||
str = req.type .. ' (' .. req.user .. ') '
|
||||
end
|
||||
end
|
||||
return str
|
||||
end
|
||||
|
||||
-- ================================
|
||||
-- tries to make a request to the org
|
||||
function modpol.orgs:make_request(request)
|
||||
@ -78,13 +92,25 @@ function modpol.orgs:make_request(request)
|
||||
|
||||
-- checking to see if user is able to make request
|
||||
local requested_policy = self.policies[request.type]
|
||||
if requested_policy then
|
||||
if requested_policy.must_be_member and not self:has_member(request.user) then
|
||||
modpol.ocutil.log('Error in ' .. self.name .. ':make_request -> user must be org member to make this request')
|
||||
local parent_policy = modpol.orgs.get_org(self.parent).policies[request.type]
|
||||
|
||||
-- tries to use org's policy table, defers to parent otherwise
|
||||
if not requested_policy then
|
||||
modpol.ocutil.log(request.type .. 'policy not found, deferring to parent org')
|
||||
requested_policy = parent_policy
|
||||
|
||||
if not parent_policy then
|
||||
modpol.ocutil.log('Error in ' .. self.name .. ':make_request -> parent policy undefined')
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
-- make sure user is allowed to make request
|
||||
if requested_policy.must_be_member and not self:has_member(request.user) then
|
||||
modpol.ocutil.log('Error in ' .. self.name .. ':make_request -> user must be org member to make this request')
|
||||
return false
|
||||
end
|
||||
|
||||
-- linear search for empty process slots (lazy deletion)
|
||||
for k, v in ipairs(self.requests) do
|
||||
if v == 'deleted' then
|
||||
@ -110,4 +136,5 @@ function modpol.orgs:make_request(request)
|
||||
modpol.ocutil.log("Request made")
|
||||
|
||||
return request_id
|
||||
end
|
||||
end
|
||||
|
||||
|
19
modpol/tests/org_req_test.lua
Normal file
19
modpol/tests/org_req_test.lua
Normal file
@ -0,0 +1,19 @@
|
||||
dofile('../modpol.lua');
|
||||
|
||||
modpol.orgs.reset()
|
||||
|
||||
test_org = modpol.instance:add_org('test_org')
|
||||
|
||||
test_org:set_policy("add_member", nil, false);
|
||||
|
||||
new_request = {
|
||||
user = "lukvmil",
|
||||
type = "add_member",
|
||||
params = {"lukvmil"}
|
||||
}
|
||||
|
||||
request_id = test_org:make_request(new_request)
|
||||
request_id = test_org:make_request(new_request)
|
||||
|
||||
print(test_org:list_request())
|
||||
test_org:create_process(request_id)
|
Loading…
x
Reference in New Issue
Block a user