display tag/source change counters on image pages

This commit is contained in:
byte[] 2019-12-07 18:41:31 -05:00
parent 306c954546
commit c3f745ddee
6 changed files with 41 additions and 14 deletions

View file

@ -1,9 +1,12 @@
defmodule PhilomenaWeb.Image.SourceController do defmodule PhilomenaWeb.Image.SourceController do
use PhilomenaWeb, :controller use PhilomenaWeb, :controller
alias Philomena.SourceChanges.SourceChange
alias Philomena.UserStatistics alias Philomena.UserStatistics
alias Philomena.Images.Image alias Philomena.Images.Image
alias Philomena.Images alias Philomena.Images
alias Philomena.Repo
import Ecto.Query
plug PhilomenaWeb.FilterBannedUsersPlug plug PhilomenaWeb.FilterBannedUsersPlug
plug PhilomenaWeb.CaptchaPlug plug PhilomenaWeb.CaptchaPlug
@ -20,16 +23,21 @@ defmodule PhilomenaWeb.Image.SourceController do
changeset = changeset =
Images.change_image(image) Images.change_image(image)
source_change_count =
SourceChange
|> where(image_id: ^image.id)
|> Repo.aggregate(:count, :id)
UserStatistics.inc_stat(conn.assigns.current_user, :metadata_updates) UserStatistics.inc_stat(conn.assigns.current_user, :metadata_updates)
conn conn
|> put_view(PhilomenaWeb.ImageView) |> put_view(PhilomenaWeb.ImageView)
|> render("_source.html", layout: false, image: image, changeset: changeset) |> render("_source.html", layout: false, source_change_count: source_change_count, image: image, changeset: changeset)
{:error, :image, changeset, _} -> {:error, :image, changeset, _} ->
conn conn
|> put_view(PhilomenaWeb.ImageView) |> put_view(PhilomenaWeb.ImageView)
|> render("_source.html", layout: false, image: image, changeset: changeset) |> render("_source.html", layout: false, source_change_count: 0, image: image, changeset: changeset)
end end
end end
end end

View file

@ -1,11 +1,13 @@
defmodule PhilomenaWeb.Image.TagController do defmodule PhilomenaWeb.Image.TagController do
use PhilomenaWeb, :controller use PhilomenaWeb, :controller
alias Philomena.TagChanges.TagChange
alias Philomena.UserStatistics alias Philomena.UserStatistics
alias Philomena.Images.Image alias Philomena.Images.Image
alias Philomena.Images alias Philomena.Images
alias Philomena.Tags alias Philomena.Tags
alias Philomena.Repo alias Philomena.Repo
import Ecto.Query
plug PhilomenaWeb.FilterBannedUsersPlug plug PhilomenaWeb.FilterBannedUsersPlug
plug PhilomenaWeb.CaptchaPlug plug PhilomenaWeb.CaptchaPlug
@ -23,6 +25,11 @@ defmodule PhilomenaWeb.Image.TagController do
Tags.reindex_tags(added_tags ++ removed_tags) Tags.reindex_tags(added_tags ++ removed_tags)
UserStatistics.inc_stat(conn.assigns.current_user, :metadata_updates) UserStatistics.inc_stat(conn.assigns.current_user, :metadata_updates)
tag_change_count =
TagChange
|> where(image_id: ^image.id)
|> Repo.aggregate(:count, :id)
image = image =
image image
|> Repo.preload(:tags, force: true) |> Repo.preload(:tags, force: true)
@ -32,12 +39,12 @@ defmodule PhilomenaWeb.Image.TagController do
conn conn
|> put_view(PhilomenaWeb.ImageView) |> put_view(PhilomenaWeb.ImageView)
|> render("_tags.html", layout: false, image: image, changeset: changeset) |> render("_tags.html", layout: false, tag_change_count: tag_change_count, image: image, changeset: changeset)
{:error, :image, changeset, _} -> {:error, :image, changeset, _} ->
conn conn
|> put_view(PhilomenaWeb.ImageView) |> put_view(PhilomenaWeb.ImageView)
|> render("_tags.html", layout: false, image: image, changeset: changeset) |> render("_tags.html", layout: false, tag_change_count: 0, image: image, changeset: changeset)
end end
end end
end end

View file

@ -139,10 +139,13 @@ defmodule PhilomenaWeb.ImageController do
defp load_image(conn, _opts) do defp load_image(conn, _opts) do
id = conn.params["id"] id = conn.params["id"]
image = {image, tag_changes, source_changes} =
Image Image
|> where(id: ^id) |> where(id: ^id)
|> join(:inner_lateral, [i], _ in fragment("SELECT COUNT(*) FROM tag_changes t WHERE t.image_id = ?", i.id))
|> join(:inner_lateral, [i, _], _ in fragment("SELECT COUNT(*) FROM source_changes s WHERE s.image_id = ?", i.id))
|> preload([:tags, :deleter, user: [awards: :badge]]) |> preload([:tags, :deleter, user: [awards: :badge]])
|> select([i, t, s], {i, t.count, s.count})
|> Repo.one() |> Repo.one()
cond do cond do
@ -158,7 +161,10 @@ defmodule PhilomenaWeb.ImageController do
render(conn, "deleted.html", image: image) render(conn, "deleted.html", image: image)
true -> true ->
assign(conn, :image, image) conn
|> assign(:image, image)
|> assign(:tag_change_count, tag_changes)
|> assign(:source_change_count, source_changes)
end end
end end
end end

View file

@ -35,6 +35,9 @@
- else - else
em> not provided yet em> not provided yet
a.button.button--link.button--separate-left href=Routes.image_source_change_path(@conn, :index, @image) title="Source history" = if @source_change_count > 0 do
i.fa.fa-history> a.button.button--link.button--separate-left href=Routes.image_source_change_path(@conn, :index, @image) title="Source history"
' History i.fa.fa-history>
| History (
= @source_change_count
| )

View file

@ -55,8 +55,11 @@
i.fas.fa-edit> i.fas.fa-edit>
' Tags: ' Tags:
a.button.button--link.button--separate-left href=Routes.image_tag_change_path(@conn, :index, @image) title="Tag history" = if @tag_change_count > 0 do
i.fa.fa-history> a.button.button--link.button--separate-left href=Routes.image_tag_change_path(@conn, :index, @image) title="Tag history"
' History i.fa.fa-history>
| History (
= @tag_change_count
| )
= render PhilomenaWeb.TagView, "_tag_list.html", tags: display_order(@image.tags), conn: @conn = render PhilomenaWeb.TagView, "_tag_list.html", tags: display_order(@image.tags), conn: @conn

View file

@ -9,8 +9,8 @@
= render PhilomenaWeb.ImageView, "_description.html", image: @image, body: @description, conn: @conn = render PhilomenaWeb.ImageView, "_description.html", image: @image, body: @description, conn: @conn
= render PhilomenaWeb.Image.DescriptionView, "_form.html", image: @image, changeset: @image_changeset, conn: @conn = render PhilomenaWeb.Image.DescriptionView, "_form.html", image: @image, changeset: @image_changeset, conn: @conn
= render PhilomenaWeb.ImageView, "_tags.html", image: @image, changeset: @image_changeset, conn: @conn = render PhilomenaWeb.ImageView, "_tags.html", image: @image, tag_change_count: @tag_change_count, changeset: @image_changeset, conn: @conn
= render PhilomenaWeb.ImageView, "_source.html", image: @image, changeset: @image_changeset, conn: @conn = render PhilomenaWeb.ImageView, "_source.html", image: @image, source_change_count: @source_change_count, changeset: @image_changeset, conn: @conn
= render PhilomenaWeb.ImageView, "_options.html", image: @image, conn: @conn = render PhilomenaWeb.ImageView, "_options.html", image: @image, conn: @conn
h4 Comments h4 Comments