diff --git a/seminare/organizer/tables.py b/seminare/organizer/tables.py index 08aece0..de10227 100644 --- a/seminare/organizer/tables.py +++ b/seminare/organizer/tables.py @@ -37,6 +37,11 @@ def get_links( "Upraviť", reverse("org:problemset_update", args=[object.contest_id, object.id]), ), + ( + "mdi:eye", + "Pozrieť na stránke", + reverse("problem_set_detail", args=[object.id]), + ), ] @@ -75,6 +80,18 @@ def get_links( ], ), ), + ( + "mdi:eye", + "Detail", + reverse( + "org:problem_detail", + args=[ + object.problem_set.contest_id, + object.problem_set.id, + object.id, + ], + ), + ), ] diff --git a/seminare/organizer/templates/org/problem_detail.html b/seminare/organizer/templates/org/problem_detail.html new file mode 100644 index 0000000..c1d5508 --- /dev/null +++ b/seminare/organizer/templates/org/problem_detail.html @@ -0,0 +1,41 @@ +{% extends "org/base.html" %} +{% load markdownify %} +{% load ui %} +{% block title %}{{ problem.name }} {{ block.super }}{% endblock %} + +{% block body %} + {% if breadcrumbs %} +
+ {% breadcrumbs breadcrumbs %} +
+ {% endif %} +
+
+

+ Problem: {{ problem.name }} +

+

Problem number: {{ problem.number }}

+
+
+ {% for link in links %} + {% if link|length == 3 %} + {{ link.1 }} + {% else %} + + + {{ link.2 }} + + {% endif %} + {% endfor %} +
+
+
+
+ +
+ {{ texts.PS.text|markdownify }} +
+
+
+{% endblock body %} + diff --git a/seminare/organizer/urls.py b/seminare/organizer/urls.py index fa7ea2e..f28de28 100644 --- a/seminare/organizer/urls.py +++ b/seminare/organizer/urls.py @@ -1,6 +1,6 @@ from django.urls import include, path -from seminare.organizer.views import dashboard, grading, page, problem, problemset, post +from seminare.organizer.views import dashboard, grading, page, post, problem, problemset app_name = "org" @@ -37,6 +37,11 @@ problem.ProblemUpdateView.as_view(), name="problem_update", ), + path( + "sets//problems//detail", + problem.ProblemDetailView.as_view(), + name="problem_detail", + ), path( "sets//problems/create/", problem.ProblemCreateView.as_view(), diff --git a/seminare/organizer/views/problem.py b/seminare/organizer/views/problem.py index bd43f2b..3046b50 100644 --- a/seminare/organizer/views/problem.py +++ b/seminare/organizer/views/problem.py @@ -1,11 +1,12 @@ +from django.contrib.sites.shortcuts import get_current_site from django.db.models import QuerySet from django.shortcuts import get_object_or_404 from django.urls import reverse -from django.views.generic import CreateView, UpdateView +from django.views.generic import CreateView, DetailView, UpdateView from seminare.organizer.forms import ProblemForm from seminare.organizer.tables import ProblemTable -from seminare.organizer.views import WithContest, WithProblemSet +from seminare.organizer.views import WithBreadcrumbs, WithContest, WithProblemSet from seminare.organizer.views.generic import GenericFormView, GenericTableView from seminare.problems.models import Problem @@ -93,6 +94,60 @@ def get_breadcrumbs(self): "org:problem_list", args=[self.contest.id, self.problem_set.id] ), ), - (self.object, ""), + ( + self.object, + reverse( + "org:problem_detail", + args=[self.contest.id, self.problem_set.id, self.object.id], + ), + ), ("Upraviť", ""), ] + + +class ProblemDetailView(WithContest, WithProblemSet, WithBreadcrumbs, DetailView): + template_name = "org/problem_detail.html" + context_object_name = "problem" + links: list[tuple] = [] + + def get_object(self, queryset=None): + site = get_current_site(self.request) + return get_object_or_404( + Problem, + id=self.kwargs["problem_id"], + problem_set_id=self.kwargs["problem_set_id"], + problem_set__contest__site=site, + ) + + def get_links(self): + return [ + ( + "green", + "mdi:pencil", + "Upraviť", + reverse( + "org:problem_update", + args=[self.contest.id, self.problem_set.id, self.object.id], + ), + ) + ] + + def get_context_data(self, **kwargs): + ctx = super().get_context_data(**kwargs) + self.object: Problem + ctx["texts"] = self.object.get_texts() + ctx["links"] = self.get_links() + return ctx + + def get_breadcrumbs(self): + return [ + ("Sady úloh", reverse("org:problemset_list", args=[self.contest.id])), + (self.problem_set, ""), + ( + "Úlohy", + reverse( + "org:problem_list", args=[self.contest.id, self.problem_set.id] + ), + ), + (self.object, ""), + ] diff --git a/seminare/organizer/views/problemset.py b/seminare/organizer/views/problemset.py index e9cbc36..729d765 100644 --- a/seminare/organizer/views/problemset.py +++ b/seminare/organizer/views/problemset.py @@ -94,5 +94,11 @@ def get_form_table_links(self): reverse( "org:problem_create", args=[self.contest.id, self.get_object().id] ), - ) + ), + ( + "default", + "mdi:eye", + "Pozrieť na stránke", + reverse("problem_set_detail", args=[self.get_object().id]), + ), ]