X-Git-Url: https://git.mdrn.pl/edumed.git/blobdiff_plain/5d8a65f12464816813e1b03837d65af1580c6fe5..ea300f6c03d47f6c17dd7721b8d6690489af79da:/catalogue/templatetags/catalogue_tags.py diff --git a/catalogue/templatetags/catalogue_tags.py b/catalogue/templatetags/catalogue_tags.py index 32a5a0b..5166298 100755 --- a/catalogue/templatetags/catalogue_tags.py +++ b/catalogue/templatetags/catalogue_tags.py @@ -1,6 +1,8 @@ +from collections import defaultdict from django import template from django.utils.datastructures import SortedDict from ..models import Lesson, Section +from curriculum.models import Level, CurriculumCourse from librarian.dcparser import WLURI, Person register = template.Library() @@ -9,29 +11,57 @@ register = template.Library() @register.inclusion_tag("catalogue/snippets/carousel.html") def catalogue_carousel(): return { + "object_list": Section.objects.all() } -@register.inclusion_tag("catalogue/snippets/section_buttons.html") -def catalogue_section_buttons(): +@register.inclusion_tag("catalogue/snippets/levels_main.html") +def catalogue_levels_main(): + object_list = Level.objects.exclude(lesson=None) + c = object_list.count() return { - "object_list": Section.objects.all() + 'object_list': object_list, + 'section_width': (700 - 20 * (c - 1)) / c, } -@register.inclusion_tag("catalogue/snippets/section_box.html") -def section_box(section): - lessons = SortedDict() - for lesson in section.lesson_set.all(): - if lesson.level not in lessons: - newdict = SortedDict() - newdict['synthetic'] = [] - newdict['course'] = [] - lessons[lesson.level] = newdict - if lesson.type not in lessons[lesson.level]: - lessons[lesson.level][lesson.type] = [] - lessons[lesson.level][lesson.type].append(lesson) + +@register.inclusion_tag("catalogue/snippets/level_box.html") +def level_box(level): + lessons = dict( + synthetic = [], + course = SortedDict(), + project = [], + ) + by_course = defaultdict(lambda: defaultdict(list)) + + lesson_lists = [alist for alist in [ + list(level.lesson_set.exclude(type='appendix').order_by('section__order')), + list(level.lessonstub_set.all()) + ] if alist] + + while lesson_lists: + min_index, min_list = min(enumerate(lesson_lists), key=lambda x: x[1][0].order) + lesson = min_list.pop(0) + if not min_list: + lesson_lists.pop(min_index) + + if lesson.type == 'course': + if lesson.section not in lessons['course']: + lessons['course'][lesson.section] = [] + lessons['course'][lesson.section].append(lesson) + else: + lessons[lesson.type].append(lesson) + + if hasattr(lesson, 'curriculum_courses'): + for course in lesson.curriculum_courses.all(): + by_course[course][lesson.type].append(lesson) + + courses = [(course, by_course[course]) for course in + CurriculumCourse.objects.filter(lesson__level=level).distinct()] + return { - "section": section, + "level": level, "lessons": lessons, + "courses": courses, } @register.inclusion_tag("catalogue/snippets/lesson_nav.html") @@ -39,16 +69,16 @@ def lesson_nav(lesson): if lesson.type == 'course': root = lesson.section siblings = Lesson.objects.filter(type='course', level=lesson.level, section=root) - mark_level = False - else: + elif lesson.type == 'appendix': root = None siblings = Lesson.objects.filter(type=lesson.type) - mark_level = True + else: + root = None + siblings = Lesson.objects.filter(type=lesson.type, level=lesson.level) return { "lesson": lesson, "root": root, "siblings": siblings, - "mark_level": mark_level } @register.inclusion_tag("catalogue/snippets/lesson_link.html")