bugfix orgs
This commit is contained in:
		| @@ -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 | ||||
|  | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user