diff --git a/lectures/admin.py b/lectures/admin.py index dbc960808a248b2c9afae277fe472bff0e73c44f..da42d9b91bd7ccaac09e66857a362d53a1c5c40f 100644 --- a/lectures/admin.py +++ b/lectures/admin.py @@ -10,6 +10,7 @@ from .models import ( LectureLector, LectureMaterial, LectureRecording, + LectureCategory, ) # Register your models here. @@ -51,7 +52,7 @@ class LectureAdmin(MarkdownxGuardedModelAdmin): LectureMaterialInline, ) - autocomplete_fields = ("lectors", "rsvp_users") + autocomplete_fields = ("lectors", "rsvp_users", "category") search_fields = ("name", "description") readonly_fields = ("rsvp_users",) @@ -76,6 +77,10 @@ class LectureAdmin(MarkdownxGuardedModelAdmin): return display_string +class LectureCategoryAdmin(MarkdownxGuardedModelAdmin): + search_fields = ("name",) + + class LectureLectorAdmin(MarkdownxGuardedModelAdmin): search_fields = ("name", "username") @@ -88,5 +93,6 @@ for model in ( admin.site.register(model, IndexHiddenModelAdmin) admin.site.register(LectureLector, LectureLectorAdmin) +admin.site.register(LectureCategory, LectureCategoryAdmin) admin.site.register(Lecture, LectureAdmin) admin.site.register(LectureGroup, LectureGroupAdmin) diff --git a/lectures/migrations/0026_lecturecategory_lecture_category.py b/lectures/migrations/0026_lecturecategory_lecture_category.py new file mode 100644 index 0000000000000000000000000000000000000000..75fb20801bec34c40cac7d10d2e36fd320c52955 --- /dev/null +++ b/lectures/migrations/0026_lecturecategory_lecture_category.py @@ -0,0 +1,42 @@ +# Generated by Django 4.1.4 on 2023-09-05 13:09 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + dependencies = [ + ("lectures", "0025_alter_lecturegrouptype_group_and_more"), + ] + + operations = [ + migrations.CreateModel( + name="LectureCategory", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("name", models.CharField(max_length=32, verbose_name="Jméno")), + ], + options={ + "verbose_name": "Kategorie školení", + }, + ), + migrations.AddField( + model_name="lecture", + name="category", + field=models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="lectures", + to="lectures.lecturecategory", + verbose_name="Kategorie", + ), + ), + ] diff --git a/lectures/migrations/0027_alter_lecturecategory_options.py b/lectures/migrations/0027_alter_lecturecategory_options.py new file mode 100644 index 0000000000000000000000000000000000000000..8863a81aeb793c43d24cb14f01ff6e9c70868c2f --- /dev/null +++ b/lectures/migrations/0027_alter_lecturecategory_options.py @@ -0,0 +1,19 @@ +# Generated by Django 4.1.4 on 2023-09-05 13:14 + +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ("lectures", "0026_lecturecategory_lecture_category"), + ] + + operations = [ + migrations.AlterModelOptions( + name="lecturecategory", + options={ + "verbose_name": "Kategorie školení", + "verbose_name_plural": "Kategorie školení", + }, + ), + ] diff --git a/lectures/models.py b/lectures/models.py index 9f719cc33689eefb965c79ffd019b0da1eca1143..5bab9af056fef08969844fc900f0b819c81aedbe 100644 --- a/lectures/models.py +++ b/lectures/models.py @@ -114,6 +114,20 @@ class LectureGroupType(models.Model): verbose_name_plural = "Úroveň požadovanosti pro skupiny" +class LectureCategory(models.Model): + name = models.CharField( + max_length=32, + verbose_name="Jméno" + ) + + def __str__(self) -> str: + return self.name + + class Meta: + verbose_name = "Kategorie školení" + verbose_name_plural = verbose_name + + class Lecture(NameStrMixin, models.Model): is_current_starting_treshold = timedelta(hours=8) is_current_ending_treshold = timedelta(days=60) @@ -124,6 +138,14 @@ class Lecture(NameStrMixin, models.Model): null=True, ) # If undefined, assume this event was in the past + category = models.ForeignKey( + "LectureCategory", + null=True, + on_delete=models.SET_NULL, + related_name="lectures", + verbose_name="Kategorie", + ) + name = models.CharField( max_length=128, verbose_name="Název", diff --git a/lectures/templates/lectures/view_group_lectures.html b/lectures/templates/lectures/view_group_lectures.html index 9c32e8345aefdf04c3a492edb5ae72dcef028bac..45678c8ab21b572e3f5ce9174ce3ee8a47dd62bd 100644 --- a/lectures/templates/lectures/view_group_lectures.html +++ b/lectures/templates/lectures/view_group_lectures.html @@ -5,7 +5,7 @@ {% block content %} {% render_bundle "view_group_lectures" %} - {% include "shared/includes/double_heading.html" with heading=group.name subheading="výuka" icon="ico--user" %} + {% include "shared/includes/double_heading.html" with heading=group.name subheading="Vzdělávání" icon="ico--user" %} {% if group.description %} <div class="prose max-w-none mb-10"> @@ -122,11 +122,18 @@ </template> <template v-if="isCurrentView('recordings')"> {% if past_lectures %} - <ul class="grid grid-cols-1 md:grid-cols-2 gap-4"> - {% for lecture in past_lectures %} - {% include "lectures/includes/lecture.html" with lecture=lecture group=group %} + <div class="flex flex-col gap-3"> + {% regroup past_lectures by category as lecture_categories %} + {% for category in lecture_categories %} + <h2 class="text-3xl font-alt">{{ category.grouper }}</h2> + + <ul class="grid grid-cols-1 md:grid-cols-2 gap-4 mb-4"> + {% for lecture in category.list %} + {% include "lectures/includes/lecture.html" with lecture=lecture group=group %} + {% endfor %} + </ul> {% endfor %} - </ul> + </div> {% else %} <span class="text-gray-600">Žádné dostupné záznamy.</span> {% endif %} diff --git a/lectures/views.py b/lectures/views.py index 0f05d7f3baf607fe98947a8bd797f3370a7b4366..59cd78afc95d3c023626a06a020b6b0bad2a9966 100644 --- a/lectures/views.py +++ b/lectures/views.py @@ -124,7 +124,7 @@ def view_groups(request): **get_base_context(request), "title": "Výukové skupiny", "description": "Kurzy a školení zaměřené na politickou práci a organizaci kampaní.", - "header_name": "Pirátský e-Learning", + "header_name": "Sharing is caring", "lecture_groups": lecture_groups, "settings": Lecture.settings, }, @@ -251,8 +251,8 @@ def view_group_lectures(request, group_id: int): "lectures/view_group_lectures.html", { **get_base_context(request), - "title": f"Výuka pro {group.name}", - "description": f"e-Learningová výuka pro skupinu {group.name}.", + "title": f"Školení pro {group.name}", + "description": f"Školení pro skupinu {group.name}.", "header_name": group.name, "group": group, "current_lectures": current_lectures, diff --git a/shared/templates/shared/includes/base.html b/shared/templates/shared/includes/base.html index f4cdd4abf88b8be3989b446301de550a34e05ab6..141c161a89239fd61e5cd562baaed778225f5fe2 100644 --- a/shared/templates/shared/includes/base.html +++ b/shared/templates/shared/includes/base.html @@ -7,20 +7,20 @@ <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> - <meta name="title" content="{{ title }} | Výuka"> + <meta name="title" content="{{ title }} | Vzdělávání"> <meta name="description" content="{{ description }}"> {% comment %}Open Graph / Facebook{% endcomment %} <meta property="og:type" content="website"> <meta property="og:url" content="{{ site_url }}"> - <meta property="og:title" content="{{ title }} | Výuka"> + <meta property="og:title" content="{{ title }} | Vzdělávání"> <meta property="og:description" content="{{ description }}"> {% comment %}<meta property="og:image" content="">{% endcomment %} {% comment %}Twitter{% endcomment %} <meta property="twitter:card" content="app"> <meta property="twitter:url" content="{{ site_url }}"> - <meta property="twitter:title" content="{{ title }} | Výuka"> + <meta property="twitter:title" content="{{ title }} | Vzdělávání"> <meta property="twitter:description" content="{{ description }}"> {% comment %}<meta property="twitter:image" content="">{% endcomment %} @@ -51,7 +51,7 @@ {% render_bundle "shared" %} {% render_bundle "base" %} - <title>{{ title }} | Výuka</title> + <title>{{ title }} | Vzdělávání</title> </head> <body> <nav class="navbar navbar--simple __js-root"> @@ -63,7 +63,7 @@ <a href="/"> <img src="https://styleguide.pirati.cz/2.12.x/images/logo-round-white.svg" class="w-8" /> </a> - <a href="/" class="pl-4 font-bold text-xl hover:no-underline lg:border-r lg:border-grey-300 lg:pr-8">Výuka</a> + <a href="/" class="pl-4 font-bold text-xl hover:no-underline lg:border-r lg:border-grey-300 lg:pr-8">Vzdělávání</a> <div class="pl-5">{{ header_name }}</div> </div>