From 001b4b77bcadc26766e8d5dcfc737dcce5278725 Mon Sep 17 00:00:00 2001 From: "jindra12.underdark" <jindra12.underdark@gmail.com> Date: Thu, 13 Apr 2023 23:05:36 +0200 Subject: [PATCH] Add models for calendar page #163 --- calendar_utils/models.py | 42 ++++++++++++++++++++++++++++++++++++++++ district/models.py | 20 ++++++++++++++++--- elections2021/models.py | 10 ++++++++-- senat_campaign/models.py | 10 +++++++++- uniweb/models.py | 16 +++++++++------ 5 files changed, 86 insertions(+), 12 deletions(-) diff --git a/calendar_utils/models.py b/calendar_utils/models.py index 33516125..39c231bc 100644 --- a/calendar_utils/models.py +++ b/calendar_utils/models.py @@ -5,6 +5,9 @@ import arrow from django.core.serializers.json import DjangoJSONEncoder from django.db import models from icalevnt import icalevents +from wagtail.admin.panels import FieldPanel +from wagtail.models import Page +from wagtailmetadata.models import MetadataPageMixin from .parser import process_event_list @@ -76,6 +79,13 @@ class CalendarMixin(models.Model): calendar = models.ForeignKey( Calendar, null=True, blank=True, on_delete=models.PROTECT ) + calendar_page = models.ForeignKey( + "calendar_utils.CalendarPage", + verbose_name="Stránka s kalendářem", + on_delete=models.PROTECT, + null=True, + blank=True, + ) class Meta: abstract = True @@ -102,3 +112,35 @@ class CalendarMixin(models.Model): self.calendar = None super().save(*args, **kwargs) + + +class CalendarPage(SubpageMixin, MetadataPageMixin, CalendarMixin, Page): + """ + Page for displaying full calendar + """ + + calendar_url = models.URLField( + "URL kalendáře ve formátu iCal", blank=False, null=True + ) + + ### PANELS + + content_panels = Page.content_panels + [ + FieldPanel("calendar_url"), + ] + + ### RELATIONS + + parent_page_types = [ + "district.DistrictCenterPage", + "district.DistrictHomePage", + "elections2021.Elections2021CalendarPage", + "senat_campaign.SenatCampaignHomePage", + "uniweb.UniwebHomePage", + ] + subpage_types = [] + + ### OTHERS + + class Meta: + verbose_name = "Stránka s kalendářem" diff --git a/district/models.py b/district/models.py index 68270aba..71fef1f7 100644 --- a/district/models.py +++ b/district/models.py @@ -247,7 +247,13 @@ class DistrictHomePage( [ FieldPanel("region_map_button_text"), FieldPanel("calendar_button_text"), - FieldPanel("calendar_url"), + MultiFieldPanel( + [ + FieldPanel("calendar_url"), + PageChooserPanel("calendar_page"), + ], + "Kalendář", + ), ], gettext_lazy("Nastavení lišty s kalendářem a mapou"), ), @@ -278,6 +284,7 @@ class DistrictHomePage( "district.DistrictProgramPage", "district.DistrictInteractiveProgramPage", "district.DistrictGeoFeatureCollectionPage", + "calendar_utils.CalendarPage", ] ### OTHERS @@ -1243,7 +1250,14 @@ class DistrictCenterPage( FieldPanel("background_photo"), FieldPanel("text"), FieldPanel("content"), - FieldPanel("calendar_url"), + MultiFieldPanel( + [ + FieldPanel("calendar_url"), + PageChooserPanel("calendar_page"), + ], + "Kalendář", + ), + PageChooserPanel("calendar_page"), FieldPanel("sidebar_content"), ] @@ -1254,7 +1268,7 @@ class DistrictCenterPage( ### RELATIONS parent_page_types = ["district.DistrictHomePage"] - subpage_types = [] + subpage_types = ["calendar_utils.CalendarPage"] ### OTHERS diff --git a/elections2021/models.py b/elections2021/models.py index cd452b16..fe54fe96 100644 --- a/elections2021/models.py +++ b/elections2021/models.py @@ -2578,7 +2578,13 @@ class Elections2021CalendarPage(SubpageMixin, MetadataPageMixin, CalendarMixin, content_panels = Page.content_panels + [ FieldPanel("photo"), - FieldPanel("calendar_url"), + MultiFieldPanel( + [ + FieldPanel("calendar_url"), + PageChooserPanel("calendar_page"), + ], + "Kalendář", + ), ] promote_panels = [ @@ -2602,7 +2608,7 @@ class Elections2021CalendarPage(SubpageMixin, MetadataPageMixin, CalendarMixin, ### RELATIONS parent_page_types = ["elections2021.Elections2021HomePage"] - subpage_types = [] + subpage_types = ["calendar_utils.CalendarPage"] ### OTHERS diff --git a/senat_campaign/models.py b/senat_campaign/models.py index 7b68f070..d45a1547 100644 --- a/senat_campaign/models.py +++ b/senat_campaign/models.py @@ -7,6 +7,7 @@ from wagtail.admin.panels import ( FieldPanel, HelpPanel, MultiFieldPanel, + PageChooserPanel, PublishingPanel, ) from wagtail.documents.blocks import DocumentChooserBlock @@ -183,7 +184,13 @@ class SenatCampaignHomePage( ], heading="Sociální sítě", ), - FieldPanel("calendar_url"), + MultiFieldPanel( + [ + FieldPanel("calendar_url"), + PageChooserPanel("calendar_page"), + ], + "Kalendář", + ), FieldPanel("donations_url"), FieldPanel("matomo_id"), FieldPanel("title_suffix"), @@ -197,6 +204,7 @@ class SenatCampaignHomePage( "senat_campaign.SenatCampaignNewsIndexPage", "senat_campaign.SenatCampaignProgramPage", "senat_campaign.SenatCampaignCookiesPage", + "calendar_utils.CalendarPage", ] ### OTHERS diff --git a/uniweb/models.py b/uniweb/models.py index e68eb96c..91d53570 100644 --- a/uniweb/models.py +++ b/uniweb/models.py @@ -12,6 +12,7 @@ from wagtail.admin.panels import ( InlinePanel, MultiFieldPanel, ObjectList, + PageChooserPanel, TabbedInterface, ) from wagtail.contrib.forms.models import AbstractForm, AbstractFormField @@ -34,11 +35,7 @@ from shared.models import ( from shared.utils import make_promote_panels from tuning import admin_help -from .blocks import ( - PersonCustomPositionBlock, - PeopleGroupListBlock, - PersonUrlBlock, -) +from .blocks import PeopleGroupListBlock, PersonCustomPositionBlock, PersonUrlBlock from .constants import ( ALIGN_CHOICES, ALIGN_CSS, @@ -359,7 +356,13 @@ class UniwebHomePage( ], "nastavení webu", ), - FieldPanel("calendar_url"), + MultiFieldPanel( + [ + FieldPanel("calendar_url"), + PageChooserPanel("calendar_page"), + ], + "Kalendář", + ), MultiFieldPanel( [ FieldPanel("show_logo"), @@ -390,6 +393,7 @@ class UniwebHomePage( "uniweb.UniwebArticlesIndexPage", "uniweb.UniwebFormPage", "uniweb.UniwebPeoplePage", + "calendar_utils.CalendarPage", ] ### OTHERS -- GitLab