defmodule PhilomenaWeb.Topic.PollController do use PhilomenaWeb, :controller alias Philomena.Forums.Forum alias Philomena.Polls alias Philomena.Repo plug :load_and_authorize_resource, model: Forum, id_name: "forum_id", id_field: "short_name", persisted: true plug PhilomenaWeb.LoadTopicPlug plug PhilomenaWeb.LoadPollPlug plug :verify_authorized plug :preload_options def edit(conn, _params) do changeset = Polls.change_poll(conn.assigns.poll) render(conn, "edit.html", title: "Editing Poll", changeset: changeset) end def update(conn, %{"poll" => poll_params}) do case Polls.update_poll(conn.assigns.poll, poll_params) do {:ok, _poll} -> conn |> put_flash(:info, "Poll successfully updated.") |> redirect(to: ~p"/forums/#{conn.assigns.forum}/topics/#{conn.assigns.topic}") {:error, changeset} -> render(conn, "edit.html", changeset: changeset) end end defp preload_options(conn, _opts) do poll = Repo.preload(conn.assigns.poll, :options) assign(conn, :poll, poll) end defp verify_authorized(conn, _opts) do case Canada.Can.can?(conn.assigns.current_user, :hide, conn.assigns.topic) do true -> conn _false -> PhilomenaWeb.NotAuthorizedPlug.call(conn) end end end