Moved some files around
This commit is contained in:
		
							
								
								
									
										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
									
								
							
		Reference in New Issue
	
	Block a user