]> git.parisson.com Git - mezzo.git/commitdiff
Complete refactoring with more generic blocks, images, links, etc thanks to meta...
authorGuillaume Pellerin <guillaume.pellerin@ircam.fr>
Tue, 23 Aug 2016 17:51:19 +0000 (19:51 +0200)
committerGuillaume Pellerin <guillaume.pellerin@ircam.fr>
Tue, 23 Aug 2016 17:51:19 +0000 (19:51 +0200)
65 files changed:
app/organization/core/admin.py
app/organization/core/migrations/0001_initial.py
app/organization/core/migrations/0002_auto_20160714_1952.py [deleted file]
app/organization/core/migrations/0003_category_pageblock.py [deleted file]
app/organization/core/migrations/0004_auto_20160725_0159.py [deleted file]
app/organization/core/migrations/0005_auto_20160725_0201.py [deleted file]
app/organization/core/migrations/0006_pageimage.py [deleted file]
app/organization/core/migrations/0007_auto_20160726_0042.py [deleted file]
app/organization/core/migrations/0008_auto_20160727_1553.py [deleted file]
app/organization/core/migrations/0009_pageblock_with_separator.py [deleted file]
app/organization/core/migrations/0010_auto_20160808_0118.py [deleted file]
app/organization/core/migrations/0011_auto_20160809_1413.py [deleted file]
app/organization/core/migrations/0012_auto_20160818_1656.py [deleted file]
app/organization/core/migrations/0013_auto_20160823_1359.py [deleted file]
app/organization/core/models.py
app/organization/core/translation.py
app/organization/festival/migrations/0001_initial.py
app/organization/festival/models.py
app/organization/magazine/forms.py
app/organization/magazine/migrations/0001_initial.py
app/organization/magazine/migrations/0002_delete_category.py [deleted file]
app/organization/magazine/migrations/0003_auto_20160728_1536.py [deleted file]
app/organization/magazine/migrations/0004_article_related_article.py [deleted file]
app/organization/magazine/migrations/0005_auto_20160728_1551.py [deleted file]
app/organization/magazine/migrations/0006_auto_20160728_1632.py [deleted file]
app/organization/magazine/migrations/0007_topic.py [deleted file]
app/organization/magazine/migrations/0008_topic_content.py [deleted file]
app/organization/magazine/migrations/0009_brief_sort_order.py [deleted file]
app/organization/magazine/migrations/0010_auto_20160808_0118.py [deleted file]
app/organization/magazine/migrations/0011_articleimage.py [deleted file]
app/organization/magazine/migrations/0012_auto_20160812_1738.py [deleted file]
app/organization/magazine/migrations/0013_auto_20160812_1813.py [deleted file]
app/organization/magazine/migrations/0014_auto_20160818_1124.py [deleted file]
app/organization/magazine/migrations/0015_auto_20160818_1131.py [deleted file]
app/organization/magazine/migrations/0016_auto_20160818_1230.py [deleted file]
app/organization/magazine/migrations/0017_brief_external_content.py [deleted file]
app/organization/magazine/migrations/0018_auto_20160818_1232.py [deleted file]
app/organization/magazine/migrations/0019_auto_20160818_1233.py [deleted file]
app/organization/magazine/migrations/0020_auto_20160818_1238.py [deleted file]
app/organization/magazine/models.py
app/organization/magazine/views.py
app/organization/media/migrations/0001_initial.py
app/organization/media/migrations/0002_auto_20160721_1351.py [deleted file]
app/organization/media/migrations/0003_remove_playlist_description.py [deleted file]
app/organization/media/models.py
app/organization/network/admin.py
app/organization/network/migrations/0001_initial.py
app/organization/network/migrations/0002_auto_20160823_1425.py [deleted file]
app/organization/network/migrations/0002_auto_20160823_1945.py [new file with mode: 0644]
app/organization/network/migrations/0003_auto_20160823_1438.py [deleted file]
app/organization/network/models.py
app/organization/network/translation.py
app/organization/pages/admin.py
app/organization/pages/forms.py
app/organization/pages/migrations/0001_initial.py
app/organization/pages/models.py
app/organization/pages/translation.py
app/organization/pages/views.py
app/organization/projects/admin.py
app/organization/projects/migrations/0001_initial.py
app/organization/projects/models.py
app/organization/projects/translation.py
app/templates/pages/basicpage.html
app/templates/pages/departmentpage.html
app/templates/pages/teampage.html

index 47e8e3bce9be0cb7be97a0bf95dc874c165243ca..688d1cf52dda6d9fb9f0892715fa7e7b7f97cd76 100644 (file)
@@ -4,22 +4,4 @@ from mezzanine.core.admin import *
 from mezzanine.pages.admin import PageAdmin
 from organization.core.models import *
 
-
-class PageBlockInline(StackedDynamicInlineAdmin):
-
-    model = PageBlock
-
-
-class PageImageInline(TabularDynamicInlineAdmin):
-
-    model = PageImage
-
-
-class BasicPageAdmin(PageAdmin):
-
-    inlines = [PageBlockInline, PageImageInline]
-
-
-
-admin.site.register(BasicPage, BasicPageAdmin)
 admin.site.register(LinkType)
index 451e32ac9a15d56c85e58e1ad78570c6ad07fcbd..c89061022ee8c323e6cf76b2ef26c4f6d1dcd384 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-07-14 16:53
+# Generated by Django 1.9.7 on 2016-08-23 17:45
 from __future__ import unicode_literals
 
 from django.db import migrations, models
@@ -12,23 +12,185 @@ class Migration(migrations.Migration):
     initial = True
 
     dependencies = [
-        ('pages', '0001_initial'),
+        ('sites', '0002_alter_domain_unique'),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='BasicPage',
+            name='Category',
             fields=[
-                ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='pages.Page')),
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=512, verbose_name='name')),
+                ('description', models.TextField(blank=True, verbose_name='description')),
+            ],
+            options={
+                'verbose_name': 'category',
+            },
+        ),
+        migrations.CreateModel(
+            name='CustomDisplayable',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('keywords_string', models.CharField(blank=True, editable=False, max_length=500)),
+                ('title', models.CharField(max_length=500, verbose_name='Title')),
+                ('slug', models.CharField(blank=True, help_text='Leave blank to have the URL auto-generated from the title.', max_length=2000, null=True, verbose_name='URL')),
+                ('_meta_title', models.CharField(blank=True, help_text='Optional title to be used in the HTML title tag. If left blank, the main title field will be used.', max_length=500, null=True, verbose_name='Title')),
+                ('description', models.TextField(blank=True, verbose_name='Description')),
+                ('gen_description', models.BooleanField(default=True, help_text='If checked, the description will be automatically generated from content. Uncheck if you want to manually set a custom description.', verbose_name='Generate description')),
+                ('created', models.DateTimeField(editable=False, null=True)),
+                ('updated', models.DateTimeField(editable=False, null=True)),
+                ('status', models.IntegerField(choices=[(1, 'Draft'), (2, 'Published')], default=2, help_text='With Draft chosen, will only be shown for admin users on the site.', verbose_name='Status')),
+                ('publish_date', models.DateTimeField(blank=True, db_index=True, help_text="With Published chosen, won't be shown until this time", null=True, verbose_name='Published from')),
+                ('expiry_date', models.DateTimeField(blank=True, help_text="With Published chosen, won't be shown after this time", null=True, verbose_name='Expires on')),
+                ('short_url', models.URLField(blank=True, null=True)),
+                ('in_sitemap', models.BooleanField(default=True, verbose_name='Show in sitemap')),
+                ('site', models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.Site')),
+            ],
+            options={
+                'verbose_name': 'custom displayable',
+            },
+        ),
+        migrations.CreateModel(
+            name='CustomModel',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+            ],
+            options={
+                'verbose_name': 'custom model',
+            },
+        ),
+        migrations.CreateModel(
+            name='DisplayableBlock',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                 ('content', mezzanine.core.fields.RichTextField(verbose_name='Content')),
-                ('sub_title', models.TextField(blank=True, max_length=1024, verbose_name='sub title')),
-                ('sub_title_fr', models.TextField(blank=True, max_length=1024, null=True, verbose_name='sub title')),
-                ('sub_title_en', models.TextField(blank=True, max_length=1024, null=True, verbose_name='sub title')),
+                ('content_fr', mezzanine.core.fields.RichTextField(null=True, verbose_name='Content')),
+                ('content_en', mezzanine.core.fields.RichTextField(null=True, verbose_name='Content')),
+                ('_order', mezzanine.core.fields.OrderField(null=True, verbose_name='Order')),
+                ('title', models.CharField(max_length=1024, verbose_name='title')),
+                ('title_fr', models.CharField(max_length=1024, null=True, verbose_name='title')),
+                ('title_en', models.CharField(max_length=1024, null=True, 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')),
+                ('displayable', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='blocks', to='organization-core.CustomDisplayable', verbose_name='displayable')),
             ],
             options={
+                'verbose_name': 'block',
                 'ordering': ('_order',),
-                'verbose_name': 'basic page',
+                'verbose_name_plural': 'blocks',
+            },
+        ),
+        migrations.CreateModel(
+            name='DisplayableImage',
+            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')),
+                ('description_fr', models.TextField(blank=True, null=True, verbose_name='description')),
+                ('description_en', models.TextField(blank=True, null=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(blank=True, choices=[('logo', 'logo'), ('slider', 'slider'), ('card', 'card'), ('content', 'content')], max_length=64, verbose_name='type')),
+                ('displayable', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='images', to='organization-core.CustomDisplayable', verbose_name='displayable')),
+            ],
+            options={
+                'verbose_name': 'image',
+                'ordering': ('_order',),
+                'verbose_name_plural': 'images',
+            },
+        ),
+        migrations.CreateModel(
+            name='DisplayableLink',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('url', models.URLField(blank=True, max_length=512, verbose_name='URL')),
+                ('displayable', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='links', to='organization-core.CustomDisplayable', verbose_name='displayable')),
+            ],
+            options={
+                'verbose_name': 'link',
+                'verbose_name_plural': 'links',
             },
-            bases=('pages.page', models.Model),
+        ),
+        migrations.CreateModel(
+            name='LinkType',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=256, verbose_name='name')),
+                ('slug', models.SlugField(blank=True, help_text='Use this field to define a simple identifier that can be used to style the different link types (i.e. assign social media icons to them)', max_length=256, verbose_name='slug')),
+                ('ordering', models.PositiveIntegerField(blank=True, null=True, verbose_name='ordering')),
+            ],
+            options={
+                'ordering': ['ordering'],
+            },
+        ),
+        migrations.CreateModel(
+            name='ModelBlock',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('content', mezzanine.core.fields.RichTextField(verbose_name='Content')),
+                ('content_fr', mezzanine.core.fields.RichTextField(null=True, verbose_name='Content')),
+                ('content_en', mezzanine.core.fields.RichTextField(null=True, verbose_name='Content')),
+                ('_order', mezzanine.core.fields.OrderField(null=True, verbose_name='Order')),
+                ('title', models.CharField(max_length=1024, verbose_name='title')),
+                ('title_fr', models.CharField(max_length=1024, null=True, verbose_name='title')),
+                ('title_en', models.CharField(max_length=1024, null=True, 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')),
+                ('model', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='blocks', to='organization-core.CustomModel', verbose_name='model')),
+            ],
+            options={
+                'verbose_name': 'block',
+                'ordering': ('_order',),
+                'verbose_name_plural': 'blocks',
+            },
+        ),
+        migrations.CreateModel(
+            name='ModelImage',
+            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')),
+                ('description_fr', models.TextField(blank=True, null=True, verbose_name='description')),
+                ('description_en', models.TextField(blank=True, null=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(blank=True, choices=[('logo', 'logo'), ('slider', 'slider'), ('card', 'card'), ('content', 'content')], max_length=64, verbose_name='type')),
+                ('model', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='images', to='organization-core.CustomModel', verbose_name='model')),
+            ],
+            options={
+                'verbose_name': 'image',
+                'ordering': ('_order',),
+                'verbose_name_plural': 'images',
+            },
+        ),
+        migrations.CreateModel(
+            name='ModelLink',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('url', models.URLField(blank=True, max_length=512, verbose_name='URL')),
+                ('link_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organization-core.LinkType', verbose_name='link type')),
+                ('model', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='links', to='organization-core.CustomModel', verbose_name='model')),
+            ],
+            options={
+                'verbose_name': 'link',
+                'verbose_name_plural': 'links',
+            },
+        ),
+        migrations.AddField(
+            model_name='displayablelink',
+            name='link_type',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organization-core.LinkType', verbose_name='link type'),
+        ),
+        migrations.AlterOrderWithRespectTo(
+            name='modellink',
+            order_with_respect_to='model',
+        ),
+        migrations.AlterOrderWithRespectTo(
+            name='displayablelink',
+            order_with_respect_to='displayable',
         ),
     ]
diff --git a/app/organization/core/migrations/0002_auto_20160714_1952.py b/app/organization/core/migrations/0002_auto_20160714_1952.py
deleted file mode 100644 (file)
index 19c08d5..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-07-14 17:52
-from __future__ import unicode_literals
-
-from django.db import migrations
-import mezzanine.core.fields
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-core', '0001_initial'),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name='basicpage',
-            name='content_en',
-            field=mezzanine.core.fields.RichTextField(null=True, verbose_name='Content'),
-        ),
-        migrations.AddField(
-            model_name='basicpage',
-            name='content_fr',
-            field=mezzanine.core.fields.RichTextField(null=True, verbose_name='Content'),
-        ),
-    ]
diff --git a/app/organization/core/migrations/0003_category_pageblock.py b/app/organization/core/migrations/0003_category_pageblock.py
deleted file mode 100644 (file)
index 9476c9d..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-07-24 23:17
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-import mezzanine.core.fields
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-core', '0002_auto_20160714_1952'),
-    ]
-
-    operations = [
-        migrations.CreateModel(
-            name='Category',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('name', models.CharField(max_length=512, verbose_name='name')),
-            ],
-            options={
-                'verbose_name': 'category',
-            },
-        ),
-        migrations.CreateModel(
-            name='PageBlock',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('content', mezzanine.core.fields.RichTextField(verbose_name='Content')),
-                ('title', models.CharField(max_length=1024, verbose_name='name')),
-                ('background_color', models.CharField(blank=True, choices=[('black', 'black'), ('yellow', 'yellow'), ('red', 'red')], max_length=32, verbose_name='background color')),
-            ],
-            options={
-                'verbose_name': 'page block',
-            },
-        ),
-    ]
diff --git a/app/organization/core/migrations/0004_auto_20160725_0159.py b/app/organization/core/migrations/0004_auto_20160725_0159.py
deleted file mode 100644 (file)
index 580e7f2..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-07-24 23:59
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-import django.db.models.deletion
-import mezzanine.core.fields
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('pages', '0002_auto_20160725_0143'),
-        ('organization-core', '0003_category_pageblock'),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name='pageblock',
-            name='content_en',
-            field=mezzanine.core.fields.RichTextField(null=True, verbose_name='Content'),
-        ),
-        migrations.AddField(
-            model_name='pageblock',
-            name='content_fr',
-            field=mezzanine.core.fields.RichTextField(null=True, verbose_name='Content'),
-        ),
-        migrations.AddField(
-            model_name='pageblock',
-            name='page',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='pages.Page', verbose_name='page'),
-        ),
-        migrations.AddField(
-            model_name='pageblock',
-            name='title_en',
-            field=models.CharField(max_length=1024, null=True, verbose_name='name'),
-        ),
-        migrations.AddField(
-            model_name='pageblock',
-            name='title_fr',
-            field=models.CharField(max_length=1024, null=True, verbose_name='name'),
-        ),
-    ]
diff --git a/app/organization/core/migrations/0005_auto_20160725_0201.py b/app/organization/core/migrations/0005_auto_20160725_0201.py
deleted file mode 100644 (file)
index 3e00ae9..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-07-25 00:01
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-core', '0004_auto_20160725_0159'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='pageblock',
-            name='title',
-            field=models.CharField(max_length=1024, verbose_name='title'),
-        ),
-        migrations.AlterField(
-            model_name='pageblock',
-            name='title_en',
-            field=models.CharField(max_length=1024, null=True, verbose_name='title'),
-        ),
-        migrations.AlterField(
-            model_name='pageblock',
-            name='title_fr',
-            field=models.CharField(max_length=1024, null=True, verbose_name='title'),
-        ),
-    ]
diff --git a/app/organization/core/migrations/0006_pageimage.py b/app/organization/core/migrations/0006_pageimage.py
deleted file mode 100644 (file)
index 4e89a50..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-07-25 22:38
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-import django.db.models.deletion
-import mezzanine.core.fields
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('pages', '0002_auto_20160725_0143'),
-        ('organization-core', '0005_auto_20160725_0201'),
-    ]
-
-    operations = [
-        migrations.CreateModel(
-            name='PageImage',
-            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')),
-                ('file', mezzanine.core.fields.FileField(max_length=1024, verbose_name='Image')),
-                ('description', models.TextField(blank=True, verbose_name='photo description')),
-                ('credits', models.CharField(blank=True, max_length=256, null=True, verbose_name='photo credits')),
-                ('page', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pages.Page')),
-            ],
-            options={
-                'ordering': ('_order',),
-                'verbose_name_plural': 'Images',
-                'verbose_name': 'Image',
-            },
-        ),
-    ]
diff --git a/app/organization/core/migrations/0007_auto_20160726_0042.py b/app/organization/core/migrations/0007_auto_20160726_0042.py
deleted file mode 100644 (file)
index f89f17e..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-07-25 22:42
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-core', '0006_pageimage'),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name='pageimage',
-            name='description_en',
-            field=models.TextField(blank=True, null=True, verbose_name='photo description'),
-        ),
-        migrations.AddField(
-            model_name='pageimage',
-            name='description_fr',
-            field=models.TextField(blank=True, null=True, verbose_name='photo description'),
-        ),
-    ]
diff --git a/app/organization/core/migrations/0008_auto_20160727_1553.py b/app/organization/core/migrations/0008_auto_20160727_1553.py
deleted file mode 100644 (file)
index e246faf..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-07-27 13:53
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-import mezzanine.core.fields
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-core', '0007_auto_20160726_0042'),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name='basicpage',
-            name='photo',
-            field=mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='photo'),
-        ),
-        migrations.AddField(
-            model_name='basicpage',
-            name='photo_alignment',
-            field=models.CharField(blank=True, choices=[('left', 'left'), ('center', 'center'), ('right', 'right')], default='left', max_length=32, verbose_name='photo alignment'),
-        ),
-        migrations.AddField(
-            model_name='basicpage',
-            name='photo_card',
-            field=mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='card photo'),
-        ),
-        migrations.AddField(
-            model_name='basicpage',
-            name='photo_card_credits',
-            field=models.CharField(blank=True, max_length=255, null=True, verbose_name='photo card credits'),
-        ),
-        migrations.AddField(
-            model_name='basicpage',
-            name='photo_credits',
-            field=models.CharField(blank=True, max_length=255, null=True, verbose_name='photo credits'),
-        ),
-        migrations.AddField(
-            model_name='basicpage',
-            name='photo_description',
-            field=models.TextField(blank=True, verbose_name='photo description'),
-        ),
-        migrations.AddField(
-            model_name='basicpage',
-            name='photo_slider',
-            field=mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='slider photo'),
-        ),
-        migrations.AddField(
-            model_name='basicpage',
-            name='photo_slider_credits',
-            field=models.CharField(blank=True, max_length=255, null=True, verbose_name='photo slider credits'),
-        ),
-    ]
diff --git a/app/organization/core/migrations/0009_pageblock_with_separator.py b/app/organization/core/migrations/0009_pageblock_with_separator.py
deleted file mode 100644 (file)
index 49ac7b1..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-07-27 14:38
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-core', '0008_auto_20160727_1553'),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name='pageblock',
-            name='with_separator',
-            field=models.BooleanField(default=False),
-        ),
-    ]
diff --git a/app/organization/core/migrations/0010_auto_20160808_0118.py b/app/organization/core/migrations/0010_auto_20160808_0118.py
deleted file mode 100644 (file)
index 6799e47..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-08-07 23:18
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-core', '0009_pageblock_with_separator'),
-    ]
-
-    operations = [
-        migrations.CreateModel(
-            name='LinkType',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('name', models.CharField(max_length=256, verbose_name='name')),
-                ('slug', models.SlugField(blank=True, help_text='Use this field to define a simple identifier that can be used to style the different link types (i.e. assign social media icons to them)', max_length=256, verbose_name='slug')),
-                ('ordering', models.PositiveIntegerField(blank=True, null=True, verbose_name='ordering')),
-            ],
-            options={
-                'ordering': ['ordering'],
-            },
-        ),
-        migrations.AlterModelOptions(
-            name='pageimage',
-            options={'ordering': ('_order',), 'verbose_name': 'image', 'verbose_name_plural': 'images'},
-        ),
-    ]
diff --git a/app/organization/core/migrations/0011_auto_20160809_1413.py b/app/organization/core/migrations/0011_auto_20160809_1413.py
deleted file mode 100644 (file)
index 3b0f766..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-08-09 12:13
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-import django.db.models.deletion
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-core', '0010_auto_20160808_0118'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='pageimage',
-            name='credits',
-            field=models.CharField(blank=True, max_length=256, null=True, verbose_name='credits'),
-        ),
-        migrations.AlterField(
-            model_name='pageimage',
-            name='description',
-            field=models.TextField(blank=True, verbose_name='description'),
-        ),
-        migrations.AlterField(
-            model_name='pageimage',
-            name='description_en',
-            field=models.TextField(blank=True, null=True, verbose_name='description'),
-        ),
-        migrations.AlterField(
-            model_name='pageimage',
-            name='description_fr',
-            field=models.TextField(blank=True, null=True, verbose_name='description'),
-        ),
-        migrations.AlterField(
-            model_name='pageimage',
-            name='page',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pages.Page', verbose_name='page'),
-        ),
-    ]
diff --git a/app/organization/core/migrations/0012_auto_20160818_1656.py b/app/organization/core/migrations/0012_auto_20160818_1656.py
deleted file mode 100644 (file)
index 4b1c7be..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-08-18 14:56
-from __future__ import unicode_literals
-
-from django.db import migrations
-import mezzanine.core.fields
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-core', '0011_auto_20160809_1413'),
-    ]
-
-    operations = [
-        migrations.AlterModelOptions(
-            name='pageblock',
-            options={'ordering': ('_order',), 'verbose_name': 'page block'},
-        ),
-        migrations.AddField(
-            model_name='pageblock',
-            name='_order',
-            field=mezzanine.core.fields.OrderField(null=True, verbose_name='Order'),
-        ),
-    ]
diff --git a/app/organization/core/migrations/0013_auto_20160823_1359.py b/app/organization/core/migrations/0013_auto_20160823_1359.py
deleted file mode 100644 (file)
index e667ec8..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-08-23 11:59
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-core', '0012_auto_20160818_1656'),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name='category',
-            name='description',
-            field=models.TextField(blank=True, verbose_name='description'),
-        ),
-        migrations.AddField(
-            model_name='pageblock',
-            name='description',
-            field=models.TextField(blank=True, verbose_name='description'),
-        ),
-    ]
index 914169a6535808d5385c80b1aa93e54a5be7448e..e66c8ce9ae58e87aff29ddd74e9a4420fac496a0 100644 (file)
@@ -12,6 +12,7 @@ from mezzanine.core.models import Displayable, Slugged, Orderable
 
 COLOR_CHOICES = (('black', _('black')), ('yellow', _('yellow')), ('red', _('red')))
 ALIGNMENT_CHOICES = (('left', _('left')), ('center', _('center')), ('right', _('right')))
+IMAGE_TYPE_CHOICES = (('logo', _('logo')), ('slider', _('slider')), ('card', _('card')), ('content', _('content')))
 
 
 class Description(models.Model):
@@ -53,7 +54,7 @@ class Titled(models.Model):
         return self.title
 
 
-class SubTitle(models.Model):
+class SubTitled(models.Model):
 
     sub_title = models.TextField(_('sub title'), blank=True, max_length=1024)
 
@@ -71,46 +72,32 @@ class Category(Named):
         return self.name
 
 
-class Photo(models.Model):
-    """Photo bundle with credits"""
-
-    photo = FileField(_('photo'), upload_to='images/photos', max_length=1024, blank=True, format="Image")
-    photo_credits = models.CharField(_('photo credits'), max_length=255, blank=True, null=True)
-    photo_alignment = models.CharField(_('photo alignment'), choices=ALIGNMENT_CHOICES, max_length=32, default="left", blank=True)
-    photo_description = models.TextField(_('photo description'), blank=True)
-
-    photo_card = FileField(_('card photo'), upload_to='images/photos/card', max_length=1024, blank=True, format="Image")
-    photo_card_credits = models.CharField(_('photo card credits'), max_length=255, blank=True, null=True)
+class Block(RichText, Titled, Orderable):
 
-    photo_slider = FileField(_('slider photo'), upload_to='images/photos/slider', max_length=1024, blank=True, format="Image")
-    photo_slider_credits = models.CharField(_('photo slider credits'), max_length=255, blank=True, null=True)
-    abstract = True
+    with_separator = models.BooleanField(default=False)
+    background_color = models.CharField(_('background color'), max_length=32, choices=COLOR_CHOICES, blank=True)
 
     class Meta:
         abstract = True
 
-    @property
-    def card(self):
-        if self.photo_card:
-            return self.photo_card
-        else:
-            return self.photo
-
-
-class BasicPage(Page, SubTitle, Photo, RichText):
-
-    class Meta:
-        verbose_name = 'basic page'
-
 
-class Block(RichText, Titled, Orderable):
+class Image(Titled, Orderable):
 
-    with_separator = models.BooleanField(default=False)
-    background_color = models.CharField(_('background color'), max_length=32, choices=COLOR_CHOICES, blank=True)
+    file = FileField(_("Image"), max_length=1024, format="Image", upload_to="images")
+    credits = models.CharField(_('credits'), max_length=256, blank=True, null=True)
+    type = models.CharField(_('type'), max_length=64, choices=IMAGE_TYPE_CHOICES, blank=True)
 
     class Meta:
         abstract = True
 
+    def __str__(self):
+        value = self.description
+        if not value:
+            value = self.file.name
+        if not value:
+            value = ""
+        return value
+
 
 class DynamicContent(models.Model):
 
@@ -136,40 +123,13 @@ class DynamicContent(models.Model):
         abstract = True
 
 
-class Image(Description, Orderable):
+class URL(models.Model):
 
-    file = FileField(_("Image"), max_length=1024, format="Image", upload_to="images")
-    credits = models.CharField(_('credits'), max_length=256, blank=True, null=True)
+    url = models.URLField(_('URL'), max_length=512, blank=True)
 
     class Meta:
         abstract = True
 
-    def __str__(self):
-        value = self.description
-        if not value:
-            value = self.file.name
-        if not value:
-            value = ""
-        return value
-
-
-class PageBlock(Block):
-
-    page = models.ForeignKey(Page, verbose_name=_('page'), blank=True, null=True, on_delete=models.SET_NULL)
-
-    class Meta:
-        verbose_name = 'page block'
-
-
-class PageImage(Image):
-
-    page = models.ForeignKey(Page, verbose_name=_('page'))
-
-    class Meta:
-        verbose_name = _("image")
-        verbose_name_plural = _("images")
-        order_with_respect_to = "page"
-
 
 class LinkType(models.Model):
     """
@@ -196,11 +156,10 @@ class LinkType(models.Model):
         return self.name
 
 
-class Link(models.Model):
+class Link(URL):
     """A person can have many links."""
 
     link_type = models.ForeignKey(LinkType, verbose_name=_('link type'))
-    url = models.URLField(verbose_name=_('URL'))
 
     class Meta:
         abstract = True
@@ -211,6 +170,7 @@ class Link(models.Model):
         return self.url
 
 
+
 class Period(models.Model):
 
     date_begin = models.DateField(_('begin date'), null=True, blank=True)
@@ -218,3 +178,77 @@ class Period(models.Model):
 
     class Meta:
         abstract = True
+
+
+
+class CustomDisplayable(Displayable):
+
+    class Meta:
+        verbose_name = _('custom displayable')
+
+
+class DisplayableBlock(Block):
+
+    displayable = models.ForeignKey(CustomDisplayable, verbose_name=_('displayable'), related_name='blocks', blank=True, null=True, on_delete=models.SET_NULL)
+
+    class Meta:
+        verbose_name = _('block')
+        verbose_name_plural = _("blocks")
+        order_with_respect_to = "displayable"
+
+
+class DisplayableImage(Image):
+
+    displayable = models.ForeignKey(CustomDisplayable, verbose_name=_('displayable'), related_name='images', blank=True, null=True, on_delete=models.SET_NULL)
+
+    class Meta:
+        verbose_name = _('image')
+        verbose_name_plural = _("images")
+        order_with_respect_to = "displayable"
+
+
+class DisplayableLink(Link):
+
+    displayable = models.ForeignKey(CustomDisplayable, verbose_name=_('displayable'), related_name='links', blank=True, null=True, on_delete=models.SET_NULL)
+
+    class Meta:
+        verbose_name = _('link')
+        verbose_name_plural = _("links")
+        order_with_respect_to = "displayable"
+
+
+
+class CustomModel(models.Model):
+
+    class Meta:
+        verbose_name = _('custom model')
+
+
+class ModelBlock(Block):
+
+    model = models.ForeignKey(CustomModel, verbose_name=_('model'), related_name='blocks', blank=True, null=True, on_delete=models.SET_NULL)
+
+    class Meta:
+        verbose_name = _('block')
+        verbose_name_plural = _("blocks")
+        order_with_respect_to = "model"
+
+
+class ModelImage(Image):
+
+    model = models.ForeignKey(CustomModel, verbose_name=_('model'), related_name='images', blank=True, null=True, on_delete=models.SET_NULL)
+
+    class Meta:
+        verbose_name = _('image')
+        verbose_name_plural = _("images")
+        order_with_respect_to = "model"
+
+
+class ModelLink(Link):
+
+    model = models.ForeignKey(CustomModel, verbose_name=_('model'), related_name='links', blank=True, null=True, on_delete=models.SET_NULL)
+
+    class Meta:
+        verbose_name = _('link')
+        verbose_name_plural = _("links")
+        order_with_respect_to = "model"
index be8346b819826dd310decb678a18452369682e13..73343c0bbe8b0a01434f775daf74068a641c2a88 100644 (file)
@@ -3,24 +3,50 @@ from mezzanine.pages.models import Page, RichText
 from mezzanine.pages.translation import TranslatedRichText
 from organization.core.models import *
 
-# @register(SubTitle)
-# class SubTitleTranslationOptions(TranslationOptions):
-#
-#     fields = ('sub_title',)
 
-@register(BasicPage)
-class BasicPageTranslationOptions(TranslationOptions):
+@register(CustomDisplayable)
+class CustomDisplayableTranslationOptions(TranslationOptions):
 
-    fields = ('sub_title', 'content')
+    pass
 
 
-@register(PageBlock)
-class PageBlockTranslationOptions(TranslationOptions):
+@register(DisplayableImage)
+class DisplayableImageTranslationOptions(TranslationOptions):
+
+    fields = ('description',)
+
+
+@register(DisplayableLink)
+class DisplayableLinkTranslationOptions(TranslationOptions):
+
+    pass
+
+
+@register(DisplayableBlock)
+class DisplayableBlockTranslationOptions(TranslationOptions):
+
+    fields = ('title', 'content', )
 
-    fields = ('title', 'content')
 
+@register(CustomModel)
+class CustomModelTranslationOptions(TranslationOptions):
 
-@register(PageImage)
-class PageImageTranslationOptions(TranslationOptions):
+    pass
+
+
+@register(ModelImage)
+class ModelImageTranslationOptions(TranslationOptions):
 
     fields = ('description',)
+
+
+@register(ModelLink)
+class ModelLinkTranslationOptions(TranslationOptions):
+
+    pass
+
+
+@register(ModelBlock)
+class ModelBlockTranslationOptions(TranslationOptions):
+
+    fields = ('title', 'content', )
index 95909e599acf15fa63b270886d7bce5888356bae..765d9bf24cb89490d23c32e4c332a1f33ca2299e 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-07-14 16:53
+# Generated by Django 1.9.7 on 2016-08-23 17:45
 from __future__ import unicode_literals
 
 from django.db import migrations, models
@@ -41,14 +41,6 @@ class Migration(migrations.Migration):
                 ('content', mezzanine.core.fields.RichTextField(verbose_name='Content')),
                 ('content_fr', mezzanine.core.fields.RichTextField(null=True, verbose_name='Content')),
                 ('content_en', mezzanine.core.fields.RichTextField(null=True, verbose_name='Content')),
-                ('photo', mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='photo')),
-                ('photo_credits', models.CharField(blank=True, max_length=255, null=True, verbose_name='photo credits')),
-                ('photo_alignment', models.CharField(blank=True, choices=[('left', 'left'), ('center', 'center'), ('right', 'right')], default='left', max_length=32, verbose_name='photo alignment')),
-                ('photo_description', models.TextField(blank=True, verbose_name='photo description')),
-                ('photo_card', mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='card photo')),
-                ('photo_card_credits', models.CharField(blank=True, max_length=255, null=True, verbose_name='photo card credits')),
-                ('photo_slider', mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='slider photo')),
-                ('photo_slider_credits', models.CharField(blank=True, max_length=255, null=True, verbose_name='photo slider credits')),
                 ('first_name', models.CharField(blank=True, max_length=255, null=True, verbose_name='first name')),
                 ('last_name', models.CharField(blank=True, max_length=255, null=True, verbose_name='last name')),
                 ('bio', mezzanine.core.fields.RichTextField(blank=True, verbose_name='biography')),
@@ -60,6 +52,6 @@ class Migration(migrations.Migration):
                 'verbose_name': 'artist',
                 'ordering': ['last_name'],
             },
-            bases=(mezzanine.utils.models.AdminThumbMixin, models.Model),
+            bases=(models.Model, mezzanine.utils.models.AdminThumbMixin),
         ),
     ]
index 5b110a40f82bdb1573d98c7af58bb21c84047a3d..f2d55d59f33a4b763ac4e5294b1d4cbb55eb1b90 100644 (file)
@@ -15,7 +15,7 @@ import requests
 from pyquery import PyQuery as pq
 
 
-class Artist(Displayable, RichText, AdminThumbMixin, Photo):
+class Artist(Displayable, RichText, AdminThumbMixin):
     """Artist"""
 
     first_name = models.CharField(_('first name'), max_length=255, blank=True, null=True)
index 0a9768ca25a1f926cc826926afce10369e8652ca..0560c124502a93307ab226fc3f250c0f33632081 100644 (file)
@@ -4,7 +4,7 @@ import dal_queryset_sequence
 import dal_select2_queryset_sequence
 
 from organization.magazine.models import Article, Topic, Brief
-from organization.core.models import BasicPage
+from organization.pages.models import CustomPage
 from mezzanine_agenda.models import Event
 
 class BriefForm(autocomplete.FutureModelForm):
@@ -13,7 +13,7 @@ class BriefForm(autocomplete.FutureModelForm):
         queryset=autocomplete.QuerySetSequence(
             Article.objects.all(),
             Event.objects.all(),
-            BasicPage.objects.all(),
+            CustomPage.objects.all(),
         ),
         required=False,
         widget=dal_select2_queryset_sequence.widgets.QuerySetSequenceSelect2('object-autocomplete'),
index 7674365071b34eeeb84d4579522c23b148eae34c..ff10e15bb9a08b48256a135d2262fa2206a3d5ed 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-07-14 16:53
+# Generated by Django 1.9.7 on 2016-08-23 17:45
 from __future__ import unicode_literals
 
 from django.db import migrations, models
@@ -12,7 +12,9 @@ class Migration(migrations.Migration):
     initial = True
 
     dependencies = [
+        ('pages', '0004_auto_20160804_1547'),
         ('sites', '0002_alter_domain_unique'),
+        ('contenttypes', '0002_remove_content_type_name'),
         ('blog', '0001_initial'),
     ]
 
@@ -21,14 +23,35 @@ class Migration(migrations.Migration):
             name='Article',
             fields=[
                 ('blogpost_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='blog.BlogPost')),
-                ('sub_title', models.CharField(blank=True, max_length=1000, verbose_name='sub title')),
-                ('sub_title_fr', models.CharField(blank=True, max_length=1000, null=True, verbose_name='sub title')),
-                ('sub_title_en', models.CharField(blank=True, max_length=1000, null=True, verbose_name='sub title')),
+                ('sub_title', models.TextField(blank=True, max_length=1024, verbose_name='sub title')),
+                ('sub_title_fr', models.TextField(blank=True, max_length=1024, null=True, verbose_name='sub title')),
+                ('sub_title_en', models.TextField(blank=True, max_length=1024, null=True, verbose_name='sub title')),
+                ('related_articles', models.ManyToManyField(blank=True, related_name='_article_related_articles_+', to='organization-magazine.Article', verbose_name='Related articles')),
             ],
             options={
                 'verbose_name': 'article',
             },
-            bases=('blog.blogpost',),
+            bases=('blog.blogpost', models.Model),
+        ),
+        migrations.CreateModel(
+            name='ArticleImage',
+            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')),
+                ('description_fr', models.TextField(blank=True, null=True, verbose_name='description')),
+                ('description_en', models.TextField(blank=True, null=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(blank=True, choices=[('logo', 'logo'), ('slider', 'slider'), ('card', 'card'), ('content', 'content')], max_length=64, verbose_name='type')),
+                ('article', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='images', to='organization-magazine.Article', verbose_name='article')),
+            ],
+            options={
+                'verbose_name': 'image',
+                'ordering': ('_order',),
+                'verbose_name_plural': 'images',
+            },
         ),
         migrations.CreateModel(
             name='Brief',
@@ -51,9 +74,11 @@ class Migration(migrations.Migration):
                 ('text_button', models.CharField(blank=True, max_length=150, verbose_name='text button')),
                 ('text_button_fr', models.CharField(blank=True, max_length=150, null=True, verbose_name='text button')),
                 ('text_button_en', models.CharField(blank=True, max_length=150, null=True, verbose_name='text button')),
-                ('local_content', models.URLField(max_length=1000, verbose_name='local content')),
-                ('local_content_fr', models.URLField(max_length=1000, null=True, verbose_name='local content')),
-                ('local_content_en', models.URLField(max_length=1000, null=True, verbose_name='local content')),
+                ('external_content', models.URLField(blank=True, max_length=1000, verbose_name='external content')),
+                ('external_content_fr', models.URLField(blank=True, max_length=1000, null=True, verbose_name='external content')),
+                ('external_content_en', models.URLField(blank=True, max_length=1000, null=True, verbose_name='external content')),
+                ('object_id', models.PositiveIntegerField(editable=False, null=True, verbose_name='related object')),
+                ('content_type', models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType', verbose_name='content page')),
                 ('site', models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.Site')),
             ],
             options={
@@ -61,14 +86,16 @@ class Migration(migrations.Migration):
             },
         ),
         migrations.CreateModel(
-            name='Category',
+            name='Topic',
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('name', models.CharField(max_length=512, verbose_name='name')),
-                ('description', models.TextField(blank=True, verbose_name='description')),
+                ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='pages.Page')),
+                ('content', mezzanine.core.fields.RichTextField(verbose_name='Content')),
+                ('articles', models.ManyToManyField(blank=True, to='organization-magazine.Article', verbose_name='articles')),
             ],
             options={
-                'verbose_name': 'category',
+                'verbose_name': 'topic',
+                'ordering': ('_order',),
             },
+            bases=('pages.page', models.Model),
         ),
     ]
diff --git a/app/organization/magazine/migrations/0002_delete_category.py b/app/organization/magazine/migrations/0002_delete_category.py
deleted file mode 100644 (file)
index ac8fe7e..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-07-24 23:17
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-magazine', '0001_initial'),
-    ]
-
-    operations = [
-        migrations.DeleteModel(
-            name='Category',
-        ),
-    ]
diff --git a/app/organization/magazine/migrations/0003_auto_20160728_1536.py b/app/organization/magazine/migrations/0003_auto_20160728_1536.py
deleted file mode 100644 (file)
index 4523667..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-07-28 13:36
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-import mezzanine.core.fields
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-magazine', '0002_delete_category'),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name='article',
-            name='photo',
-            field=mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='photo'),
-        ),
-        migrations.AddField(
-            model_name='article',
-            name='photo_alignment',
-            field=models.CharField(blank=True, choices=[('left', 'left'), ('center', 'center'), ('right', 'right')], default='left', max_length=32, verbose_name='photo alignment'),
-        ),
-        migrations.AddField(
-            model_name='article',
-            name='photo_card',
-            field=mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='card photo'),
-        ),
-        migrations.AddField(
-            model_name='article',
-            name='photo_card_credits',
-            field=models.CharField(blank=True, max_length=255, null=True, verbose_name='photo card credits'),
-        ),
-        migrations.AddField(
-            model_name='article',
-            name='photo_credits',
-            field=models.CharField(blank=True, max_length=255, null=True, verbose_name='photo credits'),
-        ),
-        migrations.AddField(
-            model_name='article',
-            name='photo_description',
-            field=models.TextField(blank=True, verbose_name='photo description'),
-        ),
-        migrations.AddField(
-            model_name='article',
-            name='photo_slider',
-            field=mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='slider photo'),
-        ),
-        migrations.AddField(
-            model_name='article',
-            name='photo_slider_credits',
-            field=models.CharField(blank=True, max_length=255, null=True, verbose_name='photo slider credits'),
-        ),
-    ]
diff --git a/app/organization/magazine/migrations/0004_article_related_article.py b/app/organization/magazine/migrations/0004_article_related_article.py
deleted file mode 100644 (file)
index 7cf1a71..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-07-28 13:49
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-magazine', '0003_auto_20160728_1536'),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name='article',
-            name='related_article',
-            field=models.ManyToManyField(blank=True, related_name='_article_related_article_+', to='organization-magazine.Article', verbose_name='Related posts'),
-        ),
-    ]
diff --git a/app/organization/magazine/migrations/0005_auto_20160728_1551.py b/app/organization/magazine/migrations/0005_auto_20160728_1551.py
deleted file mode 100644 (file)
index 3bd17a1..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-07-28 13:51
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-magazine', '0004_article_related_article'),
-    ]
-
-    operations = [
-        migrations.RemoveField(
-            model_name='article',
-            name='related_article',
-        ),
-        migrations.AddField(
-            model_name='article',
-            name='related_articles',
-            field=models.ManyToManyField(blank=True, related_name='_article_related_articles_+', to='organization-magazine.Article', verbose_name='Related posts'),
-        ),
-    ]
diff --git a/app/organization/magazine/migrations/0006_auto_20160728_1632.py b/app/organization/magazine/migrations/0006_auto_20160728_1632.py
deleted file mode 100644 (file)
index 623e436..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-07-28 14:32
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-magazine', '0005_auto_20160728_1551'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='article',
-            name='related_articles',
-            field=models.ManyToManyField(blank=True, related_name='_article_related_articles_+', to='organization-magazine.Article', verbose_name='Related articles'),
-        ),
-    ]
diff --git a/app/organization/magazine/migrations/0007_topic.py b/app/organization/magazine/migrations/0007_topic.py
deleted file mode 100644 (file)
index 68927fe..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-08-04 09:49
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-import django.db.models.deletion
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('pages', '0002_auto_20160725_0143'),
-        ('organization-magazine', '0006_auto_20160728_1632'),
-    ]
-
-    operations = [
-        migrations.CreateModel(
-            name='Topic',
-            fields=[
-                ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='pages.Page')),
-                ('articles', models.ManyToManyField(blank=True, to='organization-magazine.Article', verbose_name='articles')),
-            ],
-            options={
-                'verbose_name': 'topic',
-                'ordering': ('_order',),
-            },
-            bases=('pages.page',),
-        ),
-    ]
diff --git a/app/organization/magazine/migrations/0008_topic_content.py b/app/organization/magazine/migrations/0008_topic_content.py
deleted file mode 100644 (file)
index c18ee88..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-08-04 12:51
-from __future__ import unicode_literals
-
-from django.db import migrations
-import mezzanine.core.fields
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-magazine', '0007_topic'),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name='topic',
-            name='content',
-            field=mezzanine.core.fields.RichTextField(default='', verbose_name='Content'),
-            preserve_default=False,
-        ),
-    ]
diff --git a/app/organization/magazine/migrations/0009_brief_sort_order.py b/app/organization/magazine/migrations/0009_brief_sort_order.py
deleted file mode 100644 (file)
index 8258483..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-08-05 13:48
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-magazine', '0008_topic_content'),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name='brief',
-            name='sort_order',
-            field=models.IntegerField(blank=True, db_index=True, default=1),
-            preserve_default=False,
-        ),
-    ]
diff --git a/app/organization/magazine/migrations/0010_auto_20160808_0118.py b/app/organization/magazine/migrations/0010_auto_20160808_0118.py
deleted file mode 100644 (file)
index 8a70bca..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-08-07 23:18
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-magazine', '0009_brief_sort_order'),
-    ]
-
-    operations = [
-        migrations.AlterModelOptions(
-            name='brief',
-            options={'ordering': ['sort_order'], 'verbose_name': 'brief'},
-        ),
-    ]
diff --git a/app/organization/magazine/migrations/0011_articleimage.py b/app/organization/magazine/migrations/0011_articleimage.py
deleted file mode 100644 (file)
index 704be0a..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-08-12 09:07
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-import django.db.models.deletion
-import mezzanine.core.fields
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-magazine', '0010_auto_20160808_0118'),
-    ]
-
-    operations = [
-        migrations.CreateModel(
-            name='ArticleImage',
-            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')),
-                ('description', models.TextField(blank=True, verbose_name='description')),
-                ('description_fr', models.TextField(blank=True, null=True, verbose_name='description')),
-                ('description_en', models.TextField(blank=True, null=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')),
-                ('article_fk', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organization-magazine.Article', verbose_name='article')),
-            ],
-            options={
-                'verbose_name_plural': 'images',
-                'verbose_name': 'image',
-                'ordering': ('_order',),
-            },
-        ),
-    ]
diff --git a/app/organization/magazine/migrations/0012_auto_20160812_1738.py b/app/organization/magazine/migrations/0012_auto_20160812_1738.py
deleted file mode 100644 (file)
index 047fdec..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-08-12 15:38
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-import django.db.models.deletion
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('contenttypes', '0002_remove_content_type_name'),
-        ('organization-magazine', '0011_articleimage'),
-    ]
-
-    operations = [
-        migrations.CreateModel(
-            name='TestModel',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('name', models.CharField(max_length=200)),
-                ('object_id', models.PositiveIntegerField(blank=True, editable=False, null=True)),
-                ('content_type', models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')),
-            ],
-        ),
-        migrations.AddField(
-            model_name='brief',
-            name='content_type',
-            field=models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType'),
-        ),
-        migrations.AddField(
-            model_name='brief',
-            name='object_id',
-            field=models.PositiveIntegerField(blank=True, editable=False, null=True),
-        ),
-    ]
diff --git a/app/organization/magazine/migrations/0013_auto_20160812_1813.py b/app/organization/magazine/migrations/0013_auto_20160812_1813.py
deleted file mode 100644 (file)
index 7bcdb9e..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-08-12 16:13
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-import django.db.models.deletion
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-magazine', '0012_auto_20160812_1738'),
-    ]
-
-    operations = [
-        migrations.RemoveField(
-            model_name='testmodel',
-            name='content_type',
-        ),
-        migrations.AlterField(
-            model_name='brief',
-            name='content_type',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType', verbose_name='content page'),
-        ),
-        migrations.AlterField(
-            model_name='brief',
-            name='object_id',
-            field=models.PositiveIntegerField(null=True, verbose_name='related object'),
-        ),
-        migrations.DeleteModel(
-            name='TestModel',
-        ),
-    ]
diff --git a/app/organization/magazine/migrations/0014_auto_20160818_1124.py b/app/organization/magazine/migrations/0014_auto_20160818_1124.py
deleted file mode 100644 (file)
index 0a5f45e..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-08-18 09:24
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-magazine', '0013_auto_20160812_1813'),
-    ]
-
-    operations = [
-        migrations.AlterModelOptions(
-            name='brief',
-            options={'verbose_name': 'brief'},
-        ),
-        migrations.RemoveField(
-            model_name='brief',
-            name='sort_order',
-        ),
-    ]
diff --git a/app/organization/magazine/migrations/0015_auto_20160818_1131.py b/app/organization/magazine/migrations/0015_auto_20160818_1131.py
deleted file mode 100644 (file)
index 45407e0..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-08-18 09:31
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-import django.db.models.deletion
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-magazine', '0014_auto_20160818_1124'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='brief',
-            name='content_type',
-            field=models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType', verbose_name='content page'),
-        ),
-        migrations.AlterField(
-            model_name='brief',
-            name='object_id',
-            field=models.PositiveIntegerField(editable=False, null=True, verbose_name='related object'),
-        ),
-    ]
diff --git a/app/organization/magazine/migrations/0016_auto_20160818_1230.py b/app/organization/magazine/migrations/0016_auto_20160818_1230.py
deleted file mode 100644 (file)
index 5895165..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-08-18 10:30
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-magazine', '0015_auto_20160818_1131'),
-    ]
-
-    operations = [
-        migrations.RemoveField(
-            model_name='brief',
-            name='local_content',
-        ),
-        migrations.RemoveField(
-            model_name='brief',
-            name='local_content_en',
-        ),
-        migrations.RemoveField(
-            model_name='brief',
-            name='local_content_fr',
-        ),
-    ]
diff --git a/app/organization/magazine/migrations/0017_brief_external_content.py b/app/organization/magazine/migrations/0017_brief_external_content.py
deleted file mode 100644 (file)
index 8cfd436..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-08-18 10:31
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-magazine', '0016_auto_20160818_1230'),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name='brief',
-            name='external_content',
-            field=models.URLField(default=1, max_length=1000, verbose_name='external content'),
-            preserve_default=False,
-        ),
-    ]
diff --git a/app/organization/magazine/migrations/0018_auto_20160818_1232.py b/app/organization/magazine/migrations/0018_auto_20160818_1232.py
deleted file mode 100644 (file)
index 759203f..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-08-18 10:32
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-magazine', '0017_brief_external_content'),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name='brief',
-            name='external_content_en',
-            field=models.URLField(max_length=1000, null=True, verbose_name='external content'),
-        ),
-        migrations.AddField(
-            model_name='brief',
-            name='external_content_fr',
-            field=models.URLField(max_length=1000, null=True, verbose_name='external content'),
-        ),
-    ]
diff --git a/app/organization/magazine/migrations/0019_auto_20160818_1233.py b/app/organization/magazine/migrations/0019_auto_20160818_1233.py
deleted file mode 100644 (file)
index eaef703..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-08-18 10:33
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-magazine', '0018_auto_20160818_1232'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='brief',
-            name='external_content',
-            field=models.URLField(max_length=1000, null=True, verbose_name='external content'),
-        ),
-    ]
diff --git a/app/organization/magazine/migrations/0020_auto_20160818_1238.py b/app/organization/magazine/migrations/0020_auto_20160818_1238.py
deleted file mode 100644 (file)
index b2a1b57..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-08-18 10:38
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-magazine', '0019_auto_20160818_1233'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='brief',
-            name='external_content',
-            field=models.URLField(blank=True, max_length=1000, verbose_name='external content'),
-        ),
-        migrations.AlterField(
-            model_name='brief',
-            name='external_content_en',
-            field=models.URLField(blank=True, max_length=1000, null=True, verbose_name='external content'),
-        ),
-        migrations.AlterField(
-            model_name='brief',
-            name='external_content_fr',
-            field=models.URLField(blank=True, max_length=1000, null=True, verbose_name='external content'),
-        ),
-    ]
index 9c8c8e72fb1b1715fd905a0004bd0679b217d57e..1bfb1484ac20d9df09bf69203b350fceff194823 100644 (file)
@@ -10,22 +10,12 @@ from django.core.urlresolvers import reverse, reverse_lazy
 from mezzanine.core.models import RichText, Displayable, Slugged
 from mezzanine.pages.models import Page
 from mezzanine.blog.models import BlogPost
-#from orderable.models import Orderable
-from organization.core.models import Named, Description, Image, Photo
 
+from organization.core.models import *
 
-class ArticleImage(Image):
-
-    article_fk = models.ForeignKey("Article", verbose_name=_('article'))
-
-    class Meta:
-        verbose_name = _("image")
-        verbose_name_plural = _("images")
-        order_with_respect_to = "article"
 
-class Article(BlogPost, Photo):
+class Article(BlogPost, SubTitled):
 
-    sub_title = models.CharField(_('sub title'), blank=True, max_length=1000)
     related_articles = models.ManyToManyField("self",
                                  verbose_name=_("Related articles"), blank=True)
 
@@ -38,6 +28,16 @@ class Article(BlogPost, Photo):
         verbose_name = _('article')
 
 
+class ArticleImage(Image):
+
+    article = models.ForeignKey("Article", verbose_name=_('article'), related_name='images', blank=True, null=True, on_delete=models.SET_NULL)
+
+    class Meta:
+        verbose_name = _("image")
+        verbose_name_plural = _("images")
+        order_with_respect_to = "article"
+
+
 class Brief(Displayable, RichText): #Orderable
 
     text_button = models.CharField(blank=True, max_length=150, null=False, verbose_name='text button')
index 366d75cb9ac305579f0fc590531b94741a953109..d959e75c99f12c089a5208ddd1f947dd4ecbc7f2 100644 (file)
@@ -12,7 +12,7 @@ from dal_select2_queryset_sequence.views import Select2QuerySetSequenceView
 from mezzanine_agenda.models import Event
 from organization.magazine.models import Article, Topic, Brief
 from organization.network.models import Department
-from organization.core.models import BasicPage
+from organization.pages.models import CustomPage
 from organization.core.views import SlugMixin
 from django.template.defaultfilters import slugify
 
@@ -89,15 +89,15 @@ class ObjectAutocomplete(Select2QuerySetSequenceView):
     def get_queryset(self):
 
         articles = Article.objects.all()
-        basicpage = BasicPage.objects.all()
+        custompage = CustomPage.objects.all()
         events = Event.objects.all()
 
         if self.q:
             articles = articles.filter(title__icontains=self.q)
-            basicpage = basicpage.filter(title__icontains=self.q)
+            custompage = custompage.filter(title__icontains=self.q)
             events = events.filter(title__icontains=self.q)
 
-        qs = autocomplete.QuerySetSequence(articles, basicpage, events )
+        qs = autocomplete.QuerySetSequence(articles, custompage, events )
 
         if self.q:
             # This would apply the filter on all the querysets
index 74c72d6778eda43a7c7ed1dab7bdc14adbcfea7b..dbd0158f9db9a2a428b86fd33f4217704ff26a14 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-07-14 16:54
+# Generated by Django 1.9.7 on 2016-08-23 17:45
 from __future__ import unicode_literals
 
 from django.db import migrations, models
@@ -54,9 +54,10 @@ class Migration(migrations.Migration):
             name='Playlist',
             fields=[
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('title', models.CharField(max_length=512, verbose_name='title')),
-                ('description', models.TextField(blank=True, verbose_name='description')),
+                ('title', models.CharField(max_length=500, verbose_name='Title')),
+                ('slug', models.CharField(blank=True, help_text='Leave blank to have the URL auto-generated from the title.', max_length=2000, null=True, verbose_name='URL')),
                 ('audios', models.ManyToManyField(blank=True, related_name='playlists', to='organization-media.Audio', verbose_name='audios')),
+                ('site', models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.Site')),
             ],
             options={
                 'abstract': False,
diff --git a/app/organization/media/migrations/0002_auto_20160721_1351.py b/app/organization/media/migrations/0002_auto_20160721_1351.py
deleted file mode 100644 (file)
index a7614ae..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-07-21 11:51
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-import django.db.models.deletion
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('sites', '0002_alter_domain_unique'),
-        ('organization-media', '0001_initial'),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name='playlist',
-            name='site',
-            field=models.ForeignKey(default=1, editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.Site'),
-            preserve_default=False,
-        ),
-        migrations.AddField(
-            model_name='playlist',
-            name='slug',
-            field=models.CharField(blank=True, help_text='Leave blank to have the URL auto-generated from the title.', max_length=2000, null=True, verbose_name='URL'),
-        ),
-        migrations.AlterField(
-            model_name='playlist',
-            name='title',
-            field=models.CharField(max_length=500, verbose_name='Title'),
-        ),
-    ]
diff --git a/app/organization/media/migrations/0003_remove_playlist_description.py b/app/organization/media/migrations/0003_remove_playlist_description.py
deleted file mode 100644 (file)
index 2345929..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-07-27 13:53
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-media', '0002_auto_20160721_1351'),
-    ]
-
-    operations = [
-        migrations.RemoveField(
-            model_name='playlist',
-            name='description',
-        ),
-    ]
index d13c8a6d17c663410d21789421b5efc188d000bc..4945a4869026acd71457165f312e4396a2000e56 100644 (file)
@@ -69,7 +69,7 @@ class Video(Media):
 
     open_source_mime_type = 'video/webm'
     closed_source_mime_type = 'video/mp4'
-    category = models.ForeignKey('VideoCategory', related_name='videos', verbose_name=_('category'), blank=True, null=True, on_delete=models.SET_NULL)
+    category = models.ForeignKey('VideoCategory', verbose_name=_('category'), related_name='videos', blank=True, null=True, on_delete=models.SET_NULL)
 
     class Meta:
         verbose_name = _('video')
@@ -97,7 +97,6 @@ class Playlist(Slugged):
     """(Playlist description)"""
 
     audios = models.ManyToManyField('Audio', verbose_name=_('audios'), related_name='playlists', blank=True)
-    #description = models.OneToOneField('organization-core.Description', verbose_name=_('description'), related_name='description', blank=True, on_delete=models.CASCADE)
 
     def __str__(self):
         return self.title
index 91a71ceb117e0c382182784baa3ff09377fcc83c..9e9d15df7767fa60cde11c79c84acd4023b61eec 100644 (file)
@@ -5,28 +5,34 @@ from mezzanine.core.admin import *
 from mezzanine.pages.admin import PageAdmin
 
 from organization.network.models import *
+from organization.pages.models import *
 from organization.core.admin import *
 
 
+class OrganizationImageInline(TabularDynamicInlineAdmin):
+
+    model = ModelImage
+
+
 class OrganizationAdmin(BaseTranslationModelAdmin):
 
     model = Organization
+    inlines = [OrganizationImageInline,]
 
 
-class PersonActivityInline(StackedDynamicInlineAdmin):
+class DepartmentPageImageInline(TabularDynamicInlineAdmin):
 
-    model = PersonActivity
-    fk_name = 'person'
+    model = PageImage
 
 
-class DepartmentAdmin(BaseTranslationModelAdmin):
+class DepartmentPageAdmin(PageAdmin):
 
-    model = Department
+    inlines = [DepartmentPageImageInline,]
 
 
-class DepartmentPageAdmin(PageAdmin):
+class DepartmentAdmin(BaseTranslationModelAdmin):
 
-    inlines = [PageBlockInline, PageImageInline]
+    model = Department
 
 
 class TeamAdmin(BaseTranslationModelAdmin):
@@ -34,9 +40,14 @@ class TeamAdmin(BaseTranslationModelAdmin):
     model = Team
 
 
+class TeamPageImageInline(TabularDynamicInlineAdmin):
+
+    model = PageImage
+
+
 class TeamPageAdmin(PageAdmin):
 
-    inlines = [PageBlockInline, PageImageInline]
+    inlines = [TeamPageImageInline,]
 
 
 class PersonAdminBase(BaseTranslationModelAdmin):
@@ -46,13 +57,24 @@ class PersonAdminBase(BaseTranslationModelAdmin):
 
 class PersonLinkInline(StackedDynamicInlineAdmin):
 
-    model = PersonLink
+    model = DisplayableLink
+
+
+class PersonActivityInline(StackedDynamicInlineAdmin):
+
+    model = PersonActivity
+    fk_name = 'person'
+
+
+class PersonImageInline(TabularDynamicInlineAdmin):
+
+    model = DisplayableImage
 
 
 class PersonAdmin(BaseTranslationModelAdmin):
 
     model = Person
-    inlines = [PersonActivityInline, PersonLinkInline, ]
+    inlines = [PersonImageInline, PersonActivityInline, PersonLinkInline, ]
     first_fields = ['last_name', 'first_name', 'title', 'gender', 'user']
 
     def get_fieldsets(self, request, obj = None):
@@ -66,7 +88,7 @@ class PersonAdmin(BaseTranslationModelAdmin):
 admin.site.register(Organization, OrganizationAdmin)
 admin.site.register(OrganizationType)
 admin.site.register(Department, DepartmentAdmin)
-admin.site.register(Team, TeamAdmin)
 admin.site.register(DepartmentPage, DepartmentPageAdmin)
+admin.site.register(Team, TeamAdmin)
 admin.site.register(TeamPage, TeamPageAdmin)
 admin.site.register(Person, PersonAdmin)
index 29f3674268801effef0eab3f8f19cdcc8544c306..17443fa21ba61e70d026d7187a6f900e348efbb0 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-08-23 12:25
+# Generated by Django 1.9.7 on 2016-08-23 17:45
 from __future__ import unicode_literals
 
 from django.db import migrations, models
@@ -15,7 +15,7 @@ class Migration(migrations.Migration):
 
     dependencies = [
         ('pages', '0004_auto_20160804_1547'),
-        ('organization-core', '0013_auto_20160823_1359'),
+        ('organization-core', '0001_initial'),
     ]
 
     operations = [
@@ -52,15 +52,6 @@ class Migration(migrations.Migration):
                 'verbose_name': 'activity status',
             },
         ),
-        migrations.CreateModel(
-            name='Address',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('address', models.TextField(blank=True, verbose_name='address')),
-                ('postal_code', models.CharField(blank=True, max_length=16, verbose_name='postal code')),
-                ('country', django_countries.fields.CountryField(max_length=2, verbose_name='country')),
-            ],
-        ),
         migrations.CreateModel(
             name='BudgetCode',
             fields=[
@@ -97,22 +88,33 @@ class Migration(migrations.Migration):
                 ('sub_title', models.TextField(blank=True, max_length=1024, verbose_name='sub title')),
                 ('sub_title_fr', models.TextField(blank=True, max_length=1024, null=True, verbose_name='sub title')),
                 ('sub_title_en', models.TextField(blank=True, max_length=1024, null=True, verbose_name='sub title')),
-                ('photo', mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='photo')),
-                ('photo_credits', models.CharField(blank=True, max_length=255, null=True, verbose_name='photo credits')),
-                ('photo_alignment', models.CharField(blank=True, choices=[('left', 'left'), ('center', 'center'), ('right', 'right')], default='left', max_length=32, verbose_name='photo alignment')),
-                ('photo_description', models.TextField(blank=True, verbose_name='photo description')),
-                ('photo_card', mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='card photo')),
-                ('photo_card_credits', models.CharField(blank=True, max_length=255, null=True, verbose_name='photo card credits')),
-                ('photo_slider', mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='slider photo')),
-                ('photo_slider_credits', models.CharField(blank=True, max_length=255, null=True, verbose_name='photo slider credits')),
                 ('weaving_css_class', models.CharField(blank=True, choices=[('pattern-bg--circles', 'circles'), ('pattern-bg--squares', 'squares'), ('pattern-bg--stripes', 'stripes'), ('pattern-bg--triangles', 'triangles')], max_length=64, verbose_name='background pattern')),
             ],
             options={
-                'ordering': ('_order',),
                 'verbose_name': 'department page',
+                'ordering': ('_order',),
             },
             bases=('pages.page', models.Model),
         ),
+        migrations.CreateModel(
+            name='Organization',
+            fields=[
+                ('custommodel_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='organization-core.CustomModel')),
+                ('name', models.CharField(max_length=512, verbose_name='name')),
+                ('description', models.TextField(blank=True, verbose_name='description')),
+                ('description_fr', models.TextField(blank=True, null=True, verbose_name='description')),
+                ('description_en', models.TextField(blank=True, null=True, verbose_name='description')),
+                ('url', models.URLField(blank=True, max_length=512, verbose_name='URL')),
+                ('address', models.TextField(blank=True, verbose_name='address')),
+                ('postal_code', models.CharField(blank=True, max_length=16, verbose_name='postal code')),
+                ('country', django_countries.fields.CountryField(max_length=2, verbose_name='country')),
+                ('is_on_map', models.BooleanField(default=True, verbose_name='is on map')),
+            ],
+            options={
+                'verbose_name': 'organization',
+            },
+            bases=('organization-core.custommodel', models.Model),
+        ),
         migrations.CreateModel(
             name='OrganizationType',
             fields=[
@@ -127,28 +129,7 @@ class Migration(migrations.Migration):
         migrations.CreateModel(
             name='Person',
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('keywords_string', models.CharField(blank=True, editable=False, max_length=500)),
-                ('title', models.CharField(max_length=500, verbose_name='Title')),
-                ('slug', models.CharField(blank=True, help_text='Leave blank to have the URL auto-generated from the title.', max_length=2000, null=True, verbose_name='URL')),
-                ('_meta_title', models.CharField(blank=True, help_text='Optional title to be used in the HTML title tag. If left blank, the main title field will be used.', max_length=500, null=True, verbose_name='Title')),
-                ('description', models.TextField(blank=True, verbose_name='Description')),
-                ('gen_description', models.BooleanField(default=True, help_text='If checked, the description will be automatically generated from content. Uncheck if you want to manually set a custom description.', verbose_name='Generate description')),
-                ('created', models.DateTimeField(editable=False, null=True)),
-                ('updated', models.DateTimeField(editable=False, null=True)),
-                ('status', models.IntegerField(choices=[(1, 'Draft'), (2, 'Published')], default=2, help_text='With Draft chosen, will only be shown for admin users on the site.', verbose_name='Status')),
-                ('publish_date', models.DateTimeField(blank=True, db_index=True, help_text="With Published chosen, won't be shown until this time", null=True, verbose_name='Published from')),
-                ('expiry_date', models.DateTimeField(blank=True, help_text="With Published chosen, won't be shown after this time", null=True, verbose_name='Expires on')),
-                ('short_url', models.URLField(blank=True, null=True)),
-                ('in_sitemap', models.BooleanField(default=True, verbose_name='Show in sitemap')),
-                ('photo', mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='photo')),
-                ('photo_credits', models.CharField(blank=True, max_length=255, null=True, verbose_name='photo credits')),
-                ('photo_alignment', models.CharField(blank=True, choices=[('left', 'left'), ('center', 'center'), ('right', 'right')], default='left', max_length=32, verbose_name='photo alignment')),
-                ('photo_description', models.TextField(blank=True, verbose_name='photo description')),
-                ('photo_card', mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='card photo')),
-                ('photo_card_credits', models.CharField(blank=True, max_length=255, null=True, verbose_name='photo card credits')),
-                ('photo_slider', mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='slider photo')),
-                ('photo_slider_credits', models.CharField(blank=True, max_length=255, null=True, verbose_name='photo slider credits')),
+                ('customdisplayable_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='organization-core.CustomDisplayable')),
                 ('person_title', models.CharField(blank=True, choices=[('Dr', 'Dr'), ('Prof', 'Prof'), ('Prof Dr', 'Prof Dr')], max_length=16, verbose_name='title')),
                 ('gender', models.CharField(blank=True, choices=[('male', 'male'), ('female', 'female')], max_length=16, verbose_name='gender')),
                 ('first_name', models.CharField(blank=True, max_length=255, null=True, verbose_name='first name')),
@@ -160,10 +141,10 @@ class Migration(migrations.Migration):
                 ('permanent', models.BooleanField(default=False, verbose_name='permanent')),
             ],
             options={
-                'ordering': ['last_name'],
                 'verbose_name': 'person',
+                'ordering': ['last_name'],
             },
-            bases=(mezzanine.utils.models.AdminThumbMixin, models.Model),
+            bases=('organization-core.customdisplayable', mezzanine.utils.models.AdminThumbMixin),
         ),
         migrations.CreateModel(
             name='PersonActivity',
@@ -189,29 +170,20 @@ class Migration(migrations.Migration):
                 ('date_added', models.DateTimeField(auto_now_add=True, verbose_name='add date')),
                 ('date_modified', models.DateTimeField(auto_now=True, verbose_name='modification date')),
                 ('date_modified_manual', models.DateTimeField(blank=True, null=True, verbose_name='manual modification date')),
+                ('attachment_organization', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='attachment_activity', to='organization-network.Organization', verbose_name='attachment organization')),
                 ('budget_code', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-network.BudgetCode')),
+                ('employer', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='employer_activity', to='organization-network.Organization', verbose_name='employer')),
                 ('framework', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-network.ActivityFramework', verbose_name='framework')),
                 ('grade', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-network.ActivityGrade', verbose_name='grade')),
                 ('person', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organization-network.Person', verbose_name='person')),
                 ('phd_director', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='phd_director_activity', to='organization-network.Person', verbose_name='PhD director')),
+                ('phd_doctoral_school', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-network.Organization', verbose_name='doctoral school')),
                 ('phd_officer_1', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='phd_officer_1_activity', to='organization-network.Person', verbose_name='PhD officer 1')),
                 ('phd_officer_2', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='phd_officer_2_activity', to='organization-network.Person', verbose_name='PhD officer 2')),
             ],
             options={
-                'verbose_name_plural': 'activities',
                 'verbose_name': 'activity',
-            },
-        ),
-        migrations.CreateModel(
-            name='PersonLink',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('url', models.URLField(verbose_name='URL')),
-                ('link_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organization-core.LinkType', verbose_name='link type')),
-                ('person', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organization-network.Person', verbose_name='person')),
-            ],
-            options={
-                'verbose_name': 'person link',
+                'verbose_name_plural': 'activities',
             },
         ),
         migrations.CreateModel(
@@ -235,27 +207,14 @@ class Migration(migrations.Migration):
                 ('description', models.TextField(blank=True, verbose_name='description')),
                 ('description_fr', models.TextField(blank=True, null=True, verbose_name='description')),
                 ('description_en', models.TextField(blank=True, null=True, verbose_name='description')),
-                ('web_site', models.URLField(blank=True, max_length=512, verbose_name='web site')),
+                ('url', models.URLField(blank=True, max_length=512, verbose_name='URL')),
                 ('department', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='teams', to='organization-network.Department', verbose_name='department')),
+                ('organization', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='teams', to='organization-network.Organization', verbose_name='organization')),
             ],
             options={
                 'verbose_name': 'team',
             },
         ),
-        migrations.CreateModel(
-            name='TeamLink',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('url', models.URLField(verbose_name='URL')),
-                ('link_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organization-core.LinkType', verbose_name='link type')),
-                ('team', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organization-network.Team', verbose_name='links')),
-            ],
-            options={
-                'verbose_name_plural': 'links',
-                'abstract': False,
-                'verbose_name': 'link',
-            },
-        ),
         migrations.CreateModel(
             name='TeamPage',
             fields=[
@@ -266,19 +225,11 @@ class Migration(migrations.Migration):
                 ('sub_title', models.TextField(blank=True, max_length=1024, verbose_name='sub title')),
                 ('sub_title_fr', models.TextField(blank=True, max_length=1024, null=True, verbose_name='sub title')),
                 ('sub_title_en', models.TextField(blank=True, max_length=1024, null=True, verbose_name='sub title')),
-                ('photo', mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='photo')),
-                ('photo_credits', models.CharField(blank=True, max_length=255, null=True, verbose_name='photo credits')),
-                ('photo_alignment', models.CharField(blank=True, choices=[('left', 'left'), ('center', 'center'), ('right', 'right')], default='left', max_length=32, verbose_name='photo alignment')),
-                ('photo_description', models.TextField(blank=True, verbose_name='photo description')),
-                ('photo_card', mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='card photo')),
-                ('photo_card_credits', models.CharField(blank=True, max_length=255, null=True, verbose_name='photo card credits')),
-                ('photo_slider', mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='slider photo')),
-                ('photo_slider_credits', models.CharField(blank=True, max_length=255, null=True, verbose_name='photo slider credits')),
-                ('team', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organization-network.Team', verbose_name='team')),
+                ('team', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='pages', to='organization-network.Team', verbose_name='team')),
             ],
             options={
-                'ordering': ('_order',),
                 'verbose_name': 'team page',
+                'ordering': ('_order',),
             },
             bases=('pages.page', models.Model),
         ),
@@ -326,29 +277,4 @@ class Migration(migrations.Migration):
                 'verbose_name': 'training type',
             },
         ),
-        migrations.CreateModel(
-            name='Organization',
-            fields=[
-                ('address_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='organization-network.Address')),
-                ('title', models.CharField(max_length=500, verbose_name='Title')),
-                ('slug', models.CharField(blank=True, help_text='Leave blank to have the URL auto-generated from the title.', max_length=2000, null=True, verbose_name='URL')),
-                ('description', models.TextField(blank=True, verbose_name='description')),
-                ('description_fr', models.TextField(blank=True, null=True, verbose_name='description')),
-                ('description_en', models.TextField(blank=True, null=True, verbose_name='description')),
-                ('photo', mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='photo')),
-                ('photo_credits', models.CharField(blank=True, max_length=255, null=True, verbose_name='photo credits')),
-                ('photo_alignment', models.CharField(blank=True, choices=[('left', 'left'), ('center', 'center'), ('right', 'right')], default='left', max_length=32, verbose_name='photo alignment')),
-                ('photo_description', models.TextField(blank=True, verbose_name='photo description')),
-                ('photo_card', mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='card photo')),
-                ('photo_card_credits', models.CharField(blank=True, max_length=255, null=True, verbose_name='photo card credits')),
-                ('photo_slider', mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='slider photo')),
-                ('photo_slider_credits', models.CharField(blank=True, max_length=255, null=True, verbose_name='photo slider credits')),
-                ('website', models.URLField(blank=True, max_length=512, verbose_name='website')),
-                ('is_on_map', models.BooleanField(default=True, verbose_name='is on map')),
-            ],
-            options={
-                'verbose_name': 'organization',
-            },
-            bases=('organization-network.address', models.Model),
-        ),
     ]
diff --git a/app/organization/network/migrations/0002_auto_20160823_1425.py b/app/organization/network/migrations/0002_auto_20160823_1425.py
deleted file mode 100644 (file)
index 4926eb6..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-08-23 12:25
-from __future__ import unicode_literals
-
-from django.conf import settings
-from django.db import migrations, models
-import django.db.models.deletion
-
-
-class Migration(migrations.Migration):
-
-    initial = True
-
-    dependencies = [
-        ('organization-network', '0001_initial'),
-        ('sites', '0002_alter_domain_unique'),
-        ('organization-projects', '0001_initial'),
-        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name='personactivity',
-            name='project',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-projects.Project', verbose_name='project'),
-        ),
-        migrations.AddField(
-            model_name='personactivity',
-            name='record_piece',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-network.RecordPiece'),
-        ),
-        migrations.AddField(
-            model_name='personactivity',
-            name='second_team',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='second_team_activity', to='organization-network.Team', verbose_name='second team'),
-        ),
-        migrations.AddField(
-            model_name='personactivity',
-            name='status',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-network.ActivityStatus', verbose_name='status'),
-        ),
-        migrations.AddField(
-            model_name='personactivity',
-            name='team',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='team_activity', to='organization-network.Team', verbose_name='team'),
-        ),
-        migrations.AddField(
-            model_name='personactivity',
-            name='training_level',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-network.TrainingLevel', verbose_name='training level'),
-        ),
-        migrations.AddField(
-            model_name='personactivity',
-            name='training_speciality',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-network.TrainingSpectiality', verbose_name='training speciality'),
-        ),
-        migrations.AddField(
-            model_name='personactivity',
-            name='training_topic',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-network.TrainingTopic', verbose_name='training topic'),
-        ),
-        migrations.AddField(
-            model_name='personactivity',
-            name='training_type',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-network.TrainingType', verbose_name='training type'),
-        ),
-        migrations.AddField(
-            model_name='person',
-            name='site',
-            field=models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.Site'),
-        ),
-        migrations.AddField(
-            model_name='person',
-            name='user',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='user'),
-        ),
-        migrations.AddField(
-            model_name='departmentpage',
-            name='department',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organization-network.Department', verbose_name='department'),
-        ),
-        migrations.AddField(
-            model_name='team',
-            name='organization',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='teams', to='organization-network.Organization', verbose_name='organization'),
-        ),
-        migrations.AddField(
-            model_name='personactivity',
-            name='attachment_organization',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='attachment_activity', to='organization-network.Organization', verbose_name='attachment organization'),
-        ),
-        migrations.AddField(
-            model_name='personactivity',
-            name='employer',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='employer_activity', to='organization-network.Organization', verbose_name='employer'),
-        ),
-        migrations.AddField(
-            model_name='personactivity',
-            name='phd_doctoral_school',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-network.Organization', verbose_name='doctoral school'),
-        ),
-        migrations.AddField(
-            model_name='personactivity',
-            name='second_employer',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='second_employer_activity', to='organization-network.Organization', verbose_name='second employer'),
-        ),
-        migrations.AddField(
-            model_name='organization',
-            name='site',
-            field=models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.Site'),
-        ),
-        migrations.AddField(
-            model_name='organization',
-            name='type',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-network.OrganizationType', verbose_name='organization type'),
-        ),
-        migrations.AddField(
-            model_name='department',
-            name='organization',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='departments', to='organization-network.Organization', verbose_name='organization'),
-        ),
-    ]
diff --git a/app/organization/network/migrations/0002_auto_20160823_1945.py b/app/organization/network/migrations/0002_auto_20160823_1945.py
new file mode 100644 (file)
index 0000000..c178965
--- /dev/null
@@ -0,0 +1,91 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.7 on 2016-08-23 17:45
+from __future__ import unicode_literals
+
+from django.conf import settings
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+        ('organization-projects', '0001_initial'),
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+        ('organization-network', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='personactivity',
+            name='project',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-projects.Project', verbose_name='project'),
+        ),
+        migrations.AddField(
+            model_name='personactivity',
+            name='record_piece',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-network.RecordPiece'),
+        ),
+        migrations.AddField(
+            model_name='personactivity',
+            name='second_employer',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='second_employer_activity', to='organization-network.Organization', verbose_name='second employer'),
+        ),
+        migrations.AddField(
+            model_name='personactivity',
+            name='second_team',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='second_team_activity', to='organization-network.Team', verbose_name='second team'),
+        ),
+        migrations.AddField(
+            model_name='personactivity',
+            name='status',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-network.ActivityStatus', verbose_name='status'),
+        ),
+        migrations.AddField(
+            model_name='personactivity',
+            name='team',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='team_activity', to='organization-network.Team', verbose_name='team'),
+        ),
+        migrations.AddField(
+            model_name='personactivity',
+            name='training_level',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-network.TrainingLevel', verbose_name='training level'),
+        ),
+        migrations.AddField(
+            model_name='personactivity',
+            name='training_speciality',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-network.TrainingSpectiality', verbose_name='training speciality'),
+        ),
+        migrations.AddField(
+            model_name='personactivity',
+            name='training_topic',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-network.TrainingTopic', verbose_name='training topic'),
+        ),
+        migrations.AddField(
+            model_name='personactivity',
+            name='training_type',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-network.TrainingType', verbose_name='training type'),
+        ),
+        migrations.AddField(
+            model_name='person',
+            name='user',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='user'),
+        ),
+        migrations.AddField(
+            model_name='organization',
+            name='type',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-network.OrganizationType', verbose_name='organization type'),
+        ),
+        migrations.AddField(
+            model_name='departmentpage',
+            name='department',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='pages', to='organization-network.Department', verbose_name='department'),
+        ),
+        migrations.AddField(
+            model_name='department',
+            name='organization',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='departments', to='organization-network.Organization', verbose_name='organization'),
+        ),
+    ]
diff --git a/app/organization/network/migrations/0003_auto_20160823_1438.py b/app/organization/network/migrations/0003_auto_20160823_1438.py
deleted file mode 100644 (file)
index 1d9b339..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-08-23 12:38
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-network', '0002_auto_20160823_1425'),
-    ]
-
-    operations = [
-        migrations.RemoveField(
-            model_name='organization',
-            name='site',
-        ),
-        migrations.RemoveField(
-            model_name='organization',
-            name='slug',
-        ),
-        migrations.RemoveField(
-            model_name='organization',
-            name='title',
-        ),
-        migrations.RemoveField(
-            model_name='organization',
-            name='website',
-        ),
-        migrations.AddField(
-            model_name='organization',
-            name='name',
-            field=models.CharField(default='', max_length=512, verbose_name='name'),
-            preserve_default=False,
-        ),
-        migrations.AddField(
-            model_name='organization',
-            name='web_site',
-            field=models.URLField(blank=True, max_length=512, verbose_name='web site'),
-        ),
-    ]
index d08354386bd829ec52c3eb3219fb1376c27b6505..7c0893248586e0bab7e0a85ea79ce1e1c2569321 100644 (file)
@@ -61,21 +61,21 @@ class Address(models.Model):
     def __str__(self):
         return ' '.join((self.address, self.postal_code))
 
-        class Meta:
-            abstract = True
+    class Meta:
+        abstract = True
 
 
-class Organization(Named, Address, Photo):
+class Organization(CustomModel, Named, Address, URL):
     """(Organization description)"""
 
     type = models.ForeignKey('OrganizationType', verbose_name=_('organization type'), blank=True, null=True, on_delete=models.SET_NULL)
-    web_site = models.URLField(_('web site'), max_length=512, blank=True)
     is_on_map = models.BooleanField(_('is on map'), default=True)
 
     class Meta:
         verbose_name = _('organization')
 
 
+
 class OrganizationType(Named):
     """(OrganizationType description)"""
 
@@ -97,22 +97,21 @@ class Department(Named):
         return self.name
 
 
-class DepartmentPage(Page, SubTitle, RichText, Photo):
+class DepartmentPage(Page, SubTitled, RichText):
     """(Department description)"""
 
-    department = models.ForeignKey('Department', verbose_name=_('department'))
+    department = models.ForeignKey('Department', verbose_name=_('department'), related_name="pages", blank=True, null=True, on_delete=models.SET_NULL)
     weaving_css_class = models.CharField(_('background pattern'), choices=PATTERN_CHOICES, max_length=64, blank=True)
 
     class Meta:
         verbose_name = _('department page')
 
 
-class Team(Named):
+class Team(Named, URL):
     """(Team description)"""
 
     organization = models.ForeignKey('Organization', verbose_name=_('organization'), related_name="teams", blank=True, null=True, on_delete=models.SET_NULL)
     department = models.ForeignKey('Department', verbose_name=_('department'), related_name="teams", blank=True, null=True, on_delete=models.SET_NULL)
-    web_site = models.URLField(_('web site'), max_length=512, blank=True)
 
     class Meta:
         verbose_name = _('team')
@@ -128,16 +127,17 @@ class Team(Named):
         return self.name
 
 
-class TeamPage(Page, SubTitle, RichText, Photo):
+class TeamPage(Page, SubTitled, RichText):
     """(Team description)"""
 
-    team = models.ForeignKey('Team', verbose_name=_('team'))
+    team = models.ForeignKey('Team', verbose_name=_('team'), related_name="pages", blank=True, null=True, on_delete=models.SET_NULL)
 
     class Meta:
         verbose_name = _('team page')
 
 
-class Person(Displayable, AdminThumbMixin, Photo):
+
+class Person(CustomDisplayable, AdminThumbMixin):
     """(Person description)"""
 
     user = models.ForeignKey(User, verbose_name=_('user'), blank=True, null=True, on_delete=models.SET_NULL)
@@ -180,13 +180,6 @@ class Person(Displayable, AdminThumbMixin, Photo):
         super(Person, self).save(*args, **kwargs)
 
 
-class TeamLink(Link):
-
-    team = models.ForeignKey(Team, verbose_name=_('links'))
-
-    def __str__(self):
-        return self.url
-
 
 class ActivityStatus(Named):
 
@@ -291,12 +284,3 @@ class PersonActivity(Description, Period, RichText):
 
     def __unicode__(self):
         return ' - '.join((self.person, self.role, self.date_begin, self.date_end))
-
-
-class PersonLink(Link):
-    """A person can have many links."""
-
-    person = models.ForeignKey('Person', verbose_name=_('person'))
-
-    class Meta:
-        verbose_name = _('person link')
index 8a31006270648989ab676bcb0fb6f97cd095e1c5..50280d975fd9684cd091bda82490f660ac8123e1 100644 (file)
@@ -14,17 +14,19 @@ class DepartmentTranslationOptions(TranslationOptions):
 
     fields = ('name', 'description')
 
+
+@register(DepartmentPage)
+class DepartmentPageTranslationOptions(TranslationOptions):
+
+    fields = ('sub_title', 'content',)
+
+
 @register(Team)
 class TeamTranslationOptions(TranslationOptions):
 
     fields = ('name', 'description')
 
 
-@register(DepartmentPage)
-class DepartmentTranslationOptions(TranslationOptions):
-
-    fields = ('sub_title', 'content',)
-
 @register(TeamPage)
 class TeamTranslationOptions(TranslationOptions):
 
@@ -41,9 +43,3 @@ class PersonTranslationOptions(TranslationOptions):
 class PersonActivityTranslationOptions(TranslationOptions):
 
     fields = ('description', 'content')
-
-
-@register(PersonLink)
-class PersonTranslationOptions(TranslationOptions):
-
-    pass
index 517d2ca8c9cf416036666e3a370383c7381151fb..1e342399718edf8465aef6eb080bbe70616c2dd2 100644 (file)
@@ -5,11 +5,25 @@ from mezzanine.utils.static import static_lazy as static
 from copy import deepcopy
 from mezzanine.core.admin import *
 from mezzanine.pages.admin import PageAdmin
-from organization.core.models import *
+from organization.pages.models import *
 from organization.pages.models import DynamicContentHomeSlider, DynamicContentHomeBody, Home
 from organization.pages.forms import DynamicContentHomeSliderForm, DynamicContentHomeBodyForm
 
-# Register your models here.
+
+class PageBlockInline(StackedDynamicInlineAdmin):
+
+    model = PageBlock
+
+
+class PageImageInline(TabularDynamicInlineAdmin):
+
+    model = PageImage
+
+
+class CustomPageAdmin(PageAdmin):
+
+    inlines = [PageBlockInline, PageImageInline]
+
 
 class DynamicContentHomeSliderInline(TabularDynamicInlineAdmin):
 
@@ -33,4 +47,7 @@ class HomeAdminDisplayable(BaseTranslationModelAdmin):
     inlines = [DynamicContentHomeSliderInline, DynamicContentHomeBodyInline  ]
 
 
+
+
+admin.site.register(CustomPage, CustomPageAdmin)
 admin.site.register(Home, HomeAdminDisplayable)
index 58439fe47fc079187e670da45a409c2787872cf0..763576ceb4975ac0da95df3eab44825710f6b59c 100644 (file)
@@ -4,7 +4,7 @@ import dal_queryset_sequence
 import dal_select2_queryset_sequence
 from mezzanine.core.models import Orderable
 from organization.magazine.models import Article, Topic, Brief
-from organization.core.models import BasicPage
+from organization.pages.models import CustomPage
 from mezzanine_agenda.models import Event
 from organization.pages.models import DynamicContentHomeSlider, DynamicContentHomeBody
 
@@ -14,7 +14,7 @@ class DynamicContentHomeSliderForm(autocomplete.FutureModelForm):
         queryset=autocomplete.QuerySetSequence(
             Article.objects.all(),
             Event.objects.all(),
-            BasicPage.objects.all(),
+            CustomPage.objects.all(),
         ),
         required=False,
         widget=dal_select2_queryset_sequence.widgets.QuerySetSequenceSelect2('dynamic-content-home-slider'),
@@ -34,7 +34,7 @@ class DynamicContentHomeBodyForm(autocomplete.FutureModelForm):
         queryset=autocomplete.QuerySetSequence(
             Article.objects.all(),
             Event.objects.all(),
-            BasicPage.objects.all(),
+            CustomPage.objects.all(),
             Brief.objects.all(),
         ),
         required=False,
index 1f476f08722253277c805ba12b5216ead5d590ca..3d764a7476f6130b2b883ca1280556226c16b32d 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-08-19 10:40
+# Generated by Django 1.9.7 on 2016-08-23 17:45
 from __future__ import unicode_literals
 
 from django.db import migrations, models
@@ -12,11 +12,29 @@ class Migration(migrations.Migration):
     initial = True
 
     dependencies = [
-        ('contenttypes', '0002_remove_content_type_name'),
+        ('pages', '0004_auto_20160804_1547'),
         ('sites', '0002_alter_domain_unique'),
+        ('contenttypes', '0002_remove_content_type_name'),
     ]
 
     operations = [
+        migrations.CreateModel(
+            name='CustomPage',
+            fields=[
+                ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='pages.Page')),
+                ('content', mezzanine.core.fields.RichTextField(verbose_name='Content')),
+                ('content_fr', mezzanine.core.fields.RichTextField(null=True, verbose_name='Content')),
+                ('content_en', mezzanine.core.fields.RichTextField(null=True, verbose_name='Content')),
+                ('sub_title', models.TextField(blank=True, max_length=1024, verbose_name='sub title')),
+                ('sub_title_fr', models.TextField(blank=True, max_length=1024, null=True, verbose_name='sub title')),
+                ('sub_title_en', models.TextField(blank=True, max_length=1024, null=True, verbose_name='sub title')),
+            ],
+            options={
+                'verbose_name': 'basic page',
+                'ordering': ('_order',),
+            },
+            bases=('pages.page', models.Model),
+        ),
         migrations.CreateModel(
             name='DynamicContentHomeBody',
             fields=[
@@ -63,7 +81,50 @@ class Migration(migrations.Migration):
                 ('site', models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.Site')),
             ],
             options={
-                'verbose_name': 'Home',
+                'verbose_name': 'home',
+                'verbose_name_plural': 'homes',
+            },
+        ),
+        migrations.CreateModel(
+            name='PageBlock',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('content', mezzanine.core.fields.RichTextField(verbose_name='Content')),
+                ('content_fr', mezzanine.core.fields.RichTextField(null=True, verbose_name='Content')),
+                ('content_en', mezzanine.core.fields.RichTextField(null=True, verbose_name='Content')),
+                ('_order', mezzanine.core.fields.OrderField(null=True, verbose_name='Order')),
+                ('title', models.CharField(max_length=1024, verbose_name='title')),
+                ('title_fr', models.CharField(max_length=1024, null=True, verbose_name='title')),
+                ('title_en', models.CharField(max_length=1024, null=True, 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')),
+                ('page', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='page_blocks', to='pages.Page', verbose_name='page')),
+            ],
+            options={
+                'verbose_name': 'page block',
+                'ordering': ('_order',),
+                'verbose_name_plural': 'blocks',
+            },
+        ),
+        migrations.CreateModel(
+            name='PageImage',
+            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')),
+                ('description_fr', models.TextField(blank=True, null=True, verbose_name='description')),
+                ('description_en', models.TextField(blank=True, null=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(blank=True, choices=[('logo', 'logo'), ('slider', 'slider'), ('card', 'card'), ('content', 'content')], max_length=64, verbose_name='type')),
+                ('page', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='page_images', to='pages.Page', verbose_name='page')),
+            ],
+            options={
+                'verbose_name': 'image',
+                'ordering': ('_order',),
+                'verbose_name_plural': 'images',
             },
         ),
         migrations.AddField(
index d6041086a32171abfe42e3dc320097d569ccce09..a8643fa3074e89947973d5f16ecd82fbae98769f 100644 (file)
@@ -2,7 +2,33 @@ from django.db import models
 from django.utils.translation import ugettext_lazy as _
 from django.core.urlresolvers import reverse, reverse_lazy
 from mezzanine.core.models import Displayable, Slugged, Orderable
-from organization.core.models import DynamicContent
+from organization.core.models import *
+
+
+class CustomPage(Page, SubTitled, RichText):
+
+    class Meta:
+        verbose_name = 'custom page'
+
+
+class PageBlock(Block):
+
+    page = models.ForeignKey(Page, verbose_name=_('page'), related_name='page_blocks', blank=True, null=True, on_delete=models.SET_NULL)
+
+    class Meta:
+        verbose_name = _("block")
+        verbose_name_plural = _("blocks")
+        verbose_name = 'page block'
+
+
+class PageImage(Image):
+
+    page = models.ForeignKey(Page, verbose_name=_('page'), related_name='page_images', blank=True, null=True, on_delete=models.SET_NULL)
+
+    class Meta:
+        verbose_name = _("image")
+        verbose_name_plural = _("images")
+        order_with_respect_to = "page"
 
 
 class DynamicContentHomeSlider(DynamicContent, Orderable):
@@ -12,6 +38,7 @@ class DynamicContentHomeSlider(DynamicContent, Orderable):
     class Meta:
         verbose_name = 'Dynamic Content Home Slider'
 
+
 class DynamicContentHomeBody(DynamicContent, Orderable):
 
     home = models.ForeignKey("home", verbose_name=_('home'), blank=True, null=True, on_delete=models.SET_NULL)
@@ -19,7 +46,9 @@ class DynamicContentHomeBody(DynamicContent, Orderable):
     class Meta:
         verbose_name = 'Dynamic Content Home Body'
 
+
 class Home(Displayable):
 
     class Meta:
-        verbose_name = 'Home'
+        verbose_name = _('home')
+        verbose_name_plural = _("homes")
index 6b67899170a55e57e759f7bd68412e6f7291099a..396a6d8b03c58a8ececdfc3244bead6bd68a056d 100644 (file)
@@ -3,17 +3,38 @@ from mezzanine.pages.models import Page, RichText
 from mezzanine.pages.translation import TranslatedRichText
 from organization.pages.models import *
 
+
 @register(Home)
 class HomeTranslationOptions(TranslationOptions):
 
     pass
 
+
 @register(DynamicContentHomeSlider)
 class DynamicContentHomeSliderOptions(TranslationOptions):
 
     pass
 
+
 @register(DynamicContentHomeBody)
 class DynamicContentHomeBodyOptions(TranslationOptions):
 
     pass
+
+
+@register(CustomPage)
+class CustomPageTranslationOptions(TranslationOptions):
+
+    fields = ('sub_title', 'content')
+
+
+@register(PageBlock)
+class PageBlockTranslationOptions(TranslationOptions):
+
+    fields = ('title', 'content')
+
+
+@register(PageImage)
+class PageImageTranslationOptions(TranslationOptions):
+
+    fields = ('description',)
index 54de21b0b70a3b4bee02ceca0ec9ce6ebc8edade..60bd7bc37a85626c91c4b2d946b250eb2d32d27b 100644 (file)
@@ -3,7 +3,7 @@ from django.views.generic import DetailView, ListView, TemplateView
 from dal import autocomplete
 from dal_select2_queryset_sequence.views import Select2QuerySetSequenceView
 from mezzanine_agenda.models import Event
-from organization.core.models import BasicPage
+from organization.pages.models import CustomPage
 from organization.core.views import SlugMixin
 from organization.magazine.models import Article, Topic, Brief
 from organization.pages.models import Home
@@ -29,15 +29,15 @@ class DynamicContentHomeSliderView(Select2QuerySetSequenceView):
     def get_queryset(self):
 
         articles = Article.objects.all()
-        basicpage = BasicPage.objects.all()
+        custompage = CustomPage.objects.all()
         events = Event.objects.all()
 
         if self.q:
             articles = articles.filter(title__icontains=self.q)
-            basicpage = basicpage.filter(title__icontains=self.q)
+            custompage = custompage.filter(title__icontains=self.q)
             events = events.filter(title__icontains=self.q)
 
-        qs = autocomplete.QuerySetSequence(articles, basicpage, events )
+        qs = autocomplete.QuerySetSequence(articles, custompage, events )
 
         if self.q:
             # This would apply the filter on all the querysets
@@ -53,17 +53,17 @@ class DynamicContentHomeBodyView(Select2QuerySetSequenceView):
     def get_queryset(self):
 
         articles = Article.objects.all()
-        basicpage = BasicPage.objects.all()
+        custompage = CustomPage.objects.all()
         events = Event.objects.all()
         briefs = Brief.objects.all()
 
         if self.q:
             articles = articles.filter(title__icontains=self.q)
-            basicpage = basicpage.filter(title__icontains=self.q)
+            custompage = custompage.filter(title__icontains=self.q)
             events = events.filter(title__icontains=self.q)
             briefs = briefs.filter(title__icontains=self.q)
 
-        qs = autocomplete.QuerySetSequence(articles, basicpage, events, briefs)
+        qs = autocomplete.QuerySetSequence(articles, custompage, events, briefs)
 
         if self.q:
             # This would apply the filter on all the querysets
index 890604bc424527e57f660a45af4159bbf01c8e80..e9ce207bbe7ada384ff7cd1a0e583750e3f688e2 100644 (file)
@@ -6,21 +6,22 @@ from django.utils.translation import ugettext_lazy as _
 from mezzanine.core.admin import *
 
 from organization.projects.models import *
+from organization.pages.models import *
 
 
 class ProjectLinkInline(StackedDynamicInlineAdmin):
 
-    model = ProjectLink
+    model = DisplayableLink
 
 
 class ProjectImageInline(TabularDynamicInlineAdmin):
 
-    model = ProjectImage
+    model = DisplayableImage
 
 
 class ProjectBlockInline(StackedDynamicInlineAdmin):
 
-    model = ProjectBlock
+    model = DisplayableBlock
 
 
 class ProjectAdmin(admin.ModelAdmin):
index e0503a10af0b98e89862a992921b95695b6fae82..0a6d4d66f46ed5ba599fb8514e768f2f6a3daff8 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-08-23 12:25
+# Generated by Django 1.9.7 on 2016-08-23 17:45
 from __future__ import unicode_literals
 
 from django.db import migrations, models
@@ -12,33 +12,19 @@ class Migration(migrations.Migration):
     initial = True
 
     dependencies = [
+        ('organization-core', '0001_initial'),
         ('organization-network', '0001_initial'),
-        ('sites', '0002_alter_domain_unique'),
-        ('organization-core', '0013_auto_20160823_1359'),
     ]
 
     operations = [
         migrations.CreateModel(
             name='Project',
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('keywords_string', models.CharField(blank=True, editable=False, max_length=500)),
-                ('title', models.CharField(max_length=500, verbose_name='Title')),
+                ('customdisplayable_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='organization-core.CustomDisplayable')),
                 ('title_fr', models.CharField(max_length=500, null=True, verbose_name='Title')),
                 ('title_en', models.CharField(max_length=500, null=True, verbose_name='Title')),
-                ('slug', models.CharField(blank=True, help_text='Leave blank to have the URL auto-generated from the title.', max_length=2000, null=True, verbose_name='URL')),
-                ('_meta_title', models.CharField(blank=True, help_text='Optional title to be used in the HTML title tag. If left blank, the main title field will be used.', max_length=500, null=True, verbose_name='Title')),
-                ('description', models.TextField(blank=True, verbose_name='Description')),
                 ('description_fr', models.TextField(blank=True, null=True, verbose_name='Description')),
                 ('description_en', models.TextField(blank=True, null=True, verbose_name='Description')),
-                ('gen_description', models.BooleanField(default=True, help_text='If checked, the description will be automatically generated from content. Uncheck if you want to manually set a custom description.', verbose_name='Generate description')),
-                ('created', models.DateTimeField(editable=False, null=True)),
-                ('updated', models.DateTimeField(editable=False, null=True)),
-                ('status', models.IntegerField(choices=[(1, 'Draft'), (2, 'Published')], default=2, help_text='With Draft chosen, will only be shown for admin users on the site.', verbose_name='Status')),
-                ('publish_date', models.DateTimeField(blank=True, db_index=True, help_text="With Published chosen, won't be shown until this time", null=True, verbose_name='Published from')),
-                ('expiry_date', models.DateTimeField(blank=True, help_text="With Published chosen, won't be shown after this time", null=True, verbose_name='Expires on')),
-                ('short_url', models.URLField(blank=True, null=True)),
-                ('in_sitemap', models.BooleanField(default=True, verbose_name='Show in sitemap')),
                 ('content', mezzanine.core.fields.RichTextField(verbose_name='Content')),
                 ('content_fr', mezzanine.core.fields.RichTextField(null=True, verbose_name='Content')),
                 ('content_en', mezzanine.core.fields.RichTextField(null=True, verbose_name='Content')),
@@ -48,61 +34,11 @@ class Migration(migrations.Migration):
                 ('lead_team', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='leader_projects', to='organization-network.Team', verbose_name='lead team')),
                 ('organizations', models.ManyToManyField(blank=True, to='organization-network.Organization', verbose_name='organizations')),
                 ('persons', models.ManyToManyField(blank=True, to='organization-network.Person', verbose_name='persons')),
-                ('site', models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.Site')),
                 ('teams', models.ManyToManyField(blank=True, related_name='patner_projects', to='organization-network.Team', verbose_name='teams')),
             ],
             options={
                 'verbose_name': 'project',
             },
-        ),
-        migrations.CreateModel(
-            name='ProjectBlock',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('content', mezzanine.core.fields.RichTextField(verbose_name='Content')),
-                ('content_fr', mezzanine.core.fields.RichTextField(null=True, verbose_name='Content')),
-                ('content_en', mezzanine.core.fields.RichTextField(null=True, verbose_name='Content')),
-                ('_order', mezzanine.core.fields.OrderField(null=True, verbose_name='Order')),
-                ('title', models.CharField(max_length=1024, verbose_name='title')),
-                ('title_fr', models.CharField(max_length=1024, null=True, verbose_name='title')),
-                ('title_en', models.CharField(max_length=1024, null=True, 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')),
-                ('project', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='blocks', to='organization-projects.Project', verbose_name='project')),
-            ],
-            options={
-                'ordering': ('_order',),
-            },
-        ),
-        migrations.CreateModel(
-            name='ProjectImage',
-            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')),
-                ('description', models.TextField(blank=True, verbose_name='description')),
-                ('description_fr', models.TextField(blank=True, null=True, verbose_name='description')),
-                ('description_en', models.TextField(blank=True, null=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')),
-                ('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='images', to='organization-projects.Project')),
-            ],
-            options={
-                'ordering': ('_order',),
-            },
-        ),
-        migrations.CreateModel(
-            name='ProjectLink',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('url', models.URLField(verbose_name='URL')),
-                ('link_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organization-core.LinkType', verbose_name='link type')),
-                ('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='links', to='organization-projects.Project')),
-            ],
-            options={
-                'verbose_name_plural': 'links',
-                'abstract': False,
-                'verbose_name': 'link',
-            },
+            bases=('organization-core.customdisplayable', models.Model),
         ),
     ]
index 36826646c50aac801d671d21d10f697f8b689f13..4f590a59526a9106b022596f8501316acffb0c0a 100644 (file)
@@ -6,9 +6,10 @@ from django.utils.translation import ugettext_lazy as _
 from mezzanine.core.models import RichText, Displayable, Slugged, Orderable
 
 from organization.core.models import *
+from organization.pages.models import *
 
 
-class Project(Displayable, Period, RichText):
+class Project(CustomDisplayable, Period, RichText):
     """(Project description)"""
 
     lead_team = models.ForeignKey('organization-network.Team', verbose_name=_('lead team'), related_name='leader_projects', blank=True, null=True)
@@ -25,18 +26,3 @@ class Project(Displayable, Period, RichText):
 
     def get_absolute_url(self):
         return reverse("organization-project-detail", kwargs={"slug": self.slug})
-
-
-class ProjectBlock(Block):
-
-    project = models.ForeignKey(Project, verbose_name=_('project'), related_name='blocks', blank=True, null=True, on_delete=models.SET_NULL)
-
-
-class ProjectImage(Image):
-
-    project = models.ForeignKey(Project, related_name='images')
-
-
-class ProjectLink(Link):
-
-    project = models.ForeignKey(Project, related_name='links')
index b5bc433e581e14e1a416c9ca24569062f3f6a167..cc687455cd583a8142bd851dc61ab55ef548d04e 100644 (file)
@@ -7,20 +7,3 @@ from organization.projects.models import *
 class ProjectTranslationOptions(TranslationOptions):
 
     fields = ('title', 'description', 'content')
-
-
-@register(ProjectImage)
-class ProjectImageTranslationOptions(TranslationOptions):
-
-    fields = ('description',)
-
-
-@register(ProjectLink)
-class ProjectLinkTranslationOptions(TranslationOptions):
-    pass
-
-
-@register(ProjectBlock)
-class ProjectBlockTranslationOptions(TranslationOptions):
-
-    fields = ('title', 'content', )
index 7eefe816835a6d629cf2001d10f23c448f1e7af3..2710b00bef92e977d1a3040933524b4a3c9dac84 100644 (file)
 {% endmetablock %}{% endblock %}
 
 {% block page_class %}
-    basicpage
+    custompage
 {% endblock %}
 
 {% block page_title %}
 
-    {% editable page.basicpage.title %}
-        <h1 class="dotted">{{ page.basicpage.title }}</h1>
+    {% editable page.custompage.title %}
+        <h1 class="dotted">{{ page.custompage.title }}</h1>
     {% endeditable %}
 
 {% endblock %}
 
 {% block page_content %}
 
-    {% if page.basicpage.sub_title %}
-        {% editable page.basicpage.sub_title %}
+    {% if page.custompage.sub_title %}
+        {% editable page.custompage.sub_title %}
             <div class="chapo">
-                {{ page.basicpage.sub_title }}
+                {{ page.custompage.sub_title }}
             </div>
         {% endeditable %}
     {% endif %}
 
-    {% editable page.basicpage.content %}
-        {{ page.basicpage.content|richtext_filters|safe }}
+    {% editable page.custompage.content %}
+        {{ page.custompage.content|richtext_filters|safe }}
     {% endeditable %}
 
     {% if page.get_ascendants|length == 1 %}
 {% endblock %}
 
 {% block page_sub_content %}
-    {% if page.basicpage.pageblock_set.all %}
+    {% if page.custompage.pageblock_set.all %}
         <div class="white-bg">
             <div class="container">
                 <div class="row">
                     <div class="col-sm-12">
                         <hr class="mt0" />
-                        {% for pageblock in page.basicpage.pageblock_set.all %}
+                        {% for pageblock in page.custompage.pageblock_set.all %}
                             <div class="row" data-summary-content>
                                 <div class="col-sm-9 col-sm-push-3 col-lg-8 col-lg-push-2 white-bg">
                                     {% if not forloop.first and pageblock.with_separator %}
index b59643d94baa2a986df3290c837b4d66017ccf0e..7d399feeb0b00c33ea61e7d268190c786dfae075 100644 (file)
@@ -1,4 +1,4 @@
-{% extends "pages/basicpage.html" %}
+{% extends "pages/custompage.html" %}
 {% load i18n mezzanine_tags keyword_tags  pages_tags organization_tags %}
 
 {% block meta_title %}{{ page.meta_title }}{% endblock %}
index 3b0f989d565841e5d701e66f3320e005c4b60696..8d9d6196810a1dda9ef954e78ef3485ce99fc8a5 100644 (file)
@@ -1,4 +1,4 @@
-{% extends "pages/basicpage.html" %}
+{% extends "pages/custompage.html" %}
 {% load i18n mezzanine_tags keyword_tags  pages_tags organization_tags %}
 
 {% block meta_title %}{{ page.meta_title }}{% endblock %}