diff --git a/aurweb/routers/packages.py b/aurweb/routers/packages.py
index d2002188..8e81f087 100644
--- a/aurweb/routers/packages.py
+++ b/aurweb/routers/packages.py
@@ -812,6 +812,19 @@ async def pkgbase_flag_post(request: Request, name: str,
status_code=HTTPStatus.SEE_OTHER)
+@router.get("/pkgbase/{name}/flag-comment")
+async def pkgbase_flag_comment(request: Request, name: str):
+ pkgbase = get_pkg_or_base(name, models.PackageBase)
+
+ if pkgbase.Flagger is None:
+ return RedirectResponse(f"/pkgbase/{name}",
+ status_code=HTTPStatus.SEE_OTHER)
+
+ context = make_context(request, "Flag Comment")
+ context["pkgbase"] = pkgbase
+ return render_template(request, "packages/flag-comment.html", context)
+
+
@router.post("/pkgbase/{name}/unflag")
@auth_required(True, redirect="/pkgbase/{name}")
async def pkgbase_unflag(request: Request, name: str):
diff --git a/templates/packages/flag-comment.html b/templates/packages/flag-comment.html
new file mode 100644
index 00000000..4df6ee4b
--- /dev/null
+++ b/templates/packages/flag-comment.html
@@ -0,0 +1,46 @@
+{% extends "partials/layout.html" %}
+
+{% block pageContent %}
+
+
{{ "Flagged Out-of-Date Comment: %s" | tr | format(pkgbase.Name) }}
+
+ {# Prepare wrapping for the username. #}
+ {% set wrap = ["", ""] %}
+ {% if request.user.is_authenticated() %}
+ {# When logged in, we wrap it with a link to the account. #}
+ {% set wrap = ['
' | format(pkgbase.Flagger.Username), ""] %}
+ {% endif %}
+
+ {# Prepare OutOfDateTS as a datetime object in the request user's timezone. #}
+ {% set flagged_at = pkgbase.OutOfDateTS | dt | as_timezone(timezone) %}
+ {% set username = "%s%s%s" | format(wrap[0], pkgbase.Flagger.Username, wrap[1]) %}
+
+
+ {{
+ "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the "
+ "following reason:"
+ | tr | format("", username, "",
+ "", pkgbase.Name, "",
+ "", flagged_at.strftime("%Y-%m-%d"), "")
+ | safe
+ }}
+
+
+ {# Padding #}
+
+
+
+
+ {{ pkgbase.FlaggerComment }}
+
+
+
+
+
+ {# Padding #}
+
+
+
+{% endblock %}
diff --git a/templates/partials/packages/actions.html b/templates/partials/packages/actions.html
index 2a4efb5d..3c5a046c 100644
--- a/templates/partials/packages/actions.html
+++ b/templates/partials/packages/actions.html
@@ -33,11 +33,13 @@
{% else %}
- {% set ood_ts = pkgbase.OutOfDateTS | dt | as_timezone(timezone) %}
- {{
- "Flagged out-of-date (%s)"
- | tr | format(ood_ts.strftime("%Y-%m-%d"))
- }}
+
+ {% set ood_ts = pkgbase.OutOfDateTS | dt | as_timezone(timezone) %}
+ {{
+ "Flagged out-of-date (%s)"
+ | tr | format(ood_ts.strftime("%Y-%m-%d"))
+ }}
+
diff --git a/test/test_packages_routes.py b/test/test_packages_routes.py
index 032f2571..0a9761aa 100644
--- a/test/test_packages_routes.py
+++ b/test/test_packages_routes.py
@@ -1707,6 +1707,14 @@ def test_pkgbase_flag(client: TestClient, user: User, maintainer: User,
resp = request.get(endpoint, cookies=cookies)
assert resp.status_code == int(HTTPStatus.OK)
+ # Now, let's check the /pkgbase/{name}/flag-comment route.
+ flag_comment_endpoint = f"/pkgbase/{pkgbase.Name}/flag-comment"
+ with client as request:
+ resp = request.get(flag_comment_endpoint, cookies=cookies,
+ allow_redirects=False)
+ assert resp.status_code == int(HTTPStatus.SEE_OTHER)
+ assert resp.headers.get("location") == f"/pkgbase/{pkgbase.Name}"
+
# Try to flag it without a comment.
with client as request:
resp = request.post(endpoint, cookies=cookies)
@@ -1721,6 +1729,13 @@ def test_pkgbase_flag(client: TestClient, user: User, maintainer: User,
assert pkgbase.Flagger == user
assert pkgbase.FlaggerComment == "Test"
+ # Now, let's check the /pkgbase/{name}/flag-comment route.
+ flag_comment_endpoint = f"/pkgbase/{pkgbase.Name}/flag-comment"
+ with client as request:
+ resp = request.get(flag_comment_endpoint, cookies=cookies,
+ allow_redirects=False)
+ assert resp.status_code == int(HTTPStatus.OK)
+
# Now try to perform a get; we should be redirected because
# it's already flagged.
with client as request: