|
@@ -7,6 +7,27 @@ modpol.orgs = modpol.orgs or
|
|
|
-- sets modpol.orgs as its own fallback
|
|
|
modpol.orgs.__index = modpol.orgs
|
|
|
|
|
|
+function temp_org()
|
|
|
+ return {
|
|
|
+ id = nil,
|
|
|
+ name = nil,
|
|
|
+ policies = {},
|
|
|
+ processes = {},
|
|
|
+ requests = {},
|
|
|
+ request_count = 0,
|
|
|
+ members = {},
|
|
|
+ parent = nil,
|
|
|
+ children = {}
|
|
|
+ }
|
|
|
+end
|
|
|
+
|
|
|
+modpol.orgs.request_params = {
|
|
|
+ add_org = 1,
|
|
|
+ delete = 0,
|
|
|
+ add_member = 1,
|
|
|
+ remove_member = 1
|
|
|
+}
|
|
|
+
|
|
|
-- ==================================================
|
|
|
-- returns org when given its id or name
|
|
|
function modpol.orgs.get_org(arg)
|
|
@@ -71,22 +92,14 @@ end
|
|
|
function modpol.orgs.init_instance()
|
|
|
local error_msg
|
|
|
if modpol.orgs.array[1] then
|
|
|
- error_msg = 'Error: instance has already been initialized'
|
|
|
- modpol.ocutil.log(error_msg)
|
|
|
- return false, error_msg
|
|
|
+ modpol.ocutil.log('Error: instance has already been initialized')
|
|
|
+ return false
|
|
|
end
|
|
|
|
|
|
- local instance = {
|
|
|
- id = 1,
|
|
|
- name = "instance",
|
|
|
- policies = {},
|
|
|
- members = {},
|
|
|
- ledger = {},
|
|
|
- parent = nil,
|
|
|
- children = {},
|
|
|
- properties = {},
|
|
|
- old_names = {}
|
|
|
- }
|
|
|
+ local instance = temp_org()
|
|
|
+ instance.id = 1
|
|
|
+ instance.name = "instance"
|
|
|
+
|
|
|
setmetatable(instance, modpol.orgs)
|
|
|
|
|
|
-- adding instance to org list
|
|
@@ -114,14 +127,15 @@ function modpol.orgs:record(msg, entry_type)
|
|
|
if type(msg) == 'string' and not(modpol.ocutil.str_empty(msg)) then
|
|
|
entry.action_msg = msg
|
|
|
else
|
|
|
- print('Error: msg must be a non empty string')
|
|
|
+ modpol.ocutil.log('Error: msg must be a non empty string')
|
|
|
return false
|
|
|
end
|
|
|
|
|
|
if type(entry_type) == 'string' and not(modpol.ocutil.str_empty(entry_type)) then
|
|
|
entry.entry_type = entry_type
|
|
|
else
|
|
|
- print('Error: entry_type must be a non empty string')
|
|
|
+ modpol.ocutil.log('Error: entry_type must be a non empty string')
|
|
|
+ print(msg, entry_type)
|
|
|
return false
|
|
|
end
|
|
|
|
|
@@ -138,33 +152,27 @@ end
|
|
|
-- ex: instance:add_org('town hall')
|
|
|
function modpol.orgs:add_org(name)
|
|
|
if self.id == nil then
|
|
|
- error_msg = 'Error: add_org can only be called by another org'
|
|
|
- modpol.ocutil.log(error_msg)
|
|
|
- return false, error_msg
|
|
|
+ modpol.ocutil.log('Error: add_org can only be called by another org')
|
|
|
+ return false
|
|
|
end
|
|
|
|
|
|
if modpol.ocutil.str_empty(name) then
|
|
|
- error_msg = 'Error: org name is required'
|
|
|
- modpol.ocutil.log(error_msg)
|
|
|
- return false, error_msg
|
|
|
+ modpol.ocutil.log('Error: org name is required')
|
|
|
+ return false
|
|
|
end
|
|
|
|
|
|
if modpol.orgs.get_org(name) then
|
|
|
- error_msg = 'Error: org name is already being used'
|
|
|
- modpol.ocutil.log(error_msg)
|
|
|
- return false, error_msg
|
|
|
+ modpol.ocutil.log('Error: org name is already being used')
|
|
|
+ return false
|
|
|
end
|
|
|
|
|
|
-- creating the child sub org
|
|
|
modpol.orgs.count = modpol.orgs.count + 1
|
|
|
- local child_org = {
|
|
|
- id = modpol.orgs.count,
|
|
|
- name = name,
|
|
|
- policies = {},
|
|
|
- members = {},
|
|
|
- parent = self.id,
|
|
|
- children = {},
|
|
|
- }
|
|
|
+ local child_org = temp_org()
|
|
|
+ child_org.id = modpol.orgs.count
|
|
|
+ child_org.name = name
|
|
|
+ child_org.parent = self.id
|
|
|
+
|
|
|
setmetatable(child_org, modpol.orgs)
|
|
|
|
|
|
-- adding child id to list of children
|
|
@@ -174,6 +182,7 @@ function modpol.orgs:add_org(name)
|
|
|
modpol.orgs.array[child_org.id] = child_org
|
|
|
|
|
|
self:record('created sub org ' .. name, 'add_org')
|
|
|
+ modpol.ocutil.log('Created sub org ' .. name)
|
|
|
|
|
|
return child_org
|
|
|
end
|
|
@@ -184,7 +193,8 @@ end
|
|
|
-- note: "reason" param was removed, can be added back
|
|
|
function modpol.orgs:delete()
|
|
|
if self.id == 1 then
|
|
|
- return false, 'Error: cannot delete instance'
|
|
|
+ modpol.ocutil.log('Error: cannot delete instance')
|
|
|
+ return false
|
|
|
end
|
|
|
|
|
|
if #self.children > 0 then
|
|
@@ -196,7 +206,7 @@ function modpol.orgs:delete()
|
|
|
end
|
|
|
|
|
|
modpol.orgs.array[self.id] = 'removed'
|
|
|
- print('Removed ' .. self.name .. ': ' .. self.id)
|
|
|
+ modpol.ocutil.log('Removed ' .. self.name .. ': ' .. self.id)
|
|
|
|
|
|
self:record('Deleted ' .. self.name .. ' and all child orgs', 'del_org')
|
|
|
|
|
@@ -224,7 +234,8 @@ function modpol.orgs:add_member(user)
|
|
|
-- adds to end if no empty spots
|
|
|
table.insert(self.members, user)
|
|
|
end
|
|
|
- self.record('Added member ' .. user, 'add_member')
|
|
|
+ self:record('Added member ' .. user, 'add_member')
|
|
|
+
|
|
|
end
|
|
|
|
|
|
-- =======================================
|
|
@@ -236,7 +247,7 @@ function modpol.orgs:remove_member(user)
|
|
|
if user_index then
|
|
|
self.members[user_index] = ''
|
|
|
end
|
|
|
- self.record('Removed member ' .. user, 'del_member')
|
|
|
+ self:record('Removed member ' .. user, 'del_member')
|
|
|
end
|
|
|
|
|
|
-- ===========================================
|
|
@@ -263,3 +274,57 @@ function modpol.orgs:list_member()
|
|
|
end
|
|
|
return str
|
|
|
end
|
|
|
+
|
|
|
+-- ===========================
|
|
|
+-- compares to requests to see if they are identical
|
|
|
+function modpol.orgs.comp_req(req1, req2)
|
|
|
+ -- compares request type
|
|
|
+ if req1.type ~= req2.type then
|
|
|
+ return false
|
|
|
+ else
|
|
|
+ -- comparing parameters
|
|
|
+ -- we can assume the number of params is the same as this is checked in the make_request func
|
|
|
+ for k, v in ipairs(req1.params) do
|
|
|
+ if v ~= req2.params[k] then
|
|
|
+ return false
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+ return true
|
|
|
+end
|
|
|
+
|
|
|
+-- ================================
|
|
|
+-- tries to make a request to the org
|
|
|
+function modpol.orgs:make_request(request)
|
|
|
+ -- makes sure the request has the valid number of parameters
|
|
|
+ local num_params = modpol.orgs.request_params[request.type]
|
|
|
+
|
|
|
+ if num_params == nil then
|
|
|
+ modpol.ocutil.log("Error: request type is invalid")
|
|
|
+ return false
|
|
|
+ end
|
|
|
+
|
|
|
+ for k, v in ipairs(request.params) do
|
|
|
+ num_params = num_params - 1
|
|
|
+ end
|
|
|
+
|
|
|
+ if num_params ~= 0 then
|
|
|
+ modpol.ocutil.log("Error: request has invalid number of parameters")
|
|
|
+ return false
|
|
|
+ end
|
|
|
+
|
|
|
+ -- checking to see if identical request already exists
|
|
|
+ for k, v in ipairs(self.requests) do
|
|
|
+ if self.comp_req(request, v) == true then
|
|
|
+ modpol.ocutil.log("Error: request has already been made")
|
|
|
+ return false
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+ -- use lazy deletion here, not very clean
|
|
|
+ -- table.insert(self.requests, request)
|
|
|
+ self.request_count = self.request_count + 1
|
|
|
+ self.requests[self.request_count] = request
|
|
|
+ return self.request_count
|
|
|
+
|
|
|
+end
|