forked from coderedcorp/coderedcms
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathwagtail_hooks.py
More file actions
executable file
·139 lines (114 loc) · 4.78 KB
/
wagtail_hooks.py
File metadata and controls
executable file
·139 lines (114 loc) · 4.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
import mimetypes
from django.contrib.contenttypes.models import ContentType
from django.templatetags.static import static
from django.http.response import HttpResponse
from django.urls import reverse
from django.utils.html import format_html
from django.utils.translation import gettext_lazy as _
from wagtail.admin.menu import MenuItem
from wagtail import hooks
from wagtail.models import UserPagePermissionsProxy, get_page_models
from wagtailcache.cache import clear_cache
from coderedcms import __version__
@hooks.register("insert_global_admin_css")
def global_admin_css():
return format_html(
'<link rel="stylesheet" type="text/css" href="{}?v={}">',
static("coderedcms/css/crx-admin.css"),
__version__,
)
@hooks.register("insert_editor_css")
def editor_css():
return format_html(
'<link rel="stylesheet" type="text/css" href="{}?v={}">',
static("coderedcms/css/crx-editor.css"),
__version__,
)
@hooks.register("insert_editor_js")
def collapsible_js():
return format_html(
'<script src="{}?v={}"></script>',
static("coderedcms/js/crx-editor.js"),
__version__,
)
@hooks.register("register_icons")
def register_icons(icons):
"""
Add custom SVG icons to the Wagtail admin.
"""
# These SVG files should be in the django templates folder, and follow exact
# specifications to work with Wagtail:
# https://github.com/wagtail/wagtail/pull/6028
icons.append("coderedcms/icons/cr-align-left.svg")
icons.append("coderedcms/icons/cr-check-square-o.svg")
icons.append("coderedcms/icons/cr-columns.svg")
icons.append("coderedcms/icons/cr-desktop.svg")
icons.append("coderedcms/icons/cr-font.svg")
icons.append("coderedcms/icons/cr-google.svg")
icons.append("coderedcms/icons/cr-hand-pointer-o.svg")
icons.append("coderedcms/icons/cr-hashtag.svg")
icons.append("coderedcms/icons/cr-header.svg")
icons.append("coderedcms/icons/cr-list-alt.svg")
icons.append("coderedcms/icons/cr-map.svg")
icons.append("coderedcms/icons/cr-newspaper-o.svg")
icons.append("coderedcms/icons/cr-puzzle-piece.svg")
icons.append("coderedcms/icons/cr-recycle.svg")
icons.append("coderedcms/icons/cr-stop.svg")
icons.append("coderedcms/icons/cr-th-large.svg")
icons.append("coderedcms/icons/cr-universal-access.svg")
icons.append("coderedcms/icons/cr-usd.svg")
icons.append("coderedcms/icons/cr-window-maximize.svg")
icons.append("coderedcms/icons/cr-window-minimize.svg")
return icons
def clear_wagtailcache(*args, **kwargs):
clear_cache()
# Clear cache whenever pages/snippets are changed. Err on the side of clearing
# the cache vs not clearing the cache, as this usually leads to support requests
# when staff members make edits but do not see the changes.
hooks.register("after_delete_page", clear_wagtailcache)
hooks.register("after_move_page", clear_wagtailcache)
hooks.register("after_publish_page", clear_wagtailcache)
hooks.register("after_unpublish_page", clear_wagtailcache)
hooks.register("after_create_snippet", clear_wagtailcache)
hooks.register("after_edit_snippet", clear_wagtailcache)
hooks.register("after_delete_snippet", clear_wagtailcache)
@hooks.register("filter_form_submissions_for_user")
def crx_forms(user, editable_forms):
"""
Add our own CoderedFormPage to editable_forms, since wagtail is unaware
of its existence. Essentially this is a fork of wagtail.contrib.forms.get_forms_for_user()
and wagtail.contrib.forms.get_form_types()
"""
from coderedcms.models import CoderedFormMixin
form_models = [
model
for model in get_page_models()
if issubclass(model, CoderedFormMixin)
]
form_types = list(ContentType.objects.get_for_models(*form_models).values())
editable_forms = UserPagePermissionsProxy(user).editable_pages()
editable_forms = editable_forms.filter(content_type__in=form_types)
return editable_forms
@hooks.register("before_serve_document")
def serve_document_directly(document, request):
"""
This hook prevents documents from being downloaded unless
specified by an <a> tag with the download attribute.
"""
content_type, content_encoding = mimetypes.guess_type(document.filename)
response = HttpResponse(document.file.read(), content_type=content_type)
response["Content-Disposition"] = 'inline;filename="{0}"'.format(
document.filename
)
response["Content-Encoding"] = content_encoding
return response
class ImportExportMenuItem(MenuItem):
def is_shown(self, request):
return request.user.is_superuser
@hooks.register("register_settings_menu_item")
def register_import_export_menu_item():
return ImportExportMenuItem(
_("Import"),
reverse("import_index"),
classnames="icon icon-download",
)