Moved some files around
This commit is contained in:
parent
a1a6203bab
commit
dc13e543d5
28
modpol/modules/child_org.lua
Normal file
28
modpol/modules/child_org.lua
Normal file
@ -0,0 +1,28 @@
|
||||
-- CHILD_ORG
|
||||
-- Module that enables user to create child in current org
|
||||
|
||||
-- Initial configuration
|
||||
modpol.modules.child_org = {}
|
||||
modpol.modules.child_org.name = "Create child org"
|
||||
|
||||
|
||||
-- == REQUEST ==
|
||||
|
||||
-- gather data from initiator: child org name, comment
|
||||
|
||||
-- function: modpol.modules.child_org.request
|
||||
|
||||
|
||||
|
||||
-- == CONSENT ==
|
||||
|
||||
-- function: modpol.orgs:consent(process_id, result_function)
|
||||
-- the result function should begin the completion process below
|
||||
|
||||
|
||||
|
||||
-- == COMPLETION ==
|
||||
|
||||
-- if approved/if failed functions?
|
||||
|
||||
-- function: modpol.modules.child_org.create(initiator, parent_org, child_org)
|
0
modpol/modules/join_org.lua
Normal file
0
modpol/modules/join_org.lua
Normal file
0
modpol/modules/leave_org.lua
Normal file
0
modpol/modules/leave_org.lua
Normal file
0
modpol/modules/remove_org.lua
Normal file
0
modpol/modules/remove_org.lua
Normal file
98
modpol/orgs/consent.lua
Normal file
98
modpol/orgs/consent.lua
Normal file
@ -0,0 +1,98 @@
|
||||
-- TODO: NEEDS TO BE REWRITTEN AS A LIBRARY NOT A MODULE
|
||||
|
||||
modpol.orgs.consent = {}
|
||||
|
||||
-- sets consent to its own callback
|
||||
modpol.orgs.consent.__index = modpol.orgs.consent
|
||||
|
||||
function temp_consent_process()
|
||||
return {
|
||||
type = "consent",
|
||||
id = nil,
|
||||
org_id = nil,
|
||||
request_id = nil,
|
||||
total_votes = 0,
|
||||
majority_to_pass = 0.51,
|
||||
votes_needed = nil,
|
||||
votes_yes = {},
|
||||
votes_no = {}
|
||||
}
|
||||
end
|
||||
|
||||
-- ===============================================
|
||||
-- function to create a new consent process to resolve a pending process
|
||||
function modpol.orgs.consent:new_process(id, request_id, org_id)
|
||||
local process = temp_consent_process()
|
||||
process.id = id
|
||||
process.request_id = request_id
|
||||
process.org_id = org_id
|
||||
|
||||
setmetatable(process, modpol.orgs.consent)
|
||||
modpol.ocutil.log('Created new process #' .. id .. ' for request id #' .. request_id)
|
||||
|
||||
local p_org = modpol.orgs.get_org(org_id)
|
||||
|
||||
for i, member in ipairs(p_org.members) do
|
||||
p_org:add_pending_action(id, member)
|
||||
end
|
||||
|
||||
process.votes_needed = math.ceil(process.majority_to_pass * p_org:get_member_count())
|
||||
|
||||
return process
|
||||
end
|
||||
|
||||
-- ============================
|
||||
-- interact function for the consent module
|
||||
-- input: user (string)
|
||||
function modpol.orgs.consent:interact(user)
|
||||
-- TODO this needs more context on the vote at hand
|
||||
modpol.interactions.binary_poll_user(
|
||||
user, "Do you consent?",
|
||||
function(vote)
|
||||
if vote == 'Yes' then
|
||||
self:approve(user, true)
|
||||
elseif vote == 'No' then
|
||||
self:approve(user, false)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
-- ======================================================
|
||||
-- function for users to vote on a pending request
|
||||
function modpol.orgs.consent:approve(user, decision)
|
||||
if not modpol.orgs.get_org(self.org_id):has_member(user) then
|
||||
modpol.ocutil.log('Error in consent:approve -> user not a member of the org')
|
||||
return
|
||||
end
|
||||
|
||||
if decision then
|
||||
table.insert(self.votes_yes, user)
|
||||
modpol.ocutil.log('User ' .. user .. ' voted yes on request #' .. self.request_id)
|
||||
else
|
||||
table.insert(self.votes_no, user)
|
||||
modpol.ocutil.log('User ' .. user .. ' voted no on request #' .. self.request_id)
|
||||
end
|
||||
|
||||
self.total_votes = self.total_votes + 1
|
||||
|
||||
local p_org = modpol.orgs.get_org(self.org_id)
|
||||
p_org:remove_pending_action(self.id, user)
|
||||
|
||||
self:update_status()
|
||||
end
|
||||
|
||||
-- ===================================================
|
||||
-- determines whether process has finished and resolves request if it has (unfinished)
|
||||
function modpol.orgs.consent:update_status()
|
||||
local process_org = modpol.orgs.get_org(self.org_id)
|
||||
|
||||
if #self.votes_yes >= self.votes_needed then
|
||||
modpol.ocutil.log('Request #' .. self.request_id .. ' passes')
|
||||
process_org:resolve_request(self.request_id, true)
|
||||
elseif #self.votes_no >= self.votes_needed then
|
||||
modpol.ocutil.log('Request #' .. self.request_id .. ' fails to pass')
|
||||
process_org:resolve_request(self.request_id, false)
|
||||
else
|
||||
modpol.ocutil.log('Waiting for more votes...')
|
||||
end
|
||||
end
|
0
modpol/orgs/defer_to.lua
Normal file
0
modpol/orgs/defer_to.lua
Normal file
Loading…
x
Reference in New Issue
Block a user