mirror of
https://github.com/ClaperCo/Claper.git
synced 2026-07-11 21:09:16 +02:00
commit 1ccd9e6be4da1b0f539e4c76b39d097de1b8798a Author: Alex <dev@alexandrelion.com> Date: Sun Feb 26 22:27:08 2023 +0100 Fix unit tests for forms commit b10d66be25b31028fb76c004852059bc1e2eb13a Author: Alex <dev@alexandrelion.com> Date: Sun Feb 26 15:35:55 2023 +0100 Finish form integration commit fce276497ddaba92f367ee9994b8ae11dabdb7ab Author: Alex <dev@alexandrelion.com> Date: Mon Feb 20 21:09:14 2023 +0100 Add form
29 lines
713 B
Elixir
29 lines
713 B
Elixir
defmodule ClaperWeb.StatController do
|
|
use ClaperWeb, :controller
|
|
|
|
alias Claper.Forms
|
|
|
|
def export(conn, %{"form_id" => form_id}) do
|
|
form = Forms.get_form!(form_id, [:form_submits])
|
|
csv_data = csv_content(form.form_submits |> Enum.map(& &1.response))
|
|
|
|
conn
|
|
|> put_resp_content_type("text/csv")
|
|
|> put_resp_header("content-disposition", "attachment; filename=\"export.csv\"")
|
|
|> put_root_layout(false)
|
|
|> send_resp(200, csv_data)
|
|
end
|
|
|
|
defp csv_content(records) do
|
|
records
|
|
|> Enum.map(fn record ->
|
|
record
|
|
|> Map.new(fn {k, v} -> {String.to_atom(k), v} end)
|
|
|> Map.values()
|
|
end)
|
|
|> CSV.encode()
|
|
|> Enum.to_list()
|
|
|> to_string()
|
|
end
|
|
end
|