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: