1# from plain.admin.cards import Card
2from plain.admin.views import (
3 AdminModelCreateView,
4 AdminModelDeleteView,
5 AdminModelDetailView,
6 AdminModelListView,
7 AdminModelUpdateView,
8 AdminViewset,
9 register_viewset,
10)
11from plain.models.forms import ModelForm
12
13from .models import NotFoundLog, Redirect, RedirectLog
14
15
16class RedirectForm(ModelForm):
17 class Meta:
18 model = Redirect
19 fields = [
20 "from_pattern",
21 "to_pattern",
22 "http_status",
23 "order",
24 "enabled",
25 "is_regex",
26 ]
27
28
29@register_viewset
30class RedirectAdmin(AdminViewset):
31 class ListView(AdminModelListView):
32 model = Redirect
33 nav_section = "Redirection"
34 nav_icon = "signpost-split"
35 title = "Redirects"
36 description = "URL redirect rules processed in order."
37 fields = ["from_pattern", "to_pattern", "http_status", "order", "enabled"]
38 search_fields = ["from_pattern", "to_pattern"]
39 allow_global_search = False
40
41 class DetailView(AdminModelDetailView):
42 model = Redirect
43
44 class CreateView(AdminModelCreateView):
45 model = Redirect
46 form_class = RedirectForm
47
48 class UpdateView(AdminModelUpdateView):
49 model = Redirect
50 form_class = RedirectForm
51
52 class DeleteView(AdminModelDeleteView):
53 model = Redirect
54
55
56@register_viewset
57class RedirectLogAdmin(AdminViewset):
58 class ListView(AdminModelListView):
59 model = RedirectLog
60 nav_section = "Redirection"
61 nav_icon = "arrow-repeat"
62 title = "Redirect logs"
63 fields = [
64 "created_at",
65 "from_url",
66 "to_url",
67 "http_status",
68 "user_agent",
69 "ip_address",
70 "referrer",
71 ]
72 search_fields = ["from_url", "to_url", "user_agent", "ip_address", "referrer"]
73 allow_global_search = False
74
75 class DetailView(AdminModelDetailView):
76 model = RedirectLog
77
78
79@register_viewset
80class NotFoundLogAdmin(AdminViewset):
81 class ListView(AdminModelListView):
82 model = NotFoundLog
83 nav_section = "Redirection"
84 nav_icon = "exclamation-circle"
85 title = "404 logs"
86 description = "URLs that returned 404 - useful for finding broken links."
87 fields = ["created_at", "url", "user_agent", "ip_address", "referrer"]
88 search_fields = ["url", "user_agent", "ip_address", "referrer"]
89 allow_global_search = False
90
91 class DetailView(AdminModelDetailView):
92 model = NotFoundLog