mirror of
https://github.com/boostorg/website-v2.git
synced 2026-02-22 03:52:12 +00:00
94 lines
3.2 KiB
Python
94 lines
3.2 KiB
Python
from django.contrib import admin
|
|
from django.urls import path
|
|
from django.shortcuts import redirect, render
|
|
from django.contrib import messages
|
|
from django.utils import timezone
|
|
from .models import RenderedContent, SiteSettings
|
|
from .tasks import delete_all_rendered_content
|
|
|
|
|
|
@admin.register(RenderedContent)
|
|
class RenderedContentAdmin(admin.ModelAdmin):
|
|
list_display = (
|
|
"cache_key",
|
|
"content_type",
|
|
"modified",
|
|
"latest_path_matched_indicator",
|
|
"latest_path_match_class",
|
|
)
|
|
search_fields = ("cache_key",)
|
|
readonly_fields = ("latest_path_match_class",)
|
|
|
|
def get_urls(self):
|
|
urls = super().get_urls()
|
|
custom_urls = [
|
|
path(
|
|
"start-content-refresh/",
|
|
self.admin_site.admin_view(self.start_content_refresh_view),
|
|
name="core_renderedcontent_start_content_refresh",
|
|
),
|
|
path(
|
|
"delete-all/",
|
|
self.admin_site.admin_view(self.delete_all_view),
|
|
name="core_renderedcontent_delete_all",
|
|
),
|
|
]
|
|
return custom_urls + urls
|
|
|
|
def start_content_refresh_view(self, request):
|
|
if request.method == "POST":
|
|
settings = SiteSettings.load()
|
|
settings.rendered_content_replacement_start = timezone.now()
|
|
settings.save()
|
|
messages.success(
|
|
request,
|
|
f"Content refresh start time set to {settings.rendered_content_replacement_start}",
|
|
)
|
|
return redirect("..")
|
|
|
|
context = {
|
|
**self.admin_site.each_context(request),
|
|
"title": "Start Content Refresh",
|
|
}
|
|
return render(
|
|
request,
|
|
"admin/core/renderedcontent/start_content_refresh_confirmation.html",
|
|
context,
|
|
)
|
|
|
|
def delete_all_view(self, request):
|
|
if request.method == "POST":
|
|
delete_all_rendered_content.delay()
|
|
messages.success(
|
|
request,
|
|
"Mass deletion task has been queued. All rendered content "
|
|
"records will be deleted in batches. This may take some time.",
|
|
)
|
|
return redirect("..")
|
|
|
|
context = {
|
|
**self.admin_site.each_context(request),
|
|
"title": "Delete All Rendered Content",
|
|
}
|
|
return render(
|
|
request, "admin/core/renderedcontent/delete_all_confirmation.html", context
|
|
)
|
|
|
|
def changelist_view(self, request, extra_context=None):
|
|
extra_context = extra_context or {}
|
|
extra_context["has_start_content_refresh"] = True
|
|
extra_context["has_delete_all"] = True
|
|
return super().changelist_view(request, extra_context=extra_context)
|
|
|
|
|
|
@admin.register(SiteSettings)
|
|
class SiteSettingsAdmin(admin.ModelAdmin):
|
|
list_display = ("id", "wordcloud_ignore", "rendered_content_replacement_start")
|
|
readonly_fields = ("rendered_content_replacement_start",)
|
|
|
|
def has_add_permission(self, request):
|
|
return super().has_add_permission(request) and SiteSettings.objects.count() == 0
|
|
|
|
def has_delete_permission(self, request, obj=None):
|
|
return False
|