From 28009ce6ae7480a0042e5bf458ab28eccca2c8d6 Mon Sep 17 00:00:00 2001 From: Joshua Laymon Date: Sun, 24 Aug 2025 19:17:49 +0000 Subject: [PATCH] Update web/core/views.py --- web/core/views.py | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/web/core/views.py b/web/core/views.py index 2de2496..888403b 100644 --- a/web/core/views.py +++ b/web/core/views.py @@ -960,3 +960,43 @@ def delete_all_entries(request): return redirect("settings_home") return render(request, "settings/delete_all_confirm.html", {}) + + # ----- Release announcements (superuser tools + dismiss) ----- +from django.contrib.auth.decorators import login_required, user_passes_test +from django.views.decorators.http import require_POST +from django.http import JsonResponse, HttpResponseBadRequest +from .forms import AnnouncementForm +from .models_ann import Announcement, AnnouncementDismissal + +is_superuser = user_passes_test(lambda u: u.is_superuser) + +@is_superuser +@login_required +def announcement_tools(request): + """ + Superuser-only: publish an announcement. Users will see it once on next search page load. + """ + if request.method == "POST": + form = AnnouncementForm(request.POST) + if form.is_valid(): + ann = form.save(commit=False) + ann.created_by = request.user + ann.save() + messages.success(request, "Announcement published.") + return redirect("settings_home") + else: + form = AnnouncementForm() + + recent = Announcement.objects.order_by("-created_at")[:25] + return render(request, "settings/home.html", { + "announcement_form": form, + "announcements_recent": recent, + # Keep the rest of your settings page content intact; template guards will show this block + }) + +@login_required +@require_POST +def dismiss_announcement(request, pk): + ann = get_object_or_404(Announcement, pk=pk) + AnnouncementDismissal.objects.get_or_create(user=request.user, announcement=ann) + return JsonResponse({"ok": True})