Added minetest modules and am stuck on interactions and module flow
This commit is contained in:
parent
51d5e404e9
commit
af6e639e27
@ -14,5 +14,6 @@ dofile (localdir .. "/interactions/interactions.lua")
|
|||||||
dofile (localdir .. "/modules/add_child_org.lua")
|
dofile (localdir .. "/modules/add_child_org.lua")
|
||||||
dofile (localdir .. "/modules/consent.lua")
|
dofile (localdir .. "/modules/consent.lua")
|
||||||
dofile (localdir .. "/modules/join_org_consent.lua")
|
dofile (localdir .. "/modules/join_org_consent.lua")
|
||||||
|
dofile (localdir .. "/modules/leave_org.lua")
|
||||||
dofile (localdir .. "/modules/remove_org_consent.lua")
|
dofile (localdir .. "/modules/remove_org_consent.lua")
|
||||||
dofile (localdir .. "/modules/remove_org.lua")
|
dofile (localdir .. "/modules/remove_org.lua")
|
||||||
|
@ -1,29 +1,62 @@
|
|||||||
--- @module add_child_org
|
--- @module add_child_org
|
||||||
-- Adds a child org
|
-- Adds a child org
|
||||||
|
-- Depends on `consent`
|
||||||
|
|
||||||
local add_child_org = {
|
local add_child_org = {
|
||||||
name = "Add child org",
|
name = "Add child org",
|
||||||
slug = "add_child_org",
|
slug = "add_child_org",
|
||||||
desc = "Create a child org within the current one"
|
desc = "Create a child org within the current one with consent"
|
||||||
}
|
}
|
||||||
add_child_org.data = {
|
add_child_org.data = {
|
||||||
|
child_name = ""
|
||||||
}
|
}
|
||||||
add_child_org.config = {
|
add_child_org.config = {
|
||||||
}
|
}
|
||||||
|
|
||||||
-- @function initiate
|
-- @function initiate
|
||||||
function add_child_org:initiate(result)
|
function add_child_org:initiate(config, result)
|
||||||
|
self.org:add_pending_action(
|
||||||
|
self.id, self.initiator,
|
||||||
|
"name_child_org")
|
||||||
|
end
|
||||||
|
|
||||||
|
function add_child_org:name_child_org()
|
||||||
modpol.interactions.text_query(
|
modpol.interactions.text_query(
|
||||||
self.initiator,"Child org name: ",
|
self.initiator,"Child org name: ",
|
||||||
function(input)
|
function(input)
|
||||||
self.org:add_org(input, self.initiator)
|
if input == "" then
|
||||||
modpol.interactions.message_org(
|
modpol.interactions.message(
|
||||||
self.initiator,
|
self.initiator,
|
||||||
self.org.id,
|
"No name entered for child org")
|
||||||
"Child org created: "..input)
|
self.org:wipe_pending_actions(self.id)
|
||||||
modpol.interactions.dashboard(self.initiator)
|
return end
|
||||||
end)
|
self.data.child_name = input
|
||||||
|
modpol.interactions.message(
|
||||||
|
self.initiator,
|
||||||
|
"Proposed child org: " .. input)
|
||||||
|
self.org:wipe_pending_actions(self.id)
|
||||||
|
self:propose_child_org()
|
||||||
|
end
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function add_child_org:propose_child_org()
|
||||||
|
self.org:call_module(
|
||||||
|
"consent",
|
||||||
|
self.initiator,
|
||||||
|
{
|
||||||
|
prompt = "Create child org " .. self.data.child_name .. "?",
|
||||||
|
votes_required = #self.org.members
|
||||||
|
},
|
||||||
|
function()
|
||||||
|
self.org:add_org(self.data.child_name, self.initiator)
|
||||||
|
modpol.interactions.message_org(
|
||||||
|
self.initiator,
|
||||||
|
self.org.id,
|
||||||
|
"Child org created: "..self.data.child_name)
|
||||||
|
end
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
--- (Required) Add to module table
|
--- (Required) Add to module table
|
||||||
modpol.modules.add_child_org = add_child_org
|
modpol.modules.add_child_org = add_child_org
|
||||||
|
@ -16,7 +16,7 @@ consent.config = {
|
|||||||
votes_required = 1
|
votes_required = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
function consent:initiate(result)
|
function consent:initiate(config, result)
|
||||||
self.result = result
|
self.result = result
|
||||||
-- if org is empty, consent is given automatically
|
-- if org is empty, consent is given automatically
|
||||||
if self.org:get_member_count() == 0 then
|
if self.org:get_member_count() == 0 then
|
||||||
@ -39,10 +39,10 @@ function consent:callback(member)
|
|||||||
if resp == "Yes" then
|
if resp == "Yes" then
|
||||||
self.data.votes = self.data.votes + 1
|
self.data.votes = self.data.votes + 1
|
||||||
end
|
end
|
||||||
|
|
||||||
if self.data.votes >= self.config.votes_required then
|
if self.data.votes >= self.config.votes_required then
|
||||||
if self.result then self.result() end
|
|
||||||
self.org:wipe_pending_actions(self.id)
|
self.org:wipe_pending_actions(self.id)
|
||||||
|
if self.result then self.result() end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
)
|
)
|
||||||
|
@ -0,0 +1,43 @@
|
|||||||
|
--- leave_org
|
||||||
|
-- @module leave_org
|
||||||
|
|
||||||
|
local leave_org = {
|
||||||
|
name = "Leave org",
|
||||||
|
slug = "leave_org",
|
||||||
|
desc = "Leave this org"
|
||||||
|
}
|
||||||
|
|
||||||
|
leave_org.data = {
|
||||||
|
}
|
||||||
|
|
||||||
|
leave_org.config = {
|
||||||
|
}
|
||||||
|
|
||||||
|
--- (Required): initiate function
|
||||||
|
-- Modules have access to the following instance variables:
|
||||||
|
-- <li><code>self.org</code> (the org the module was called in),</li>
|
||||||
|
-- <li><code>self.initiator</code> (the user that callced the module),</li>
|
||||||
|
-- <li><code>self.id</code> (the process id of the module instance)</li>
|
||||||
|
-- @param config (optional) If user wants to override fields in the config table
|
||||||
|
-- @param result (optional) Callback if this module is embedded in other modules
|
||||||
|
-- @function initiate
|
||||||
|
function leave_org:initiate(config, result)
|
||||||
|
if self.org == modpol.instance then
|
||||||
|
modpol.interactions.message(
|
||||||
|
self.initiator,
|
||||||
|
"You cannot leave the root org")
|
||||||
|
else
|
||||||
|
self.org:remove_member(self.initiator)
|
||||||
|
modpol.interactions.message_org(
|
||||||
|
self.initiator,self.org.id,
|
||||||
|
self.initiator .. " has left org " .. self.org.name)
|
||||||
|
modpol.interactions.message(
|
||||||
|
self.initiator,
|
||||||
|
"You have left org " .. self.org.name)
|
||||||
|
-- call result function
|
||||||
|
end
|
||||||
|
if result then result() end
|
||||||
|
end
|
||||||
|
|
||||||
|
--- (Required) Add to module table
|
||||||
|
modpol.modules.leave_org = leave_org
|
@ -15,12 +15,18 @@ remove_org.data = {}
|
|||||||
--- Initiate function
|
--- Initiate function
|
||||||
-- @function initiate
|
-- @function initiate
|
||||||
function remove_org:initiate(config, result)
|
function remove_org:initiate(config, result)
|
||||||
modpol.interactions.message_org(
|
if self.org == modpol.instance then
|
||||||
self.initiator,self.org.id,
|
modpol.interactions.message(
|
||||||
"Removing org: "..self.org.name)
|
self.initiator,
|
||||||
self.org:delete()
|
"You cannot remove the root org")
|
||||||
modpol.interactions.dashboard(self.initiator)
|
else
|
||||||
-- call result function
|
modpol.interactions.message_org(
|
||||||
|
self.initiator,self.org.id,
|
||||||
|
"Removing org: "..self.org.name)
|
||||||
|
self.org:delete()
|
||||||
|
modpol.interactions.dashboard(self.initiator)
|
||||||
|
-- call result function
|
||||||
|
end
|
||||||
if result then result() end
|
if result then result() end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -33,7 +33,6 @@ function remove_org_consent:complete()
|
|||||||
self.initiator, self.org.id,
|
self.initiator, self.org.id,
|
||||||
"Removing org: " .. self.org.name)
|
"Removing org: " .. self.org.name)
|
||||||
self.org:delete()
|
self.org:delete()
|
||||||
modpol.interactions.dashboard(self.initiator)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
modpol.modules.remove_org_consent = remove_org_consent
|
modpol.modules.remove_org_consent = remove_org_consent
|
||||||
|
@ -90,12 +90,9 @@ end
|
|||||||
|
|
||||||
function modpol.orgs:interact(process_id, user)
|
function modpol.orgs:interact(process_id, user)
|
||||||
local process = self.processes[process_id]
|
local process = self.processes[process_id]
|
||||||
modpol.interactions.message(user,"hi!")
|
|
||||||
if self.pending[user] then
|
if self.pending[user] then
|
||||||
modpol.interactions.message(user,"id: "..process_id)
|
|
||||||
local callback = self.pending[user][process_id]
|
local callback = self.pending[user][process_id]
|
||||||
if callback then
|
if callback then
|
||||||
modpol.interactions.message(user,"la!")
|
|
||||||
process[callback](process, user)
|
process[callback](process, user)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
49
modpol_minetest/modules/priv_to_org.lua
Normal file
49
modpol_minetest/modules/priv_to_org.lua
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
--- Set privilege to org members
|
||||||
|
-- @module priv_to_org
|
||||||
|
-- Allows initiator to grant a priv they have to all members of an org
|
||||||
|
|
||||||
|
local priv_to_org = {
|
||||||
|
name = "Set privilege to org members",
|
||||||
|
slug = "priv_to_org",
|
||||||
|
desc = "Allows initiator to grant a priv they have to all members of an org"
|
||||||
|
}
|
||||||
|
|
||||||
|
priv_to_org.data = {
|
||||||
|
}
|
||||||
|
|
||||||
|
priv_to_org.config = {
|
||||||
|
}
|
||||||
|
|
||||||
|
--- (Required): initiate function
|
||||||
|
-- Modules have access to the following instance variables:
|
||||||
|
-- <li><code>self.org</code> (the org the module was called in),</li>
|
||||||
|
-- <li><code>self.initiator</code> (the user that callced the module),</li>
|
||||||
|
-- <li><code>self.id</code> (the process id of the module instance)</li>
|
||||||
|
-- @param config (optional) If user wants to override fields in the config table
|
||||||
|
-- @param result (optional) Callback if this module is embedded in other modules
|
||||||
|
-- @function initiate
|
||||||
|
function priv_to_org:initiate(config, result)
|
||||||
|
local player_privs = minetest.get_player_privs(self.initiator)
|
||||||
|
for i,v in ipairs(player_privs) do
|
||||||
|
if not v then table.remove(player_privs,i) end
|
||||||
|
end
|
||||||
|
modpol.interactions.dropdown_query(
|
||||||
|
self.initiator,
|
||||||
|
"Which privilege do you want to share with members of "..self.org.name.."?",
|
||||||
|
player_privs,
|
||||||
|
function(input)
|
||||||
|
for member in self.org.members do
|
||||||
|
local member_privs = minetest.get_player_privs(member.name)
|
||||||
|
member_privs[input] = true
|
||||||
|
minetest.set_player_privs(member.name, member_privs)
|
||||||
|
end
|
||||||
|
local message = self.initiator .. " has set " .. input ..
|
||||||
|
" privilege to all members of " .. self.org.name
|
||||||
|
modpol.interactions.message_org(self.initiator,self.org.id, message)
|
||||||
|
end)
|
||||||
|
-- call result function
|
||||||
|
if result then result() end
|
||||||
|
end
|
||||||
|
|
||||||
|
--- (Required) Add to module table
|
||||||
|
modpol.modules.priv_to_org = priv_to_org
|
@ -176,6 +176,12 @@ minetest.register_on_player_receive_fields(function (player, formname, fields)
|
|||||||
if formname == "modpol:org_dashboard" then
|
if formname == "modpol:org_dashboard" then
|
||||||
local pname = player:get_player_name()
|
local pname = player:get_player_name()
|
||||||
local org = modpol.orgs.get_org(_contexts[pname].current_org)
|
local org = modpol.orgs.get_org(_contexts[pname].current_org)
|
||||||
|
-- just confirm the org still exists:
|
||||||
|
if not org then
|
||||||
|
modpol.interactions.message(pname, "Org no longer exists")
|
||||||
|
modpol.interactions.dashboard(pname)
|
||||||
|
return end
|
||||||
|
-- okay, onward
|
||||||
if nil then
|
if nil then
|
||||||
elseif fields.join then
|
elseif fields.join then
|
||||||
org:add_member(pname)
|
org:add_member(pname)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user