diff --git a/assets/src/bundles/add_forge/moderation-dashboard.js b/assets/src/bundles/add_forge/moderation-dashboard.js --- a/assets/src/bundles/add_forge/moderation-dashboard.js +++ b/assets/src/bundles/add_forge/moderation-dashboard.js @@ -48,17 +48,7 @@ { data: 'forge_url', name: 'forge_url', - render: function(data, type, row) { - if (type === 'display') { - let html = ''; - const sanitizedURL = $.fn.dataTable.render.text().display(data); - html += sanitizedURL; - html += ` ` + - ''; - return html; - } - return data; - } + render: $.fn.dataTable.render.text() }, { data: 'moderator', diff --git a/swh/web/add_forge_now/views.py b/swh/web/add_forge_now/views.py --- a/swh/web/add_forge_now/views.py +++ b/swh/web/add_forge_now/views.py @@ -13,7 +13,6 @@ from django.shortcuts import render from swh.web.add_forge_now.models import Request as AddForgeRequest -from swh.web.add_forge_now.models import RequestHistory as AddForgeNowRequestHistory from swh.web.api.views.add_forge_now import ( AddForgeNowRequestPublicSerializer, AddForgeNowRequestSerializer, @@ -66,25 +65,12 @@ paginator = Paginator(add_forge_requests, per_page) page = paginator.page(page_num) + if has_add_forge_now_permission(request.user): requests = AddForgeNowRequestSerializer(page.object_list, many=True).data - for item in page.object_list: - history = AddForgeNowRequestHistory.objects.filter(request=item).order_by( - "id" - ) - for req in requests: - last_item = history[len(history) - 1] - if req["id"] == last_item.__dict__["request_id"]: - req["actor_role"] = last_item.__dict__["actor_role"] - if req["actor_role"] == "MODERATOR": - req["moderator"] = last_item.__dict__["actor"] - req["last_modified_date"] = last_item.__dict__["date"] - else: - req["moderator"] = "No action taken yet" - req["last_modified_date"] = req["submission_date"] - else: requests = AddForgeNowRequestPublicSerializer(page.object_list, many=True).data + results = [dict(req) for req in requests] table_data["recordsFiltered"] = add_forge_requests.count() table_data["data"] = results diff --git a/swh/web/api/views/add_forge_now.py b/swh/web/api/views/add_forge_now.py --- a/swh/web/api/views/add_forge_now.py +++ b/swh/web/api/views/add_forge_now.py @@ -9,6 +9,7 @@ from django.core.exceptions import ObjectDoesNotExist from django.core.paginator import Paginator from django.db import transaction +from django.db.models.query import QuerySet from django.forms import CharField, ModelForm from django.http import HttpResponseBadRequest from django.http.request import HttpRequest @@ -62,10 +63,38 @@ class AddForgeNowRequestSerializer(serializers.ModelSerializer): + + moderator = serializers.SerializerMethodField() + last_modified_date = serializers.SerializerMethodField() + history: Dict[int, QuerySet] = {} + class Meta: model = AddForgeRequest fields = "__all__" + def _gethistory(self, request): + if request.id not in self.history: + self.history[request.id] = AddForgeNowRequestHistory.objects.filter( + request=request + ).order_by("id") + return self.history[request.id] + + def get_moderator(self, request): + last_history_with_moderator = ( + self._gethistory(request).filter(actor_role="MODERATOR").last() + ) + return ( + last_history_with_moderator.actor if last_history_with_moderator else "None" + ) + + def get_last_modified_date(self, request): + last_history = self._gethistory(request).last() + return ( + last_history.date.isoformat().replace("+00:00", "Z") + if last_history + else None + ) + class AddForgeNowRequestPublicSerializer(serializers.ModelSerializer): """Serializes AddForgeRequest without private fields."""