Files
interchan/board/admin.py
Alek Ratzloff ab749359fa Add admin capcodes
Sometimes, it is necessary for an admin or other moderator to reveal
themselves. Capcodes allow them to do so by appending a special colored
portion at the end of their name on a post.

This adds object-level permissions, so if you have a moderator who
shouldn't be able to use the "admin" capcode, you can give them
permission only to the "moderator" capcode.

Signed-off-by: Alek Ratzloff <alekratz@gmail.com>
2022-06-28 21:37:45 -07:00

85 lines
1.9 KiB
Python

from django.contrib import admin
from django.urls import reverse
from django.utils.safestring import mark_safe
from guardian.admin import GuardedModelAdmin
from board.models import *
#
# Admin sites
#
@admin.register(Board)
class BoardAdmin(admin.ModelAdmin):
pass
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
pass
@admin.register(ReportReason)
class ReportReasonAdmin(admin.ModelAdmin):
pass
@admin.register(ReportRecord)
class ReportRecordAdmin(admin.ModelAdmin):
ordering = (
"-urgent",
"-weight",
)
readonly_fields = ("post", "weight", "urgent")
list_display = ("post_id", "post_thumbnail", "post_body", "create_ban")
save_as = False
def post_id(self, obj):
return obj.post.id
def post_thumbnail(self, obj):
if obj.post.thumbnail:
return mark_safe(f'<img src="{obj.post.thumbnail.url}" />')
else:
return None
def post_body(self, obj):
html = ""
if obj.urgent:
html += '<div class="urgent">'
else:
html += "<div>"
if obj.post.subject:
html += f"<p><strong>{obj.post.subject}</strong></p>"
html += f"<p>{obj.post.text}</p>"
html += "</div>"
return mark_safe(html)
def create_ban(self, obj):
post = obj.post
board = obj.post.board
ban_url = reverse("board:ban_create", kwargs={"url": board.url, "id": post.id})
return mark_safe(
f'<a href="#" data-ban-url="{ban_url}" class="ban_link">Ban</a>'
)
@admin.register(RangeBan)
class RangeBanAdmin(admin.ModelAdmin):
pass
@admin.register(Ban)
class BanAdmin(admin.ModelAdmin):
pass
@admin.register(BanTemplate)
class BanTemplateAdmin(admin.ModelAdmin):
ordering = ("board__url", "name")
@admin.register(Capcode)
class CapcodeAdmin(GuardedModelAdmin):
pass