import logging from django.db import models from wagtail.admin.edit_handlers import FieldPanel, TabbedInterface, ObjectList, StreamFieldPanel from wagtail.core.fields import StreamField from wagtail.images.blocks import ImageChooserBlock from books.blocks import TextBlock, BasicKnowledgeBlock, LinkBlock, VideoBlock, DocumentBlock, \ ImageUrlBlock, AssignmentBlock from core.wagtail_utils import StrictHierarchyPage from users.models import SchoolClass logger = logging.getLogger(__name__) class ContentBlock(StrictHierarchyPage): class Meta: verbose_name = 'Inhaltsblock' verbose_name_plural = 'Inhaltsblöcke' NORMAL = 'normal' BASE_COMMUNICATION = 'base_communication' TASK = 'task' BASE_SOCIETY = 'base_society' TYPE_CHOICES = ( (NORMAL, 'Normal'), (BASE_COMMUNICATION, 'Basiswissen Sprache & Kommunikation'), (TASK, 'Aufgabe'), (BASE_SOCIETY, 'Basiswissen Gesellschaft'), ) hidden_for = models.ManyToManyField(SchoolClass, related_name='hidden_content_blocks') visible_for = models.ManyToManyField(SchoolClass, related_name='visible_content_blocks') user_created = models.BooleanField(default=False) contents = StreamField([ ('text_block', TextBlock()), ('basic_knowledge', BasicKnowledgeBlock()), ('assignment', AssignmentBlock()), ('image_block', ImageChooserBlock()), ('image_url_block', ImageUrlBlock()), ('link_block', LinkBlock()), ('solution', TextBlock(icon='tick')), ('video_block', VideoBlock()), ('document_block', DocumentBlock()), ], null=True, blank=True) type = models.CharField( max_length=100, choices=TYPE_CHOICES, default=NORMAL ) content_panels = [ FieldPanel('title', classname="full title"), FieldPanel('type'), StreamFieldPanel('contents') ] settings_panels = [ FieldPanel('slug') ] edit_handler = TabbedInterface([ ObjectList(content_panels, heading='Content'), ObjectList(settings_panels, heading='Settings'), ]) template = 'generic_page.html' parent_page_types = ['books.Chapter'] subpage_types = []