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 }}
+
+
+
+
+
+
+
+ {{ 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]),
+ ),
]