Update reply and post forms to display correct capcodes
Signed-off-by: Alek Ratzloff <alekratz@gmail.com>
This commit is contained in:
@@ -6,6 +6,7 @@ from django import forms
|
|||||||
from django.forms import ModelForm, ModelChoiceField
|
from django.forms import ModelForm, ModelChoiceField
|
||||||
from django.forms.models import fields_for_model
|
from django.forms.models import fields_for_model
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
from guardian.shortcuts import get_objects_for_user
|
||||||
from board.models import Ban, Post, Report, ReportReason, ReportRecord
|
from board.models import Ban, Post, Report, ReportReason, ReportRecord
|
||||||
from hcaptcha.fields import hCaptchaField
|
from hcaptcha.fields import hCaptchaField
|
||||||
|
|
||||||
@@ -21,13 +22,23 @@ class PostForm(ModelForm):
|
|||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Post
|
model = Post
|
||||||
fields = ["subject", "name", "text", "image"]
|
fields = ["subject", "name", "text", "capcode", "image"]
|
||||||
|
|
||||||
def __init__(self, *args, user, board, ip, **kwargs):
|
def __init__(self, *args, user, board, ip, **kwargs):
|
||||||
super(PostForm, self).__init__(*args, **kwargs)
|
super(PostForm, self).__init__(*args, **kwargs)
|
||||||
self.user = user
|
self.user = user
|
||||||
self.instance.board = board
|
self.instance.board = board
|
||||||
self.instance.ip = ip
|
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):
|
class ReplyForm(PostForm):
|
||||||
@@ -46,12 +57,16 @@ class ReplyForm(PostForm):
|
|||||||
|
|
||||||
def __init__(self, *args, op, **kwargs):
|
def __init__(self, *args, op, **kwargs):
|
||||||
super(ReplyForm, self).__init__(*args, **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.instance.op = op
|
||||||
|
self.fields["capcode"].queryset = get_objects_for_user(
|
||||||
|
self.user, "board.use_capcode"
|
||||||
|
)
|
||||||
|
|
||||||
def clean(self):
|
def clean(self):
|
||||||
super().clean()
|
super().clean()
|
||||||
# TODO
|
|
||||||
# Check if the user has the right permissions to use the selected capcode
|
|
||||||
capcode = self.cleaned_data["capcode"]
|
capcode = self.cleaned_data["capcode"]
|
||||||
if capcode:
|
if capcode:
|
||||||
if not self.user or not self.user.has_perm("board.use_capcode", capcode):
|
if not self.user or not self.user.has_perm("board.use_capcode", capcode):
|
||||||
|
|||||||
Reference in New Issue
Block a user