From 6846cec19a39f429c374ce148ae9af507f78f477 Mon Sep 17 00:00:00 2001 From: Jonathan Weth <git@jonathanweth.de> Date: Sun, 1 Aug 2021 11:55:53 +0200 Subject: [PATCH] Add views for listing instructions --- aleksis/apps/alsijil/admin.py | 5 ++++ aleksis/apps/alsijil/menus.py | 11 +++++++++ aleksis/apps/alsijil/models.py | 3 +++ aleksis/apps/alsijil/rules.py | 3 +++ .../templates/alsijil/instruction/list.html | 23 +++++++++++++++++++ aleksis/apps/alsijil/urls.py | 1 + aleksis/apps/alsijil/views.py | 11 ++++++++- 7 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 aleksis/apps/alsijil/admin.py create mode 100644 aleksis/apps/alsijil/templates/alsijil/instruction/list.html diff --git a/aleksis/apps/alsijil/admin.py b/aleksis/apps/alsijil/admin.py new file mode 100644 index 000000000..7deb5c673 --- /dev/null +++ b/aleksis/apps/alsijil/admin.py @@ -0,0 +1,5 @@ +from django.contrib import admin + +from .models import Instruction + +admin.site.register(Instruction) diff --git a/aleksis/apps/alsijil/menus.py b/aleksis/apps/alsijil/menus.py index eb2f7e0a6..1bf7be599 100644 --- a/aleksis/apps/alsijil/menus.py +++ b/aleksis/apps/alsijil/menus.py @@ -67,6 +67,17 @@ MENUS = { ), ], }, + { + "name": _("Instructions"), + "url": "instructions", + "icon": "rule_folder", + "validators": [ + ( + "aleksis.core.util.predicates.permission_validator", + "alsijil.view_instructions_rule", + ), + ], + }, { "name": _("Assign group role"), "url": "assign_group_role_multiple", diff --git a/aleksis/apps/alsijil/models.py b/aleksis/apps/alsijil/models.py index 8d387dbee..3001bd54d 100644 --- a/aleksis/apps/alsijil/models.py +++ b/aleksis/apps/alsijil/models.py @@ -490,6 +490,9 @@ class Instruction(SchoolTermRelatedExtensibleModel): ), ) + def __str__(self): + return self.name + class Meta: verbose_name = _("Instruction") verbose_name_plural = _("Instructions") diff --git a/aleksis/apps/alsijil/rules.py b/aleksis/apps/alsijil/rules.py index 0b418af8c..0aaaa477f 100644 --- a/aleksis/apps/alsijil/rules.py +++ b/aleksis/apps/alsijil/rules.py @@ -308,3 +308,6 @@ view_register_objects_list_predicate = has_person & ( | has_global_perm("core.view_full_register") ) add_perm("alsijil.view_register_objects_list_rule", view_register_objects_list_predicate) + +view_instructions_predicate = has_person +add_perm("alsijil.view_instructions_rule", view_instructions_predicate) diff --git a/aleksis/apps/alsijil/templates/alsijil/instruction/list.html b/aleksis/apps/alsijil/templates/alsijil/instruction/list.html new file mode 100644 index 000000000..da3c384b3 --- /dev/null +++ b/aleksis/apps/alsijil/templates/alsijil/instruction/list.html @@ -0,0 +1,23 @@ +{# -*- engine:django -*- #} + +{% extends "core/base.html" %} + +{% load i18n %} + +{% block browser_title %}{% blocktrans %}Instructions{% endblocktrans %}{% endblock %} +{% block page_title %}{% blocktrans %}Instructions{% endblocktrans %}{% endblock %} + +{% block content %} + <ul class="collection"> + {% for instruction in instruction_list %} + <li class="collection-item avatar"> + <i class="material-icons materialize-circle primary-color">{{ instruction.icon|default:"rule" }}</i> + <span class="title"> {{ instruction.name }}</span> + <a class="btn-flat waves-effect waves-green right" href="{{ instruction.pdf_file.url }}" target="_blank"> + <i class="material-icons left">picture_as_pdf</i> + {% trans "Show PDF file with instruction" %} + </a> + </li> + {% endfor %} + </ul> +{% endblock %} diff --git a/aleksis/apps/alsijil/urls.py b/aleksis/apps/alsijil/urls.py index 8fb31b625..91fbb68bc 100644 --- a/aleksis/apps/alsijil/urls.py +++ b/aleksis/apps/alsijil/urls.py @@ -101,4 +101,5 @@ urlpatterns = [ name="assign_group_role_multiple", ), path("all/", views.AllRegisterObjectsView.as_view(), name="all_register_objects"), + path("instructions/", views.InstructionsListView.as_view(), name="instructions"), ] diff --git a/aleksis/apps/alsijil/views.py b/aleksis/apps/alsijil/views.py index 3999324f2..19eb27603 100644 --- a/aleksis/apps/alsijil/views.py +++ b/aleksis/apps/alsijil/views.py @@ -16,7 +16,7 @@ from django.utils.http import url_has_allowed_host_and_scheme from django.utils.translation import ugettext as _ from django.views import View from django.views.decorators.cache import never_cache -from django.views.generic import DetailView +from django.views.generic import DetailView, ListView import reversion from calendarweek import CalendarWeek @@ -62,6 +62,7 @@ from .models import ( ExtraMark, GroupRole, GroupRoleAssignment, + Instruction, LessonDocumentation, PersonalNote, ) @@ -1351,3 +1352,11 @@ class AllRegisterObjectsView(PermissionRequiredMixin, View): if self.action_form.is_valid(): self.action_form.execute() return render(request, "alsijil/class_register/all_objects.html", context) + + +class InstructionsListView(PermissionRequiredMixin, ListView): + """Table of all excuse types.""" + + model = Instruction + permission_required = "alsijil.view_instructions_rule" + template_name = "alsijil/instruction/list.html" -- GitLab