diff --git a/moderation/views.py b/moderation/views.py index 1bc990a1..8fe35fd2 100644 --- a/moderation/views.py +++ b/moderation/views.py @@ -7,7 +7,7 @@ from django.template.loader import render_to_string from django.db.models import Q from django.core.exceptions import PermissionDenied from typing import Optional, Any, cast -from accounts.models import User # Import custom User model +from accounts.models import User from .models import EditSubmission, PhotoSubmission @@ -30,7 +30,10 @@ class ModeratorRequiredMixin(UserPassesTestMixin): raise PermissionDenied("You do not have moderator permissions.") class DashboardView(LoginRequiredMixin, ModeratorRequiredMixin, TemplateView): - template_name = 'moderation/dashboard.html' + def get_template_names(self): + if self.request.headers.get('HX-Request'): + return ['moderation/partials/dashboard_content.html'] + return ['moderation/dashboard.html'] def get_context_data(self, **kwargs: Any) -> dict[str, Any]: context = super().get_context_data(**kwargs) @@ -60,9 +63,13 @@ class EditSubmissionListView(LoginRequiredMixin, ModeratorRequiredMixin, ListVie return queryset class PhotoSubmissionListView(LoginRequiredMixin, ModeratorRequiredMixin, ListView): - template_name = 'moderation/photo_submission_list.html' context_object_name = 'submissions' + def get_template_names(self): + if self.request.headers.get('HX-Request'): + return ['moderation/partials/photo_submission_content.html'] + return ['moderation/photo_submission_list.html'] + def get_queryset(self): queryset = PhotoSubmission.objects.all().order_by('-created_at') @@ -71,18 +78,6 @@ class PhotoSubmissionListView(LoginRequiredMixin, ModeratorRequiredMixin, ListVi return queryset -def _update_submission_notes(submission: EditSubmission, notes: Optional[str]) -> None: - """Update submission notes if provided.""" - if notes: - submission.notes = notes - submission.save() - -def _render_submission_response(template: str, submission: Any, request: HttpRequest) -> HttpResponse: - """Render submission template response.""" - context = {'submission': submission} - html = render_to_string(template, context, request=request) - return HttpResponse(html) - @login_required def submission_list(request: HttpRequest) -> HttpResponse: """HTMX endpoint for filtered submission list""" @@ -174,3 +169,15 @@ def reject_photo(request: HttpRequest, submission_id: int) -> HttpResponse: submission.reject(user, request.POST.get('notes', '')) return _render_submission_response('moderation/partials/photo_submission.html', submission, request) + +def _update_submission_notes(submission: EditSubmission, notes: Optional[str]) -> None: + """Update submission notes if provided.""" + if notes: + submission.notes = notes + submission.save() + +def _render_submission_response(template: str, submission: Any, request: HttpRequest) -> HttpResponse: + """Render submission template response.""" + context = {'submission': submission} + html = render_to_string(template, context, request=request) + return HttpResponse(html) diff --git a/templates/moderation/partials/dashboard_content.html b/templates/moderation/partials/dashboard_content.html new file mode 100644 index 00000000..eaa9748c --- /dev/null +++ b/templates/moderation/partials/dashboard_content.html @@ -0,0 +1,62 @@ +{% load static %} + +
+
+
+
+

Pending Reviews

+ + {{ submissions|length }} + +
+

Submissions awaiting moderation

+
+ +
+
+

Recent Activity

+ +
+

Latest moderation actions

+
+ + +
+ +
+
+

Recent Submissions

+
+ {% for submission in submissions %} + {% include "moderation/partials/submission_list.html" %} + {% empty %} +
+ +

No pending submissions

+
+ {% endfor %} +
+
+
+
diff --git a/templates/moderation/partials/photo_submission_content.html b/templates/moderation/partials/photo_submission_content.html new file mode 100644 index 00000000..85774ffa --- /dev/null +++ b/templates/moderation/partials/photo_submission_content.html @@ -0,0 +1,23 @@ +{% load static %} + +
+
+
+

Photo Submissions

+ + {{ submissions|length }} + +
+ +
+ {% for submission in submissions %} + {% include "moderation/partials/photo_submission.html" %} + {% empty %} +
+ +

No photo submissions found

+
+ {% endfor %} +
+
+
diff --git a/templates/moderation/photo_submission_list.html b/templates/moderation/photo_submission_list.html index 4def7328..841c99c5 100644 --- a/templates/moderation/photo_submission_list.html +++ b/templates/moderation/photo_submission_list.html @@ -1,16 +1,7 @@ {% extends "moderation/dashboard.html" %} {% block moderation_content %} -
- {% for submission in submissions %} - {% include "moderation/partials/photo_submission.html" %} - {% empty %} -
-
- -

No photo submissions found.

-
-
- {% endfor %} +
+ {% include "moderation/partials/photo_submission_content.html" %}
{% endblock %}