From a5510d95522a6358b9451e80854cc9f02d7cc75b Mon Sep 17 00:00:00 2001 From: Alek Ratzloff Date: Thu, 23 Jun 2022 18:57:23 -0700 Subject: [PATCH] Add board selection to ban creation and post ID to ban model * Board selection is allowed for when you want to make a global ban * Post ID is added to ban model for referencing later Signed-off-by: Alek Ratzloff --- board/forms.py | 4 ++-- board/models.py | 10 ++-------- board/templates/board/ban_form.html | 23 ++++++++++++++--------- board/templates/board/banned.html | 5 +++++ 4 files changed, 23 insertions(+), 19 deletions(-) diff --git a/board/forms.py b/board/forms.py index 2f8d039..a7e86f5 100644 --- a/board/forms.py +++ b/board/forms.py @@ -88,13 +88,13 @@ class BanForm(ModelForm): class Meta: model = Ban - fields = ["ban_reason"] + fields = ["ban_reason", "board"] def __init__(self, *args, op, **kwargs): super(BanForm, self).__init__(*args, **kwargs) self.op = op - self.instance.board = op.board self.instance.ip = op.ip + self.instance.post_id = op.id def clean(self): super(BanForm, self).clean() diff --git a/board/models.py b/board/models.py index 1b53df8..ec8c492 100644 --- a/board/models.py +++ b/board/models.py @@ -260,10 +260,6 @@ def report_created(sender, instance, created, **kwargs): instance.record.save() -# class BanTemplate(models.Model): -# board = - - class BanCommon(models.Model): # The reason for this ban ban_reason = models.TextField(blank=False) @@ -275,6 +271,8 @@ class BanCommon(models.Model): created = models.DateTimeField(auto_now_add=True) # Expiration date of this ban. If it is null, it is permanent. expires = models.DateTimeField(null=True, blank=True) + # The post ID that caused this ban + post_id = models.IntegerField(null=True, blank=True) class Meta: abstract = True @@ -320,10 +318,6 @@ class BanTemplate(models.Model): # The board that this template is for, or none. board = models.ForeignKey("Board", on_delete=models.CASCADE, null=True, blank=True) - def create_ban(self, ip: str) -> Ban: - expires = timezone.now() + self.duration - return Ban.objects.create(ip=ip, ban_reason=self.ban_reason, expires=expires) - def __str__(self) -> str: if self.board: return f"/{self.board.url}/ - {self.name}" diff --git a/board/templates/board/ban_form.html b/board/templates/board/ban_form.html index 0d89013..ac723af 100644 --- a/board/templates/board/ban_form.html +++ b/board/templates/board/ban_form.html @@ -25,9 +25,9 @@ {% translate 'Template' %} @@ -64,18 +64,23 @@ function templateSelect(e) { // uh oh, mixing django templates and JS let banReason = $("#{{form.ban_reason.auto_id}}"); let duration = $("#{{form.duration.auto_id}}"); + let board = $("#{{form.board.auto_id}}"); banReason.val(selected.attr("data-reason")); duration.val(selected.attr("data-duration")); - if(selected.val() === "Custom") { - // unlock the controls - banReason.attr("readonly", false); - duration.attr("readonly", false); + if(parseInt(selected.attr("data-global"))) { + board.val(""); } else { - // lock all controls - banReason.attr("readonly", true); - duration.attr("readonly", true); + board.val(selected.attr("data-board")); } + + let controls = [ + banReason, + duration, + ]; + + let readonly = (selected.val() !== "Custom"); + controls.forEach(c => c.attr("readonly", readonly)); } function templateSearch(e) { diff --git a/board/templates/board/banned.html b/board/templates/board/banned.html index c8dd723..dcb2cf4 100644 --- a/board/templates/board/banned.html +++ b/board/templates/board/banned.html @@ -54,6 +54,11 @@ All boards {% endif %}

+ {% if ban.post_id %} +

+ Post ID: {{ban.post_id}} +

+ {% endif %}

Ban reason: