From c5f0fb933b83aa14a7c4b9375afeb1b5e831e056 Mon Sep 17 00:00:00 2001
From: Ondrej Rehounek <ondra.rehounek@seznam.cz>
Date: Tue, 9 Aug 2022 20:32:12 +0200
Subject: [PATCH] main: WIP models

---
 main/blocks.py | 25 ++++++++++++++++++++++-
 main/models.py | 55 ++++++++++++++++++++++++++++++++++++++++++++++----
 2 files changed, 75 insertions(+), 5 deletions(-)

diff --git a/main/blocks.py b/main/blocks.py
index 9ed29dac..4a6e4c51 100644
--- a/main/blocks.py
+++ b/main/blocks.py
@@ -1,3 +1,5 @@
+from wagtail.core.blocks import CharBlock, PageChooserBlock, StructBlock, URLBlock
+
 # HomePageCarouselBlock
 # RecentWork/TweetsBlock
 # NewsBlock
@@ -7,6 +9,27 @@
 # WorkTimelineBlock
 # ArticleLinkBlock
 # ProgramBlock
-# PersonBlock
+
+
+class PersonContactBlock(StructBlock):
+    position = CharBlock(label="Název pozice", required=False)
+    # email, phone?
+    person = PageChooserBlock(
+        label="Osoba",
+        page_type=["district.DistrictPersonPage"],
+    )
+
+    class Meta:
+        icon = "user"
+        label = "Osoba s volitelnou pozicí"
+
+
+class PersonContactBoxBlock(StructBlock):
+    title = CharBlock(label="Titulek")
+    subtitle = CharBlock(label="Podtitulek")
+    button_link = URLBlock()
+    button_text = CharBlock(label="Text tlačítka")
+
+
 # TwitterCarouselBlock
 # ContactBlock
diff --git a/main/models.py b/main/models.py
index 2cd88595..b3ca1b52 100644
--- a/main/models.py
+++ b/main/models.py
@@ -1,15 +1,20 @@
 from django.db import models
 from django.shortcuts import render
 from wagtail.admin.edit_handlers import FieldPanel, ObjectList, TabbedInterface
+from wagtail.core.fields import RichTextField, StreamField
 from wagtail.core.models import Page
 from wagtailmetadata.models import MetadataPageMixin
 
-from shared.models import (  # ArticleMixin,; ExtendedMetadataPageMixin,; SubpageMixin,
+from shared.const import RICH_TEXT_DEFAULT_FEATURES
+from shared.models import (
     ExtendedMetadataHomePageMixin,
+    ExtendedMetadataPageMixin,
     MenuMixin,
+    SubpageMixin,
 )
+from shared.utils import make_promote_panels
 
-# from . import blocks
+from . import blocks
 
 
 class MainHomePage(MenuMixin, ExtendedMetadataHomePageMixin, MetadataPageMixin, Page):
@@ -20,7 +25,11 @@ class MainHomePage(MenuMixin, ExtendedMetadataHomePageMixin, MetadataPageMixin,
     )
 
     # header - fb, twitter, insta, youtube, dary, nalodeni
-    # footer - stream field loadovany pres page.root_page?
+    footer = StreamField(
+        [("item", blocks.PersonContactBlock())],
+        verbose_name="Kontaktní boxy",
+        blank=True,
+    )
 
     settings_panels = [FieldPanel("matomo_id")]
 
@@ -41,7 +50,7 @@ class MainHomePage(MenuMixin, ExtendedMetadataHomePageMixin, MetadataPageMixin,
         # MainProgramPage
         # MainPeoplePage
         # MainPersonPage
-        # MainContactPage
+        "main.MainContactPage"
     ]
 
     ### OTHERS
@@ -56,3 +65,41 @@ class MainHomePage(MenuMixin, ExtendedMetadataHomePageMixin, MetadataPageMixin,
     @property
     def root_page(self):
         return self
+
+
+class MainContactPage(ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin, Page):
+    ### FIELDS
+
+    contact_people = StreamField(
+        [("item", blocks.PersonContactBlock())],
+        verbose_name="Kontaktní osoby",
+        blank=True,
+    )
+    contact_boxes = StreamField(
+        [("item", blocks.PersonContactBlock())],
+        verbose_name="Kontaktní boxy",
+        blank=True,
+    )
+    text = RichTextField("Text", blank=True, features=RICH_TEXT_DEFAULT_FEATURES)
+
+    ### PANELS
+
+    content_panels = Page.content_panels + [
+        FieldPanel("contact_people"),
+        FieldPanel("contact_boxes"),
+        FieldPanel("text"),
+    ]
+
+    promote_panels = make_promote_panels()
+
+    settings_panels = []
+
+    ### RELATIONS
+
+    parent_page_types = ["main.MainHomePage"]
+    subpage_types = []
+
+    ### OTHERS
+
+    class Meta:
+        verbose_name = "Kontakty"
-- 
GitLab