Completed
Push — master ( ec11e1...681a20 )
by Bart
26s
created

DocumentListingAdmin   A

Complexity

Total Complexity 0

Size/Duplication

Total Lines 2
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
dl 0
loc 2
rs 10
c 0
b 0
f 0
wmc 0
1
import logging
2
3
from django.conf import settings
4
from django.contrib import admin
5
from django.forms.models import ModelForm
6
from django.contrib.admin import TabularInline
7
8
from mezzanine.core.admin import TabularDynamicInlineAdmin
9
from mezzanine.core.admin import StackedDynamicInlineAdmin
10
from mezzanine.forms.models import Form
11
from mezzanine.forms.admin import FormAdmin
12
from mezzanine.pages.admin import PageAdmin
13
from mezzanine.pages.models import RichTextPage
14
from mezzanine.utils.admin import SingletonAdmin
15
16
from website.jdpages.models import BlogCategoryPage
17
from website.jdpages.models import DocumentListing, Document
18
from website.jdpages.models import Footer
19
from website.jdpages.models import FooterLink
20
from website.jdpages.models import FooterLinks
21
from website.jdpages.models import FooterInfo
22
from website.jdpages.models import HomePage
23
from website.jdpages.models import OrganisationPage
24
from website.jdpages.models import OrganisationPartPage
25
from website.jdpages.models import OrganisationMember
26
from website.jdpages.models import OrganisationPartMember
27
from website.jdpages.models import VisionPage
28
from website.jdpages.models import VisionsPage
29
from website.jdpages.models import ActionBanner
30
from website.jdpages.models import PageHeaderImage
31
from website.jdpages.models import SidebarAgenda
32
from website.jdpages.models import SidebarSocial
33
from website.jdpages.models import SidebarTwitter
34
from website.jdpages.models import SidebarLink
35
from website.jdpages.models import SidebarRichText
36
from website.jdpages.models import SocialMediaUrls
37
from website.jdpages.models import ThatsWhyItem
38
from website.jdpages.models import WordLidPage
39
40
logger = logging.getLogger(__name__)
41
42
43
class AlwaysChangedModelForm(ModelForm):
44
    """
45
    A django modelform that is always changed and will thus always be saved and validated.
46
    To be used for inlines that should also be created with their default/initial values.
47
    """
48
    def has_changed(self):
49
        """
50
        Should return True if data differs from initial.
51
        Unchanged inlines will also get validated and saved by always returning true here.
52
        """
53
        return True
54
55
56
class FooterLinkInline(TabularDynamicInlineAdmin):
57
    model = FooterLink
58
    verbose_name = "Footer link"
59
    verbose_name_plural = "Footer links"
60
61
62
class FooterLinksAdmin(admin.ModelAdmin):
63
    model = FooterLinks
64
    inlines = [FooterLinkInline]
65
66
67
class PageHeaderImageInline(TabularDynamicInlineAdmin):
68
    model = PageHeaderImage
69
    verbose_name = "Header image"
70
    verbose_name_plural = "Header images"
71
72
73
class ActionBannerInline(StackedDynamicInlineAdmin):
74
    model = ActionBanner
75
    extra = 1
76
    verbose_name = "Action banner"
77
    verbose_name_plural = "Action banners"
78
79
80
class SidebarAgendaInline(TabularDynamicInlineAdmin):
81
    model = SidebarAgenda
82
    form = AlwaysChangedModelForm
83
    extra = 0
84
    verbose_name = "Agenda sidebar"
85
    verbose_name_plural = "Agenda sidebars"
86
87
88
class SidebarSocialInline(TabularDynamicInlineAdmin):
89
    model = SidebarSocial
90
    form = AlwaysChangedModelForm
91
    extra = 0
92
    verbose_name = "Social sidebar"
93
    verbose_name_plural = "Social sidebars"
94
95
96
class SidebarTwitterInline(TabularDynamicInlineAdmin):
97
    model = SidebarTwitter
98
    form = AlwaysChangedModelForm
99
    extra = 0
100
    verbose_name = "Twitter sidebar"
101
    verbose_name_plural = "Twitter sidebars"
102
103
104
class SidebarLinkInline(TabularDynamicInlineAdmin):
105
    model = SidebarLink
106
    form = AlwaysChangedModelForm
107
    extra = 0
108
    verbose_name = "Link list sidebar"
109
    verbose_name_plural = "Link list sidebars"
110
111
112
class SidebarRichTextInline(StackedDynamicInlineAdmin):
113
    model = SidebarRichText
114
    extra = 1
115
    verbose_name = "Content sidebar"
116
    verbose_name_plural = "Content sidebars"
117
118
119
class ThatsWhyInline(TabularDynamicInlineAdmin):
120
    model = ThatsWhyItem
121
    form = AlwaysChangedModelForm
122
    extra = 0
123
    verbose_name = "That's why item"
124
    verbose_name_plural = "That's why items"
125
126
127
class HomePageAdmin(PageAdmin):
128
    model = HomePage
129
    filter_vertical = ['vision_pages']
130
    inlines = [PageHeaderImageInline, ActionBannerInline, SidebarAgendaInline, SidebarTwitterInline, SidebarSocialInline]
131
132
133
class VisionsPageAdmin(PageAdmin):
134
    model = VisionsPage
135
    filter_vertical = ['vision_pages']
136
    inlines = [PageHeaderImageInline, SidebarTwitterInline]
137
    verbose_name = "Standpuntenpagina"
138
    verbose_name_plural = "Standpuntenpagina's"
139
140
    def get_form(self, request, obj=None, **kwargs):
141
        # remove the '+' (add) button for vision pages, should not be created here
142
        form = super().get_form(request, obj, **kwargs)
143
        form.base_fields["vision_pages"].widget.can_add_related = False
144
        return form
145
146
147
class VisionPageAdmin(PageAdmin):
148
    model = VisionPage
149
    inlines = [PageHeaderImageInline, SidebarTwitterInline]
150
    verbose_name = "Standpuntpagina"
151
    verbose_name_plural = "Standpuntpagina's"
152
153
154
class OrganisationPageAdmin(PageAdmin):
155
    model = OrganisationPage
156
    inlines = [PageHeaderImageInline, SidebarTwitterInline]
157
    filter_vertical = ['organisation_part_pages']
158
    verbose_name = "Organisatiepagina"
159
    verbose_name_plural = "Organisatiepagina's"
160
161
    def get_form(self, request, obj=None, **kwargs):
162
        # remove the '+' (add) button for part pages, should not be created here
163
        form = super().get_form(request, obj, **kwargs)
164
        form.base_fields["organisation_part_pages"].widget.can_add_related = False
165
        return form
166
167
168
class OrganisationPartPageAdmin(PageAdmin):
169
    model = OrganisationPartPage
170
    inlines = [PageHeaderImageInline, SidebarTwitterInline]
171
    verbose_name = "Organisatieonderdeelpagina"
172
    verbose_name_plural = "Organisatieonderdeelpagina's"
173
174
175
class OrganisationMemberAdmin(admin.ModelAdmin):
176
    model = OrganisationMember
177
    verbose_name = "Organisatielid"
178
    verbose_name_plural = "Organisatieleden"
179
    list_display = (
180
        'name',
181
        'image',
182
        'facebook_url',
183
        'twitter_url',
184
    )
185
    search_fields = ['name']
186
187
188
class OrganisationPartMemberAdmin(admin.ModelAdmin):
189
    model = OrganisationPartMember
190
    verbose_name = "Organisatiefunctie"
191
    verbose_name_plural = "Organisatiefuncties"
192
    list_display = (
193
        'member',
194
        'organisation_part',
195
        'role',
196
    )
197
    search_fields = ['member__name']
198
199
200
class RichtTextPageAdmin(PageAdmin):
201
    inlines = [
202
        PageHeaderImageInline, SidebarAgendaInline, SidebarSocialInline,
203
        SidebarTwitterInline, SidebarLinkInline, SidebarRichTextInline
204
    ]
205
206
207
class BlogPageAdmin(PageAdmin):
208
    inlines = [PageHeaderImageInline]
209
210
211
class WordLidAdmin(PageAdmin):
212
    model = WordLidPage
213
    inlines = [
214
      PageHeaderImageInline, ActionBannerInline, SidebarTwitterInline, SidebarLinkInline, ThatsWhyInline
215
    ]
216
217
class CustomFormAdmin(FormAdmin):
218
    model = Form
219
    inlines = [PageHeaderImageInline, SidebarRichTextInline]
220
    inlines.insert(0, FormAdmin.inlines[0])
221
222
223
class FooterAdmin(SingletonAdmin):
224
    model = Footer
225
    verbose_name = "Footer"
226
    verbose_name_plural = "Footers"
227
228
229
class SocialMediaUrlsAdmin(SingletonAdmin):
230
    model = SocialMediaUrls
231
    verbose_name = "Social media url list"
232
    verbose_name_plural = "Social media url lists"
233
234
235
class DocumentInline(TabularDynamicInlineAdmin):
236
    model = Document
237
238
239
class DocumentListingAdmin(PageAdmin):
240
    inlines = (DocumentInline, PageHeaderImageInline)
241
242
243
admin.site.unregister(RichTextPage)
244
admin.site.register(RichTextPage, RichtTextPageAdmin)
245
246
admin.site.unregister(Form)
247
admin.site.register(Form, CustomFormAdmin)
248
249
admin.site.register(HomePage, HomePageAdmin)
250
admin.site.register(OrganisationPartPage, OrganisationPartPageAdmin)
251
admin.site.register(OrganisationPage, OrganisationPageAdmin)
252
admin.site.register(VisionPage, VisionPageAdmin)
253
admin.site.register(VisionsPage, VisionsPageAdmin)
254
admin.site.register(BlogCategoryPage, BlogPageAdmin)
255
admin.site.register(DocumentListing, DocumentListingAdmin)
256
admin.site.register(WordLidPage, WordLidAdmin)
257
258
admin.site.register(OrganisationMember, OrganisationMemberAdmin)
259
admin.site.register(OrganisationPartMember, OrganisationPartMemberAdmin)
260
261
admin.site.register(Footer, FooterAdmin)
262
admin.site.register(FooterInfo)
263
admin.site.register(FooterLinks, FooterLinksAdmin)
264
admin.site.register(SocialMediaUrls, SocialMediaUrlsAdmin)
265