from django.db import models from django.utils.translation import gettext_lazy as _ from wagtail import blocks from wagtail.admin.panels import FieldPanel from wagtail.documents.blocks import DocumentChooserBlock from wagtail.snippets.models import register_snippet class VisualisationType(models.TextChoices): LEARNING_MEDIA = 'LearningMedia', _('Lernmedien') LINK = 'Link', _('Links') ANKER = 'Anker', _('Verankerung') CROSSREFERENCE = 'CrossReference', _('Querverweise') @register_snippet class MediaLibraryContent(models.Model): title = models.TextField() description = models.TextField() link_display_text = models.CharField(max_length=255) # TODO: Revisions only work with wagtail 4.0, can not migrate since wagtail localize is not ready yet. # _revisions = GenericRelation("wagtailcore.Revision", related_query_name="media_library_content") panels = [ FieldPanel('title'), FieldPanel('description'), FieldPanel('link_display_text'), ] @property def revisions(self): return self._revisions class AnkerBlock(blocks.PageChooserBlock): """ Verankerung im Lernpfad. Link to a Learning Content. """ page_type = 'learnpath.LearningUnit' class LinkBlock(blocks.StructBlock): title = blocks.TextBlock(blank=False, null=False) description = blocks.TextBlock(default='') link_display_text = blocks.CharBlock(max_length=255, default='Link öffnen') url = blocks.URLBlock() class CrossReferenceBlock(blocks.StructBlock): title = models.TextField(blank=False, null=False) description = blocks.TextBlock(default='') link_display_text = blocks.CharBlock(max_length=255, default='Link öffnen') category = blocks.PageChooserBlock(page_type='media_library.Category') class ContentCollection(blocks.StructBlock): """ Lernmedien, Links, Querverweise, Verankerung """ title = blocks.TextBlock() collection_type = blocks.MultipleChoiceBlock(choices=VisualisationType.choices, max_length=20, default=VisualisationType.LEARNING_MEDIA) contents = blocks.StreamBlock([('Links', LinkBlock()), ('Documents', DocumentChooserBlock()), ('Ankers', AnkerBlock()), ('CrossReference', CrossReferenceBlock()) ]) class Meta: icon = 'link'