From 93fa8c6f2ed43590c3e38e79ce63b32bada77b1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Mon, 15 May 2023 20:26:48 +0200 Subject: [PATCH 01/34] =?UTF-8?q?Odevzd=C3=A1v=C3=A1tko:=20Auto=C5=99i=20?= =?UTF-8?q?=C5=99e=C5=A1en=C3=AD=20->=20Dal=C5=A1=C3=AD=20auto=C5=99i?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- odevzdavatko/forms.py | 1 + odevzdavatko/templates/odevzdavatko/nahraj_reseni.html | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/odevzdavatko/forms.py b/odevzdavatko/forms.py index 223d807f..d9d90a3e 100644 --- a/odevzdavatko/forms.py +++ b/odevzdavatko/forms.py @@ -88,6 +88,7 @@ class NahrajReseniForm(forms.ModelForm): if 'resitele' in self.fields: # FIXME Mnohem hezčí by to bylo u definice resitele výše, ale nepodařilo se mi to. self.fields['resitele'].required = False + self.fields['resitele'].label = "Další autoři" ReseniSPrilohamiFormSet = inlineformset_factory(m.Reseni,m.PrilohaReseni, form = NahrajReseniForm, diff --git a/odevzdavatko/templates/odevzdavatko/nahraj_reseni.html b/odevzdavatko/templates/odevzdavatko/nahraj_reseni.html index 739340c3..61c4d9ec 100644 --- a/odevzdavatko/templates/odevzdavatko/nahraj_reseni.html +++ b/odevzdavatko/templates/odevzdavatko/nahraj_reseni.html @@ -13,7 +13,7 @@

Když řešení různých témátek vložíš každé zvlášť, lépe se v nich vyznáme a třeba ti je i rychleji opravíme.

-

Pokud řešíte ve více lidech, je nutné přidat tyto lidi jako „Autory řešení“. V tomto poli se vyhledává podle přezdívek, které si lze nastavit v „Osobní údaje“. Sebe vyplňovat nemusíte a za skupinu odevzdávejte pouze jednou (ne každý sám).

+

Pokud řešíte ve více lidech, je nutné přidat tyto lidi jako „Další autoři“. V tomto poli se vyhledává podle přezdívek, které si lze nastavit v „Osobní údaje“. Sebe vyplňovat nemusíte a za skupinu odevzdávejte pouze jednou (ne každý sám).

{% csrf_token %} From ce4ee94fedca54212bd6c02b907ae136b5e923f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Mon, 15 May 2023 21:49:35 +0200 Subject: [PATCH 02/34] =?UTF-8?q?Odevzd=C3=A1v=C3=A1tko:=20Nejprve=20vybra?= =?UTF-8?q?t=20t=C3=A9ma,=20pak=20pod=C3=BAlohy=20=E2=80=93=20part=201?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/views/autocomplete.py | 4 ++++ odevzdavatko/forms.py | 3 +++ .../templates/odevzdavatko/nahraj_reseni.html | 6 +++++- .../nahraj_reseni_nadproblem.html | 21 +++++++++++++++++++ odevzdavatko/urls.py | 3 ++- odevzdavatko/views.py | 11 ++++++++++ 6 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 odevzdavatko/templates/odevzdavatko/nahraj_reseni_nadproblem.html diff --git a/api/views/autocomplete.py b/api/views/autocomplete.py index 601f4e35..473f2722 100644 --- a/api/views/autocomplete.py +++ b/api/views/autocomplete.py @@ -87,6 +87,10 @@ class OdevzdatelnyProblemAutocomplete(autocomplete.Select2QuerySetView): if self.q: qs = qs.filter( Q(nazev__icontains=self.q)) + + nadproblem_id = int(self.forwarded.get("nadproblem_id", -1)) + if nadproblem_id != -1: + qs = [problem for problem in qs if problem.hlavni_problem.id == nadproblem_id] return qs class ProblemAutocomplete(autocomplete.Select2QuerySetView): diff --git a/odevzdavatko/forms.py b/odevzdavatko/forms.py index d9d90a3e..89121747 100644 --- a/odevzdavatko/forms.py +++ b/odevzdavatko/forms.py @@ -72,6 +72,7 @@ class NahrajReseniForm(forms.ModelForm): attrs = {'data-placeholder--id': '-1', 'data-placeholder--text' : '---', 'data-allow-clear': 'true'}, + forward=["nadproblem_id"], ), 'resitele': autocomplete.ModelSelect2Multiple( @@ -82,6 +83,8 @@ class NahrajReseniForm(forms.ModelForm): ) } + nadproblem_id = forms.IntegerField(required=False, disabled=True, widget=forms.HiddenInput()) + def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # FIXME Z nějakého důvodu se do této třídy dostaneme i bez resitele diff --git a/odevzdavatko/templates/odevzdavatko/nahraj_reseni.html b/odevzdavatko/templates/odevzdavatko/nahraj_reseni.html index 61c4d9ec..80f97fbf 100644 --- a/odevzdavatko/templates/odevzdavatko/nahraj_reseni.html +++ b/odevzdavatko/templates/odevzdavatko/nahraj_reseni.html @@ -19,7 +19,7 @@ {% csrf_token %} - {% for field in form %} + {% for field in form.visible_fields %}
+ {% for field in form.hidden_fields %} + {{ field }} + {% endfor %} +
diff --git a/odevzdavatko/templates/odevzdavatko/nahraj_reseni_nadproblem.html b/odevzdavatko/templates/odevzdavatko/nahraj_reseni_nadproblem.html new file mode 100644 index 00000000..6e49f02e --- /dev/null +++ b/odevzdavatko/templates/odevzdavatko/nahraj_reseni_nadproblem.html @@ -0,0 +1,21 @@ +{% extends "base.html" %} +{% load static %} + +{% block content %} +

+ {% block nadpis1a %} + Poslat řešení + {% endblock %} +

+ +

Seznam témat k odevzdání

+ +
    + {% for problem in object_list %} +
  • {{ problem }}
  • + {% empty %} +
  • Nelze nic odevzdávat.
  • + {% endfor %} +
+ +{% endblock %} diff --git a/odevzdavatko/urls.py b/odevzdavatko/urls.py index 8c53de6b..35b74eea 100644 --- a/odevzdavatko/urls.py +++ b/odevzdavatko/urls.py @@ -20,7 +20,8 @@ from . import views urlpatterns = [ path('org/add_solution', org_required(views.PosliReseniView.as_view()), name='seminar_vloz_reseni'), - path('resitel/nahraj_reseni', resitel_required(views.NahrajReseniView.as_view()), name='seminar_nahraj_reseni'), + path('resitel/nahraj_reseni', resitel_required(views.NahrajReseniNadproblemView.as_view()), name='seminar_nahraj_reseni'), + path('resitel/nahraj_reseni//', resitel_required(views.NahrajReseniView.as_view()), name='seminar_nahraj_reseni'), path('resitel/odevzdana_reseni/', resitel_or_org_required(views.PrehledOdevzdanychReseni.as_view()), name='seminar_resitel_odevzdana_reseni'), path('org/reseni/', org_required(views.TabulkaOdevzdanychReseniView.as_view()), name='odevzdavatko_tabulka'), diff --git a/odevzdavatko/views.py b/odevzdavatko/views.py index d3c74812..acef1669 100644 --- a/odevzdavatko/views.py +++ b/odevzdavatko/views.py @@ -381,6 +381,14 @@ class PosliReseniView(LoginRequiredMixin, FormView): return data +class NahrajReseniNadproblemView(LoginRequiredMixin, ListView): + model = m.Problem + template_name = 'odevzdavatko/nahraj_reseni_nadproblem.html' + + def get_queryset(self): + return super().get_queryset().filter(nadproblem__isnull=True) + + class NahrajReseniView(LoginRequiredMixin, CreateView): model = m.Reseni template_name = 'odevzdavatko/nahraj_reseni.html' @@ -399,6 +407,9 @@ class NahrajReseniView(LoginRequiredMixin, CreateView): }) return super().get(request, *args, **kwargs) + def get_initial(self): + return {"nadproblem_id": self.kwargs["nadproblem_id"]} + def get_context_data(self,**kwargs): data = super().get_context_data(**kwargs) if self.request.POST: From fbcfe7e93fcb79af62079960cfaeb8eee5d58ad4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Mon, 15 May 2023 22:00:37 +0200 Subject: [PATCH 03/34] =?UTF-8?q?Odevzd=C3=A1v=C3=A1tko:=20Filtrovat=20pou?= =?UTF-8?q?ze=20odevzdateln=C3=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- odevzdavatko/views.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/odevzdavatko/views.py b/odevzdavatko/views.py index acef1669..9a49cbc3 100644 --- a/odevzdavatko/views.py +++ b/odevzdavatko/views.py @@ -386,7 +386,15 @@ class NahrajReseniNadproblemView(LoginRequiredMixin, ListView): template_name = 'odevzdavatko/nahraj_reseni_nadproblem.html' def get_queryset(self): - return super().get_queryset().filter(nadproblem__isnull=True) + # COPY PASTE z api/views/autocomplete.py TODO hodit někam do utils? + nastaveni = get_object_or_404(m.Nastaveni) + rocnik = nastaveni.aktualni_rocnik + # Od tohoto místa dál jsem zkoušel spoustu variací podle https://django-polymorphic.readthedocs.io/en/stable/advanced.html + temaQ = Q(Tema___rocnik=rocnik, stav=m.Problem.STAV_ZADANY) + ulohaQ = Q(Uloha___cislo_zadani__rocnik=rocnik, stav=m.Problem.STAV_ZADANY) + clanekQ = Q(Clanek___cislo__rocnik=rocnik, stav=m.Problem.STAV_ZADANY) + qs = super().get_queryset().filter(temaQ | ulohaQ | clanekQ) + return qs.filter(nadproblem__isnull=True) class NahrajReseniView(LoginRequiredMixin, CreateView): From 7e99466166400283c46b29de9ecf9c001ff10252 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Mon, 15 May 2023 22:22:03 +0200 Subject: [PATCH 04/34] =?UTF-8?q?Odevzd=C3=A1v=C3=A1tko:=20oprava=20POSTu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- odevzdavatko/templates/odevzdavatko/nahraj_reseni.html | 2 +- odevzdavatko/views.py | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/odevzdavatko/templates/odevzdavatko/nahraj_reseni.html b/odevzdavatko/templates/odevzdavatko/nahraj_reseni.html index 80f97fbf..2f8c732c 100644 --- a/odevzdavatko/templates/odevzdavatko/nahraj_reseni.html +++ b/odevzdavatko/templates/odevzdavatko/nahraj_reseni.html @@ -15,7 +15,7 @@

Pokud řešíte ve více lidech, je nutné přidat tyto lidi jako „Další autoři“. V tomto poli se vyhledává podle přezdívek, které si lze nastavit v „Osobní údaje“. Sebe vyplňovat nemusíte a za skupinu odevzdávejte pouze jednou (ne každý sám).

- + {% csrf_token %} diff --git a/odevzdavatko/views.py b/odevzdavatko/views.py index 9a49cbc3..01f83c68 100644 --- a/odevzdavatko/views.py +++ b/odevzdavatko/views.py @@ -424,6 +424,8 @@ class NahrajReseniView(LoginRequiredMixin, CreateView): data['prilohy'] = f.ReseniSPrilohamiFormSet(self.request.POST,self.request.FILES) else: data['prilohy'] = f.ReseniSPrilohamiFormSet() + + data["nadproblem_id"] = self.kwargs["nadproblem_id"] return data # FIXME prepsat tak, aby form_valid se volalo jen tehdy, kdyz je form i formset validni From ee1db52114a595cd71e83101184d4ce2e57a1112 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Mon, 15 May 2023 22:28:57 +0200 Subject: [PATCH 05/34] =?UTF-8?q?Odevzd=C3=A1v=C3=A1tko:=20oprava=20dokume?= =?UTF-8?q?ntace?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/dalsi_soubory.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/dalsi_soubory.rst b/docs/dalsi_soubory.rst index 1a59ee15..627a59d7 100644 --- a/docs/dalsi_soubory.rst +++ b/docs/dalsi_soubory.rst @@ -28,7 +28,7 @@ Generuje se za pomocí:: nebo (v případě meníčka):: - ./manage.py dumpdata sitetree --natrual-foreign > data/sitetree_new.json + ./manage.py dumpdata sitetree --natural-foreign > data/sitetree_new.json ./fix_json.py data/sitetree_new.json data/sitetree.json deploy_v2 From b8fc56773c0744cf1aa2495a73234acb1e6ee38b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Mon, 15 May 2023 22:30:20 +0200 Subject: [PATCH 06/34] =?UTF-8?q?Odevzd=C3=A1v=C3=A1tko:=20oprava=20men?= =?UTF-8?q?=C3=AD=C4=8Dka?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/sitetree.json | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/data/sitetree.json b/data/sitetree.json index 25cf7fd7..8b0dd25f 100644 --- a/data/sitetree.json +++ b/data/sitetree.json @@ -1025,5 +1025,35 @@ }, "model": "sitetree.treeitem", "pk": 51 + }, + { + "fields": { + "access_guest": false, + "access_loggedin": false, + "access_perm_type": 1, + "access_permissions": [ + [ + "resitel", + "auth", + "user" + ] + ], + "access_restricted": true, + "alias": null, + "description": "", + "hidden": false, + "hint": "", + "inbreadcrumbs": true, + "inmenu": true, + "insitetree": true, + "parent": 23, + "sort_order": 52, + "title": "Poslat řešení k nadproblému {{nadproblem_id}}", + "tree": 1, + "url": "seminar_nahraj_reseni nadproblem_id", + "urlaspattern": true + }, + "model": "sitetree.treeitem", + "pk": 52 } ] \ No newline at end of file From 9ff223428bf8cb1a60ca7c9abc8975d82d18dff4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Mon, 15 May 2023 23:06:52 +0200 Subject: [PATCH 07/34] =?UTF-8?q?Lep=C5=A1=C3=AD=20formularOKView?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- odevzdavatko/views.py | 6 +++++- personalni/views.py | 5 ++++- seminar/views/views_all.py | 5 +++-- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/odevzdavatko/views.py b/odevzdavatko/views.py index 01f83c68..7bc75898 100644 --- a/odevzdavatko/views.py +++ b/odevzdavatko/views.py @@ -477,4 +477,8 @@ class NahrajReseniView(LoginRequiredMixin, CreateView): to=list(prijemci), ).send() - return formularOKView(self.request, text='Řešení úspěšně odevzdáno') + return formularOKView( + self.request, + text='Řešení úspěšně odevzdáno', + dalsi_odkazy=[("Odevzdat další řešení", reverse("seminar_nahraj_reseni"))], + ) diff --git a/personalni/views.py b/personalni/views.py index a45aee52..65dc3f24 100644 --- a/personalni/views.py +++ b/personalni/views.py @@ -173,7 +173,10 @@ def resitelEditView(request): msg = "Unknown school {}, {}".format(fcd['skola_nazev'],fcd['skola_adresa']) resitel_edit.save() osoba_edit.save() - return formularOKView(request, text=f'Údaje byly úspěšně uloženy. Vrátit se zpět na profil.') + return formularOKView( + request, + text='Údaje byly úspěšně uloženy.', + dalsi_odkazy=[("Vrátit se zpět na profil", reverse("profil"))]), return render(request, 'personalni/udaje/edit.html', {'form': form}) diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py index 4627989e..f05945f5 100644 --- a/seminar/views/views_all.py +++ b/seminar/views/views_all.py @@ -35,6 +35,7 @@ from django.conf import settings import unicodedata import logging import time +from collections.abc import Iterable from seminar.utils import aktivniResitele @@ -677,9 +678,9 @@ def StavDatabazeView(request): # Interní, nemá se nikdy objevit v urls (jinak to účastníci vytrolí) -def formularOKView(request, text=''): +def formularOKView(request, text='', dalsi_odkazy: Iterable[tuple[str, str]] = ()): template_name = 'seminar/formular_ok.html' - odkazy = [ + odkazy = list(dalsi_odkazy) + [ # (Text, odkaz) ('Vrátit se na titulní stránku', reverse('titulni_strana')), ('Zobrazit aktuální zadání', reverse('seminar_aktualni_zadani')), From e04c116b80f36686102c18ad7b72ed00ff552d4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Mon, 15 May 2023 23:09:56 +0200 Subject: [PATCH 08/34] =?UTF-8?q?=C3=81,=20j=C3=A1=20jsem=20v=C5=AFl?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- personalni/views.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/personalni/views.py b/personalni/views.py index 65dc3f24..876cc7ec 100644 --- a/personalni/views.py +++ b/personalni/views.py @@ -176,7 +176,8 @@ def resitelEditView(request): return formularOKView( request, text='Údaje byly úspěšně uloženy.', - dalsi_odkazy=[("Vrátit se zpět na profil", reverse("profil"))]), + dalsi_odkazy=[("Vrátit se zpět na profil", reverse("profil"))], + ) return render(request, 'personalni/udaje/edit.html', {'form': form}) From a3526419a9df3a8761478d26673f6552cd5e3bd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Tue, 16 May 2023 00:06:12 +0200 Subject: [PATCH 09/34] =?UTF-8?q?Odevzd=C3=A1v=C3=A1tko:=20Zlep=C5=A1en?= =?UTF-8?q?=C3=AD=20UI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- odevzdavatko/forms.py | 2 ++ .../templates/odevzdavatko/nahraj_reseni.html | 34 +++++++++++++++---- .../templates/odevzdavatko/prilohy.html | 5 +-- odevzdavatko/views.py | 1 + 4 files changed, 33 insertions(+), 9 deletions(-) diff --git a/odevzdavatko/forms.py b/odevzdavatko/forms.py index 89121747..735753aa 100644 --- a/odevzdavatko/forms.py +++ b/odevzdavatko/forms.py @@ -92,6 +92,8 @@ class NahrajReseniForm(forms.ModelForm): # FIXME Mnohem hezčí by to bylo u definice resitele výše, ale nepodařilo se mi to. self.fields['resitele'].required = False self.fields['resitele'].label = "Další autoři" + if 'problem' in self.fields: + self.fields['problem'].label = "Všechny řešené problémy" ReseniSPrilohamiFormSet = inlineformset_factory(m.Reseni,m.PrilohaReseni, form = NahrajReseniForm, diff --git a/odevzdavatko/templates/odevzdavatko/nahraj_reseni.html b/odevzdavatko/templates/odevzdavatko/nahraj_reseni.html index 2f8c732c..ec09401b 100644 --- a/odevzdavatko/templates/odevzdavatko/nahraj_reseni.html +++ b/odevzdavatko/templates/odevzdavatko/nahraj_reseni.html @@ -11,15 +11,16 @@ {% endblock %} -

Když řešení různých témátek vložíš každé zvlášť, lépe se v nich vyznáme a třeba ti je i rychleji opravíme.

- -

Pokud řešíte ve více lidech, je nutné přidat tyto lidi jako „Další autoři“. V tomto poli se vyhledává podle přezdívek, které si lze nastavit v „Osobní údaje“. Sebe vyplňovat nemusíte a za skupinu odevzdávejte pouze jednou (ne každý sám).

- {% csrf_token %} -
+
+ + + + + + {% with field=form.problem %} - {% for field in form.visible_fields %} - {% endfor %} + {% endwith %}
{{ field }}
{% for field in form.hidden_fields %} {{ field }} {% endfor %} +
+

Spolupráce s dalšími řešiteli

+ +

Pokud řešíte ve více lidech, je potřeba přidat tyto lidi jako „Další autoři“. V tomto poli se vyhledává podle přezdívek, které si lze nastavit v „Osobní údaje“. Sebe vyplňovat nemusíte a za skupinu odevzdávejte pouze jednou (ne každý sám).

+ + + {% with field=form.resitele %} + + + + + {% endwith %} +
+ + + {{ field }} +

diff --git a/odevzdavatko/templates/odevzdavatko/prilohy.html b/odevzdavatko/templates/odevzdavatko/prilohy.html index 4946546b..2bfaa29e 100644 --- a/odevzdavatko/templates/odevzdavatko/prilohy.html +++ b/odevzdavatko/templates/odevzdavatko/prilohy.html @@ -2,8 +2,9 @@

Soubory s řešením

-

Maximální součet velikostí příloh je cca 49 MB. Pokud je to možné a dává to smysl, pošli nám prosím své řešení ve formátu PDF, ostatní formáty nemusíme umět otevřít.

-

Pokud svůj soubor rozumně pojmenuješ, urychlíš opravování a předejdeš tomu, že si nějakého tvého řešení nevšimneme. Například z img_250921_101205.pdf nepoznáme, kterou úlohu jsi odevzdal, zato uloha_3.pdf nebo tema_1.pdf, to už je něco jiného. Případně můžeš využít i poznámku řešitele.

+

Pokud je to možné a dává to smysl, pošli nám prosím své řešení ve formátu PDF, ostatní formáty nemusíme umět otevřít.

+

Pokud svůj soubor rozumně pojmenuješ, urychlíš opravování a předejdeš tomu, že si nějakého tvého řešení nevšimneme. Například z img_250921_101205.pdf nepoznáme, kterou úlohu jsi odevzdal, zato uloha_3.pdf nebo tema_1.pdf, to už je něco jiného. Případně můžeš využít i poznámku řešitele.

+

Maximální součet velikostí příloh je cca 49 MB.

{% for form in prilohy.forms %} diff --git a/odevzdavatko/views.py b/odevzdavatko/views.py index 7bc75898..04606b4c 100644 --- a/odevzdavatko/views.py +++ b/odevzdavatko/views.py @@ -426,6 +426,7 @@ class NahrajReseniView(LoginRequiredMixin, CreateView): data['prilohy'] = f.ReseniSPrilohamiFormSet() data["nadproblem_id"] = self.kwargs["nadproblem_id"] + data["nadproblem"] = get_object_or_404(m.Problem, id=self.kwargs["nadproblem_id"]) return data # FIXME prepsat tak, aby form_valid se volalo jen tehdy, kdyz je form i formset validni From b11429eaeacc713acc7d5124baae3ca5b78c8a35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Tue, 16 May 2023 13:27:10 +0200 Subject: [PATCH 10/34] =?UTF-8?q?Odevzd=C3=A1v=C3=A1tko:=20Se=C5=99azen?= =?UTF-8?q?=C3=AD=20probl=C3=A9m=C5=AF=20k=20odevzd=C3=A1n=C3=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/views/autocomplete.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/api/views/autocomplete.py b/api/views/autocomplete.py index 473f2722..8eded250 100644 --- a/api/views/autocomplete.py +++ b/api/views/autocomplete.py @@ -90,6 +90,9 @@ class OdevzdatelnyProblemAutocomplete(autocomplete.Select2QuerySetView): nadproblem_id = int(self.forwarded.get("nadproblem_id", -1)) if nadproblem_id != -1: + # Seřadíme tak, aby ty s nadproblem==None byly dole (větší motivace tam naklikat konkrétní úlohy) a pak nějak rozumně. + # Tohle je řazení pro odevzdávátko, kde je definován nadproblém, proto je to v tomto ifu. (Jinde si to netroufám řadit) + qs = qs.order_by("nadproblem", "kod", "nazev") qs = [problem for problem in qs if problem.hlavni_problem.id == nadproblem_id] return qs From bbb85b3f6a62d3eb3cdcf11f61d9b5bd5f11bce1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Mon, 22 May 2023 21:18:47 +0200 Subject: [PATCH 11/34] =?UTF-8?q?Poslat=20=C5=99e=C5=A1en=C3=AD=20->=20nah?= =?UTF-8?q?r=C3=A1t=20=C5=99e=C5=A1en=C3=AD=20->=20vlo=C5=BEit=20=C5=99e?= =?UTF-8?q?=C5=A1en=C3=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/sitetree.json | 8 ++++---- odevzdavatko/__init__.py | 6 +++--- .../templates/odevzdavatko/nahraj_reseni_nadproblem.html | 2 +- personalni/templates/personalni/profil/resitel.html | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/data/sitetree.json b/data/sitetree.json index 8b0dd25f..7ec15fac 100644 --- a/data/sitetree.json +++ b/data/sitetree.json @@ -437,7 +437,7 @@ "insitetree": true, "parent": 21, "sort_order": 36, - "title": "Poslat řešení", + "title": "Nahrát řešení", "tree": 1, "url": "seminar_nahraj_reseni", "urlaspattern": true @@ -719,7 +719,7 @@ "insitetree": true, "parent": 21, "sort_order": 36, - "title": "Nahrát řešení", + "title": "Vložit řešení", "tree": 1, "url": "seminar_vloz_reseni", "urlaspattern": true @@ -1048,7 +1048,7 @@ "insitetree": true, "parent": 23, "sort_order": 52, - "title": "Poslat řešení k nadproblému {{nadproblem_id}}", + "title": "Nahrát řešení k nadproblému {{nadproblem_id}}", "tree": 1, "url": "seminar_nahraj_reseni nadproblem_id", "urlaspattern": true @@ -1056,4 +1056,4 @@ "model": "sitetree.treeitem", "pk": 52 } -] \ No newline at end of file +] diff --git a/odevzdavatko/__init__.py b/odevzdavatko/__init__.py index a4ee2679..ee78a49b 100644 --- a/odevzdavatko/__init__.py +++ b/odevzdavatko/__init__.py @@ -4,8 +4,8 @@ Obsahuje vše, co se týká odevzdávání (+ nahrávání) a opravování řeš Slovníček: Moje řešení = Přehled řešení = Řešení, která odevzdal aktuálního uživatel sám. Došlá řešení = Tabulka + seznam + detail + ... = Řešení, která poslal někdo jiný. - Poslat řešení = Odevdat mé řešení. (Tj. řešení se vztahem k aktuálnímu uživateli.) - Nahrát řešení = Nahrání řešení bez vztahu k aktuálnímu uživateli. + Nahrát řešení = Odevdat mé řešení. (Tj. řešení se vztahem k aktuálnímu uživateli.) + Vlož řešení = Vložit řešení bez vztahu k aktuálnímu uživateli. TODO: Místo vložit řešení v nahrávání a posílání řešení dát něco jiného? -""" \ No newline at end of file +""" diff --git a/odevzdavatko/templates/odevzdavatko/nahraj_reseni_nadproblem.html b/odevzdavatko/templates/odevzdavatko/nahraj_reseni_nadproblem.html index 6e49f02e..ccf505fa 100644 --- a/odevzdavatko/templates/odevzdavatko/nahraj_reseni_nadproblem.html +++ b/odevzdavatko/templates/odevzdavatko/nahraj_reseni_nadproblem.html @@ -4,7 +4,7 @@ {% block content %}

{% block nadpis1a %} - Poslat řešení + Nahrát řešení {% endblock %}

diff --git a/personalni/templates/personalni/profil/resitel.html b/personalni/templates/personalni/profil/resitel.html index 9c933f0a..7bcb698c 100644 --- a/personalni/templates/personalni/profil/resitel.html +++ b/personalni/templates/personalni/profil/resitel.html @@ -11,7 +11,7 @@ Odhlásit se
Upravit údaje
-Poslat řešení
+Nahrátí řešení
Již odevzdaná řešení
From 192ae6912ff5c2d750bff92a7cadb1747d14e5f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Mon, 22 May 2023 21:22:48 +0200 Subject: [PATCH 12/34] =?UTF-8?q?Vlo=C5=BEit=20=C5=99e=C5=A1en=C3=AD=20->?= =?UTF-8?q?=20nahr=C3=A1t=20=C5=99e=C5=A1en=C3=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- odevzdavatko/templates/odevzdavatko/nahraj_reseni.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/odevzdavatko/templates/odevzdavatko/nahraj_reseni.html b/odevzdavatko/templates/odevzdavatko/nahraj_reseni.html index ec09401b..e82fa1cd 100644 --- a/odevzdavatko/templates/odevzdavatko/nahraj_reseni.html +++ b/odevzdavatko/templates/odevzdavatko/nahraj_reseni.html @@ -7,7 +7,7 @@ {% block content %}

{% block nadpis1a %} - Vložit řešení + Nahrát řešení {% endblock %}

From dee1b2bb2c2ac5a51ff0b54188a8780690c17f1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Mon, 22 May 2023 21:48:35 +0200 Subject: [PATCH 13/34] =?UTF-8?q?Star=C3=A9=20v=C4=9Bci?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- odevzdavatko/forms.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/odevzdavatko/forms.py b/odevzdavatko/forms.py index 735753aa..6e1898eb 100644 --- a/odevzdavatko/forms.py +++ b/odevzdavatko/forms.py @@ -53,12 +53,6 @@ class PosliReseniForm(forms.Form): #poznamka = models.TextField('neveřejná poznámka', blank=True, # help_text='Neveřejná poznámka k řešení (plain text)') - #TODO body do cisla - #TODO prilohy - - ##def __init__(self, *args, **kwargs): - ## super().__init__(*args, **kwargs) - ## #self.fields['favorite_color'] = forms.ChoiceField(choices=[(color.id, color.name) for color in Resitel.objects.all()]) class NahrajReseniForm(forms.ModelForm): class Meta: From 92cb8ec206d6a353d113a4856b2718240de08b34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Mon, 22 May 2023 21:53:14 +0200 Subject: [PATCH 14/34] =?UTF-8?q?Odevzd=C3=A1v=C3=A1tko:=20Osamocen=C3=BD?= =?UTF-8?q?=20nadprobl=C3=A9m=20se=20vybere=20automaticky?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- odevzdavatko/views.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/odevzdavatko/views.py b/odevzdavatko/views.py index 04606b4c..f980b1d8 100644 --- a/odevzdavatko/views.py +++ b/odevzdavatko/views.py @@ -416,7 +416,12 @@ class NahrajReseniView(LoginRequiredMixin, CreateView): return super().get(request, *args, **kwargs) def get_initial(self): - return {"nadproblem_id": self.kwargs["nadproblem_id"]} + nadproblem_id = self.kwargs["nadproblem_id"] + return { + "nadproblem_id": nadproblem_id, + "problem": [] if m.Problem.objects.filter(stav=m.Problem.STAV_ZADANY, nadproblem__id=nadproblem_id) else nadproblem_id + + } def get_context_data(self,**kwargs): data = super().get_context_data(**kwargs) From 512f14ed4da890bf97ac855276985cb7a36997aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Mon, 22 May 2023 22:24:14 +0200 Subject: [PATCH 15/34] =?UTF-8?q?Odevzd=C3=A1v=C3=A1tko:=20Nezadan=C3=A9?= =?UTF-8?q?=20probl=C3=A9my=20nelze=20odevzdat?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- odevzdavatko/forms.py | 7 +++++++ .../templates/odevzdavatko/nahraj_reseni.html | 16 ++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/odevzdavatko/forms.py b/odevzdavatko/forms.py index 6e1898eb..ba5d3153 100644 --- a/odevzdavatko/forms.py +++ b/odevzdavatko/forms.py @@ -89,6 +89,13 @@ class NahrajReseniForm(forms.ModelForm): if 'problem' in self.fields: self.fields['problem'].label = "Všechny řešené problémy" + def clean_problem(self): + problem = self.cleaned_data.get('problem') + for p in problem: + if p.stav != m.Problem.STAV_ZADANY: + raise forms.ValidationError("Problém " + str(p) + " již nelze řešit!") + return problem + ReseniSPrilohamiFormSet = inlineformset_factory(m.Reseni,m.PrilohaReseni, form = NahrajReseniForm, fields = ('soubor','res_poznamka'), diff --git a/odevzdavatko/templates/odevzdavatko/nahraj_reseni.html b/odevzdavatko/templates/odevzdavatko/nahraj_reseni.html index e82fa1cd..19101b6b 100644 --- a/odevzdavatko/templates/odevzdavatko/nahraj_reseni.html +++ b/odevzdavatko/templates/odevzdavatko/nahraj_reseni.html @@ -30,6 +30,13 @@ {{ field }} + + {% if field.errors %} + + {{ field.errors }} + + {% endif %} + {% endwith %} @@ -54,6 +61,13 @@ {{ field }} + + {% if field.errors %} + + {{ field.errors }} + + {% endif %} + {% endwith %} @@ -61,6 +75,8 @@ {% include "odevzdavatko/prilohy.html" %} +{{form.non_field_errors}} +

Odevzdat řešení

From e26df0172963cccb306084d667ff8301d33a735b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Mon, 22 May 2023 22:28:14 +0200 Subject: [PATCH 16/34] =?UTF-8?q?Odevzd=C3=A1v=C3=A1tko:=20Za=C5=99=C3=ADz?= =?UTF-8?q?nut=C3=AD=20p=C5=99=C3=ADstupu=20k=20nezadan=C3=BDm=20probl?= =?UTF-8?q?=C3=A9m=C5=AFm?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- odevzdavatko/views.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/odevzdavatko/views.py b/odevzdavatko/views.py index f980b1d8..03f3404c 100644 --- a/odevzdavatko/views.py +++ b/odevzdavatko/views.py @@ -403,6 +403,13 @@ class NahrajReseniView(LoginRequiredMixin, CreateView): form_class = f.NahrajReseniForm def get(self, request, *args, **kwargs): + # Zaříznutí nezadaných problémů + nadproblem_id = self.kwargs["nadproblem_id"] + nadproblem = get_object_or_404(m.Problem, id=nadproblem_id) + if nadproblem.stav != "zadany": + raise PermissionDenied() + + # Zaříznutí starých řešitelů: # FIXME: Je to tady dost naprasené, mělo by to asi být jinde… osoba = m.Osoba.objects.get(user=self.request.user) From 74a26affa7c6451145f084e667f4f79cc14e2b01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Mon, 22 May 2023 23:02:32 +0200 Subject: [PATCH 17/34] =?UTF-8?q?Odevzd=C3=A1v=C3=A1tko:=20Odevzdateln?= =?UTF-8?q?=C3=A9=20probl=C3=A9my=20jsou=20v=C5=A1echny=20zadan=C3=A9=20(v?= =?UTF-8?q?=C4=8Detn=C4=9B=20minul=C3=BDch=20ro=C4=8Dn=C3=ADk=C5=AF)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/views/autocomplete.py | 15 +-------------- odevzdavatko/views.py | 10 +--------- 2 files changed, 2 insertions(+), 23 deletions(-) diff --git a/api/views/autocomplete.py b/api/views/autocomplete.py index 8eded250..bdae5e06 100644 --- a/api/views/autocomplete.py +++ b/api/views/autocomplete.py @@ -70,20 +70,7 @@ class PublicResitelAutocomplete(LoginRequiredAjaxMixin, autocomplete.Select2Quer class OdevzdatelnyProblemAutocomplete(autocomplete.Select2QuerySetView): """ View k :mod:`dal.autocomplete` pro vyhledávání problémů především v odevzdávátku. """ def get_queryset(self): - nastaveni = get_object_or_404(m.Nastaveni) - rocnik = nastaveni.aktualni_rocnik - # Od tohoto místa dál jsem zkoušel spoustu variací podle https://django-polymorphic.readthedocs.io/en/stable/advanced.html - temaQ = Q(Tema___rocnik = rocnik, stav=m.Problem.STAV_ZADANY) - ulohaQ = Q(Uloha___cislo_zadani__rocnik = rocnik, stav=m.Problem.STAV_ZADANY) - clanekQ = Q(Clanek___cislo__rocnik = rocnik, stav=m.Problem.STAV_ZADANY) - qs = m.Problem.objects.filter(temaQ | ulohaQ | clanekQ) - #print(temata, ulohy, clanky) - #ulohy.union(temata, all=True) - #print(ulohy) - #ulohy.union(clanky, all=True) - #print(ulohy) - #qs = ulohy - print(qs) + qs = m.Problem.objects.filter(stav=m.Problem.STAV_ZADANY) if self.q: qs = qs.filter( Q(nazev__icontains=self.q)) diff --git a/odevzdavatko/views.py b/odevzdavatko/views.py index 03f3404c..4bc7abb8 100644 --- a/odevzdavatko/views.py +++ b/odevzdavatko/views.py @@ -386,15 +386,7 @@ class NahrajReseniNadproblemView(LoginRequiredMixin, ListView): template_name = 'odevzdavatko/nahraj_reseni_nadproblem.html' def get_queryset(self): - # COPY PASTE z api/views/autocomplete.py TODO hodit někam do utils? - nastaveni = get_object_or_404(m.Nastaveni) - rocnik = nastaveni.aktualni_rocnik - # Od tohoto místa dál jsem zkoušel spoustu variací podle https://django-polymorphic.readthedocs.io/en/stable/advanced.html - temaQ = Q(Tema___rocnik=rocnik, stav=m.Problem.STAV_ZADANY) - ulohaQ = Q(Uloha___cislo_zadani__rocnik=rocnik, stav=m.Problem.STAV_ZADANY) - clanekQ = Q(Clanek___cislo__rocnik=rocnik, stav=m.Problem.STAV_ZADANY) - qs = super().get_queryset().filter(temaQ | ulohaQ | clanekQ) - return qs.filter(nadproblem__isnull=True) + return super().get_queryset().filter(stav=m.Problem.STAV_ZADANY, nadproblem__isnull=True) class NahrajReseniView(LoginRequiredMixin, CreateView): From c3b42e09f2f5139d64e2d0fa5253b5d2698165b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Tue, 23 May 2023 01:10:37 +0200 Subject: [PATCH 18/34] =?UTF-8?q?Multiple=20select=20odte=C4=8F=20maj?= =?UTF-8?q?=C3=AD=20oran=C5=BEovou=20barvu=20a=20obsahuj=C3=AD=20checkboxy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mamweb/static/css/mamweb.css | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/mamweb/static/css/mamweb.css b/mamweb/static/css/mamweb.css index 63c5f527..693e6206 100644 --- a/mamweb/static/css/mamweb.css +++ b/mamweb/static/css/mamweb.css @@ -1255,3 +1255,19 @@ div.gdpr { label[for=id_skola] { font-weight: bold; } + + +/* Select2 používaný hlavně multiple selectem. Přidání checkboxů a změna barvy. */ +.select2-results__option[aria-selected=true]:before { + content: '☑ '; + padding: 0 0 0 8px; +} + +.select2-results__option[aria-selected=false]:before { + content: '◻ '; + padding: 0 0 0 8px; +} + +.select2-results__option--highlighted { + background-color: #e84e10 !important; +} From 317cc3056eaad4285aca6e4c31dfe89bec2dc244 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Tue, 23 May 2023 01:15:06 +0200 Subject: [PATCH 19/34] =?UTF-8?q?Zdroj=20k=C3=B3du?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mamweb/static/css/mamweb.css | 1 + 1 file changed, 1 insertion(+) diff --git a/mamweb/static/css/mamweb.css b/mamweb/static/css/mamweb.css index 693e6206..40755000 100644 --- a/mamweb/static/css/mamweb.css +++ b/mamweb/static/css/mamweb.css @@ -1258,6 +1258,7 @@ label[for=id_skola] { /* Select2 používaný hlavně multiple selectem. Přidání checkboxů a změna barvy. */ +/* Podle https://stackoverflow.com/a/48290544 */ .select2-results__option[aria-selected=true]:before { content: '☑ '; padding: 0 0 0 8px; From 4a3f8c669d2facc4540b6ee7af96a0b3422a4f1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Tue, 23 May 2023 01:39:46 +0200 Subject: [PATCH 20/34] =?UTF-8?q?Multiple=20select=20se=20nemaj=C3=AD=20za?= =?UTF-8?q?v=C3=ADrat?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- odevzdavatko/static/odevzdavatko/select2.js | 7 +++++++ odevzdavatko/templates/odevzdavatko/nahraj_reseni.html | 3 ++- odevzdavatko/templates/odevzdavatko/posli_reseni.html | 1 + 3 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 odevzdavatko/static/odevzdavatko/select2.js diff --git a/odevzdavatko/static/odevzdavatko/select2.js b/odevzdavatko/static/odevzdavatko/select2.js new file mode 100644 index 00000000..8f104c7c --- /dev/null +++ b/odevzdavatko/static/odevzdavatko/select2.js @@ -0,0 +1,7 @@ +// Nenechá select2 (používaný pro multiple select) se zavřít po výběru +$(window).on('load', function () { + // Z nějakého důvodu nestačí onload, ale libovolný timeout pomůže. BÚNO 0.5 sekundy, kdyby to bylo rychlostí mého počítače + setTimeout(function() { + $(".select2-hidden-accessible").select2({closeOnSelect: false}) + }, 500) +}); diff --git a/odevzdavatko/templates/odevzdavatko/nahraj_reseni.html b/odevzdavatko/templates/odevzdavatko/nahraj_reseni.html index 19101b6b..0efe34f2 100644 --- a/odevzdavatko/templates/odevzdavatko/nahraj_reseni.html +++ b/odevzdavatko/templates/odevzdavatko/nahraj_reseni.html @@ -1,7 +1,8 @@ {% extends "base.html" %} {% load static %} {% block script %} - + + {% endblock %} {% block content %} diff --git a/odevzdavatko/templates/odevzdavatko/posli_reseni.html b/odevzdavatko/templates/odevzdavatko/posli_reseni.html index 27827015..b57c13c3 100644 --- a/odevzdavatko/templates/odevzdavatko/posli_reseni.html +++ b/odevzdavatko/templates/odevzdavatko/posli_reseni.html @@ -4,6 +4,7 @@ {{form.media}} + {% endblock %} {% block content %} From a07dbf4ab399b9c6437de8e55e76e6582f188001 Mon Sep 17 00:00:00 2001 From: MaM Web user Date: Thu, 1 Jun 2023 17:34:40 +0200 Subject: [PATCH 21/34] =?UTF-8?q?Jid=C3=A1=C5=A1:=20jsem=20v=C5=AFl=20(sou?= =?UTF-8?q?bor=20se=20nem=C5=AF=C5=BEe=20jmenovat=20select2.js,=20kdy?= =?UTF-8?q?=C5=BE=20select2.js=20u=C5=BE=20importujeme)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../static/odevzdavatko/{select2.js => nesbalovaci_select2.js} | 0 odevzdavatko/templates/odevzdavatko/nahraj_reseni.html | 2 +- odevzdavatko/templates/odevzdavatko/posli_reseni.html | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) rename odevzdavatko/static/odevzdavatko/{select2.js => nesbalovaci_select2.js} (100%) diff --git a/odevzdavatko/static/odevzdavatko/select2.js b/odevzdavatko/static/odevzdavatko/nesbalovaci_select2.js similarity index 100% rename from odevzdavatko/static/odevzdavatko/select2.js rename to odevzdavatko/static/odevzdavatko/nesbalovaci_select2.js diff --git a/odevzdavatko/templates/odevzdavatko/nahraj_reseni.html b/odevzdavatko/templates/odevzdavatko/nahraj_reseni.html index 0efe34f2..3950089e 100644 --- a/odevzdavatko/templates/odevzdavatko/nahraj_reseni.html +++ b/odevzdavatko/templates/odevzdavatko/nahraj_reseni.html @@ -2,7 +2,7 @@ {% load static %} {% block script %} - + {% endblock %} {% block content %} diff --git a/odevzdavatko/templates/odevzdavatko/posli_reseni.html b/odevzdavatko/templates/odevzdavatko/posli_reseni.html index b57c13c3..07baf7ef 100644 --- a/odevzdavatko/templates/odevzdavatko/posli_reseni.html +++ b/odevzdavatko/templates/odevzdavatko/posli_reseni.html @@ -4,7 +4,7 @@ {{form.media}} - + {% endblock %} {% block content %} From 727d0b29550941c541c3d0441963889c6b4cbde4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Tue, 13 Jun 2023 08:47:17 +0200 Subject: [PATCH 22/34] =?UTF-8?q?Revert=20"Multiple=20select=20se=20nemaj?= =?UTF-8?q?=C3=AD=20zav=C3=ADrat"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 4a3f8c66 --- odevzdavatko/static/odevzdavatko/nesbalovaci_select2.js | 7 ------- odevzdavatko/templates/odevzdavatko/nahraj_reseni.html | 3 +-- odevzdavatko/templates/odevzdavatko/posli_reseni.html | 1 - 3 files changed, 1 insertion(+), 10 deletions(-) delete mode 100644 odevzdavatko/static/odevzdavatko/nesbalovaci_select2.js diff --git a/odevzdavatko/static/odevzdavatko/nesbalovaci_select2.js b/odevzdavatko/static/odevzdavatko/nesbalovaci_select2.js deleted file mode 100644 index 8f104c7c..00000000 --- a/odevzdavatko/static/odevzdavatko/nesbalovaci_select2.js +++ /dev/null @@ -1,7 +0,0 @@ -// Nenechá select2 (používaný pro multiple select) se zavřít po výběru -$(window).on('load', function () { - // Z nějakého důvodu nestačí onload, ale libovolný timeout pomůže. BÚNO 0.5 sekundy, kdyby to bylo rychlostí mého počítače - setTimeout(function() { - $(".select2-hidden-accessible").select2({closeOnSelect: false}) - }, 500) -}); diff --git a/odevzdavatko/templates/odevzdavatko/nahraj_reseni.html b/odevzdavatko/templates/odevzdavatko/nahraj_reseni.html index 3950089e..19101b6b 100644 --- a/odevzdavatko/templates/odevzdavatko/nahraj_reseni.html +++ b/odevzdavatko/templates/odevzdavatko/nahraj_reseni.html @@ -1,8 +1,7 @@ {% extends "base.html" %} {% load static %} {% block script %} - - + {% endblock %} {% block content %} diff --git a/odevzdavatko/templates/odevzdavatko/posli_reseni.html b/odevzdavatko/templates/odevzdavatko/posli_reseni.html index 07baf7ef..27827015 100644 --- a/odevzdavatko/templates/odevzdavatko/posli_reseni.html +++ b/odevzdavatko/templates/odevzdavatko/posli_reseni.html @@ -4,7 +4,6 @@ {{form.media}} - {% endblock %} {% block content %} From 2ef3311bff3ce128b52c956a1c7764798d728524 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Tue, 13 Jun 2023 08:50:16 +0200 Subject: [PATCH 23/34] =?UTF-8?q?Multiple=20select=20se=20nemaj=C3=AD=20za?= =?UTF-8?q?v=C3=ADrat?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Už jsem se internetu správně zeptal a dostal odpověď: select2 bere parametry jako atributy data-camel-case-vec=cosi (stejné jako select2({camelCaseVec: cosi})) --- odevzdavatko/forms.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/odevzdavatko/forms.py b/odevzdavatko/forms.py index d9aec665..836b8eb0 100644 --- a/odevzdavatko/forms.py +++ b/odevzdavatko/forms.py @@ -29,6 +29,7 @@ class PosliReseniForm(forms.Form): attrs={ 'data-placeholder--id': '-1', 'data-placeholder--text': '---', + 'data-close-on-select': 'false', 'data-allow-clear': 'true' }, ), @@ -43,6 +44,7 @@ class PosliReseniForm(forms.Form): url='autocomplete_resitel', attrs = {'data-placeholder--id': '-1', 'data-placeholder--text' : '---', + 'data-close-on-select': 'false', 'data-allow-clear': 'true'}) ) @@ -74,6 +76,7 @@ class NahrajReseniForm(forms.ModelForm): url='autocomplete_problem_odevzdatelny', attrs = {'data-placeholder--id': '-1', 'data-placeholder--text' : '---', + 'data-close-on-select': 'false', 'data-allow-clear': 'true'}, forward=["nadproblem_id"], ), @@ -82,6 +85,7 @@ class NahrajReseniForm(forms.ModelForm): url='autocomplete_resitel_public', attrs = {'data-placeholder--id': '-1', 'data-placeholder--text' : '---', + 'data-close-on-select': 'false', 'data-allow-clear': 'true'}, ) } From dce1de7a9943e3ae0700c29c7a2cd36b49a4c4db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Tue, 13 Jun 2023 09:12:00 +0200 Subject: [PATCH 24/34] =?UTF-8?q?Checkboxy=20pouze=20u=20multiple=20select?= =?UTF-8?q?u=20(p=C5=99esn=C4=9Bji=20=C5=99e=C4=8Deno=20pouze=20u=20t?= =?UTF-8?q?=C4=9Bch,=20kde=20je=20select2multiple)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mamweb/static/css/mamweb.css | 7 ++++--- odevzdavatko/forms.py | 4 ++++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/mamweb/static/css/mamweb.css b/mamweb/static/css/mamweb.css index 4e22a407..297239dc 100644 --- a/mamweb/static/css/mamweb.css +++ b/mamweb/static/css/mamweb.css @@ -1264,16 +1264,17 @@ label[for=id_skola] { /* Select2 používaný hlavně multiple selectem. Přidání checkboxů a změna barvy. */ /* Podle https://stackoverflow.com/a/48290544 */ -.select2-results__option[aria-selected=true]:before { +/* U autocomplete.ModelSelect2Multiple vyžaduje 'data-dropdown-css-class': 'select2multiple' */ +.select2multiple .select2-results__option[aria-selected=true]:before { content: '☑ '; padding: 0 0 0 8px; } -.select2-results__option[aria-selected=false]:before { +.select2multiple .select2-results__option[aria-selected=false]:before { content: '◻ '; padding: 0 0 0 8px; } -.select2-results__option--highlighted { +.select2multiple .select2-results__option--highlighted { background-color: #e84e10 !important; } diff --git a/odevzdavatko/forms.py b/odevzdavatko/forms.py index 836b8eb0..7d4b6e54 100644 --- a/odevzdavatko/forms.py +++ b/odevzdavatko/forms.py @@ -30,6 +30,7 @@ class PosliReseniForm(forms.Form): 'data-placeholder--id': '-1', 'data-placeholder--text': '---', 'data-close-on-select': 'false', + 'data-dropdown-css-class': 'select2multiple', 'data-allow-clear': 'true' }, ), @@ -45,6 +46,7 @@ class PosliReseniForm(forms.Form): attrs = {'data-placeholder--id': '-1', 'data-placeholder--text' : '---', 'data-close-on-select': 'false', + 'data-dropdown-css-class': 'select2multiple', 'data-allow-clear': 'true'}) ) @@ -77,6 +79,7 @@ class NahrajReseniForm(forms.ModelForm): attrs = {'data-placeholder--id': '-1', 'data-placeholder--text' : '---', 'data-close-on-select': 'false', + 'data-dropdown-css-class': 'select2multiple', 'data-allow-clear': 'true'}, forward=["nadproblem_id"], ), @@ -86,6 +89,7 @@ class NahrajReseniForm(forms.ModelForm): attrs = {'data-placeholder--id': '-1', 'data-placeholder--text' : '---', 'data-close-on-select': 'false', + 'data-dropdown-css-class': 'select2multiple', 'data-allow-clear': 'true'}, ) } From bb2332dc278db964dba0401eceff26f371cef810 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Thu, 15 Jun 2023 18:57:11 +0200 Subject: [PATCH 25/34] =?UTF-8?q?Lep=C5=A1=C3=AD=20popis,=20kdy=20maj?= =?UTF-8?q?=C3=AD=20pos=C3=ADlat=20PDF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- odevzdavatko/templates/odevzdavatko/prilohy.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/odevzdavatko/templates/odevzdavatko/prilohy.html b/odevzdavatko/templates/odevzdavatko/prilohy.html index 2bfaa29e..1e33376f 100644 --- a/odevzdavatko/templates/odevzdavatko/prilohy.html +++ b/odevzdavatko/templates/odevzdavatko/prilohy.html @@ -2,7 +2,7 @@

Soubory s řešením

-

Pokud je to možné a dává to smysl, pošli nám prosím své řešení ve formátu PDF, ostatní formáty nemusíme umět otevřít.

+

Pokud je to možné a dává to smysl (tj. není to třeba kód nebo doprovodný obrázek), pošli nám prosím své řešení ve formátu PDF, ostatní formáty nemusíme umět otevřít.

Pokud svůj soubor rozumně pojmenuješ, urychlíš opravování a předejdeš tomu, že si nějakého tvého řešení nevšimneme. Například z img_250921_101205.pdf nepoznáme, kterou úlohu jsi odevzdal, zato uloha_3.pdf nebo tema_1.pdf, to už je něco jiného. Případně můžeš využít i poznámku řešitele.

Maximální součet velikostí příloh je cca 49 MB.

From 18f55153beeb782a7d9cc3b81cefb22a12c85ee9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Mon, 19 Jun 2023 20:06:18 +0200 Subject: [PATCH 26/34] =?UTF-8?q?filter=20m=C3=ADsto=20[=E2=80=A6=20for=20?= =?UTF-8?q?=E2=80=A6=20if=20=E2=80=A6]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/views/autocomplete.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/views/autocomplete.py b/api/views/autocomplete.py index 0d5b4f55..edc81ff7 100644 --- a/api/views/autocomplete.py +++ b/api/views/autocomplete.py @@ -80,7 +80,7 @@ class OdevzdatelnyProblemAutocomplete(autocomplete.Select2QuerySetView): # Seřadíme tak, aby ty s nadproblem==None byly dole (větší motivace tam naklikat konkrétní úlohy) a pak nějak rozumně. # Tohle je řazení pro odevzdávátko, kde je definován nadproblém, proto je to v tomto ifu. (Jinde si to netroufám řadit) qs = qs.order_by("nadproblem", "kod", "nazev") - qs = [problem for problem in qs if problem.hlavni_problem.id == nadproblem_id] + qs = list(filter(lambda problem: problem.hlavni_problem.id == nadproblem_id, qs)) return qs class ProblemAutocomplete(autocomplete.Select2QuerySetView): From dae3864ba4b3c10fb6f9a00a47b9fc91b1ff35d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Mon, 19 Jun 2023 20:08:45 +0200 Subject: [PATCH 27/34] =?UTF-8?q?Oran=C5=BEov=C3=A9=20zv=C3=BDrazn=C4=9Bn?= =?UTF-8?q?=C3=AD=20pro=20v=C5=A1echny=20Select2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mamweb/static/css/mamweb.css | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mamweb/static/css/mamweb.css b/mamweb/static/css/mamweb.css index 297239dc..ec76d404 100644 --- a/mamweb/static/css/mamweb.css +++ b/mamweb/static/css/mamweb.css @@ -1275,6 +1275,7 @@ label[for=id_skola] { padding: 0 0 0 8px; } -.select2multiple .select2-results__option--highlighted { +/* Oranžové zvýraznění v Select2 */ +.select2-results__option--highlighted { background-color: #e84e10 !important; } From 0bf309fd7822b76169caf39b7cd4ff7ebdb06923 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Mon, 19 Jun 2023 20:12:09 +0200 Subject: [PATCH 28/34] =?UTF-8?q?P=C5=99ejmenov=C3=A1n=C3=AD=20.select2mul?= =?UTF-8?q?tiple=20.s2m-se-zaskrtavatky?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mamweb/static/css/mamweb.css | 6 +++--- odevzdavatko/forms.py | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/mamweb/static/css/mamweb.css b/mamweb/static/css/mamweb.css index ec76d404..a43bf310 100644 --- a/mamweb/static/css/mamweb.css +++ b/mamweb/static/css/mamweb.css @@ -1264,13 +1264,13 @@ label[for=id_skola] { /* Select2 používaný hlavně multiple selectem. Přidání checkboxů a změna barvy. */ /* Podle https://stackoverflow.com/a/48290544 */ -/* U autocomplete.ModelSelect2Multiple vyžaduje 'data-dropdown-css-class': 'select2multiple' */ -.select2multiple .select2-results__option[aria-selected=true]:before { +/* U autocomplete.ModelSelect2Multiple vyžaduje 'data-dropdown-css-class': 's2m-se-zaskrtavatky' */ +.s2m-se-zaskrtavatky .select2-results__option[aria-selected=true]:before { content: '☑ '; padding: 0 0 0 8px; } -.select2multiple .select2-results__option[aria-selected=false]:before { +.s2m-se-zaskrtavatky .select2-results__option[aria-selected=false]:before { content: '◻ '; padding: 0 0 0 8px; } diff --git a/odevzdavatko/forms.py b/odevzdavatko/forms.py index 7d4b6e54..074bc6da 100644 --- a/odevzdavatko/forms.py +++ b/odevzdavatko/forms.py @@ -30,7 +30,7 @@ class PosliReseniForm(forms.Form): 'data-placeholder--id': '-1', 'data-placeholder--text': '---', 'data-close-on-select': 'false', - 'data-dropdown-css-class': 'select2multiple', + 'data-dropdown-css-class': 's2m-se-zaskrtavatky', 'data-allow-clear': 'true' }, ), @@ -46,7 +46,7 @@ class PosliReseniForm(forms.Form): attrs = {'data-placeholder--id': '-1', 'data-placeholder--text' : '---', 'data-close-on-select': 'false', - 'data-dropdown-css-class': 'select2multiple', + 'data-dropdown-css-class': 's2m-se-zaskrtavatky', 'data-allow-clear': 'true'}) ) @@ -79,7 +79,7 @@ class NahrajReseniForm(forms.ModelForm): attrs = {'data-placeholder--id': '-1', 'data-placeholder--text' : '---', 'data-close-on-select': 'false', - 'data-dropdown-css-class': 'select2multiple', + 'data-dropdown-css-class': 's2m-se-zaskrtavatky', 'data-allow-clear': 'true'}, forward=["nadproblem_id"], ), @@ -89,7 +89,7 @@ class NahrajReseniForm(forms.ModelForm): attrs = {'data-placeholder--id': '-1', 'data-placeholder--text' : '---', 'data-close-on-select': 'false', - 'data-dropdown-css-class': 'select2multiple', + 'data-dropdown-css-class': 's2m-se-zaskrtavatky', 'data-allow-clear': 'true'}, ) } From 94ea718c20670ec0aa64c94384fc93245c80a698 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Mon, 19 Jun 2023 20:13:56 +0200 Subject: [PATCH 29/34] =?UTF-8?q?Drobn=C3=A1=20=C3=BAprava=20textu=20pro?= =?UTF-8?q?=20=C5=99e=C5=A1itele?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- odevzdavatko/templates/odevzdavatko/nahraj_reseni.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/odevzdavatko/templates/odevzdavatko/nahraj_reseni.html b/odevzdavatko/templates/odevzdavatko/nahraj_reseni.html index 19101b6b..ca326d67 100644 --- a/odevzdavatko/templates/odevzdavatko/nahraj_reseni.html +++ b/odevzdavatko/templates/odevzdavatko/nahraj_reseni.html @@ -47,7 +47,7 @@

Spolupráce s dalšími řešiteli

-

Pokud řešíte ve více lidech, je potřeba přidat tyto lidi jako „Další autoři“. V tomto poli se vyhledává podle přezdívek, které si lze nastavit v „Osobní údaje“. Sebe vyplňovat nemusíte a za skupinu odevzdávejte pouze jednou (ne každý sám).

+

Pokud řešíte ve více lidech, je potřeba přidat tyto lidi jako „Další autory“. V tomto poli se vyhledává podle přezdívek, které si lze nastavit v „Osobních údajích“. Sebe vyplňovat nemusíte a za skupinu odevzdávejte pouze jednou (ne každý sám).

{% with field=form.resitele %} From c64294099e79745140a7eb3112882bef3616771d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Mon, 19 Jun 2023 20:15:35 +0200 Subject: [PATCH 30/34] NahrajReseniNadproblemView -> NahrajReseniRozcestnikTematekView --- odevzdavatko/urls.py | 2 +- odevzdavatko/views.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/odevzdavatko/urls.py b/odevzdavatko/urls.py index 35b74eea..b7de10b0 100644 --- a/odevzdavatko/urls.py +++ b/odevzdavatko/urls.py @@ -20,7 +20,7 @@ from . import views urlpatterns = [ path('org/add_solution', org_required(views.PosliReseniView.as_view()), name='seminar_vloz_reseni'), - path('resitel/nahraj_reseni', resitel_required(views.NahrajReseniNadproblemView.as_view()), name='seminar_nahraj_reseni'), + path('resitel/nahraj_reseni', resitel_required(views.NahrajReseniRozcestnikTematekView.as_view()), name='seminar_nahraj_reseni'), path('resitel/nahraj_reseni//', resitel_required(views.NahrajReseniView.as_view()), name='seminar_nahraj_reseni'), path('resitel/odevzdana_reseni/', resitel_or_org_required(views.PrehledOdevzdanychReseni.as_view()), name='seminar_resitel_odevzdana_reseni'), diff --git a/odevzdavatko/views.py b/odevzdavatko/views.py index 504da6df..e7d362e0 100644 --- a/odevzdavatko/views.py +++ b/odevzdavatko/views.py @@ -399,7 +399,7 @@ class PosliReseniView(LoginRequiredMixin, FormView): return data -class NahrajReseniNadproblemView(LoginRequiredMixin, ListView): +class NahrajReseniRozcestnikTematekView(LoginRequiredMixin, ListView): model = m.Problem template_name = 'odevzdavatko/nahraj_reseni_nadproblem.html' From 205aa0b900cf3fe9fb80cbc001ccfcb544860bb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Mon, 19 Jun 2023 20:24:19 +0200 Subject: [PATCH 31/34] =?UTF-8?q?V=20NahrajReseniView=20z=20nadprobl=C3=A9?= =?UTF-8?q?mu=20ud=C4=9Blat=20property?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- odevzdavatko/views.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/odevzdavatko/views.py b/odevzdavatko/views.py index e7d362e0..667f74aa 100644 --- a/odevzdavatko/views.py +++ b/odevzdavatko/views.py @@ -415,8 +415,8 @@ class NahrajReseniView(LoginRequiredMixin, CreateView): def get(self, request, *args, **kwargs): # Zaříznutí nezadaných problémů nadproblem_id = self.kwargs["nadproblem_id"] - nadproblem = get_object_or_404(m.Problem, id=nadproblem_id) - if nadproblem.stav != "zadany": + self.nadproblem = get_object_or_404(m.Problem, id=nadproblem_id) + if self.nadproblem.stav != "zadany": raise PermissionDenied() @@ -433,10 +433,10 @@ class NahrajReseniView(LoginRequiredMixin, CreateView): return super().get(request, *args, **kwargs) def get_initial(self): - nadproblem_id = self.kwargs["nadproblem_id"] + nadproblem_id = self.nadproblem.id return { "nadproblem_id": nadproblem_id, - "problem": [] if m.Problem.objects.filter(stav=m.Problem.STAV_ZADANY, nadproblem__id=nadproblem_id) else nadproblem_id + "problem": [] if self.nadproblem.podproblem.filter(stav=m.Problem.STAV_ZADANY).exists() else nadproblem_id } @@ -447,8 +447,8 @@ class NahrajReseniView(LoginRequiredMixin, CreateView): else: data['prilohy'] = f.ReseniSPrilohamiFormSet() - data["nadproblem_id"] = self.kwargs["nadproblem_id"] - data["nadproblem"] = get_object_or_404(m.Problem, id=self.kwargs["nadproblem_id"]) + data["nadproblem_id"] = self.nadproblem.id + data["nadproblem"] = get_object_or_404(m.Problem, id=self.nadproblem.id) return data # FIXME prepsat tak, aby form_valid se volalo jen tehdy, kdyz je form i formset validni From e641724eab69e7fe68cf700a0a4bb4c5cb16c7ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Mon, 19 Jun 2023 20:28:43 +0200 Subject: [PATCH 32/34] =?UTF-8?q?=E2=80=9EP=C5=99eklep=E2=80=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- personalni/templates/personalni/profil/resitel.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/personalni/templates/personalni/profil/resitel.html b/personalni/templates/personalni/profil/resitel.html index 7bcb698c..0bd92d63 100644 --- a/personalni/templates/personalni/profil/resitel.html +++ b/personalni/templates/personalni/profil/resitel.html @@ -11,7 +11,7 @@ Odhlásit se
Upravit údaje
-Nahrátí řešení
+Nahrát řešení
Již odevzdaná řešení
From baaaa0829a5abd376c5f373ac2ec0bc0f9b68749 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Mon, 19 Jun 2023 20:31:59 +0200 Subject: [PATCH 33/34] =?UTF-8?q?Pro=20bezpe=C4=8Dnost=20Iterable=20->=20S?= =?UTF-8?q?equence?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/views/views_all.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py index f05945f5..e35742c7 100644 --- a/seminar/views/views_all.py +++ b/seminar/views/views_all.py @@ -35,7 +35,7 @@ from django.conf import settings import unicodedata import logging import time -from collections.abc import Iterable +from collections.abc import Sequence from seminar.utils import aktivniResitele @@ -678,7 +678,7 @@ def StavDatabazeView(request): # Interní, nemá se nikdy objevit v urls (jinak to účastníci vytrolí) -def formularOKView(request, text='', dalsi_odkazy: Iterable[tuple[str, str]] = ()): +def formularOKView(request, text='', dalsi_odkazy: Sequence[tuple[str, str]] = ()): template_name = 'seminar/formular_ok.html' odkazy = list(dalsi_odkazy) + [ # (Text, odkaz) From 37d29fcf58cc1ebe9b1c75f08c935ee6294f76a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Mon, 19 Jun 2023 20:46:12 +0200 Subject: [PATCH 34/34] Posli -> Vloz --- .../odevzdavatko/{posli_reseni.html => vloz_reseni.html} | 0 odevzdavatko/urls.py | 2 +- odevzdavatko/views.py | 4 ++-- 3 files changed, 3 insertions(+), 3 deletions(-) rename odevzdavatko/templates/odevzdavatko/{posli_reseni.html => vloz_reseni.html} (100%) diff --git a/odevzdavatko/templates/odevzdavatko/posli_reseni.html b/odevzdavatko/templates/odevzdavatko/vloz_reseni.html similarity index 100% rename from odevzdavatko/templates/odevzdavatko/posli_reseni.html rename to odevzdavatko/templates/odevzdavatko/vloz_reseni.html diff --git a/odevzdavatko/urls.py b/odevzdavatko/urls.py index b7de10b0..6b021f2e 100644 --- a/odevzdavatko/urls.py +++ b/odevzdavatko/urls.py @@ -19,7 +19,7 @@ from seminar.utils import org_required, resitel_required, viewMethodSwitch, \ from . import views urlpatterns = [ - path('org/add_solution', org_required(views.PosliReseniView.as_view()), name='seminar_vloz_reseni'), + path('org/add_solution', org_required(views.VlozReseniView.as_view()), name='seminar_vloz_reseni'), path('resitel/nahraj_reseni', resitel_required(views.NahrajReseniRozcestnikTematekView.as_view()), name='seminar_nahraj_reseni'), path('resitel/nahraj_reseni//', resitel_required(views.NahrajReseniView.as_view()), name='seminar_nahraj_reseni'), path('resitel/odevzdana_reseni/', resitel_or_org_required(views.PrehledOdevzdanychReseni.as_view()), name='seminar_resitel_odevzdana_reseni'), diff --git a/odevzdavatko/views.py b/odevzdavatko/views.py index 667f74aa..1e19921a 100644 --- a/odevzdavatko/views.py +++ b/odevzdavatko/views.py @@ -367,8 +367,8 @@ class SeznamAktualnichReseniView(SeznamReseniView): return qs -class PosliReseniView(LoginRequiredMixin, FormView): - template_name = 'odevzdavatko/posli_reseni.html' +class VlozReseniView(LoginRequiredMixin, FormView): + template_name = 'odevzdavatko/vloz_reseni.html' form_class = f.PosliReseniForm def form_valid(self, form):