diff --git a/apps/cms/pages/migrations/0007_rename_body_to_body_de.py b/apps/cms/pages/migrations/0007_rename_body_to_body_de.py new file mode 100644 index 000000000..141bb199c --- /dev/null +++ b/apps/cms/pages/migrations/0007_rename_body_to_body_de.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.21 on 2019-07-02 11:43 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('a4_candy_cms_pages', '0006_rename_tables_to_default'), + ] + + operations = [ + migrations.RenameField( + model_name='homepage', + old_name='body', + new_name='body_de', + ), + ] diff --git a/apps/cms/pages/migrations/0008_homepage_body_en.py b/apps/cms/pages/migrations/0008_homepage_body_en.py new file mode 100644 index 000000000..18e3b3ca6 --- /dev/null +++ b/apps/cms/pages/migrations/0008_homepage_body_en.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.21 on 2019-07-02 11:44 +from __future__ import unicode_literals + +from django.db import migrations +import wagtail.core.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('a4_candy_cms_pages', '0007_rename_body_to_body_de'), + ] + + operations = [ + migrations.AddField( + model_name='homepage', + name='body_en', + field=wagtail.core.fields.RichTextField(blank=True), + ), + ] diff --git a/apps/cms/pages/migrations/0009_rename_subtitle_to_subtititle_de.py b/apps/cms/pages/migrations/0009_rename_subtitle_to_subtititle_de.py new file mode 100644 index 000000000..992cd7912 --- /dev/null +++ b/apps/cms/pages/migrations/0009_rename_subtitle_to_subtititle_de.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.21 on 2019-07-02 12:00 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('a4_candy_cms_pages', '0008_homepage_body_en'), + ] + + operations = [ + migrations.RenameField( + model_name='homepage', + old_name='subtitle', + new_name='subtitle_de', + ), + ] diff --git a/apps/cms/pages/migrations/0010_homepage_subtitle_en.py b/apps/cms/pages/migrations/0010_homepage_subtitle_en.py new file mode 100644 index 000000000..ba9e39077 --- /dev/null +++ b/apps/cms/pages/migrations/0010_homepage_subtitle_en.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.21 on 2019-07-02 12:01 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('a4_candy_cms_pages', '0009_rename_subtitle_to_subtititle_de'), + ] + + operations = [ + migrations.AddField( + model_name='homepage', + name='subtitle_en', + field=models.CharField(blank=True, max_length=500, verbose_name='Subtitle'), + ), + ] diff --git a/apps/cms/pages/migrations/0011_rename_body_to_body_de.py b/apps/cms/pages/migrations/0011_rename_body_to_body_de.py new file mode 100644 index 000000000..7a7b5f0b0 --- /dev/null +++ b/apps/cms/pages/migrations/0011_rename_body_to_body_de.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.21 on 2019-07-02 14:46 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('a4_candy_cms_pages', '0010_homepage_subtitle_en'), + ] + + operations = [ + migrations.RenameField( + model_name='simplepage', + old_name='body', + new_name='body_de', + ), + ] diff --git a/apps/cms/pages/migrations/0012_simplepage_body_en.py b/apps/cms/pages/migrations/0012_simplepage_body_en.py new file mode 100644 index 000000000..9a86d896f --- /dev/null +++ b/apps/cms/pages/migrations/0012_simplepage_body_en.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.21 on 2019-07-02 14:47 +from __future__ import unicode_literals + +from django.db import migrations +import wagtail.core.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('a4_candy_cms_pages', '0011_rename_body_to_body_de'), + ] + + operations = [ + migrations.AddField( + model_name='simplepage', + name='body_en', + field=wagtail.core.fields.RichTextField(blank=True), + ), + ] diff --git a/apps/cms/pages/models.py b/apps/cms/pages/models.py index 30e84391d..28ec95f4c 100644 --- a/apps/cms/pages/models.py +++ b/apps/cms/pages/models.py @@ -1,9 +1,13 @@ from django.db import models from wagtail.admin.edit_handlers import FieldPanel +from wagtail.admin.edit_handlers import ObjectList +from wagtail.admin.edit_handlers import TabbedInterface from wagtail.core.fields import RichTextField from wagtail.core.models import Page from wagtail.images.edit_handlers import ImageChooserPanel +from apps.contrib.translations import TranslatedField + class HomePage(Page): image = models.ForeignKey( @@ -15,20 +19,48 @@ class HomePage(Page): verbose_name="Header Image", help_text="The Image that is shown on top of the page" ) - subtitle = models.CharField( + + subtitle_de = models.CharField( + max_length=500, blank=True, verbose_name="Subtitle") + subtitle_en = models.CharField( max_length=500, blank=True, verbose_name="Subtitle") - body = RichTextField(blank=True) - subpage_types = ['a4_candy_cms_pages.EmptyPage'] + body_de = RichTextField(blank=True) + body_en = RichTextField(blank=True) + + body = TranslatedField( + 'body_de', + 'body_en' + ) + + subtitle = TranslatedField( + 'subtitle_de', + 'subtitle_en' + ) + + en_content_panels = [ + FieldPanel('subtitle_en'), + FieldPanel('body_en') + ] + + de_content_panels = [ + FieldPanel('subtitle_de'), + FieldPanel('body_de') + ] - content_panels = [ + common_panels = [ FieldPanel('title'), + FieldPanel('slug'), ImageChooserPanel('image'), - FieldPanel('subtitle'), - FieldPanel('body') ] - promote_panels = Page.promote_panels + edit_handler = TabbedInterface([ + ObjectList(common_panels, heading='Common'), + ObjectList(en_content_panels, heading='English'), + ObjectList(de_content_panels, heading='German') + ]) + + subpage_types = ['a4_candy_cms_pages.EmptyPage'] class EmptyPage(Page): @@ -36,10 +68,31 @@ class EmptyPage(Page): class SimplePage(Page): - body = RichTextField() + body_de = RichTextField() + body_en = RichTextField(blank=True) - content_panels = Page.content_panels + [ - FieldPanel('body', classname='full'), + body = TranslatedField( + 'body_de', + 'body_en' + ) + + en_content_panels = [ + FieldPanel('body_en') ] + de_content_panels = [ + FieldPanel('body_de') + ] + + common_panels = [ + FieldPanel('title'), + FieldPanel('slug') + ] + + edit_handler = TabbedInterface([ + ObjectList(common_panels, heading='Common'), + ObjectList(en_content_panels, heading='English'), + ObjectList(de_content_panels, heading='German') + ]) + subpage_types = ['a4_candy_cms_pages.SimplePage'] diff --git a/apps/contrib/translations.py b/apps/contrib/translations.py new file mode 100644 index 000000000..8a4abe3c3 --- /dev/null +++ b/apps/contrib/translations.py @@ -0,0 +1,33 @@ +from django.utils import translation +from wagtail.core.blocks.stream_block import StreamValue + + +class TranslatedField(object): + + def __init__(self, de_field, en_field): + self.de_field = de_field + self.en_field = en_field + + def hasContent(self, field): + if isinstance(field, StreamValue): + value = field.stream_data + if value: + return True + else: + return False + elif isinstance(field, str): + if field: + return True + else: + return False + else: + return False + + def __get__(self, instance, owner): + de = getattr(instance, self.de_field) + en = getattr(instance, self.en_field) + + if translation.get_language() == 'en' and self.hasContent(en): + return en + else: + return de