From e866cbae0f82ebbaa4a415e234a1aa9a059ca1ad Mon Sep 17 00:00:00 2001 From: Alek Ratzloff Date: Fri, 1 Jul 2022 18:41:40 -0700 Subject: [PATCH] Update reply and post forms to display correct capcodes Signed-off-by: Alek Ratzloff --- board/forms.py | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/board/forms.py b/board/forms.py index e7f7861..12cdedb 100644 --- a/board/forms.py +++ b/board/forms.py @@ -6,6 +6,7 @@ from django import forms from django.forms import ModelForm, ModelChoiceField from django.forms.models import fields_for_model from django.utils import timezone +from guardian.shortcuts import get_objects_for_user from board.models import Ban, Post, Report, ReportReason, ReportRecord from hcaptcha.fields import hCaptchaField @@ -21,13 +22,23 @@ class PostForm(ModelForm): class Meta: model = Post - fields = ["subject", "name", "text", "image"] + fields = ["subject", "name", "text", "capcode", "image"] def __init__(self, *args, user, board, ip, **kwargs): super(PostForm, self).__init__(*args, **kwargs) self.user = user self.instance.board = board self.instance.ip = ip + self.fields["capcode"].queryset = get_objects_for_user( + self.user, "board.use_capcode" + ) + + def clean(self): + super().clean() + capcode = self.cleaned_data["capcode"] + if capcode: + if not self.user or not self.user.has_perm("board.use_capcode", capcode): + raise ValidationError("Could not create post") class ReplyForm(PostForm): @@ -46,12 +57,16 @@ class ReplyForm(PostForm): def __init__(self, *args, op, **kwargs): super(ReplyForm, self).__init__(*args, **kwargs) + # Get the true OP of this post + while op.op: + op = op.op self.instance.op = op + self.fields["capcode"].queryset = get_objects_for_user( + self.user, "board.use_capcode" + ) def clean(self): super().clean() - # TODO - # Check if the user has the right permissions to use the selected capcode capcode = self.cleaned_data["capcode"] if capcode: if not self.user or not self.user.has_perm("board.use_capcode", capcode):