From: Guillaume Pellerin Date: Thu, 25 Aug 2016 14:31:52 +0000 (+0200) Subject: Add agenda module inheriting from mezzanine_agenda.models.Event, add related blocks... X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=f6e9e71e3b6880bc9f9cf92e5caa111ff0c8372b;p=mezzo.git Add agenda module inheriting from mezzanine_agenda.models.Event, add related blocks and images --- diff --git a/app/local_settings.py b/app/local_settings.py index d4aa4178..f76f7949 100644 --- a/app/local_settings.py +++ b/app/local_settings.py @@ -96,7 +96,7 @@ warnings.filterwarnings( 'ignore', r"DateTimeField .* received a naive datetime", RuntimeWarning, r'django\.db\.models\.fields') -EVENT_SLUG = 'events' +EVENT_SLUG = 'agenda' EVENT_GOOGLE_MAPS_DOMAIN = 'maps.google.fr' EVENT_PER_PAGE = 50 EVENT_USE_FEATURED_IMAGE = True diff --git a/app/organization/agenda/__init__.py b/app/organization/agenda/__init__.py new file mode 100644 index 00000000..d4dfd15b --- /dev/null +++ b/app/organization/agenda/__init__.py @@ -0,0 +1,7 @@ +""" +Provides abstract models and admin features used throughout the various +Mezzanine apps. +""" +from __future__ import unicode_literals + +default_app_config = 'organization.agenda.apps.AgendaConfig' diff --git a/app/organization/agenda/admin.py b/app/organization/agenda/admin.py new file mode 100644 index 00000000..5e1793ae --- /dev/null +++ b/app/organization/agenda/admin.py @@ -0,0 +1,52 @@ +from __future__ import unicode_literals + +from copy import deepcopy + +from django.contrib import admin +from django.utils.translation import ugettext_lazy as _ + +from mezzanine.core.admin import * +from mezzanine.pages.admin import PageAdmin +from mezzanine.conf import settings +from mezzanine.core.admin import DisplayableAdmin, OwnableAdmin + +from mezzanine_agenda.models import Event +from mezzanine_agenda.admin import * + +from organization.core.models import * +from organization.agenda.models import * + + +class EventBlockInline(StackedDynamicInlineAdmin): + + model = EventBlock + + +class EventImageInline(TabularDynamicInlineAdmin): + + model = EventImage + + +class CustomEventAdmin(EventAdmin): + """ + Admin class for events. + """ + + fieldsets = deepcopy(EventAdminBase.fieldsets) + exclude = ("short_url", ) + list_display = ["title", "start", "end", "user", "status", "admin_link"] + if settings.EVENT_USE_FEATURED_IMAGE: + list_display.insert(0, "admin_thumb") + list_filter = deepcopy(DisplayableAdmin.list_filter) + ("location",) + inlines = [EventBlockInline, EventImageInline,] + + def save_form(self, request, form, change): + """ + Super class ordering is important here - user must get saved first. + """ + OwnableAdmin.save_form(self, request, form, change) + return DisplayableAdmin.save_form(self, request, form, change) + + +admin.site.unregister(Event) +admin.site.register(Event, CustomEventAdmin) diff --git a/app/organization/agenda/apps.py b/app/organization/agenda/apps.py new file mode 100644 index 00000000..fd5929fa --- /dev/null +++ b/app/organization/agenda/apps.py @@ -0,0 +1,9 @@ +from django.apps import AppConfig + +from django.core.checks import register + + +class AgendaConfig(AppConfig): + + name = 'organization.agenda' + label = 'organization-agenda' diff --git a/app/organization/agenda/migrations/0001_initial.py b/app/organization/agenda/migrations/0001_initial.py new file mode 100644 index 00000000..49c2eaf5 --- /dev/null +++ b/app/organization/agenda/migrations/0001_initial.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.7 on 2016-08-25 14:27 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion +import mezzanine.core.fields + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('mezzanine_agenda', '0003_remove_event_blog_posts'), + ] + + operations = [ + migrations.CreateModel( + name='EventBlock', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('content', mezzanine.core.fields.RichTextField(verbose_name='Content')), + ('_order', mezzanine.core.fields.OrderField(null=True, verbose_name='Order')), + ('title', models.CharField(max_length=1024, verbose_name='title')), + ('description', models.TextField(blank=True, verbose_name='description')), + ('with_separator', models.BooleanField(default=False)), + ('background_color', models.CharField(blank=True, choices=[('black', 'black'), ('yellow', 'yellow'), ('red', 'red')], max_length=32, verbose_name='background color')), + ('event', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='blocks', to='mezzanine_agenda.Event', verbose_name='event')), + ], + options={ + 'verbose_name': 'block', + 'verbose_name_plural': 'blocks', + 'ordering': ('_order',), + }, + ), + migrations.CreateModel( + name='EventImage', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('_order', mezzanine.core.fields.OrderField(null=True, verbose_name='Order')), + ('title', models.CharField(max_length=1024, verbose_name='title')), + ('description', models.TextField(blank=True, verbose_name='description')), + ('file', mezzanine.core.fields.FileField(max_length=1024, verbose_name='Image')), + ('credits', models.CharField(blank=True, max_length=256, null=True, verbose_name='credits')), + ('type', models.CharField(choices=[('logo', 'logo'), ('slider', 'slider'), ('card', 'card'), ('page_slider', 'page slider')], max_length=64, verbose_name='type')), + ('event', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='images', to='mezzanine_agenda.Event', verbose_name='event')), + ], + options={ + 'verbose_name': 'image', + 'verbose_name_plural': 'images', + 'ordering': ('_order',), + }, + ), + ] diff --git a/app/organization/agenda/migrations/__init__.py b/app/organization/agenda/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/app/organization/agenda/models.py b/app/organization/agenda/models.py new file mode 100644 index 00000000..573c7391 --- /dev/null +++ b/app/organization/agenda/models.py @@ -0,0 +1,25 @@ +from __future__ import unicode_literals +from future.builtins import str + +from django.utils.translation import ugettext_lazy as _ + +from mezzanine_agenda.models import Event +from organization.core.models import * + + +class EventBlock(Block): + + event = models.ForeignKey(Event, verbose_name=_('event'), related_name='blocks', blank=True, null=True, on_delete=models.SET_NULL) + + class Meta: + verbose_name = _("block") + verbose_name_plural = _("blocks") + + +class EventImage(Image): + + event = models.ForeignKey(Event, verbose_name=_('event'), related_name='images', blank=True, null=True, on_delete=models.SET_NULL) + + class Meta: + verbose_name = _("image") + verbose_name_plural = _("images") diff --git a/app/organization/agenda/translation.py b/app/organization/agenda/translation.py new file mode 100644 index 00000000..dfc2c6fb --- /dev/null +++ b/app/organization/agenda/translation.py @@ -0,0 +1,15 @@ +from modeltranslation.translator import translator, register, TranslationOptions + +from organization.agenda.models import * + + +@register(EventBlock) +class EventBlockTranslationOptions(TranslationOptions): + + fields = () + + +@register(EventImage) +class EventImageTranslationOptions(TranslationOptions): + + fields = () diff --git a/app/organization/agenda/urls.py b/app/organization/agenda/urls.py new file mode 100644 index 00000000..e69de29b diff --git a/app/organization/agenda/views.py b/app/organization/agenda/views.py new file mode 100644 index 00000000..e69de29b diff --git a/app/settings.py b/app/settings.py index 5bc3977a..6a09c918 100644 --- a/app/settings.py +++ b/app/settings.py @@ -232,6 +232,7 @@ INSTALLED_APPS = [ "organization.magazine", "organization.media", "organization.projects", + "organization.agenda", ] diff --git a/app/urls.py b/app/urls.py index 2bf71e8b..6e0a5d17 100644 --- a/app/urls.py +++ b/app/urls.py @@ -30,7 +30,7 @@ urlpatterns += [ # App urls url("^", include('organization.urls')), - url("^events/%s/" % settings.EVENT_SLUG, include("mezzanine_agenda.urls")), + url("^%s/" % settings.EVENT_SLUG, include("mezzanine_agenda.urls")), url("^styles/$", direct_to_template, {"template": "styles.html"}, name="styles"), # We don't want to presume how your homepage works, so here are a diff --git a/lib/mezzanine-agenda b/lib/mezzanine-agenda index 3a5ba723..e097aa19 160000 --- a/lib/mezzanine-agenda +++ b/lib/mezzanine-agenda @@ -1 +1 @@ -Subproject commit 3a5ba723573897568f1ca86eabbeeff47cde57d6 +Subproject commit e097aa19ade48f0b03d3b9068a39a0c14d6695d9