From 6f7e65d4f2a295a88b7fd2ab79949c639b2553ab Mon Sep 17 00:00:00 2001
From: George Katsikas <giorgakis.katsikas@gmail.com>
Date: Thu, 9 Nov 2023 17:14:00 +0100
Subject: [PATCH] add red flags to admin panel

---
 scipost_django/ethics/admin.py      | 39 +++++++++++++++++++++++++----
 scipost_django/profiles/admin.py    |  8 +++---
 scipost_django/submissions/admin.py |  2 ++
 3 files changed, 40 insertions(+), 9 deletions(-)

diff --git a/scipost_django/ethics/admin.py b/scipost_django/ethics/admin.py
index bdb227fcb..984b59bed 100644
--- a/scipost_django/ethics/admin.py
+++ b/scipost_django/ethics/admin.py
@@ -2,9 +2,17 @@ __copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
 __license__ = "AGPL v3"
 
 
+from typing import Any, Optional
 from django.contrib import admin
+from django.contrib.contenttypes.admin import GenericTabularInline
 from django.contrib.contenttypes.models import ContentType
-from django.forms import ChoiceField
+from django.db.models.fields import Field
+from django.forms import ChoiceField, widgets
+from django.forms.fields import TypedChoiceField
+from django.http.request import HttpRequest
+from blog import forms
+
+from profiles.models import Profile
 
 from .models import CompetingInterest, RedFlag
 
@@ -59,12 +67,33 @@ class ConcerningObjectExistingFilter(admin.SimpleListFilter):
 
 @admin.register(RedFlag)
 class RedFlagAdmin(admin.ModelAdmin):
-    search_fields = ("concerning_object_id", "raised_by__last_name")
-    list_filter = ["resolved", ConcerningObjectExistingFilter]
+    model = RedFlag
     list_display = (
-        "concerning_object",
-        "raised_by",
         "description",
+        "raised_by",
         "raised_on",
         "resolved",
     )
+
+
+class RedFlagInline(GenericTabularInline):
+    ct_field = "concerning_object_type"
+    ct_fk_field = "concerning_object_id"
+    fk_name = "concerning_object"
+    model = RedFlag
+    extra = 0
+
+    fields = ["raised_on", "raised_by", "description", "resolved"]
+    autocomplete_fields = ["raised_by"]
+
+    # modify the description textarea field to have 2 rows
+    def formfield_for_dbfield(self, db_field: Field, **kwargs: Any) -> Any:
+        if db_field.name == "description":
+            kwargs["widget"] = widgets.Textarea(attrs={"rows": 1})
+        return super().formfield_for_dbfield(db_field, **kwargs)
+
+    # prefill the autocomplete field with the current user
+    def formfield_for_foreignkey(self, db_field, request, **kwargs):
+        if db_field.name == "raised_by":
+            kwargs["initial"] = request.user.contributor
+        return super().formfield_for_foreignkey(db_field, request, **kwargs)
diff --git a/scipost_django/profiles/admin.py b/scipost_django/profiles/admin.py
index 30a592ffa..ea483fa1f 100644
--- a/scipost_django/profiles/admin.py
+++ b/scipost_django/profiles/admin.py
@@ -4,6 +4,8 @@ __license__ = "AGPL v3"
 
 from django.contrib import admin
 
+from ethics.admin import RedFlagInline
+
 from .models import Profile, ProfileEmail, ProfileNonDuplicates, Affiliation
 
 
@@ -23,10 +25,8 @@ class AffiliationInline(admin.TabularInline):
 class ProfileAdmin(admin.ModelAdmin):
     list_display = ["__str__", "email", "acad_field", "has_active_contributor"]
     search_fields = ["first_name", "last_name", "emails__email", "orcid_id"]
-    inlines = [ProfileEmailInline, AffiliationInline]
-    autocomplete_fields = [
-        "topics",
-    ]
+    inlines = [ProfileEmailInline, AffiliationInline, RedFlagInline]
+    autocomplete_fields = ["topics"]
 
 
 admin.site.register(Profile, ProfileAdmin)
diff --git a/scipost_django/submissions/admin.py b/scipost_django/submissions/admin.py
index 1ffb69d4f..c0d25f52f 100644
--- a/scipost_django/submissions/admin.py
+++ b/scipost_django/submissions/admin.py
@@ -7,6 +7,7 @@ from django.db.models import Q
 from django import forms
 
 from guardian.admin import GuardedModelAdmin
+from ethics.admin import RedFlagInline
 
 from submissions.models import (
     SubmissionAuthorProfile,
@@ -172,6 +173,7 @@ class SubmissionAdmin(GuardedModelAdmin):
         SubmissionClearanceInline,
         SubmissionTieringInline,
         CollectionInline,
+        RedFlagInline,
     ]
 
     # Admin fields should be added in the fieldsets
-- 
GitLab