Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions seminare/organizer/tables.py
Original file line number Diff line number Diff line change
Expand Up @@ -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]),
),
]


Expand Down Expand Up @@ -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,
],
),
),
]


Expand Down
41 changes: 41 additions & 0 deletions seminare/organizer/templates/org/problem_detail.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
{% extends "org/base.html" %}
{% load markdownify %}
{% load ui %}
{% block title %}{{ problem.name }} {{ block.super }}{% endblock %}

{% block body %}
{% if breadcrumbs %}
<div class="mb-2">
{% breadcrumbs breadcrumbs %}
</div>
{% endif %}
<div class="md:flex md:items-center md:justify-between mb-6">
<div class="min-w-0 flex-1">
<h2 class="font-bold text-gray-900 text-2xl md:text-3xl">
Problem: {{ problem.name }}
</h2>
<p class="font-semibold text-gray-600 text-lg md:text-xl">Problem number: {{ problem.number }}</p>
</div>
<div class="mt-4 flex md:ml-4 md:mt-0 gap-2">
{% for link in links %}
{% if link|length == 3 %}
<a href="{{ link.2 }}" class="btn btn-{{ link.0 }}">{{ link.1 }}</a>
{% else %}
<a href="{{ link.3 }}" class="btn btn-{{ link.0 }}">
<iconify-icon icon="{{ link.1 }}" class="mr-1"></iconify-icon>
{{ link.2 }}
</a>
{% endif %}
{% endfor %}
</div>
</div>
<div class="flex-1 p-4 md:py-8">
<div class="mx-auto max-w-prose">

<div class="prose">
{{ texts.PS.text|markdownify }}
</div>
</div>
</div>
{% endblock body %}

7 changes: 6 additions & 1 deletion seminare/organizer/urls.py
Original file line number Diff line number Diff line change
@@ -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"

Expand Down Expand Up @@ -37,6 +37,11 @@
problem.ProblemUpdateView.as_view(),
name="problem_update",
),
path(
"sets/<int:problem_set_id>/problems/<int:problem_id>/detail",
problem.ProblemDetailView.as_view(),
name="problem_detail",
),
path(
"sets/<int:problem_set_id>/problems/create/",
problem.ProblemCreateView.as_view(),
Expand Down
61 changes: 58 additions & 3 deletions seminare/organizer/views/problem.py
Original file line number Diff line number Diff line change
@@ -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

Expand Down Expand Up @@ -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, ""),
]
8 changes: 7 additions & 1 deletion seminare/organizer/views/problemset.py
Original file line number Diff line number Diff line change
Expand Up @@ -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]),
),
]