Add contact form

Stores data in contact.msg, each message having its own sub-table. This table is prooven to have been written and read properly accross restarts of the game.
master
octacian 2017-02-20 16:58:14 -08:00
parent 849d213303
commit 08792469e3
5 changed files with 99 additions and 2 deletions

View File

@ -11,7 +11,7 @@ An admin/moderator can be assigned to each case, as all with the `contact` privi
Not all of the features mentioned above are done, so here's what is and what isn't. Not all of the features mentioned above are done, so here's what is and what isn't.
- [ ] Admin Dashboard - [ ] Admin Dashboard
- [ ] Contact - [x] Contact
- [ ] Conversations - [ ] Conversations
- [ ] Report - [ ] Report
- [ ] Lock/Hide - [ ] Lock/Hide

13
api.md
View File

@ -19,3 +19,16 @@ Loads everything stored in the contact world-files to the global `contact` table
__Usage:__ `contact.save()` __Usage:__ `contact.save()`
Gathers specific data from the global `contact` table and saves it in `<worldname>/mod_contact.txt`. __Note:__ this is automatically called at shutdown and whenever specific actions take place. Gathers specific data from the global `contact` table and saves it in `<worldname>/mod_contact.txt`. __Note:__ this is automatically called at shutdown and whenever specific actions take place.
#### `toggle_main`
__Usage:__ `contact.toggle_main(<player name (string)>, <show/hide (boolean>, <error message (string)>, <form fields (table)>`
This allows an external mod to show the contact form to any specific player. By default, the formspec is shown when I player uses the `/contact` command. Only the `name` string is required, and should be the name of a player. The second parameter allows toggling between showing/updating the formspec or hiding it with `true`/`false` (default: `true`). The third parameter allows one to specify a message to show at the bottom, typically used for errors. The final parameter is used to pre-fill the form fields (see below for structure).
__Example:__
```lua
contact.toggle_main("singleplayer", true, "Warning!", {
subject = "Test",
msg = "Hello World!",
})
```

77
contact.lua Normal file
View File

@ -0,0 +1,77 @@
-- contact/contact.lua
-- Formspec
local function formspec(error, fields)
local error = error or ""
local fields = fields or {}
local e = minetest.formspec_escape
fields.subject = fields.subject or ""
fields.msg = fields.msg or ""
return [[
size[9,8.9]
]]..contact.gui_bg..[[
field[0.5,0.7;7.5,1;subject;Message Subject;]]..e(fields.subject)..[[]
button_exit[7.7,0.38;1,1;exit;X]
tooltip[exit;Discard Message and Close]
textarea[0.5,1.6;8.5,7.1;msg;Message;]]..e(fields.msg)..[[]
button[0.21,8;8.5,1;send;Send Message]
label[0.25,8.8;]]..e(error)..[[]
]]
end
-- [function] Toggle Contact Formspec
function contact.toggle_main(name, show, error, fields)
if not minetest.get_player_by_name(name) then
return
end
if show ~= false then
minetest.show_formspec(name, "contact:main", formspec(error, fields))
else
minetest.close_formspec(name, "contact:main")
end
end
-- [event] Handle Form Input
minetest.register_on_player_receive_fields(function(player, formname, fields)
if formname ~= "contact:main" then return end -- Check formname
local name = player:get_player_name()
if fields.send then
-- Check for missing fields
if not fields.subject or fields.subject == "" then
contact.toggle_main(name, true, "Subject Required", fields)
elseif not fields.msg or fields.msg == "" then
contact.toggle_main(name, true, "Message Required", fields)
else -- else, Send message
local msgdata = {
from = name,
subject = fields.subject,
msg = fields.msg,
}
-- Insert Data
table.insert(contact.msg, msgdata)
-- Close form
contact.toggle_main(name, false)
-- Print to chat
minetest.chat_send_player(name, "Message sent!")
end
end
end)
-- [register] Main Chatcommand
minetest.register_chatcommand("contact", {
description = "Contact an admin",
func = function(name)
-- Show formspec
contact.toggle_main(name, true)
return true, "Opening Contact Form"
end,
})
contact.log("Loaded Contact Functionality", "info")

View File

@ -4,6 +4,9 @@ contact = {}
local modpath = minetest.get_modpath("contact") local modpath = minetest.get_modpath("contact")
local worldpath = minetest.get_worldpath() local worldpath = minetest.get_worldpath()
-- Formspec GUI related stuff
contact.gui_bg = "bgcolor[#080808BB;true]background[5,5;1,1;gui_formbg.png;true]"
-- [function] Logger -- [function] Logger
function contact.log(content, log_type) function contact.log(content, log_type)
assert(content, "contact.log: content nil") assert(content, "contact.log: content nil")
@ -46,3 +49,7 @@ minetest.register_on_shutdown(contact.save)
-- Load on start -- Load on start
contact.load() contact.load()
-- Load Resources
dofile(modpath.."/contact.lua") -- Contact Functionality

BIN
textures/gui_formbg.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 971 B