mirror of
https://github.com/philomena-dev/philomena.git
synced 2025-02-01 03:46:44 +01:00
actual working counters i think
This commit is contained in:
parent
c3e6bb5f3e
commit
accc9b5304
7 changed files with 77 additions and 4 deletions
|
@ -101,4 +101,10 @@ defmodule Philomena.DnpEntries do
|
||||||
def change_dnp_entry(%DnpEntry{} = dnp_entry) do
|
def change_dnp_entry(%DnpEntry{} = dnp_entry) do
|
||||||
DnpEntry.changeset(dnp_entry, %{})
|
DnpEntry.changeset(dnp_entry, %{})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def count_dnp_entries() do
|
||||||
|
DnpEntry
|
||||||
|
|> where([ul], ul.aasm_state in [ "requested", "claimed", "acknowledged" ])
|
||||||
|
|> Repo.aggregate(:count, :id)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -114,4 +114,10 @@ defmodule Philomena.DuplicateReports do
|
||||||
def change_duplicate_report(%DuplicateReport{} = duplicate_report) do
|
def change_duplicate_report(%DuplicateReport{} = duplicate_report) do
|
||||||
DuplicateReport.changeset(duplicate_report, %{})
|
DuplicateReport.changeset(duplicate_report, %{})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def count_duplicate_reports() do
|
||||||
|
DuplicateReport
|
||||||
|
|> where([dr], dr.state == "open")
|
||||||
|
|> Repo.aggregate(:count, :id)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -116,4 +116,10 @@ defmodule Philomena.Reports do
|
||||||
|
|
||||||
report
|
report
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def count_reports() do
|
||||||
|
Report
|
||||||
|
|> where(open: true)
|
||||||
|
|> Repo.aggregate(:count, :id)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -104,4 +104,10 @@ defmodule Philomena.UserLinks do
|
||||||
def change_user_link(%UserLink{} = user_link) do
|
def change_user_link(%UserLink{} = user_link) do
|
||||||
UserLink.changeset(user_link, %{})
|
UserLink.changeset(user_link, %{})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def count_user_links() do
|
||||||
|
UserLink
|
||||||
|
|> where([ul], ul.aasm_state == "unverified")
|
||||||
|
|> Repo.aggregate(:count, :id)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
48
lib/philomena_web/plugs/admin_counters_plug.ex
Normal file
48
lib/philomena_web/plugs/admin_counters_plug.ex
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
defmodule PhilomenaWeb.AdminCountersPlug do
|
||||||
|
@moduledoc """
|
||||||
|
This plug stores the counts used by the admin bar.
|
||||||
|
## Example
|
||||||
|
plug PhilomenaWeb.AdminCountersPlug
|
||||||
|
"""
|
||||||
|
|
||||||
|
alias Plug.Conn
|
||||||
|
alias Philomena.DuplicateReports
|
||||||
|
alias Philomena.Reports
|
||||||
|
alias Philomena.UserLinks
|
||||||
|
alias Philomena.DnpEntries
|
||||||
|
|
||||||
|
import Plug.Conn, only: [assign: 3]
|
||||||
|
|
||||||
|
@doc false
|
||||||
|
@spec init(any()) :: any()
|
||||||
|
def init(opts), do: opts
|
||||||
|
|
||||||
|
@doc false
|
||||||
|
@spec call(Plug.Conn.t()) :: Plug.Conn.t()
|
||||||
|
def call(conn), do: call(conn, nil)
|
||||||
|
|
||||||
|
@doc false
|
||||||
|
@spec call(Plug.Conn.t(), any()) :: Plug.Conn.t()
|
||||||
|
def call(conn, _opts) do
|
||||||
|
user = conn.assigns.current_user
|
||||||
|
|
||||||
|
maybe_assign_admin_metrics(conn, staff?(user))
|
||||||
|
end
|
||||||
|
|
||||||
|
defp maybe_assign_admin_metrics(conn, false), do: conn
|
||||||
|
defp maybe_assign_admin_metrics(conn, true) do
|
||||||
|
duplicate_reports = DuplicateReports.count_duplicate_reports()
|
||||||
|
reports = Reports.count_reports()
|
||||||
|
user_links = UserLinks.count_user_links()
|
||||||
|
dnps = DnpEntries.count_dnp_entries()
|
||||||
|
|
||||||
|
conn
|
||||||
|
|> assign(:duplicate_report_count, duplicate_reports)
|
||||||
|
|> assign(:report_count, reports)
|
||||||
|
|> assign(:user_link_count, user_links)
|
||||||
|
|> assign(:dnp_entry_count, dnps)
|
||||||
|
end
|
||||||
|
|
||||||
|
defp staff?(%{role: role}) when role in ["assistant", "moderator", "admin"], do: true
|
||||||
|
defp staff?(_user), do: false
|
||||||
|
end
|
|
@ -19,6 +19,7 @@ defmodule PhilomenaWeb.Router do
|
||||||
plug PhilomenaWeb.ForumListPlug
|
plug PhilomenaWeb.ForumListPlug
|
||||||
plug PhilomenaWeb.FilterSelectPlug
|
plug PhilomenaWeb.FilterSelectPlug
|
||||||
plug PhilomenaWeb.ChannelPlug
|
plug PhilomenaWeb.ChannelPlug
|
||||||
|
plug PhilomenaWeb.AdminCountersPlug
|
||||||
end
|
end
|
||||||
|
|
||||||
pipeline :api do
|
pipeline :api do
|
||||||
|
|
|
@ -38,19 +38,19 @@
|
||||||
= link to: "#", class: "header__link", title: "Duplicates" do
|
= link to: "#", class: "header__link", title: "Duplicates" do
|
||||||
=<> "D"
|
=<> "D"
|
||||||
span.header__counter__admin
|
span.header__counter__admin
|
||||||
| 0
|
= @duplicate_report_count
|
||||||
= link to: "#", class: "header__link", title: "Reports" do
|
= link to: "#", class: "header__link", title: "Reports" do
|
||||||
=<> "R"
|
=<> "R"
|
||||||
span.header__counter__admin
|
span.header__counter__admin
|
||||||
| 0
|
= @report_count
|
||||||
= link to: "#", class: "header__link", title: "User Links" do
|
= link to: "#", class: "header__link", title: "User Links" do
|
||||||
=<> "L"
|
=<> "L"
|
||||||
span.header__counter__admin
|
span.header__counter__admin
|
||||||
| 0
|
= @user_link_count
|
||||||
= link to: "#", class: "header__link", title: "DNP Requests" do
|
= link to: "#", class: "header__link", title: "DNP Requests" do
|
||||||
=<> "S"
|
=<> "S"
|
||||||
span.header__counter__admin
|
span.header__counter__admin
|
||||||
| 0
|
= @dnp_entry_count
|
||||||
.dropdown.hide-mobile
|
.dropdown.hide-mobile
|
||||||
a.header__link title="Bans"
|
a.header__link title="Bans"
|
||||||
=<> "B"
|
=<> "B"
|
||||||
|
|
Loading…
Reference in a new issue