From 579d54c8c50cfdd679aa3551cb1f666dc6afbe14 Mon Sep 17 00:00:00 2001 From: Pawel Kowalski Date: Tue, 14 Aug 2018 11:37:52 +0200 Subject: [PATCH] Adds objectives app to project --- server/book/models/chapter.py | 42 ++++++++++++++++++++++ server/book/models/module.py | 8 ++--- server/core/settings.py | 2 ++ server/objectives/__init__.py | 0 server/objectives/admin.py | 3 ++ server/objectives/apps.py | 5 +++ server/objectives/migrations/__init__.py | 0 server/objectives/models.py | 44 ++++++++++++++++++++++++ server/objectives/tests.py | 3 ++ server/objectives/views.py | 3 ++ 10 files changed, 106 insertions(+), 4 deletions(-) create mode 100644 server/book/models/chapter.py create mode 100644 server/objectives/__init__.py create mode 100644 server/objectives/admin.py create mode 100644 server/objectives/apps.py create mode 100644 server/objectives/migrations/__init__.py create mode 100644 server/objectives/models.py create mode 100644 server/objectives/tests.py create mode 100644 server/objectives/views.py diff --git a/server/book/models/chapter.py b/server/book/models/chapter.py new file mode 100644 index 00000000..c7e4f832 --- /dev/null +++ b/server/book/models/chapter.py @@ -0,0 +1,42 @@ +import logging + +from django.db import models +from wagtail.admin.edit_handlers import FieldPanel, TabbedInterface, \ + ObjectList +from wagtail.core.fields import RichTextField +from wagtail.core.models import Page +from wagtail.images.edit_handlers import ImageChooserPanel + +from book.blocks import DEFAULT_RICH_TEXT_FEATURES +from book.models import Book + +logger = logging.getLogger(__name__) + + +class Chapter(Page): + class Meta: + verbose_name = 'Kapitel' + verbose_name_plural = 'Kapitel' + + book = models.ForeignKey(Book, blank=False, null=False, on_delete=models.CASCADE) + + content_panels = [ + FieldPanel('title', classname="full title"), + ] + + settings_panels = [ + FieldPanel('slug') + ] + + edit_handler = TabbedInterface([ + ObjectList(content_panels, heading='Content'), + ObjectList(settings_panels, heading='Settings'), + ]) + + template = 'generic_page.html' + + parent_page_types = ['book.Module'] + + @classmethod + def get_module_chapters(cls, module): + return cls.objects.filter(id__in=module.get_child_ids()).live() diff --git a/server/book/models/module.py b/server/book/models/module.py index 68db176c..9fa36e48 100644 --- a/server/book/models/module.py +++ b/server/book/models/module.py @@ -22,9 +22,6 @@ class Module(Page): max_length=255, help_text='e.g. \'Intro\' or \'Modul 1\'' ) - teaser = models.TextField() - description = RichTextField(features=DEFAULT_RICH_TEXT_FEATURES) - hero_image = models.ForeignKey( 'wagtailimages.Image', null=True, @@ -33,12 +30,15 @@ class Module(Page): related_name='+' ) + teaser = models.TextField() + intro = RichTextField(features=DEFAULT_RICH_TEXT_FEATURES) + content_panels = [ FieldPanel('title', classname="full title"), FieldPanel('meta_title', classname="full title"), ImageChooserPanel('hero_image'), FieldPanel('teaser'), - FieldPanel('description'), + FieldPanel('intro'), ] settings_panels = [ diff --git a/server/core/settings.py b/server/core/settings.py index d349dc47..99f7015e 100644 --- a/server/core/settings.py +++ b/server/core/settings.py @@ -47,6 +47,8 @@ INSTALLED_APPS = [ 'api', 'user', 'book', + 'objectives', + 'news', 'wagtail.contrib.forms', 'wagtail.contrib.redirects', diff --git a/server/objectives/__init__.py b/server/objectives/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/server/objectives/admin.py b/server/objectives/admin.py new file mode 100644 index 00000000..8c38f3f3 --- /dev/null +++ b/server/objectives/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/server/objectives/apps.py b/server/objectives/apps.py new file mode 100644 index 00000000..171b7bfd --- /dev/null +++ b/server/objectives/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class ObjectivesConfig(AppConfig): + name = 'objectives' diff --git a/server/objectives/migrations/__init__.py b/server/objectives/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/server/objectives/models.py b/server/objectives/models.py new file mode 100644 index 00000000..0db0a412 --- /dev/null +++ b/server/objectives/models.py @@ -0,0 +1,44 @@ +from django.contrib.auth import get_user_model +from django.db import models + +# Create your models here. +from django_extensions.db.models import TitleDescriptionModel + +from book.models import Module + + +class ObjectiveGroup(TitleDescriptionModel): + class Meta: + verbose_name = 'Lernziel Gruppe' + verbose_name_plural = 'Lernziel Gruppen' + + module = models.ForeignKey(Module, blank=False, null=False, on_delete=models.CASCADE) + user = models.ForeignKey(get_user_model(), blank=True, null=True, on_delete=models.CASCADE) + # klass = models.ForeignKey(Klass, null=True, on_delete=models.CASCADE) + + def __str__(self): + return 'ObjectiveGroup {}-{}-{}'.format(self.id, self.module, self.title) + + +class Objective(TitleDescriptionModel): + class Meta: + verbose_name = 'Lernziel' + verbose_name_plural = 'Lernziele' + + # several competence entries are grouped in current focus + group = models.ForeignKey(ObjectiveGroup, blank=False, null=False, on_delete=models.CASCADE) + + def __str__(self): + return 'Objective {}-{}'.format(self.id, self.title) + + +class ObjectiveProgressStatus(TitleDescriptionModel): + class Meta: + verbose_name = 'Lernzielstatus' + verbose_name_plural = 'Lernzielstatus' + + objective = models.ForeignKey(Objective, blank=False, null=False, on_delete=models.CASCADE) + user = models.ForeignKey(get_user_model(), blank=True, null=True, on_delete=models.CASCADE) + + def __str__(self): + return 'Lernzielstatus {}-{}'.format(self.objective, self.title) diff --git a/server/objectives/tests.py b/server/objectives/tests.py new file mode 100644 index 00000000..7ce503c2 --- /dev/null +++ b/server/objectives/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/server/objectives/views.py b/server/objectives/views.py new file mode 100644 index 00000000..91ea44a2 --- /dev/null +++ b/server/objectives/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here.