137 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			137 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| == Dev note ===
 | |
| *note, see doc ledgers for info about org ledgers.
 | |
| they are *not* just a message in a table anymore... they have a timestamp and more.
 | |
| ===============
 | |
| 
 | |
| 
 | |
| Orgs are stored in modpol.orgs by the key 'org_id', a unique integer
 | |
| 
 | |
| Old ledgers of deleted orgs are stored in modpol.old_ledgers, 
 | |
| if preserve records is enabled
 | |
| 
 | |
| An org is a table with the following properties:
 | |
| 
 | |
| {
 | |
|    name = '', -- a unique name... 
 | |
|         this is a reference to the key used to store the org table. Changing this does not change the org name. 
 | |
|    policies = {}, -- a table to store the org's policies
 | |
|    members = {}, -- a table that contains the member names 
 | |
|         or the org, in no particular order (TKTK: maybe change it so that members have a name:properties table?)
 | |
|    ledger = {}, -- a table of ledger entries. See the ledger docs
 | |
|    parent = nil, -- the name of the org that spawned this org.
 | |
|         removing a parent org removes its children
 | |
|    children = {}, -- a table of strings of org names of child orgs
 | |
|    properties = { -- good for modules to store arbitrary info about the org here.
 | |
|       
 | |
|    },
 | |
| 
 | |
| }
 | |
| 
 | |
| 
 | |
| API functions for orgs
 | |
| ======================
 | |
| 
 | |
| a local variable setting 'preserve_records' determines whether 
 | |
| to store old ledgers when an org is deleted. It is set to true. 
 | |
| It would be possible to extend this to a settings file later.
 | |
| 
 | |
| --==oo888888888888888888888888888888oo==--
 | |
| Function: modpol.record(org_id, msg, type)
 | |
| -- Params: strings msg, type, org_id (number)
 | |
| -- Outputs:
 | |
| -- "msg" specifies an event and/or status message.
 | |
| -- "org" specifies an "org" name.
 | |
| -- "type" -- optional type of legder entry. Could be e.g. 'election_result', 'add_member', etc
 | |
| 
 | |
| 
 | |
| -- This  function adds  the message to a  global ledger  and, if "org"
 | |
| -- specifies a valid "org", to an "org"-specific ledger. Both the mem-
 | |
| -- ory-resident and on-disk copies of the data structures used are up-
 | |
| -- dated.
 | |
| -- the type input is used to be able to search ledgers for specific events
 | |
| 
 | |
| --==oo888888888888888888888888888888oo==--
 | |
| 
 | |
| Function: modpol.add_org(org_id, members, parent, properties)
 | |
| -- Params:   org)id (number), table members, string parent, table properties
 | |
| -- Parent must be an existing org, defaults to 'instance', properties 
 | |
| -- are arbitrary properties to initialize the org with
 | |
| 
 | |
| -- Output:
 | |
| -- This function creates an "org".  It returns a boolean success indicator and
 | |
| -- either an error message starting with "Error:" or a success message.
 | |
| --
 | |
| --
 | |
| -- The string parameter specifies the "org" name.
 | |
| --
 | |
| -- The members table should  be an  integer-indexed array of member
 | |
| -- names.
 | |
| 
 | |
| -- parent should be nil or a valid existing org name. If nil, defaults to 
 | |
| -- 'instance'
 | |
| 
 | |
| -- properties defaults to an empty table. Use it to initialize the org 
 | |
| -- with arbitrary properties
 | |
| 
 | |
| --==oo888888888888888888888888888888oo==--
 | |
| 
 | |
| -- Function: modpol.remove_org(org_id, reason)
 | |
| -- Params:   org_id (number), opt string reason
 | |
| -- Output:
 | |
| --
 | |
| -- This function removes an "org".  It returns a boolean
 | |
| -- success indicator and either an error message
 | |
| -- starting with "Error:" or a success message. It also recursively 
 | |
| -- removes all child orgs, with 'remove parent org' as reason. If 
 | |
| -- preserve_records is enabled, it logs the removal in the org ledger,
 | |
| -- and stores the ledger in modpol.old_legders
 | |
| --
 | |
| -- The string parameter specifies the "org" name.
 | |
| --
 | |
| -- The reason is an optional string to additionally include in the 
 | |
| -- log as reason for removal
 | |
| 
 | |
| --==oo888888888888888888888888888888oo==--
 | |
| 
 | |
| Function: modpol.list_orgs()
 | |
| -- Params:   None
 | |
| -- Output:
 | |
| -- This function returns a text-format list of "orgs".  The list shows
 | |
| -- one "org" per line in the following format:
 | |
| -- org_name (member, member, ...)
 | |
| -- If there are no "orgs", the output is an empty string.
 | |
| 
 | |
| --==oo888888888888888888888888888888oo==--
 | |
| 
 | |
| 
 | |
| Function: modpol.reset_orgs()
 | |
| -- Params:   None
 | |
| -- Removes all orgs and recreates blank org "instance" with all
 | |
| -- current users
 | |
| -- returns confirmation message
 | |
| -- if preserve_records is enabled, stores all org ledgers
 | |
| -- in modpol.old_ledgers
 | |
| 
 | |
| --==oo888888888888888888888888888888oo==--
 | |
| 
 | |
| Function: modpol.add_member(org_id, member)
 | |
| -- Params: org_id (number), member (string)
 | |
| -- Output:
 | |
| -- Adds the specified member to the specified org
 | |
| -- Returns a boolean success indicator and
 | |
| -- either a confirmation or error message
 | |
| 
 | |
| --==oo888888888888888888888888888888oo==--
 | |
| 
 | |
| Function: modpol.is_member
 | |
| -- Params: org (number), member (string)
 | |
| -- Output: boolean, or nil and error message if not applicable. (org nonexistent)
 | |
| 
 | |
| 
 | |
| --==oo888888888888888888888888888888oo==--
 | |
| 
 | |
| Function: modpol.remove_member
 | |
| -- Params: org (number), member (string)
 | |
| -- Output:
 | |
| -- Removes the specified member from the specified org
 | |
| -- Returns confirmation or error message |