]> git.parisson.com Git - mezzo.git/commitdiff
Task #105 #106: adding Video and Audio inlines to DepartmentPage / TeamPage / CustomP...
authorEmilie <zawadzki@ircam.fr>
Fri, 26 Aug 2016 16:32:05 +0000 (18:32 +0200)
committerEmilie <zawadzki@ircam.fr>
Fri, 26 Aug 2016 16:32:05 +0000 (18:32 +0200)
app/organization/core/models.py
app/organization/magazine/migrations/0011_auto_20160826_1708.py [new file with mode: 0644]
app/organization/magazine/models.py
app/organization/media/migrations/0002_auto_20160826_1805.py [new file with mode: 0644]
app/organization/media/migrations/0003_auto_20160826_1806.py [new file with mode: 0644]
app/organization/media/models.py
app/organization/media/translation.py
app/organization/network/admin.py
app/organization/pages/admin.py
app/organization/projects/admin.py

index 3122be9d8bf9b4c79bb9e421a19f5902873a5c2c..c77628b8d9d567dcc753dfd1f532aeb1ae107e61 100644 (file)
@@ -170,7 +170,6 @@ class Link(URL):
         return self.url
 
 
-
 class Period(models.Model):
 
     date_begin = models.DateField(_('begin date'), null=True, blank=True)
@@ -180,7 +179,6 @@ class Period(models.Model):
         abstract = True
 
 
-
 class CustomDisplayable(Displayable):
 
     class Meta:
@@ -217,7 +215,6 @@ class DisplayableLink(Link):
         order_with_respect_to = "displayable"
 
 
-
 class CustomModel(models.Model):
 
     class Meta:
diff --git a/app/organization/magazine/migrations/0011_auto_20160826_1708.py b/app/organization/magazine/migrations/0011_auto_20160826_1708.py
new file mode 100644 (file)
index 0000000..4b6956a
--- /dev/null
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.10 on 2016-08-26 15:08
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('organization-magazine', '0010_auto_20160825_1843'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='article',
+            name='topics',
+            field=models.ManyToManyField(blank=True, related_name='articles', to='organization-magazine.Topic', verbose_name='topics'),
+        ),
+    ]
index a926c66cba53908947358951f806a3eeb4d059fa..647c47ef129f2cb62c6e34b3f920d78a6e94b774 100644 (file)
@@ -19,7 +19,7 @@ class Article(BlogPost, SubTitled):
     related_articles = models.ManyToManyField("self",
                                  verbose_name=_("Related articles"), blank=True)
     department = models.ForeignKey(Department, verbose_name=_('department'), related_name='articles', limit_choices_to=dict(id__in=Department.objects.all()), blank=True, null=True, on_delete=models.SET_NULL)
-    topics = models.ManyToManyField("Topic", verbose_name=_('topics'), related_name="articles", blank=True, null=True)
+    topics = models.ManyToManyField("Topic", verbose_name=_('topics'), related_name="articles", blank=True)
 
     def get_absolute_url(self):
         return reverse("magazine-article-detail", kwargs={"slug": self.slug})
diff --git a/app/organization/media/migrations/0002_auto_20160826_1805.py b/app/organization/media/migrations/0002_auto_20160826_1805.py
new file mode 100644 (file)
index 0000000..e396965
--- /dev/null
@@ -0,0 +1,149 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.10 on 2016-08-26 16:05
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('organization-core', '0003_auto_20160825_1232'),
+        ('organization-media', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='audio',
+            name='_meta_title',
+        ),
+        migrations.RemoveField(
+            model_name='audio',
+            name='created',
+        ),
+        migrations.RemoveField(
+            model_name='audio',
+            name='description',
+        ),
+        migrations.RemoveField(
+            model_name='audio',
+            name='expiry_date',
+        ),
+        migrations.RemoveField(
+            model_name='audio',
+            name='gen_description',
+        ),
+        migrations.RemoveField(
+            model_name='audio',
+            name='id',
+        ),
+        migrations.RemoveField(
+            model_name='audio',
+            name='in_sitemap',
+        ),
+        migrations.RemoveField(
+            model_name='audio',
+            name='keywords_string',
+        ),
+        migrations.RemoveField(
+            model_name='audio',
+            name='publish_date',
+        ),
+        migrations.RemoveField(
+            model_name='audio',
+            name='short_url',
+        ),
+        migrations.RemoveField(
+            model_name='audio',
+            name='site',
+        ),
+        migrations.RemoveField(
+            model_name='audio',
+            name='slug',
+        ),
+        migrations.RemoveField(
+            model_name='audio',
+            name='status',
+        ),
+        migrations.RemoveField(
+            model_name='audio',
+            name='title',
+        ),
+        migrations.RemoveField(
+            model_name='audio',
+            name='updated',
+        ),
+        migrations.RemoveField(
+            model_name='video',
+            name='_meta_title',
+        ),
+        migrations.RemoveField(
+            model_name='video',
+            name='created',
+        ),
+        migrations.RemoveField(
+            model_name='video',
+            name='description',
+        ),
+        migrations.RemoveField(
+            model_name='video',
+            name='expiry_date',
+        ),
+        migrations.RemoveField(
+            model_name='video',
+            name='gen_description',
+        ),
+        migrations.RemoveField(
+            model_name='video',
+            name='id',
+        ),
+        migrations.RemoveField(
+            model_name='video',
+            name='in_sitemap',
+        ),
+        migrations.RemoveField(
+            model_name='video',
+            name='keywords_string',
+        ),
+        migrations.RemoveField(
+            model_name='video',
+            name='publish_date',
+        ),
+        migrations.RemoveField(
+            model_name='video',
+            name='short_url',
+        ),
+        migrations.RemoveField(
+            model_name='video',
+            name='site',
+        ),
+        migrations.RemoveField(
+            model_name='video',
+            name='slug',
+        ),
+        migrations.RemoveField(
+            model_name='video',
+            name='status',
+        ),
+        migrations.RemoveField(
+            model_name='video',
+            name='title',
+        ),
+        migrations.RemoveField(
+            model_name='video',
+            name='updated',
+        ),
+        migrations.AddField(
+            model_name='audio',
+            name='customdisplayable_ptr',
+            field=models.OneToOneField(auto_created=True, default=1, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='organization-core.CustomDisplayable'),
+            preserve_default=False,
+        ),
+        migrations.AddField(
+            model_name='video',
+            name='customdisplayable_ptr',
+            field=models.OneToOneField(auto_created=True, default=1, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='organization-core.CustomDisplayable'),
+            preserve_default=False,
+        ),
+    ]
diff --git a/app/organization/media/migrations/0003_auto_20160826_1806.py b/app/organization/media/migrations/0003_auto_20160826_1806.py
new file mode 100644 (file)
index 0000000..b26a6a3
--- /dev/null
@@ -0,0 +1,49 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.10 on 2016-08-26 16:06
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('pages', '0004_auto_20160804_1547'),
+        ('organization-media', '0002_auto_20160826_1805'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='PageAudio',
+            fields=[
+                ('audio_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='organization-media.Audio')),
+                ('page', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='audios', to='pages.Page', verbose_name='page')),
+            ],
+            options={
+                'verbose_name_plural': 'audios',
+                'verbose_name': 'audio',
+            },
+            bases=('organization-media.audio',),
+        ),
+        migrations.CreateModel(
+            name='PageVideo',
+            fields=[
+                ('video_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='organization-media.Video')),
+                ('page', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='videos', to='pages.Page', verbose_name='page')),
+            ],
+            options={
+                'verbose_name_plural': 'videos',
+                'verbose_name': 'video',
+            },
+            bases=('organization-media.video',),
+        ),
+        migrations.AlterOrderWithRespectTo(
+            name='pagevideo',
+            order_with_respect_to='page',
+        ),
+        migrations.AlterOrderWithRespectTo(
+            name='pageaudio',
+            order_with_respect_to='page',
+        ),
+    ]
index 4945a4869026acd71457165f312e4396a2000e56..c182aaff26d5f472d6af0dc7e03909c97c06795a 100644 (file)
@@ -1,12 +1,15 @@
 from __future__ import unicode_literals
 
+from pyquery import PyQuery as pq
+
 from django.db import models
 from django.utils.translation import ugettext_lazy as _
 
 from mezzanine.core.models import RichText, Displayable, Slugged
 from mezzanine.core.fields import RichTextField, OrderField, FileField
 from mezzanine.utils.models import AdminThumbMixin, upload_to
-
+from organization.core.models import CustomDisplayable
+from organization.pages.models import Page
 from mezzanine_agenda.models import Event
 from django.conf import settings
 
@@ -14,7 +17,7 @@ from django.conf import settings
 MEDIA_BASE_URL = getattr(settings, 'MEDIA_BASE_URL', 'http://medias.ircam.fr/embed/media/')
 
 
-class Media(Displayable, RichText):
+class Media(CustomDisplayable, RichText):
     """Media"""
 
     media_id = models.CharField(_('media id'), max_length=128)
@@ -64,6 +67,16 @@ class Audio(Media):
         return reverse("festival-video-detail", kwargs={"slug": self.slug})
 
 
+class PageAudio(Audio):
+
+    page = models.ForeignKey(Page, verbose_name=_('page'), related_name='audios', blank=True, null=True, on_delete=models.SET_NULL)
+
+    class Meta:
+        verbose_name = _("audio")
+        verbose_name_plural = _("audios")
+        order_with_respect_to = "page"
+
+
 class Video(Media):
     """Video"""
 
@@ -83,6 +96,16 @@ class Video(Media):
         return reverse("festival-video-detail", kwargs={"slug": self.slug})
 
 
+class PageVideo(Video):
+
+    page = models.ForeignKey(Page, verbose_name=_('page'), related_name='videos', blank=True, null=True, on_delete=models.SET_NULL)
+
+    class Meta:
+        verbose_name = _("video")
+        verbose_name_plural = _("videos")
+        order_with_respect_to = "page"
+
+
 class VideoCategory(Slugged):
     """Video Category"""
 
index bd097142468352ccab0afd42b455fcf38bb52b4c..2567061fa3d2e1827364868fefc6120b5e4143ee 100644 (file)
@@ -13,3 +13,14 @@ class VideoTranslationOptions(TranslationOptions):
 class AudioTranslationOptions(TranslationOptions):
 
     fields = ('title', 'description', 'content')
+
+
+@register(PageVideo)
+class PageVideoTranslationOptions(TranslationOptions):
+
+    pass
+
+@register(PageAudio)
+class PageAudioTranslationOptions(TranslationOptions):
+
+    pass
index db5685c0352f4aa6ee8c2a598a8c097b201e540a..0078351dcb566d8a2e647fa110c38adb40e17968 100644 (file)
@@ -7,6 +7,17 @@ from mezzanine.pages.admin import PageAdmin
 from organization.network.models import *
 from organization.pages.models import *
 from organization.core.admin import *
+from organization.media.models import PageAudio, PageVideo
+
+
+class PageAudioInline(StackedDynamicInlineAdmin):
+
+    model = PageAudio
+
+
+class PageVideoInline(StackedDynamicInlineAdmin):
+
+    model = PageVideo
 
 
 class OrganizationImageInline(TabularDynamicInlineAdmin):
@@ -32,7 +43,7 @@ class DepartmentPageImageInline(TabularDynamicInlineAdmin):
 
 class DepartmentPageAdmin(PageAdmin):
 
-    inlines = [DepartmentPageImageInline, DepartmentPageBlockInline]
+    inlines = [DepartmentPageImageInline, DepartmentPageBlockInline, PageAudioInline, PageVideoInline, ]
 
 
 class DepartmentAdmin(BaseTranslationModelAdmin):
@@ -56,7 +67,7 @@ class TeamPageBlockInline(StackedDynamicInlineAdmin):
 
 class TeamPageAdmin(PageAdmin):
 
-    inlines = [TeamPageImageInline, TeamPageBlockInline]
+    inlines = [TeamPageImageInline, TeamPageBlockInline, PageAudioInline, PageVideoInline, ]
 
 
 class PersonAdminBase(BaseTranslationModelAdmin):
index 1e342399718edf8465aef6eb080bbe70616c2dd2..6c6142226afee66e6b585207a10a148674a5cb77 100644 (file)
@@ -8,7 +8,7 @@ from mezzanine.pages.admin import PageAdmin
 from organization.pages.models import *
 from organization.pages.models import DynamicContentHomeSlider, DynamicContentHomeBody, Home
 from organization.pages.forms import DynamicContentHomeSliderForm, DynamicContentHomeBodyForm
-
+from organization.media.models import PageAudio, PageVideo
 
 class PageBlockInline(StackedDynamicInlineAdmin):
 
@@ -20,9 +20,19 @@ class PageImageInline(TabularDynamicInlineAdmin):
     model = PageImage
 
 
+class PageAudioInline(StackedDynamicInlineAdmin):
+
+    model = PageAudio
+
+
+class PageVideoInline(StackedDynamicInlineAdmin):
+
+    model = PageVideo
+
+
 class CustomPageAdmin(PageAdmin):
 
-    inlines = [PageBlockInline, PageImageInline]
+    inlines = [PageBlockInline, PageImageInline, PageAudioInline, PageVideoInline, ]
 
 
 class DynamicContentHomeSliderInline(TabularDynamicInlineAdmin):
index e9ce207bbe7ada384ff7cd1a0e583750e3f688e2..8131f0fc675aed3dd87139b91a45f6a5176c6b63 100644 (file)
@@ -7,7 +7,7 @@ from mezzanine.core.admin import *
 
 from organization.projects.models import *
 from organization.pages.models import *
-
+from organization.media.models import Video, Audio
 
 class ProjectLinkInline(StackedDynamicInlineAdmin):
 
@@ -24,6 +24,16 @@ class ProjectBlockInline(StackedDynamicInlineAdmin):
     model = DisplayableBlock
 
 
+class ProjectAudioInline(StackedDynamicInlineAdmin):
+
+    model = Audio
+
+
+class ProjectVideoInline(StackedDynamicInlineAdmin):
+
+    model = Video
+
+
 class ProjectAdmin(admin.ModelAdmin):
 
     model = Project
@@ -32,7 +42,7 @@ class ProjectAdmin(admin.ModelAdmin):
 class ProjectAdminDisplayable(DisplayableAdmin):
 
     fieldsets = deepcopy(ProjectAdmin.fieldsets)
-    inlines = [ProjectImageInline, ProjectBlockInline, ProjectLinkInline, ]
+    inlines = [ProjectImageInline, ProjectBlockInline, ProjectAudioInline, ProjectVideoInline]
     filter_horizontal = ['persons', 'teams', 'organizations']