Files
old-saburly-wagtail-web/env/lib/python3.10/site-packages/wagtail/admin/panels/comment_panel.py
2024-08-27 20:33:44 +02:00

89 lines
3.4 KiB
Python

from django.contrib.auth import get_user_model
from modelcluster.models import get_serializable_data_for_fields
from wagtail.admin.forms.comments import CommentForm, CommentFormSet
from wagtail.admin.templatetags.wagtailadmin_tags import avatar_url, user_display_name
from wagtail.models import COMMENTS_RELATION_NAME
from .base import Panel
class CommentPanel(Panel):
def get_form_options(self):
# add the comments formset
return {
# Adds the comment notifications field to the form.
# Note, this field is defined directly on WagtailAdminPageForm.
"fields": ["comment_notifications"],
"formsets": {
COMMENTS_RELATION_NAME: {
"formset": CommentFormSet,
"form": CommentForm,
"fields": ["text", "contentpath", "position"],
"formset_name": "comments",
"inherit_kwargs": ["for_user"],
}
},
}
@property
def clean_name(self):
return super().clean_name or "comments"
class BoundPanel(Panel.BoundPanel):
template_name = "wagtailadmin/panels/comments/comment_panel.html"
def get_context_data(self, parent_context=None):
context = super().get_context_data(parent_context)
def user_data(user):
return {"name": user_display_name(user), "avatar_url": avatar_url(user)}
user = getattr(self.request, "user", None)
user_pks = {user.pk}
serialized_comments = []
bound = self.form.is_bound
comment_formset = self.form.formsets.get("comments")
comment_forms = comment_formset.forms if comment_formset else []
for form in comment_forms:
# iterate over comments to retrieve users (to get display names) and serialized versions
replies = []
for reply_form in form.formsets["replies"].forms:
user_pks.add(reply_form.instance.user_id)
reply_data = get_serializable_data_for_fields(reply_form.instance)
reply_data["deleted"] = (
reply_form.cleaned_data.get("DELETE", False) if bound else False
)
replies.append(reply_data)
user_pks.add(form.instance.user_id)
data = get_serializable_data_for_fields(form.instance)
data["deleted"] = (
form.cleaned_data.get("DELETE", False) if bound else False
)
data["resolved"] = (
form.cleaned_data.get("resolved", False)
if bound
else form.instance.resolved_at is not None
)
data["replies"] = replies
serialized_comments.append(data)
authors = {
str(user.pk): user_data(user)
for user in get_user_model()
.objects.filter(pk__in=user_pks)
.select_related("wagtail_userprofile")
}
comments_data = {
"comments": serialized_comments,
"user": user.pk,
"authors": authors,
}
context["comments_data"] = comments_data
return context
def show_panel_furniture(self):
return False