Initial commit
This commit is contained in:
124
lib/confient_web/controllers/assignment_controller.ex
Normal file
124
lib/confient_web/controllers/assignment_controller.ex
Normal file
@@ -0,0 +1,124 @@
|
||||
defmodule ConfientWeb.AssignmentController do
|
||||
use ConfientWeb, :controller
|
||||
|
||||
require Logger
|
||||
|
||||
import Phoenix.HTML
|
||||
|
||||
alias Confient.Works
|
||||
alias Confient.Works.Assignment
|
||||
|
||||
def index(conn, _params) do
|
||||
assignments = Works.list_assignments()
|
||||
render(conn, "index.html", assignments: assignments)
|
||||
end
|
||||
|
||||
def new(conn, _params) do
|
||||
changeset = Works.change_assignment(%Assignment{})
|
||||
classes = Confient.School.list_classes() |> Enum.map(&{&1.name, &1.id})
|
||||
|
||||
render(conn, "new.html", changeset: changeset, classes: classes)
|
||||
end
|
||||
|
||||
def create(conn, %{"assignment" => assignment_params}) do
|
||||
IO.inspect(assignment_params)
|
||||
|
||||
case Works.create_assignment(assignment_params) do
|
||||
{:ok, assignment} ->
|
||||
conn
|
||||
|> put_flash(:info, "Devoir créé avec succès.")
|
||||
|> redirect(to: Routes.assignment_path(conn, :show, assignment))
|
||||
|
||||
{:error, %Ecto.Changeset{} = changeset} ->
|
||||
classes = Confient.School.list_classes() |> Enum.map(&{&1.name, &1.id})
|
||||
render(conn, "new.html", changeset: changeset, classes: classes)
|
||||
end
|
||||
end
|
||||
|
||||
def show(conn, %{"id" => id}) do
|
||||
assignment = Works.get_full_assignment!(id)
|
||||
missing = Works.get_missing_works_from_student_in_assignement(id, assignment.class_id)
|
||||
render(conn, "show.html", assignment: assignment, missing: missing)
|
||||
end
|
||||
|
||||
def edit(conn, %{"id" => id}) do
|
||||
classes = Confient.School.list_classes() |> Enum.map(&{&1.name, &1.id})
|
||||
assignment = Works.get_assignment!(id)
|
||||
changeset = Works.change_assignment(assignment)
|
||||
render(conn, "edit.html", assignment: assignment, changeset: changeset, classes: classes)
|
||||
end
|
||||
|
||||
def update(conn, %{"id" => id, "assignment" => assignment_params}) do
|
||||
assignment = Works.get_assignment!(id)
|
||||
|
||||
case Works.update_assignment(assignment, assignment_params) do
|
||||
{:ok, assignment} ->
|
||||
conn
|
||||
|> put_flash(:info, "Devoir mis à jour avec succès.")
|
||||
|> redirect(to: Routes.assignment_path(conn, :show, assignment))
|
||||
|
||||
{:error, %Ecto.Changeset{} = changeset} ->
|
||||
render(conn, "edit.html", assignment: assignment, changeset: changeset)
|
||||
end
|
||||
end
|
||||
|
||||
def delete(conn, %{"id" => id}) do
|
||||
assignment = Works.get_assignment!(id)
|
||||
{:ok, _assignment} = Works.delete_assignment(assignment)
|
||||
|
||||
File.rm_rf(Confient.Deposit.get_upload_dir(assignment.class.name, assignment.slug))
|
||||
|
||||
conn
|
||||
|> put_flash(:info, "Devoir supprimé avec succès.")
|
||||
|> redirect(to: Routes.assignment_path(conn, :index))
|
||||
end
|
||||
|
||||
def archive(conn, %{"id" => assignment_id}) do
|
||||
case Works.get_full_assignment!(assignment_id) do
|
||||
nil ->
|
||||
conn |> put_flash(:error, "Devoir inexistant") |> redirect(to: "/")
|
||||
|
||||
assignment ->
|
||||
base = Application.get_env(:confiant, :base_upload_dir, "/tmp/confient/uploads")
|
||||
|
||||
files =
|
||||
Enum.map(assignment.students_works, fn v -> v.path end)
|
||||
|> Enum.map(&String.to_charlist/1)
|
||||
|
||||
archive_name = "#{assignment.class.name}_#{assignment.slug}.zip"
|
||||
archive_sub = "#{assignment.class.name}/#{assignment.slug}"
|
||||
archive_path = "#{base}/#{archive_sub}/#{archive_name}"
|
||||
|
||||
case :zip.create(
|
||||
String.to_charlist(archive_path),
|
||||
files,
|
||||
[{:cwd, "#{base}/#{archive_sub}"}]
|
||||
) do
|
||||
{:ok, _fname} ->
|
||||
conn
|
||||
|> put_flash(
|
||||
:info,
|
||||
raw(
|
||||
"Archive créé est disponible <a href=#{
|
||||
Path.join([
|
||||
Application.fetch_env!(:confient, :domain),
|
||||
"uploads",
|
||||
assignment.class.name,
|
||||
assignment.slug,
|
||||
archive_name
|
||||
])
|
||||
}>#{archive_name}</href>"
|
||||
)
|
||||
)
|
||||
|> redirect(to: Routes.assignment_path(conn, :show, assignment))
|
||||
|
||||
{:error, reason} ->
|
||||
Logger.error(reason)
|
||||
|
||||
conn
|
||||
|> put_flash(:error, "Error lors de la création de l'archive")
|
||||
|> redirect(to: Routes.assignment_path(conn, :show, assignment))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user