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 %}