diff --git a/mod.conf b/mod.conf index 0bc981d..5d32d27 100644 --- a/mod.conf +++ b/mod.conf @@ -1,7 +1,7 @@ name = modpol title = Modpol author = ntnsndr -description = Framework that enables diverse governance processes +description = A framework that enables diverse governance processes license = MIT forum = https://forum.minetest.net/viewtopic.php?f=9&t=27598 version = 0.1 diff --git a/modpol_core/api.lua b/modpol_core/api.lua index 87776d0..8e7ebd4 100644 --- a/modpol_core/api.lua +++ b/modpol_core/api.lua @@ -5,6 +5,7 @@ local localdir = modpol.topdir --orgs dofile (localdir .. "/orgs/base.lua") dofile (localdir .. "/orgs/process.lua") +dofile (localdir .. "/orgs/users.lua") --interactions dofile (localdir .. "/interactions/interactions.lua") diff --git a/modpol_core/interactions/interactions.lua b/modpol_core/interactions/interactions.lua index f3df03c..501dc11 100644 --- a/modpol_core/interactions/interactions.lua +++ b/modpol_core/interactions/interactions.lua @@ -37,8 +37,10 @@ function modpol.interactions.dashboard(user) local user_pending_count = 0 for k,v in ipairs(modpol.orgs.array) do if v.pending and v.pending[user] then - table.insert(user_pending, v.name) - user_pending_count = user_pending_count + 1 + if modpol.util.num_pairs(v.pending[user]) ~= 0 then + table.insert(user_pending, v.name) + user_pending_count = user_pending_count + 1 + end end end @@ -108,7 +110,7 @@ function modpol.interactions.org_dashboard(user, org_string) print("Org: " .. org.name) print("Parent: " .. parent) print("Members: " .. table.concat(org.members, ", ")) - print("Children: " .. table.concat(children, ", ")) + print("Child orgs: " .. table.concat(children, ", ")) print("Modules: " .. table.concat(modules, ", ")) print("Pending: " .. process_msg) print() diff --git a/modpol_core/modules/add_child_org_consent.lua b/modpol_core/modules/add_child_org_consent.lua index e323e19..c3ff403 100644 --- a/modpol_core/modules/add_child_org_consent.lua +++ b/modpol_core/modules/add_child_org_consent.lua @@ -66,7 +66,8 @@ function add_child_org_consent:create_child_org() modpol.interactions.message_org( self.initiator, self.org.name, - "Child org created: "..self.data.child_name) + "Consent reached: created child org " + ..self.data.child_name) if self.data.result then self.data.result() end self.org:delete_process(self.id) end diff --git a/modpol_core/modules/change_modules.lua b/modpol_core/modules/change_modules.lua index 7b15417..9e2fe14 100644 --- a/modpol_core/modules/change_modules.lua +++ b/modpol_core/modules/change_modules.lua @@ -83,7 +83,7 @@ function change_modules:remove_module() local available_modules = {} for k,org_mod in pairs(self.org.modules) do if not org_mod.hide then - available_modules[org_mod.slug] = modpol.copy_table(org_mod) + available_modules[org_mod.slug] = modpol.util.copy_table(org_mod) end end local modules_list = {} local modules_count = 0 diff --git a/modpol_core/modules/consent.lua b/modpol_core/modules/consent.lua index 78deca1..ce6b65f 100644 --- a/modpol_core/modules/consent.lua +++ b/modpol_core/modules/consent.lua @@ -2,9 +2,9 @@ -- A utility module for checking consent local consent = { - name = "Consent process utility", + name = "Consent process", slug = "consent", - desc = "A module other modules use for consent decisions", + desc = "A utility module other modules use for consent decisions", hide = true } diff --git a/modpol_core/orgs/base.lua b/modpol_core/orgs/base.lua index 850cce1..6cd2227 100644 --- a/modpol_core/orgs/base.lua +++ b/modpol_core/orgs/base.lua @@ -72,6 +72,8 @@ end -- =========================================== -- deletes all orgs except for the instance function modpol.orgs.reset() + local instance_members = + modpol.util.copy_table(modpol.instance.members) for id, org in ipairs(modpol.orgs.array) do if id > 1 then modpol.orgs.array[id] = "removed" @@ -80,9 +82,9 @@ function modpol.orgs.reset() modpol.orgs.array[1] = nil modpol.instance = modpol.orgs.init_instance() - + modpol.instance.members = instance_members - modpol.ocutil.log('Reset all orgs') + modpol.ocutil.log('All orgs reset') modpol.orgs:record('Resetting all orgs', 'org_reset') end diff --git a/modpol_core/orgs/users.lua b/modpol_core/orgs/users.lua new file mode 100644 index 0000000..da72524 --- /dev/null +++ b/modpol_core/orgs/users.lua @@ -0,0 +1,27 @@ +-- /users.lua +-- User-related functions for Modular Politics + +-- =================================================================== +-- Function: modpol.list_users +-- Params: org +-- Outputs: Table of user names +-- +-- This may be overwritten by the platform-specific interface + +modpol.list_users = function(org) + local users = {} + if (org == nil) then -- no specified org; all players + if modpol.orgs["instance"] + and modpol.orgs["instance"]["members"] then + -- if instance exists and has membership + users = modpol.orgs["instance"]["members"] + else + users = {} + end + else -- if an org is specified + if (modpol.orgs[org] ~= nil) then -- org exists + users = modpol.orgs[org]["members"] + end + end + return users +end diff --git a/modpol_core/util/misc.lua b/modpol_core/util/misc.lua index e213326..e6ca585 100644 --- a/modpol_core/util/misc.lua +++ b/modpol_core/util/misc.lua @@ -10,7 +10,8 @@ function modpol.util.copy_table(t) return t2 end ---- @function modpol.copy_table +--- @function modpol.num_pairs +-- @param t table with pairs -- Returns the number of elements in a pairs table function modpol.util.num_pairs(t) local i = 0 diff --git a/modpol_minetest/api.lua b/modpol_minetest/api.lua index d1ea9d4..21e9a59 100644 --- a/modpol_minetest/api.lua +++ b/modpol_minetest/api.lua @@ -9,6 +9,7 @@ local localdir = minetest.get_modpath("modpol") .. "/modpol_minetest" --overrides dofile (localdir .. "/overrides/interactions.lua") +dofile (localdir .. "/overrides/users.lua") --testing command for "singleplayer" function modpol.msg(text) diff --git a/modpol_minetest/chatcommands.lua b/modpol_minetest/chatcommands.lua index 103de31..34f204e 100644 --- a/modpol_minetest/chatcommands.lua +++ b/modpol_minetest/chatcommands.lua @@ -35,7 +35,6 @@ regchat( privs = {privs=true}, func = function(user) modpol.orgs.reset() - modpol.instance:add_member(user) modpol.interactions.dashboard(user) return true, "Reset orgs" end, diff --git a/modpol_minetest/overrides/interactions.lua b/modpol_minetest/overrides/interactions.lua index b71cf95..3b8d9b9 100644 --- a/modpol_minetest/overrides/interactions.lua +++ b/modpol_minetest/overrides/interactions.lua @@ -53,9 +53,10 @@ function modpol.interactions.dashboard(user) local user_pending_count = 0 for k,v in ipairs(modpol.orgs.array) do if v.pending and v.pending[user] then - modpol.msg(v.name) - table.insert(user_pending, v.name) - user_pending_count = user_pending_count + 1 + if modpol.util.num_pairs(v.pending[user]) ~= 0 then + table.insert(user_pending, v.name) + user_pending_count = user_pending_count + 1 + end end end @@ -169,7 +170,7 @@ function modpol.interactions.org_dashboard(user, org_string) "label[0.5,1;Parent: "..parent..membership_toggle(parent).."]", "label[0.5,2;Members:]", "dropdown[2,1.5;7,0.8;user_orgs;"..formspec_list(org.members)..";;]", - "label[0.5,3;Children:]", + "label[0.5,3;Child orgs:]", "dropdown[2,2.5;7,0.8;children;"..formspec_list(children)..";;]", "label[0.5,4;Modules:]", "dropdown[2,3.5;7,0.8;modules;"..formspec_list(modules)..";;]", diff --git a/modpol_minetest/overrides/users.lua b/modpol_minetest/overrides/users.lua new file mode 100644 index 0000000..3d25227 --- /dev/null +++ b/modpol_minetest/overrides/users.lua @@ -0,0 +1,20 @@ +-- =================================================================== +-- Function: modpol.list_users(org) +-- Overwrites function at /users.lua +-- Params: +-- if nil, lists instance members; if an org name, lists its members +-- Output: a table with names of players currently in the game +modpol.list_users = function(org) + local users = {} + if (org == nil) then -- no specified org; all players + for _,player in ipairs(minetest.get_connected_players()) do + local name = player:get_player_name() + table.insert(users,name) + end + else -- if an org is specified + if (modpol.orgs[org] ~= nil) then -- org exists + users = modpol.orgs[org]["members"] + end + end + return users + end