your-land/yl_survey#2 Implements get_response

This commit is contained in:
AliasAlreadyTaken 2024-09-22 16:59:02 +02:00
parent f78220c7f2
commit 61b8048148
2 changed files with 59 additions and 1 deletions

View File

@ -149,6 +149,18 @@ yl_survey.get_question(s_id, q_id, include_responses, playername)
Returns `true, {question}` if successful, `false, "errormessage"` if not.
```
yl_survey.get_response(s_id, q_id, playername, include_question, include_freetext)
```
* s_id: string, required. This is the survey/UUID the question is added to.
* q_id: number, required.
* playername: string, required.
* include_question: boolean, optional, defaults to `false`. If `true`, the question to that response is included.
* include_freetext: boolean, optional, defaults to `false`. If `true`, the freetext of that response is included.
Returns `true, {response}` if successful, `false, "errormessage"` if not. May be `{}`, if the player did not yet respond to that question.
```
yl_survey.answer_question(s_id, q_id, playername, {responses}, overwrite)
```
@ -171,7 +183,7 @@ Creates a book of the answers of the survey and places it in the player's invent
yl_survey.validate_questions(s_id)
```
Returns `true, number` if successfully validated `number` amount of questions, `false, "errormessage"` if teh validation was not successful.
Returns `true, number` if successfully validated `number` amount of questions, `false, "errormessage"` if the validation was not successful.
## Limitations

46
api.lua
View File

@ -751,3 +751,49 @@ end
function yl_survey.get_question(s_id, q_id, include_responses, playername)
return get_question(s_id, q_id, include_responses, playername)
end
-- get_response
--
local function get_response(id, q_id, playername, include_question, include_freetext)
-- Defense
if (validate(id, "string", false) == false) then
return false, yl_survey.t("id must be string")
end
if (validate(q_id, "number", false) == false) then
return false, yl_survey.t("q_id must be number")
end
if (q_id <= 0) then return false, "q_id must be positive number" end
if (validate(playername, "string", false) == false) then
return false, yl_survey.t("playername must be string")
end
if (validate(include_question, "boolean", true) == false) then
return false, yl_survey.t("include_question must be boolean")
end
if (validate(include_freetext, "boolean", true) == false) then
return false, yl_survey.t("include_freetext must be boolean")
end
local record = yl_survey.get_record(id)
if (record == nil) then
return false, yl_survey.t("record does not exist")
end
-- Payload
local question = record[tostring(q_id)] or {}
local response = question["responses"] and question["responses"][playername] or {}
if (include_question ~= true) then response["q"] = nil end
if (include_freetext ~= true) then response["0"] = nil end
if (next(question) ~= nil) then
return true, response
else
return false, yl_survey.t("question does not exist")
end
end
function yl_survey.get_response(s_id, q_id, playername, include_question)
return get_response(s_id, q_id, playername, include_question)
end