# SPDX-FileCopyrightText: 2024 Thomas Breitner <t.breitner@csl.mpg.de>
#
# SPDX-License-Identifier: EUPL-1.2
from django.db import models
from django.core.exceptions import ValidationError
from wagtail.models import Orderable
from wagtail.admin.panels import (
FieldPanel,
InlinePanel,
MultiFieldPanel,
)
from wagtail.snippets.models import register_snippet
from modelcluster.fields import ParentalKey
from modelcluster.models import ClusterableModel
from ..abstracts import LinkFields
[docs]
class SocialShareLink(Orderable, models.Model):
SOCIAL_SHARE_FACEBOOK = "facebook"
SOCIAL_SHARE_TWITTER = "twitter"
SOCIAL_SHARE_MAIL = "email"
SOCIAL_SHARE_CHOICES = (
(SOCIAL_SHARE_FACEBOOK, "Facebook"),
(SOCIAL_SHARE_TWITTER, "Twitter"),
(SOCIAL_SHARE_MAIL, "Email"),
)
social_share_link = ParentalKey("Footer", related_name="social_share_links")
social_share_type = models.CharField(
max_length=25,
choices=SOCIAL_SHARE_CHOICES,
default=SOCIAL_SHARE_MAIL,
)
link_title = models.CharField(
max_length=254, blank=True, help_text="Text for the <a> title attribute"
)
panels = [
FieldPanel("social_share_type"),
FieldPanel("link_title"),
]
def __str__(self):
return self.social_share_type
[docs]
class LegalLink(LinkFields, Orderable, models.Model):
legal_link = ParentalKey("Footer", related_name="legal_links")
link_text = models.CharField(max_length=255, help_text="Link text")
panels = [
FieldPanel("link_text"),
MultiFieldPanel(LinkFields.panels, "Link"),
]
def __str__(self):
return self.link_text
[docs]
@register_snippet
class Banner(models.Model):
"""Banner snippet for sitewide messages or promotions."""
title = models.CharField(max_length=255)
# image = models.ForeignKey(
# "wagtailimages.Image",
# null=True,
# blank=True,
# on_delete=models.SET_NULL,
# related_name="+",
# )
# text = RichTextField(
# blank=True,
# features=["ol", "ul", "bold", "italic", "link", "document-link"],
# )
is_active = models.BooleanField(default=False)
panels = [
FieldPanel("title"),
FieldPanel("is_active"),
]
class Meta:
verbose_name = "Banner"
verbose_name_plural = "Banners"
[docs]
def clean(self):
super().clean()
if (
self.is_active
and Banner.objects.exclude(pk=self.pk).filter(is_active=True).exists()
):
raise ValidationError(
{"is_active": "Only one Banner may be active at a time."}
)
def __str__(self):
return self.title