Support showing individual result data
This commit is contained in:
parent
ab6d9674a3
commit
acbc3f70c6
|
@ -92,6 +92,11 @@ end
|
||||||
|
|
||||||
function results(survey::SurveyID; cache::Bool=true, format::Symbol=:DataFrame)
|
function results(survey::SurveyID; cache::Bool=true, format::Symbol=:DataFrame)
|
||||||
resids = responseids(survey; cache)
|
resids = responseids(survey; cache)
|
||||||
|
results(survey, resids; cache, format)
|
||||||
|
end
|
||||||
|
|
||||||
|
function results(survey::SurveyID, resids::Vector{ResponseID};
|
||||||
|
cache::Bool=true, format::Symbol=:DataFrame)
|
||||||
res = response.(survey, resids; cache)
|
res = response.(survey, resids; cache)
|
||||||
qids = keys(questions(survey; cache))
|
qids = keys(questions(survey; cache))
|
||||||
data = Dict(q => map(r -> r[q].value, res) for q in qids)
|
data = Dict(q => map(r -> r[q].value, res) for q in qids)
|
||||||
|
|
|
@ -33,6 +33,28 @@ function resultsfile(survey::SurveyID, format::AbstractString)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function resultsfile(survey::SurveyID, responseid::ResponseID, format::AbstractString)
|
||||||
|
@assert survey == Main.SurveysController.SURVEY.id
|
||||||
|
thesurvey = Main.SurveysController.SURVEY
|
||||||
|
response = Results.response(survey, responseid)
|
||||||
|
if format == "txt"
|
||||||
|
WebRenderable(sprint(show, thesurvey => response), :text) |>
|
||||||
|
Genie.Renderer.respond
|
||||||
|
elseif format == "org"
|
||||||
|
WebRenderable(sprint(show, MIME("text/org"), thesurvey => response), :text) |>
|
||||||
|
Genie.Renderer.respond
|
||||||
|
elseif format in ("csv", "tsv", "json")
|
||||||
|
WebRenderable(results(survey, [responseid], format=Symbol(format)),
|
||||||
|
if format == "json"; :json else :text end) |>
|
||||||
|
Genie.Renderer.respond
|
||||||
|
elseif format == "db" || format == "sqlite"
|
||||||
|
HTTP.Response(200, ["Content-Type" => "application/octet-stream"],
|
||||||
|
body = results(survey, [responseid], format=:sqlite))
|
||||||
|
else
|
||||||
|
error("format $format not recognised")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
function listsurveys()
|
function listsurveys()
|
||||||
WebRenderable(sprint(JSON3.pretty,
|
WebRenderable(sprint(JSON3.pretty,
|
||||||
[Dict(:id => id,
|
[Dict(:id => id,
|
||||||
|
|
35
routes.jl
35
routes.jl
|
@ -19,12 +19,33 @@ route("/submit-backpage", method=POST) do
|
||||||
SurveysController.submit(postpayload(), backpage=true)
|
SurveysController.submit(postpayload(), backpage=true)
|
||||||
end
|
end
|
||||||
|
|
||||||
route("/results(?:/(?:[A-Za-z0-9]+(?:\\.[a-z]+)?)?)?\$") do
|
route("/results/?") do; ResultsController.resultsindex() end
|
||||||
survey, format = match(r"([A-Za-z0-9]+)?(?:\.([a-z]+))?$", currenturl()).captures
|
|
||||||
surveyid = tryparse(UInt32, survey, base=10)
|
route("/results/:survey#([A-Za-z0-9]+)",
|
||||||
if !isnothing(format)
|
named = :surveyindex) do
|
||||||
ResultsController.resultsfile(surveyid, format)
|
surveyid = tryparse(SurveysController.SurveyID, payload(:survey), base=10)
|
||||||
else
|
ResultsController.resultsindex(surveyid)
|
||||||
ResultsController.resultsindex(surveyid)
|
end
|
||||||
|
|
||||||
|
route("/results/:survey#([A-Za-z0-9]+)\\.:format#([a-z]+)",
|
||||||
|
named = :surveyresult) do
|
||||||
|
surveyid = tryparse(SurveysController.SurveyID, payload(:survey), base=10)
|
||||||
|
ResultsController.resultsfile(surveyid, payload(:format))
|
||||||
|
end
|
||||||
|
|
||||||
|
route("/results/:survey#([A-Za-z0-9]+)/:responsefile#([A-Za-z0-9]+\\.[a-z]+)",
|
||||||
|
named = :result) do
|
||||||
|
surveyid = tryparse(SurveysController.SurveyID, payload(:survey), base=10)
|
||||||
|
response, format = split(payload(:responsefile), '.')
|
||||||
|
responseid = tryparse(SurveysController.ResponseID, response,
|
||||||
|
base=SurveysController.UID_ENCBASE)
|
||||||
|
try
|
||||||
|
ResultsController.resultsfile(surveyid, responseid, format)
|
||||||
|
catch e
|
||||||
|
if e isa MethodError || e isa AssertionError
|
||||||
|
Router.error(404, currenturl(), MIME"text/html")
|
||||||
|
else
|
||||||
|
rethrow(e)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue