diff --git a/modpol/modpol.lua b/modpol/modpol.lua index 0035a09..fbdae77 100644 --- a/modpol/modpol.lua +++ b/modpol/modpol.lua @@ -77,7 +77,7 @@ dofile (topdir .. "/api.lua") -- Final checks -- create instance if not present -if (modpol.orgs["instance"] == nil) then +if not modpol.get_org_id_by_name('instance') then modpol.add_org("instance", modpol.list_users()) end diff --git a/modpol/orgs/orgs.lua b/modpol/orgs/orgs.lua index d3b0564..c9dd729 100644 --- a/modpol/orgs/orgs.lua +++ b/modpol/orgs/orgs.lua @@ -7,7 +7,7 @@ -- preserve records -- if true, will store org ledgers when they are closed, for later reference. local preserve_records = true --- policies assigned to any org can go here +-- policies to be assigned to every org can go here modpol.default_org_policies = modpol.default_org_policies or {} @@ -45,29 +45,38 @@ end --define the template of a ledger entry -modpol.ledger_entry_temp = { - timestamp = '', - entrytype = nil, - action_msg = '', - org_name = nil, - org_id = nil, -} +modpol.ledger_entry_temp = function() + + return { + timestamp = '', + entrytype = nil, + action_msg = '', + org_name = nil, + org_id = nil, + } + +end -- define the basic template of an org. -modpol.org_temp = { - id = nil, - name = nil, - policies = {}, - members = {}, - ledger = {}, - parent = nil, - children = {}, - properties = {}, - old_names = {}, -} +modpol.org_temp = function() + + return { + id = nil, + name = nil, + policies = {}, + members = {}, + ledger = {}, + parent = nil, + children = {}, + properties = {}, + old_names = {}, + + } + +end -- =================================================================== -- Function: modpol.create_ledger_entry @@ -78,7 +87,7 @@ modpol.org_temp = { -- and returns a valid ledger entry table modpol.create_ledger_entry = function(action_msg, org_id, entry_type) - local entry = modpol.ledger_entry_temp + local entry = modpol.ledger_entry_temp() if action_msg and type(action_msg) == 'string' then entry.action_msg = action_msg end @@ -114,13 +123,22 @@ modpol.record = function (org_id, msg, type) -- Record in global ledger table.insert (modpol.ledger, entry) -- Record in "org"-specific ledger + + if modpol.orgs [org_id] ~= nil then - local org_ledger = modpol.orgs [org_id]["ledger"] - if org_ledger == nil then - modpol.orgs [org_id]["ledger"] = { entry } - else - modpol.orgs [org_id]["ledger"] = table.insert (org_ledger, entry) - end + + local org_ledger = modpol.orgs [org_id]["ledger"] + + if org_ledger == nil then + + modpol.orgs [org_id]["ledger"] = { entry } + + else + + table.insert (org_ledger, entry) + modpol.orgs [org_id]["ledger"] = org_ledger + + end end modpol.store_data() -- Copy data to disk @@ -167,60 +185,63 @@ end -- with arbitrary properties modpol.add_org = function(org_name, members, parent_id, properties) - local str - if modpol.ocutil.str_empty (org_name) then - return false,"Error: Org needs a name" - end + local str - if parent_id and not modpol.orgs[parent_id] then - return false,"Error: Parent_id must be a valid existing org id" - end + if modpol.ocutil.str_empty (org_name) then + return false,"Error: Org needs a name" + end - if properties and not type(properties) == 'table' then - return false,"Error: Properties must be a table" - end - + if parent_id and not modpol.orgs[parent_id] then + return false,"Error: Parent_id must be a valid existing org id" + end - modpol.ocutil.log ("Attempting to add new org " .. org_name) - - if modpol.get_org_id_by_name(org_name) ~= nil then - str = "Error: Org " .. org_name .. " already exists" - modpol.ocutil.log (str) - return false,str - end + if properties and not type(properties) == 'table' then + return false,"Error: Properties must be a table" + end + - local org_id = modpol.id_counter - modpol.id_counter = modpol.id_counter + 1 + modpol.ocutil.log ("Attempting to add new org " .. org_name) + + if modpol.get_org_id_by_name(org_name) ~= nil then + str = "Error: Org " .. org_name .. " already exists" + modpol.ocutil.log (str) + return false,str + end + + -- assign a new id to the new org + local org_id = modpol.id_counter + modpol.id_counter = modpol.id_counter + 1 - -- the instance will have a parent of nil if it is the instance. - -- otherwise, it will have a parent of instance's id if not otherwise defined - local parent_org_id = nil - + -- the instance will have a parent of nil if it is the instance. + -- otherwise, it will have a parent of instance's id if not otherwise defined - if parent_id and not(modpol.get_org_id_by_name('instance') == org_id) then + local parent_org_id = nil + + local instance_id = modpol.get_org_id_by_name('instance') + + if parent_id and instance_id and not(instance_id == org_id) then parent_org_id = parent_id - end + end - if not parent_id and not(modpol.get_org_id_by_name('instance') == org_id) then - parent_org_id = modpol.get_org_id_by_name('instance') + if not parent_id and instance_id and not ( instance_id == org_id ) then + parent_org_id = modpol.get_org_id_by_name ( 'instance' ) end - local props = properties or {} - -- actually add the org - local org = modpol.org_temp + local org = modpol.org_temp() local default_policies = modpol.default_org_policies or {} org.id = org_id org.name = org_name -- do not change this without the proper api function. This is only a reference, not the only place this is recorded. org.members = members org.parent = parent_org_id - org.properties = props + org.properties = properites or org.properties org.policies = default_policies + org.children = {} modpol.orgs [org_id] = org @@ -350,6 +371,11 @@ modpol.list_orgs = function() return outbuf end + + + + + -- =================================================================== -- Function: modpol.reset_orgs -- Params: None