]> git.parisson.com Git - mezzo.git/commitdiff
Add agenda module inheriting from mezzanine_agenda.models.Event, add related blocks...
authorGuillaume Pellerin <guillaume.pellerin@ircam.fr>
Thu, 25 Aug 2016 14:31:52 +0000 (16:31 +0200)
committerGuillaume Pellerin <guillaume.pellerin@ircam.fr>
Thu, 25 Aug 2016 14:31:52 +0000 (16:31 +0200)
13 files changed:
app/local_settings.py
app/organization/agenda/__init__.py [new file with mode: 0644]
app/organization/agenda/admin.py [new file with mode: 0644]
app/organization/agenda/apps.py [new file with mode: 0644]
app/organization/agenda/migrations/0001_initial.py [new file with mode: 0644]
app/organization/agenda/migrations/__init__.py [new file with mode: 0644]
app/organization/agenda/models.py [new file with mode: 0644]
app/organization/agenda/translation.py [new file with mode: 0644]
app/organization/agenda/urls.py [new file with mode: 0644]
app/organization/agenda/views.py [new file with mode: 0644]
app/settings.py
app/urls.py
lib/mezzanine-agenda

index d4aa41787a2fec19ebb2c0d7998efc4a22a786ac..f76f7949c1ad37dcdf2037e98b26424f948468ec 100644 (file)
@@ -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 (file)
index 0000000..d4dfd15
--- /dev/null
@@ -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 (file)
index 0000000..5e1793a
--- /dev/null
@@ -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 (file)
index 0000000..fd5929f
--- /dev/null
@@ -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 (file)
index 0000000..49c2eaf
--- /dev/null
@@ -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 (file)
index 0000000..e69de29
diff --git a/app/organization/agenda/models.py b/app/organization/agenda/models.py
new file mode 100644 (file)
index 0000000..573c739
--- /dev/null
@@ -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 (file)
index 0000000..dfc2c6f
--- /dev/null
@@ -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 (file)
index 0000000..e69de29
diff --git a/app/organization/agenda/views.py b/app/organization/agenda/views.py
new file mode 100644 (file)
index 0000000..e69de29
index 5bc3977aa594430411337e91ced00e7a34e331ff..6a09c9189f9153975ae36c75ef7c7f6c2689e62a 100644 (file)
@@ -232,6 +232,7 @@ INSTALLED_APPS = [
     "organization.magazine",
     "organization.media",
     "organization.projects",
+    "organization.agenda",
 ]
 
 
index 2bf71e8b31d1e8724b4a5b4c5a8cf336f340730e..6e0a5d17c4016a6d8e890c3f3b5a1b3c53c7ad71 100644 (file)
@@ -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
index 3a5ba723573897568f1ca86eabbeeff47cde57d6..e097aa19ade48f0b03d3b9068a39a0c14d6695d9 160000 (submodule)
@@ -1 +1 @@
-Subproject commit 3a5ba723573897568f1ca86eabbeeff47cde57d6
+Subproject commit e097aa19ade48f0b03d3b9068a39a0c14d6695d9