Added minetest modules and am stuck on interactions and module flow
This commit is contained in:
		| @@ -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) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user