From e7ce91f165084298b8f8332798a208cb929985c0 Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Mon, 6 Sep 2021 15:44:49 +0200 Subject: [PATCH 1/2] =?UTF-8?q?N=C3=A1st=C5=99el=20mail=20=C5=99e=C5=A1ite?= =?UTF-8?q?l=C5=AFm?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deploy_v2/mail_resitelum | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 deploy_v2/mail_resitelum diff --git a/deploy_v2/mail_resitelum b/deploy_v2/mail_resitelum new file mode 100644 index 00000000..0e8a16b8 --- /dev/null +++ b/deploy_v2/mail_resitelum @@ -0,0 +1,14 @@ +Milí řešitelé M&M, + +web M&Mka dostal nový kabátek a zároveň se v něm objevilo odevzdávátko. Navíc, +pokud se zaregistrujete pod e-mailem, na který jsme vám poslali tuhle zprávu, +uvidíte rovnou i body za svá dosud odevzdaná řešení. + +Web budeme i nadále vylepšovat, a zajímá nás i jak to vidíte vy. Pokud byste +na webu našli nějaký nedostatek, nebo nám prostě jen chtěli napsat, nebojte se +k tomu použít adresu mam@matfyz.cz. + +Těšíme se na vaše řešení! (Připomínáme termín pro účast na soustředění 21. září.) + +Za časopis M&M, +Pavel Turinský From 6e9eb4548fb8f7cdf01a2ac4a749669594d6e232 Mon Sep 17 00:00:00 2001 From: MaM Web user Date: Tue, 7 Sep 2021 14:42:56 +0200 Subject: [PATCH 2/2] =?UTF-8?q?N=C3=A1hradn=C3=AD=20problemView,=20kter?= =?UTF-8?q?=C3=BD=20nebude=20zbyte=C4=8Dn=C4=9B=20h=C3=A1zet=20403?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/urls.py | 2 +- seminar/views/__init__.py | 3 ++ seminar/views/docasne.py | 16 ++++++ seminar/views/views_all.py | 102 +++++++++++++++++++------------------ 4 files changed, 72 insertions(+), 51 deletions(-) create mode 100644 seminar/views/docasne.py diff --git a/seminar/urls.py b/seminar/urls.py index 7ba7c239..a488f362 100644 --- a/seminar/urls.py +++ b/seminar/urls.py @@ -18,7 +18,7 @@ urlpatterns = [ path('rocnik//', views.RocnikView.as_view(), name='seminar_rocnik'), path('cislo/./', views.CisloView.as_view(), name='seminar_cislo'), - path('problem//', views.ProblemView.as_view(), name='seminar_problem'), + path('problem//', views.problemView, name='seminar_problem'), #path('treenode//', views.TreeNodeView.as_view(), name='seminar_treenode'), #path('treenode//json/', views.TreeNodeJSONView.as_view(), name='seminar_treenode_json'), #path('treenode/text//', views.TextWebView.as_view(), name='seminar_textnode_web'), diff --git a/seminar/views/__init__.py b/seminar/views/__init__.py index a9eb3ea9..163f2535 100644 --- a/seminar/views/__init__.py +++ b/seminar/views/__init__.py @@ -2,3 +2,6 @@ from .views_all import * from .autocomplete import * from .views_rest import * from .odevzdavatko import * + +# Dočsasné views +from .docasne import * diff --git a/seminar/views/docasne.py b/seminar/views/docasne.py new file mode 100644 index 00000000..da34d2e6 --- /dev/null +++ b/seminar/views/docasne.py @@ -0,0 +1,16 @@ +from http import HTTPStatus +import seminar.models as m +from django.shortcuts import render, get_object_or_404 + +def problemView(request, pk): + # Pokud problém neexistuje, hodíme obyčejnou 404 + # Taktéž v případě, že takový problém nemá být vidět + problem = get_object_or_404(m.Problem, id=pk, stav__in=[m.Problem.STAV_ZADANY, m.Problem.STAV_VYRESENY]) + # Problém existuje, neumíme ho zobrazit, renderujeme nějakou haluz + template = 'universal.html' + ctx = { + 'raw_html': f'

Obsah nelze zobrazit

Požadovaný problém {problem.nazev} sice existuje, ale aktuálně jej nelze zobrazit. Omlouváme se za potíže

', + } + status_code = HTTPStatus.NOT_FOUND + return render(request, template, context=ctx, status=status_code) + diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py index ef29e0b0..13091008 100644 --- a/seminar/views/views_all.py +++ b/seminar/views/views_all.py @@ -360,33 +360,34 @@ class TextWebView(generic.DetailView): return JsonResponse(model_to_dict(self.object,exclude='do_cisla')) -class ProblemView(generic.DetailView): - model = s.Problem - # Zkopírujeme template_name od TreeNodeView, protože jsme prakticky jen trošku upravený TreeNodeView - template_name = TreeNodeView.template_name - - def get_context_data(self, **kwargs): - context = super().get_context_data(**kwargs) - user = self.request.user - # Teď potřebujeme doplnit tnldata do kontextu. - # Ošklivý type switch, hezčí by bylo udělat to polymorfni. FIXME. - if False: - # Hezčí formátování zbytku :-P - pass - elif isinstance(self.object, s.Clanek) or isinstance(self.object, s.Konfera): - # Tyhle Problémy mají ŘešeníNode - context['tnldata'] = TNLData.from_treenode(self.object.reseninode,user) - elif isinstance(self.object, s.Uloha): - # FIXME: Teď vždycky zobrazujeme i vzorák! Možná by bylo hezčí/lepší mít to stejně jako pro Téma: procházet jen dosažitelné z Ročníku / čísla / whatever - tnl_zadani = TNLData.from_treenode(self.object.ulohazadaninode,user) - tnl_vzorak = TNLData.from_treenode(self.object.ulohavzoraknode,user) - context['tnldata'] = TNLData.from_tnldata_list([tnl_zadani, tnl_vzorak]) - elif isinstance(self.object, s.Tema): - rocniknode = self.object.rocnik.rocniknode - context['tnldata'] = TNLData.filter_treenode(rocniknode, lambda x: isinstance(x, s.TemaVCisleNode)) - else: - raise ValueError("Obecný problém nejde zobrazit.") - return context +# FIXME: Pozor, níž je ještě jeden ProblemView! +#class ProblemView(generic.DetailView): +# model = s.Problem +# # Zkopírujeme template_name od TreeNodeView, protože jsme prakticky jen trošku upravený TreeNodeView +# template_name = TreeNodeView.template_name +# +# def get_context_data(self, **kwargs): +# context = super().get_context_data(**kwargs) +# user = self.request.user +# # Teď potřebujeme doplnit tnldata do kontextu. +# # Ošklivý type switch, hezčí by bylo udělat to polymorfni. FIXME. +# if False: +# # Hezčí formátování zbytku :-P +# pass +# elif isinstance(self.object, s.Clanek) or isinstance(self.object, s.Konfera): +# # Tyhle Problémy mají ŘešeníNode +# context['tnldata'] = TNLData.from_treenode(self.object.reseninode,user) +# elif isinstance(self.object, s.Uloha): +# # FIXME: Teď vždycky zobrazujeme i vzorák! Možná by bylo hezčí/lepší mít to stejně jako pro Téma: procházet jen dosažitelné z Ročníku / čísla / whatever +# tnl_zadani = TNLData.from_treenode(self.object.ulohazadaninode,user) +# tnl_vzorak = TNLData.from_treenode(self.object.ulohavzoraknode,user) +# context['tnldata'] = TNLData.from_tnldata_list([tnl_zadani, tnl_vzorak]) +# elif isinstance(self.object, s.Tema): +# rocniknode = self.object.rocnik.rocniknode +# context['tnldata'] = TNLData.filter_treenode(rocniknode, lambda x: isinstance(x, s.TemaVCisleNode)) +# else: +# raise ValueError("Obecný problém nejde zobrazit.") +# return context #class AktualniZadaniView(generic.TemplateView): @@ -681,29 +682,30 @@ class RocnikView(generic.DetailView): return context -class ProblemView(generic.DetailView): - model = Problem - - # Používáme funkci, protože přímo template_name neumí mít v přiřazení dost logiky. Ledaže by se to udělalo polymorfně... - def get_template_names(self, **kwargs): - # FIXME: Switch podle typu není hezký, ale nechtělo se mi to přepisovat celé. Správně by se tohle mělo řešit polymorfismem. - spravne_templaty = { - s.Uloha: "uloha", - s.Tema: "tema", - s.Konfera: "konfera", - s.Clanek: "clanek", - } - context = super().get_context_data(**kwargs) - return ['seminar/archiv/problem_' + spravne_templaty[context['object'].__class__] + '.html'] - - def get_context_data(self, **kwargs): - context = super().get_context_data(**kwargs) - # Musí se používat context['object'], protože nevíme, jestli dostaneme úložku, téma, článek, .... a tyhle věci vyrábějí různé klíče. - if not context['object'].verejne() and not self.request.user.je_org: - raise PermissionDenied() - if isinstance(context['object'], Clanek): - context['reseni'] = Reseni.objects.filter(problem=context['object']).select_related('resitel').order_by('resitel__prijmeni') - return context +# FIXME: Pozor, výš je ještě jeden ProblemView! +#class ProblemView(generic.DetailView): +# model = Problem +# +# # Používáme funkci, protože přímo template_name neumí mít v přiřazení dost logiky. Ledaže by se to udělalo polymorfně... +# def get_template_names(self, **kwargs): +# # FIXME: Switch podle typu není hezký, ale nechtělo se mi to přepisovat celé. Správně by se tohle mělo řešit polymorfismem. +# spravne_templaty = { +# s.Uloha: "uloha", +# s.Tema: "tema", +# s.Konfera: "konfera", +# s.Clanek: "clanek", +# } +# context = super().get_context_data(**kwargs) +# return ['seminar/archiv/problem_' + spravne_templaty[context['object'].__class__] + '.html'] +# +# def get_context_data(self, **kwargs): +# context = super().get_context_data(**kwargs) +# # Musí se používat context['object'], protože nevíme, jestli dostaneme úložku, téma, článek, .... a tyhle věci vyrábějí různé klíče. +# if not context['object'].verejne() and not self.request.user.je_org: +# raise PermissionDenied() +# if isinstance(context['object'], Clanek): +# context['reseni'] = Reseni.objects.filter(problem=context['object']).select_related('resitel').order_by('resitel__prijmeni') +# return context