123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- == 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
|