From 015abf068b1395a72c1b0541b25387bee5f81afb Mon Sep 17 00:00:00 2001 From: "byte[]" Date: Wed, 4 Dec 2019 17:10:35 -0500 Subject: [PATCH] add tag changes to tag, profile --- lib/philomena/tags/tag.ex | 2 ++ .../profile/tag_change_controller.ex | 34 +++++++++++++++++++ .../controllers/tag/tag_change_controller.ex | 32 +++++++++++++++++ lib/philomena_web/router.ex | 5 ++- .../templates/profile/show.html.slime | 2 +- .../profile/tag_change/index.html.slime | 18 ++++++++++ .../templates/tag/_tag_info_row.html.slime | 1 + .../templates/tag/tag_change/index.html.slime | 18 ++++++++++ .../views/profile/tag_change_view.ex | 3 ++ .../views/tag/tag_change_view.ex | 3 ++ 10 files changed, 116 insertions(+), 2 deletions(-) create mode 100644 lib/philomena_web/controllers/profile/tag_change_controller.ex create mode 100644 lib/philomena_web/controllers/tag/tag_change_controller.ex create mode 100644 lib/philomena_web/templates/profile/tag_change/index.html.slime create mode 100644 lib/philomena_web/templates/tag/tag_change/index.html.slime create mode 100644 lib/philomena_web/views/profile/tag_change_view.ex create mode 100644 lib/philomena_web/views/tag/tag_change_view.ex diff --git a/lib/philomena/tags/tag.ex b/lib/philomena/tags/tag.ex index e3187fb2..c20d8342 100644 --- a/lib/philomena/tags/tag.ex +++ b/lib/philomena/tags/tag.ex @@ -45,6 +45,8 @@ defmodule Philomena.Tags.Tag do "video" => "content-fanmade" } + @derive {Phoenix.Param, key: :slug} + schema "tags" do belongs_to :aliased_tag, Tag, source: :aliased_tag_id has_many :aliases, Tag, foreign_key: :aliased_tag_id diff --git a/lib/philomena_web/controllers/profile/tag_change_controller.ex b/lib/philomena_web/controllers/profile/tag_change_controller.ex new file mode 100644 index 00000000..fcc61428 --- /dev/null +++ b/lib/philomena_web/controllers/profile/tag_change_controller.ex @@ -0,0 +1,34 @@ +defmodule PhilomenaWeb.Profile.TagChangeController do + use PhilomenaWeb, :controller + + alias Philomena.Users.User + alias Philomena.Images.Image + alias Philomena.TagChanges.TagChange + alias Philomena.Repo + import Ecto.Query + + plug PhilomenaWeb.CanaryMapPlug, index: :show + plug :load_resource, model: User, id_name: "profile_id", id_field: "slug", persisted: true + + def index(conn, params) do + user = conn.assigns.user + + tag_changes = + TagChange + |> join(:inner, [tc], i in Image, on: tc.image_id == i.id) + |> where([tc, i], tc.user_id == ^user.id and not (i.user_id == ^user.id and i.anonymous == true)) + |> added_filter(params) + |> preload([:tag, :user, image: [:user, :tags]]) + |> order_by(desc: :created_at) + |> Repo.paginate(conn.assigns.scrivener) + + render(conn, "index.html", user: user, tag_changes: tag_changes) + end + + defp added_filter(query, %{"added" => "1"}), + do: where(query, added: true) + defp added_filter(query, %{"added" => "0"}), + do: where(query, added: false) + defp added_filter(query, _params), + do: query +end \ No newline at end of file diff --git a/lib/philomena_web/controllers/tag/tag_change_controller.ex b/lib/philomena_web/controllers/tag/tag_change_controller.ex new file mode 100644 index 00000000..1850f1b3 --- /dev/null +++ b/lib/philomena_web/controllers/tag/tag_change_controller.ex @@ -0,0 +1,32 @@ +defmodule PhilomenaWeb.Tag.TagChangeController do + use PhilomenaWeb, :controller + + alias Philomena.Tags.Tag + alias Philomena.TagChanges.TagChange + alias Philomena.Repo + import Ecto.Query + + plug PhilomenaWeb.CanaryMapPlug, index: :show + plug :load_resource, model: Tag, id_name: "tag_id", id_field: "slug", persisted: true + + def index(conn, params) do + tag = conn.assigns.tag + + tag_changes = + TagChange + |> where(tag_id: ^tag.id) + |> added_filter(params) + |> preload([:tag, :user, image: [:user, :tags]]) + |> order_by(desc: :created_at) + |> Repo.paginate(conn.assigns.scrivener) + + render(conn, "index.html", tag: tag, tag_changes: tag_changes) + end + + defp added_filter(query, %{"added" => "1"}), + do: where(query, added: true) + defp added_filter(query, %{"added" => "0"}), + do: where(query, added: false) + defp added_filter(query, _params), + do: query +end \ No newline at end of file diff --git a/lib/philomena_web/router.ex b/lib/philomena_web/router.ex index 4dd08e10..48c64554 100644 --- a/lib/philomena_web/router.ex +++ b/lib/philomena_web/router.ex @@ -155,7 +155,9 @@ defmodule PhilomenaWeb.Router do resources "/autocomplete", AutocompleteController, only: [:show], singleton: true resources "/fetch", FetchController, only: [:index] end - resources "/tags", TagController, only: [:index, :show] + resources "/tags", TagController, only: [:index, :show] do + resources "/tag_changes", Tag.TagChangeController, only: [:index] + end scope "/search", Search, as: :search do resources "/reverse", ReverseController, only: [:index, :create] end @@ -176,6 +178,7 @@ defmodule PhilomenaWeb.Router do resources "/profiles", ProfileController, only: [:show] do resources "/reports", Profile.ReportController, only: [:new, :create] resources "/commission", Profile.CommissionController, only: [:show], singleton: true + resources "/tag_changes", Profile.TagChangeController, only: [:index] end resources "/captchas", CaptchaController, only: [:create] scope "/posts", Post, as: :post do diff --git a/lib/philomena_web/templates/profile/show.html.slime b/lib/philomena_web/templates/profile/show.html.slime index b6f9ed21..f9380cb3 100644 --- a/lib/philomena_web/templates/profile/show.html.slime +++ b/lib/philomena_web/templates/profile/show.html.slime @@ -23,7 +23,7 @@ ul.profile-top__options__column li = link("Favorites", to: Routes.search_path(@conn, :index, q: "faved_by_id:#{@user.id}")) - li = link("Tag changes", to: "#") + li = link("Tag changes", to: Routes.profile_tag_change_path(@conn, :index, @user)) li = link("Source changes", to: "#") .column-layout diff --git a/lib/philomena_web/templates/profile/tag_change/index.html.slime b/lib/philomena_web/templates/profile/tag_change/index.html.slime new file mode 100644 index 00000000..c1ac7e14 --- /dev/null +++ b/lib/philomena_web/templates/profile/tag_change/index.html.slime @@ -0,0 +1,18 @@ +h1 + ' Tag changes by + a href=Routes.profile_path(@conn, :show, @user) + = @user.name + +- route = fn p -> Routes.profile_tag_change_path(@conn, :index, @user, p) end +- pagination = render PhilomenaWeb.PaginationView, "_pagination.html", page: @tag_changes, route: route, conn: @conn + +.block + .block__header + span.block__header_title + | Display only: + + = link "Removed", to: Routes.profile_tag_change_path(@conn, :index, @user, added: 0) + = link "Added", to: Routes.profile_tag_change_path(@conn, :index, @user, added: 1) + = link "All", to: Routes.profile_tag_change_path(@conn, :index, @user) + + = render PhilomenaWeb.TagChangeView, "index.html", conn: @conn, tag_changes: @tag_changes, pagination: pagination \ No newline at end of file diff --git a/lib/philomena_web/templates/tag/_tag_info_row.html.slime b/lib/philomena_web/templates/tag/_tag_info_row.html.slime index e89ba934..100c7675 100644 --- a/lib/philomena_web/templates/tag/_tag_info_row.html.slime +++ b/lib/philomena_web/templates/tag/_tag_info_row.html.slime @@ -7,6 +7,7 @@ .flex__grow = render PhilomenaWeb.TagView, "_tag.html", tag: @tag + = link "Tag changes", to: Routes.tag_tag_change_path(@conn, :index, @tag), class: "detail-link" br = if @tag.short_description not in [nil, ""] do diff --git a/lib/philomena_web/templates/tag/tag_change/index.html.slime b/lib/philomena_web/templates/tag/tag_change/index.html.slime new file mode 100644 index 00000000..2b4d8f62 --- /dev/null +++ b/lib/philomena_web/templates/tag/tag_change/index.html.slime @@ -0,0 +1,18 @@ +h1 + ' Tag changes on tag + a href=Routes.tag_path(@conn, :show, @tag) + = @tag.name + +- route = fn p -> Routes.tag_tag_change_path(@conn, :index, @tag, p) end +- pagination = render PhilomenaWeb.PaginationView, "_pagination.html", page: @tag_changes, route: route, conn: @conn + +.block + .block__header + span.block__header_title + | Display only: + + = link "Removed", to: Routes.tag_tag_change_path(@conn, :index, @tag, added: 0) + = link "Added", to: Routes.tag_tag_change_path(@conn, :index, @tag, added: 1) + = link "All", to: Routes.tag_tag_change_path(@conn, :index, @tag) + + = render PhilomenaWeb.TagChangeView, "index.html", conn: @conn, tag_changes: @tag_changes, pagination: pagination \ No newline at end of file diff --git a/lib/philomena_web/views/profile/tag_change_view.ex b/lib/philomena_web/views/profile/tag_change_view.ex new file mode 100644 index 00000000..7f0dc8f9 --- /dev/null +++ b/lib/philomena_web/views/profile/tag_change_view.ex @@ -0,0 +1,3 @@ +defmodule PhilomenaWeb.Profile.TagChangeView do + use PhilomenaWeb, :view +end diff --git a/lib/philomena_web/views/tag/tag_change_view.ex b/lib/philomena_web/views/tag/tag_change_view.ex new file mode 100644 index 00000000..479ed8af --- /dev/null +++ b/lib/philomena_web/views/tag/tag_change_view.ex @@ -0,0 +1,3 @@ +defmodule PhilomenaWeb.Tag.TagChangeView do + use PhilomenaWeb, :view +end