mirror of
https://github.com/ClaperCo/Claper.git
synced 2025-12-16 11:57:58 +01:00
29 lines
737 B
Elixir
29 lines
737 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])
|
|
headers = form.fields |> Enum.map(& &1.name)
|
|
csv_data = headers |> csv_content(form.form_submits |> Enum.map(& &1.response))
|
|
|
|
conn
|
|
|> put_resp_content_type("text/csv")
|
|
|> put_resp_header("content-disposition", "attachment; filename=\"#{form.title}.csv\"")
|
|
|> put_root_layout(false)
|
|
|> send_resp(200, csv_data)
|
|
end
|
|
|
|
defp csv_content(headers, records) do
|
|
data =
|
|
records
|
|
|> Enum.map(&(&1 |> Map.values()))
|
|
|
|
([headers] ++ data)
|
|
|> CSV.encode()
|
|
|> Enum.to_list()
|
|
|> to_string()
|
|
end
|
|
end
|