Editable info paragraphs.

This commit is contained in:
codevictory
2021-06-12 00:16:35 +03:00
parent b128fea663
commit 61a2792dbe
17 changed files with 450 additions and 19 deletions

View File

@@ -114,4 +114,113 @@ defmodule Runosaari.Pages do
def change_index(%Index{} = index, attrs \\ %{}) do
Index.changeset(index, attrs)
end
alias Runosaari.Pages.Info
@doc """
Returns the list of info_paragraphs.
## Examples
iex> list_info_paragraphs()
[%Info{}, ...]
"""
def list_info_paragraphs do
Repo.all(Info)
end
@doc """
Returns the list of info_paragraphs.
## Examples
iex> list_info_paragraphs()
[%Info{}, ...]
"""
def list_sorted_info_paragraphs do
Repo.all(Info |> order_by(:seqnum))
end
@doc """
Gets a single info.
Raises `Ecto.NoResultsError` if the Info does not exist.
## Examples
iex> get_info!(123)
%Info{}
iex> get_info!(456)
** (Ecto.NoResultsError)
"""
def get_info!(id), do: Repo.get!(Info, id)
@doc """
Creates a info.
## Examples
iex> create_info(%{field: value})
{:ok, %Info{}}
iex> create_info(%{field: bad_value})
{:error, %Ecto.Changeset{}}
"""
def create_info(attrs \\ %{}) do
%Info{}
|> Info.changeset(attrs)
|> Repo.insert()
end
@doc """
Updates a info.
## Examples
iex> update_info(info, %{field: new_value})
{:ok, %Info{}}
iex> update_info(info, %{field: bad_value})
{:error, %Ecto.Changeset{}}
"""
def update_info(%Info{} = info, attrs) do
info
|> Info.changeset(attrs)
|> Repo.update()
end
@doc """
Deletes a info.
## Examples
iex> delete_info(info)
{:ok, %Info{}}
iex> delete_info(info)
{:error, %Ecto.Changeset{}}
"""
def delete_info(%Info{} = info) do
Repo.delete(info)
end
@doc """
Returns an `%Ecto.Changeset{}` for tracking info changes.
## Examples
iex> change_info(info)
%Ecto.Changeset{data: %Info{}}
"""
def change_info(%Info{} = info, attrs \\ %{}) do
Info.changeset(info, attrs)
end
end

View File

@@ -0,0 +1,18 @@
defmodule Runosaari.Pages.Info do
use Ecto.Schema
import Ecto.Changeset
schema "info_paragraphs" do
field :content, :string
field :seqnum, :integer, default: 999
timestamps()
end
@doc false
def changeset(info, attrs) do
info
|> cast(attrs, [:content, :seqnum])
|> validate_required([:content, :seqnum])
end
end

View File

@@ -0,0 +1,67 @@
defmodule RunosaariWeb.InfoController do
use RunosaariWeb, :controller
alias Runosaari.Pages
alias Runosaari.Pages.Info
def index(conn, _params) do
info_paragraphs = Pages.list_sorted_info_paragraphs()
render(conn, "index.html", info_paragraphs: info_paragraphs)
end
def admin(conn, _params) do
info_paragraphs = Pages.list_info_paragraphs()
render(conn, "admin.html", info_paragraphs: info_paragraphs)
end
def new(conn, _params) do
changeset = Pages.change_info(%Info{})
render(conn, "new.html", changeset: changeset)
end
def create(conn, %{"info" => info_params}) do
case Pages.create_info(info_params) do
{:ok, info} ->
conn
|> put_flash(:info, "Info created successfully.")
|> redirect(to: Routes.admin_info_path(conn, :admin))
{:error, %Ecto.Changeset{} = changeset} ->
render(conn, "new.html", changeset: changeset)
end
end
def show(conn, %{"id" => id}) do
info = Pages.get_info!(id)
render(conn, "show.html", info: info)
end
def edit(conn, %{"id" => id}) do
info = Pages.get_info!(id)
changeset = Pages.change_info(info)
render(conn, "edit.html", info: info, changeset: changeset)
end
def update(conn, %{"id" => id, "info" => info_params}) do
info = Pages.get_info!(id)
case Pages.update_info(info, info_params) do
{:ok, info} ->
conn
|> put_flash(:info, "Info updated successfully.")
|> redirect(to: Routes.admin_info_path(conn, :show, info))
{:error, %Ecto.Changeset{} = changeset} ->
render(conn, "edit.html", info: info, changeset: changeset)
end
end
def delete(conn, %{"id" => id}) do
info = Pages.get_info!(id)
{:ok, _info} = Pages.delete_info(info)
conn
|> put_flash(:info, "Info deleted successfully.")
|> redirect(to: Routes.admin_info_path(conn, :admin))
end
end

View File

@@ -17,13 +17,13 @@ defmodule RunosaariWeb.Router do
pipe_through :browser
resources "/", IndexController, only: [:index]
get "/info", PageController, :info
get "/covid19", PageController, :covid19
get "/privacy", PageController, :privacy
resources "/performers", PerformerController, only: [:index, :show]
resources "/performances", PerformanceController, only: [:index]
resources "/visitors", VisitorController, only: [:new, :create]
get "/confirmation", VisitorController, :confirmation
resources "/info", InfoController, only: [:index]
end
scope "/admin", RunosaariWeb, as: :admin do
@@ -36,6 +36,8 @@ defmodule RunosaariWeb.Router do
resources "/performers", PerformerController, except: [:index, :show]
resources "/performances", PerformanceController, except: [:index]
resources "/visitors", VisitorController, except: [:new, :create]
resources "/info", InfoController, except: [:index]
get "/info", InfoController, :admin
end
# Other scopes may use custom stacks.

View File

@@ -1,5 +1,5 @@
<section class="main">
<h1>HALLINTA - Etusivu</h1>
<h1>HALLINTA - Etusivu<n kappaleet/h1>
<table>
<thead>
@@ -19,12 +19,12 @@
<td class="actions">
<span><%= link "Lisätietoja", to: Routes.admin_index_path(@conn, :show, index) %></span>
<span><%= link "Muokkaa", to: Routes.admin_index_path(@conn, :edit, index) %></span>
<span><%= link "Poista", to: Routes.admin_index_path(@conn, :delete, index), method: :delete, data: [confirm: "Are you sure?"] %></span>
<span><%= link "Poista", to: Routes.admin_index_path(@conn, :delete, index), method: :delete, data: [confirm: "Oletko varma?"] %></span>
</td>
</tr>
<% end %>
</tbody>
</table>
<span><%= link "Uusi Kappale", to: Routes.admin_index_path(@conn, :new) %></span>
<span><%= link "Uusi kappale", to: Routes.admin_index_path(@conn, :new) %></span>
</section>

View File

@@ -0,0 +1,30 @@
<section class="main">
<h1>HALLINTA - Infon kappaleet</h1>
<table>
<thead>
<tr>
<th>Sisältö</th>
<th>Prioriteetti</th>
<th></th>
</tr>
</thead>
<tbody>
<%= for info <- @info_paragraphs do %>
<tr>
<td><%= info.content %></td>
<td><%= info.seqnum %></td>
<td class="actions">
<span><%= link "Lisätietoja", to: Routes.admin_info_path(@conn, :show, info) %></span>
<span><%= link "Muokkaa", to: Routes.admin_info_path(@conn, :edit, info) %></span>
<span><%= link "Poista", to: Routes.admin_info_path(@conn, :delete, info), method: :delete, data: [confirm: "Oletko varma?"] %></span>
</td>
</tr>
<% end %>
</tbody>
</table>
<span><%= link "Uusi kappale", to: Routes.admin_info_path(@conn, :new) %></span>
</section>

View File

@@ -0,0 +1,5 @@
<h1>Muokkaa kappaletta</h1>
<%= render "form.html", Map.put(assigns, :action, Routes.admin_info_path(@conn, :update, @info)) %>
<span><%= link "Takaisin", to: Routes.admin_info_path(@conn, :admin) %></span>

View File

@@ -0,0 +1,19 @@
<%= form_for @changeset, @action, fn f -> %>
<%= if @changeset.action do %>
<div class="alert alert-danger">
<p>Jokin kentistä on tyhjä.</p>
</div>
<% end %>
<%= label f, :content, "Sisältö" %>
<%= text_input f, :content %>
<%= error_tag f, :content %>
<%= label f, :seqnum, "Prioritetti (1 on korkein)" %>
<%= number_input f, :seqnum %>
<%= error_tag f, :seqnum %>
<div>
<%= submit "Tallenna" %>
</div>
<% end %>

View File

@@ -9,18 +9,9 @@
Kirjan talo Bokens hus ry, Livonsaaren kyläyhdistys ry ja
Saaristohotelli Vaihela.
</p>
<p>
Tapahtuma tuo korkeatasoista kotimaista runoutta helposti
lähestyttävässä muodossa maaseudun uusille yleisöille, niin
paikallisille saaristolaisille kuin mökkiläisille, kutsuvieraille ja
kauempaa tulleillekin. Samalla se voimistaa paikallista
yhteisöllisyyttä ja taiteen tekemistä ja kokemista vaikeina
korona-aikoina.
</p>
<p>
Esitykset striimataan Suomeen ja mahdollisesti myös kansainvälisten
yhteistyökumppanien sivuille.
</p>
<%= for info <- @info_paragraphs do %>
<p><%= info.content %></p>
<% end %>
<p>
<b><i>Ota yhteyttä:</i></b> Inkeri Aula & Katariina Vuorinen,
<a class="generic-link" href="mailto:info@runosaari.net">info@runosaari.net</a>

View File

@@ -0,0 +1,5 @@
<h1>New Info</h1>
<%= render "form.html", Map.put(assigns, :action, Routes.admin_info_path(@conn, :create)) %>
<span><%= link "Back", to: Routes.admin_info_path(@conn, :admin) %></span>

View File

@@ -0,0 +1,20 @@
<section class="main">
<h1>Kappaleen tiedot</h1>
<ul>
<li>
<strong>Sisältö:</strong>
<%= @info.content %>
</li>
<li>
<strong>Prioriteetti:</strong>
<%= @info.seqnum %>
</li>
</ul>
<span><%= link "Muokkaa", to: Routes.admin_info_path(@conn, :edit, @info) %></span>
<span><%= link "Takaisin", to: Routes.admin_info_path(@conn, :admin) %></span>
</section>

View File

@@ -19,7 +19,7 @@
<%= link "Etusivu", to: Routes.index_path(@conn, :index) %>
<%= link "Ohjelma", to: Routes.performance_path(@conn, :index) %>
<%= link "Esiintyjät", to: Routes.performer_path(@conn, :index) %>
<%= link "Info", to: Routes.page_path(@conn, :info) %>
<%= link "Info", to: Routes.info_path(@conn, :index) %>
<%= link "Covid-19", to: Routes.page_path(@conn, :covid19) %>
<%= link "Ilmoittautuminen", to: Routes.visitor_path(@conn, :new) %>
</nav>
@@ -30,7 +30,7 @@
<%= link "Etusivu", to: "#{Routes.index_path(@conn, :index)}#logo-start" %>
<%= link "Ohjelma", to: "#{Routes.performance_path(@conn, :index)}#calendar-start" %>
<%= link "Esiintyjät", to: "#{Routes.performer_path(@conn, :index)}#performers-start" %>
<%= link "Info", to: "#{Routes.page_path(@conn, :info)}#contact-start" %>
<%= link "Info", to: "#{Routes.info_path(@conn, :index )}#contact-start" %>
<%= link "Covid-19", to: "#{Routes.page_path(@conn, :covid19)}#covid-start" %>
<%= link "Ilmoittautuminen", to: "#{Routes.visitor_path(@conn, :new)}#registration-start" %>
</nav>

View File

@@ -0,0 +1,3 @@
defmodule RunosaariWeb.InfoView do
use RunosaariWeb, :view
end