změny pouze v komentářích, odkomentovaná věc v urls.py, která nefunguje, ale nejde bez ní testovat archiv
This commit is contained in:
parent
efc76c7153
commit
5c97181062
2 changed files with 34 additions and 32 deletions
|
@ -23,7 +23,7 @@ urlpatterns = [
|
||||||
path('archiv/temata/', views.ArchivTemataView.as_view()),
|
path('archiv/temata/', views.ArchivTemataView.as_view()),
|
||||||
|
|
||||||
path('rocnik/<int:rocnik>/', views.RocnikView.as_view(), name='seminar_rocnik'),
|
path('rocnik/<int:rocnik>/', views.RocnikView.as_view(), name='seminar_rocnik'),
|
||||||
#path('cislo/<int:rocnik>.<int:cislo>/', views.CisloView.as_view(), name='seminar_cislo'),
|
path('cislo/<int:rocnik>.<int:cislo>/', views.CisloView.as_view(), name='seminar_cislo'), # odkomentované jenom kvůli testování archivu
|
||||||
path('problem/<int:pk>/', views.ProblemView.as_view(), name='seminar_problem'),
|
path('problem/<int:pk>/', views.ProblemView.as_view(), name='seminar_problem'),
|
||||||
#path('problem/(?P<pk>\d+)/(?P<prispevek>\d+)/', views.PrispevekView.as_view(), name='seminar_problem_prispevek'),
|
#path('problem/(?P<pk>\d+)/(?P<prispevek>\d+)/', views.PrispevekView.as_view(), name='seminar_problem_prispevek'),
|
||||||
|
|
||||||
|
|
|
@ -62,7 +62,7 @@ class VlozBodyView(generic.ListView):
|
||||||
print(self.tema)
|
print(self.tema)
|
||||||
self.problemy = Problem.objects.filter(nadproblem = self.tema)
|
self.problemy = Problem.objects.filter(nadproblem = self.tema)
|
||||||
print(self.problemy)
|
print(self.problemy)
|
||||||
self.reseni = Reseni.objects.filter(problem__in=self.problemy)
|
self.reseni = Reseni.objects.filter(problem__in=self.problemy)
|
||||||
print(self.reseni)
|
print(self.reseni)
|
||||||
return self.reseni
|
return self.reseni
|
||||||
|
|
||||||
|
@ -81,7 +81,7 @@ class ObalkovaniView(generic.ListView):
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(ObalkovaniView, self).get_context_data(**kwargs)
|
context = super(ObalkovaniView, self).get_context_data(**kwargs)
|
||||||
print(self.cislo)
|
print(self.cislo)
|
||||||
context['cislo'] = self.cislo
|
context['cislo'] = self.cislo
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
||||||
|
@ -130,8 +130,8 @@ def vytahniZLesaSeznam(tematko, koren, pouze_zajimave=False):
|
||||||
stack.append((wn.succ, wd, wr))
|
stack.append((wn.succ, wd, wr))
|
||||||
if isinstance(wn, s.TemaVCisleNode):
|
if isinstance(wn, s.TemaVCisleNode):
|
||||||
print("TEMA")
|
print("TEMA")
|
||||||
print(wn.tema.id)
|
print(wn.tema.id)
|
||||||
print(tematko.id)
|
print(tematko.id)
|
||||||
if wn.tema.id == tematko.id:
|
if wn.tema.id == tematko.id:
|
||||||
returnVal.append((posledni_cislo, 0))
|
returnVal.append((posledni_cislo, 0))
|
||||||
print("PRIDANO")
|
print("PRIDANO")
|
||||||
|
@ -144,7 +144,7 @@ def vytahniZLesaSeznam(tematko, koren, pouze_zajimave=False):
|
||||||
tagClose = s.Text(na_web = "Zavírací srolovací tag")
|
tagClose = s.Text(na_web = "Zavírací srolovací tag")
|
||||||
tagCloseNode = s.TextNode(text = tagClose)
|
tagCloseNode = s.TextNode(text = tagClose)
|
||||||
stack.append((tagCloseNode, wd, True))
|
stack.append((tagCloseNode, wd, True))
|
||||||
|
|
||||||
if wn.first_child != None:
|
if wn.first_child != None:
|
||||||
stack.append((wn.first_child, wd + 1, wr))
|
stack.append((wn.first_child, wd + 1, wr))
|
||||||
|
|
||||||
|
@ -152,14 +152,14 @@ def vytahniZLesaSeznam(tematko, koren, pouze_zajimave=False):
|
||||||
posledni_cislo = wn
|
posledni_cislo = wn
|
||||||
print(wn)
|
print(wn)
|
||||||
|
|
||||||
if wr:
|
if wr:
|
||||||
print("ZAJIMAVE")
|
print("ZAJIMAVE")
|
||||||
if pouze_zajimave:
|
if pouze_zajimave:
|
||||||
if not wn.zajimave:
|
if not wn.zajimave:
|
||||||
continue
|
continue
|
||||||
returnVal.append((wn, wd))
|
returnVal.append((wn, wd))
|
||||||
return returnVal
|
return returnVal
|
||||||
|
|
||||||
def TematkoView(request, rocnik, tematko):
|
def TematkoView(request, rocnik, tematko):
|
||||||
nastaveni = s.Nastaveni.objects.first()
|
nastaveni = s.Nastaveni.objects.first()
|
||||||
rocnik_object = s.Rocnik.objects.filter(rocnik=rocnik)
|
rocnik_object = s.Rocnik.objects.filter(rocnik=rocnik)
|
||||||
|
@ -172,7 +172,7 @@ def TematkoView(request, rocnik, tematko):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
return render(request, 'seminar/tematka/toaletak.html', {})
|
return render(request, 'seminar/tematka/toaletak.html', {})
|
||||||
|
|
||||||
|
|
||||||
def TemataRozcestnikView(request):
|
def TemataRozcestnikView(request):
|
||||||
print("=============================================")
|
print("=============================================")
|
||||||
|
@ -198,17 +198,17 @@ def TemataRozcestnikView(request):
|
||||||
vcisle.append((odkaz[0].getOdkazStr(), odkaz[0].getOdkaz()))
|
vcisle.append((odkaz[0].getOdkazStr(), odkaz[0].getOdkaz()))
|
||||||
if cislo != None:
|
if cislo != None:
|
||||||
cisla.append((cislo, vcisle))
|
cisla.append((cislo, vcisle))
|
||||||
|
|
||||||
print(cisla)
|
print(cisla)
|
||||||
tematka.append({
|
tematka.append({
|
||||||
"kod" : tematko_object.kod,
|
"kod" : tematko_object.kod,
|
||||||
"nazev" : tematko_object.nazev,
|
"nazev" : tematko_object.nazev,
|
||||||
"abstrakt" : tematko_object.abstrakt,
|
"abstrakt" : tematko_object.abstrakt,
|
||||||
"obrazek": tematko_object.obrazek,
|
"obrazek": tematko_object.obrazek,
|
||||||
"cisla" : cisla
|
"cisla" : cisla
|
||||||
})
|
})
|
||||||
return render(request, 'seminar/tematka/rozcestnik.html', {"tematka": tematka, "rocnik" : nastaveni.aktualni_rocnik().rocnik})
|
return render(request, 'seminar/tematka/rozcestnik.html', {"tematka": tematka, "rocnik" : nastaveni.aktualni_rocnik().rocnik})
|
||||||
|
|
||||||
|
|
||||||
#def ZadaniAktualniVysledkovkaView(request):
|
#def ZadaniAktualniVysledkovkaView(request):
|
||||||
# nastaveni = get_object_or_404(Nastaveni)
|
# nastaveni = get_object_or_404(Nastaveni)
|
||||||
|
@ -311,7 +311,6 @@ class CojemamOrganizatoriStariView(generic.ListView):
|
||||||
|
|
||||||
### Archiv
|
### Archiv
|
||||||
|
|
||||||
|
|
||||||
class ArchivView(generic.ListView):
|
class ArchivView(generic.ListView):
|
||||||
model = Rocnik
|
model = Rocnik
|
||||||
template_name='seminar/archiv/cisla.html'
|
template_name='seminar/archiv/cisla.html'
|
||||||
|
@ -322,13 +321,16 @@ class ArchivView(generic.ListView):
|
||||||
vyska = 297 # px
|
vyska = 297 # px
|
||||||
sirka = 210 # px
|
sirka = 210 # px
|
||||||
|
|
||||||
|
# nejnovějších 10 zveřejněných čísel
|
||||||
cisla = Cislo.objects.filter(verejne_db=True)[:10]
|
cisla = Cislo.objects.filter(verejne_db=True)[:10]
|
||||||
|
|
||||||
|
# op = os.path, udělá z argumentů cestu
|
||||||
png_dir = op.join(settings.MEDIA_ROOT, "cislo", "png")
|
png_dir = op.join(settings.MEDIA_ROOT, "cislo", "png")
|
||||||
|
|
||||||
# seznam [(url obrázku, číslo)]
|
# seznam [(url obrázku, číslo)]
|
||||||
urls = []
|
urls = []
|
||||||
|
|
||||||
|
# c je číslo, i je pořadí čísla
|
||||||
for i, c in enumerate(cisla):
|
for i, c in enumerate(cisla):
|
||||||
if not c.pdf:
|
if not c.pdf:
|
||||||
continue
|
continue
|
||||||
|
@ -420,7 +422,7 @@ def sloupec_s_poradim(seznam_s_body):
|
||||||
sloupec_s_poradim.append("{}.".format(aktualni_poradi))
|
sloupec_s_poradim.append("{}.".format(aktualni_poradi))
|
||||||
# pokud je skupina větší, vypíšu rozsah
|
# pokud je skupina větší, vypíšu rozsah
|
||||||
else:
|
else:
|
||||||
sloupec_s_poradim.append("{}.–{}.".format(aktualni_poradi,
|
sloupec_s_poradim.append("{}.–{}.".format(aktualni_poradi,
|
||||||
aktualni_poradi+velikost_skupiny-1))
|
aktualni_poradi+velikost_skupiny-1))
|
||||||
# zvětšíme aktuální pořadí o tolik, kolik pozic bylo přeskočeno
|
# zvětšíme aktuální pořadí o tolik, kolik pozic bylo přeskočeno
|
||||||
aktualni_poradi = aktualni_poradi + velikost_skupiny
|
aktualni_poradi = aktualni_poradi + velikost_skupiny
|
||||||
|
@ -428,9 +430,9 @@ def sloupec_s_poradim(seznam_s_body):
|
||||||
|
|
||||||
# spočítá součet bodů získaných daným řešitelem za zadaný problém a všechny jeho podproblémy
|
# spočítá součet bodů získaných daným řešitelem za zadaný problém a všechny jeho podproblémy
|
||||||
def __soucet_resitele_problemu(problem, resitel, cislo, soucet):
|
def __soucet_resitele_problemu(problem, resitel, cislo, soucet):
|
||||||
# sečteme body za daný problém přes všechna řešení daného problému
|
# sečteme body za daný problém přes všechna řešení daného problému
|
||||||
# od daného řešitele
|
# od daného řešitele
|
||||||
reseni_resitele = problem.hodnoceni_set.filter(reseni__resitele=resitel,
|
reseni_resitele = problem.hodnoceni_set.filter(reseni__resitele=resitel,
|
||||||
cislo_body=cislo)
|
cislo_body=cislo)
|
||||||
# XXX chyba na řádku výše - řešení může mít více řešitelů, asi chceme contains
|
# XXX chyba na řádku výše - řešení může mít více řešitelů, asi chceme contains
|
||||||
# nebo in
|
# nebo in
|
||||||
|
@ -438,7 +440,7 @@ def __soucet_resitele_problemu(problem, resitel, cislo, soucet):
|
||||||
soucet += r.body
|
soucet += r.body
|
||||||
|
|
||||||
# a přičteme k tomu hodnocení všech podproblémů
|
# a přičteme k tomu hodnocení všech podproblémů
|
||||||
for p in problem.podproblem.all():
|
for p in problem.podproblem.all():
|
||||||
# i přes jméno by to měla být množina jeho podproblémů
|
# i přes jméno by to měla být množina jeho podproblémů
|
||||||
soucet += __soucet_resitele_problemu(p, resitel, soucet)
|
soucet += __soucet_resitele_problemu(p, resitel, soucet)
|
||||||
return soucet
|
return soucet
|
||||||
|
@ -451,25 +453,25 @@ def body_resitele_problemu_v_cisle(problem, resitel, cislo):
|
||||||
# vrátí list všech problémů s body v daném čísle, které již nemají nadproblém
|
# vrátí list všech problémů s body v daném čísle, které již nemají nadproblém
|
||||||
def hlavni_problemy_cisla(cislo):
|
def hlavni_problemy_cisla(cislo):
|
||||||
hodnoceni = cislo.hodnoceni.select_related('problem', 'reseni').all() # hodnocení, která se vážou k danému číslu
|
hodnoceni = cislo.hodnoceni.select_related('problem', 'reseni').all() # hodnocení, která se vážou k danému číslu
|
||||||
|
|
||||||
reseni = [h.reseni for h in hodnoceni]
|
reseni = [h.reseni for h in hodnoceni]
|
||||||
problemy = [h.problem for h in hodnoceni]
|
problemy = [h.problem for h in hodnoceni]
|
||||||
problemy_set = set(problemy) # chceme každý problém unikátně,
|
problemy_set = set(problemy) # chceme každý problém unikátně,
|
||||||
problemy = (list(problemy_set)) # převedení na množinu a zpět to zaručí
|
problemy = (list(problemy_set)) # převedení na množinu a zpět to zaručí
|
||||||
|
|
||||||
# hlavní problémy čísla
|
# hlavní problémy čísla
|
||||||
# (mají vlastní sloupeček ve výsledkovce, nemají nadproblém)
|
# (mají vlastní sloupeček ve výsledkovce, nemají nadproblém)
|
||||||
hlavni_problemy = []
|
hlavni_problemy = []
|
||||||
for p in problemy:
|
for p in problemy:
|
||||||
while not(p.nadproblem == None):
|
while not(p.nadproblem == None):
|
||||||
p = p.nadproblem
|
p = p.nadproblem
|
||||||
hlavni_problemy.append(p)
|
hlavni_problemy.append(p)
|
||||||
|
|
||||||
# zunikátnění
|
# zunikátnění
|
||||||
hlavni_problemy_set = set(hlavni_problemy)
|
hlavni_problemy_set = set(hlavni_problemy)
|
||||||
hlavni_problemy = list(hlavni_problemy_set)
|
hlavni_problemy = list(hlavni_problemy_set)
|
||||||
hlavni_problemy.sort(key=lambda k: k.kod_v_rocniku()) # setřídit podle t1, t2, c3, ...
|
hlavni_problemy.sort(key=lambda k: k.kod_v_rocniku()) # setřídit podle t1, t2, c3, ...
|
||||||
|
|
||||||
return hlavni_problemy
|
return hlavni_problemy
|
||||||
|
|
||||||
def body_resitele_odjakziva(resitel):
|
def body_resitele_odjakziva(resitel):
|
||||||
|
@ -495,7 +497,7 @@ def body_resitele_v_cisle(resitel, cislo):
|
||||||
def body_resitele_v_rocniku(resitel, rocnik, do_cisla=None):
|
def body_resitele_v_rocniku(resitel, rocnik, do_cisla=None):
|
||||||
# pokud do_cisla=None, tak do posledního čísla v ročníku
|
# pokud do_cisla=None, tak do posledního čísla v ročníku
|
||||||
# do_cisla je objekt Cislo
|
# do_cisla je objekt Cislo
|
||||||
cisla = rocnik.cisla.all() # funkce vrátí pole objektů
|
cisla = rocnik.cisla.all() # funkce vrátí pole objektů
|
||||||
# Cislo už lexikograficky setřízené, viz models
|
# Cislo už lexikograficky setřízené, viz models
|
||||||
body = 0
|
body = 0
|
||||||
for cislo in cisla:
|
for cislo in cisla:
|
||||||
|
@ -671,7 +673,7 @@ class CisloView(generic.DetailView):
|
||||||
# generujeme sloupec s pořadím pomocí stejně zvané funkce
|
# generujeme sloupec s pořadím pomocí stejně zvané funkce
|
||||||
pocty_bodu = [rv.body_rocnik for rv in radky_vysledkovky]
|
pocty_bodu = [rv.body_rocnik for rv in radky_vysledkovky]
|
||||||
sloupec_poradi = sloupec_s_poradim(pocty_bodu)
|
sloupec_poradi = sloupec_s_poradim(pocty_bodu)
|
||||||
|
|
||||||
# každému řádku výsledkovky přidáme jeho pořadí
|
# každému řádku výsledkovky přidáme jeho pořadí
|
||||||
i = 0
|
i = 0
|
||||||
for rv in radky_vysledkovky:
|
for rv in radky_vysledkovky:
|
||||||
|
@ -680,7 +682,7 @@ class CisloView(generic.DetailView):
|
||||||
|
|
||||||
# vytahané informace předáváme do kontextu
|
# vytahané informace předáváme do kontextu
|
||||||
context['cislo'] = cislo
|
context['cislo'] = cislo
|
||||||
context['radky_vysledkovky'] = radky_vysledkovky
|
context['radky_vysledkovky'] = radky_vysledkovky
|
||||||
context['problemy'] = hlavni_problemy
|
context['problemy'] = hlavni_problemy
|
||||||
# context['v_cisle_zadane'] = TODO
|
# context['v_cisle_zadane'] = TODO
|
||||||
# context['resene_problemy'] = resene_problemy
|
# context['resene_problemy'] = resene_problemy
|
||||||
|
@ -1164,7 +1166,7 @@ def loginView(request):
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
form = LoginForm(request.POST)
|
form = LoginForm(request.POST)
|
||||||
if form.is_valid():
|
if form.is_valid():
|
||||||
user = authenticate(request,
|
user = authenticate(request,
|
||||||
username=form.cleaned_data['username'],
|
username=form.cleaned_data['username'],
|
||||||
password=form.cleaned_data['password'])
|
password=form.cleaned_data['password'])
|
||||||
print(form.cleaned_data)
|
print(form.cleaned_data)
|
||||||
|
@ -1172,8 +1174,8 @@ def loginView(request):
|
||||||
login(request,user)
|
login(request,user)
|
||||||
return HttpResponseRedirect('/')
|
return HttpResponseRedirect('/')
|
||||||
else:
|
else:
|
||||||
return render(request,
|
return render(request,
|
||||||
'seminar/login.html',
|
'seminar/login.html',
|
||||||
{'form': form, 'login_error': 'Neplatné jméno nebo heslo'})
|
{'form': form, 'login_error': 'Neplatné jméno nebo heslo'})
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
@ -1191,7 +1193,7 @@ def logoutView(request):
|
||||||
def prihlaska_log_gdpr_safe(logger, gdpr_logger, msg, form_data):
|
def prihlaska_log_gdpr_safe(logger, gdpr_logger, msg, form_data):
|
||||||
msg = "{}, form_hash:{}".format(msg,hash(form_data))
|
msg = "{}, form_hash:{}".format(msg,hash(form_data))
|
||||||
logger.warn(msg)
|
logger.warn(msg)
|
||||||
gdpr_logger.warn(msg+", form:{}".format(form_data))
|
gdpr_logger.warn(msg+", form:{}".format(form_data))
|
||||||
|
|
||||||
from django.forms.models import model_to_dict
|
from django.forms.models import model_to_dict
|
||||||
def resitelEditView(request):
|
def resitelEditView(request):
|
||||||
|
@ -1201,7 +1203,7 @@ def resitelEditView(request):
|
||||||
osoba_edit = Osoba.objects.get(user=u)
|
osoba_edit = Osoba.objects.get(user=u)
|
||||||
resitel_edit = osoba_edit.resitel
|
resitel_edit = osoba_edit.resitel
|
||||||
user_edit = osoba_edit.user
|
user_edit = osoba_edit.user
|
||||||
## Vytvoření slovníku, kterým předvyplním formulář
|
## Vytvoření slovníku, kterým předvyplním formulář
|
||||||
prefill_1=model_to_dict(user_edit)
|
prefill_1=model_to_dict(user_edit)
|
||||||
prefill_2=model_to_dict(resitel_edit)
|
prefill_2=model_to_dict(resitel_edit)
|
||||||
prefill_3=model_to_dict(osoba_edit)
|
prefill_3=model_to_dict(osoba_edit)
|
||||||
|
@ -1259,7 +1261,7 @@ def prihlaskaView(request):
|
||||||
fcd = form.cleaned_data
|
fcd = form.cleaned_data
|
||||||
form_hash = hash(fcd)
|
form_hash = hash(fcd)
|
||||||
form_logger.info(fcd,form_hash=form_hash)
|
form_logger.info(fcd,form_hash=form_hash)
|
||||||
|
|
||||||
with transaction.atomic():
|
with transaction.atomic():
|
||||||
u = User.objects.create_user(
|
u = User.objects.create_user(
|
||||||
username=fcd['username'],
|
username=fcd['username'],
|
||||||
|
@ -1298,7 +1300,7 @@ def prihlaskaView(request):
|
||||||
rok_maturity = fcd['rok_maturity'],
|
rok_maturity = fcd['rok_maturity'],
|
||||||
zasilat = fcd['zasilat']
|
zasilat = fcd['zasilat']
|
||||||
)
|
)
|
||||||
|
|
||||||
r.save()
|
r.save()
|
||||||
r.osoba = o
|
r.osoba = o
|
||||||
if fcd.get('skola'):
|
if fcd.get('skola'):
|
||||||
|
@ -1328,7 +1330,7 @@ class SkolaAutocomplete(autocomplete.Select2QuerySetView):
|
||||||
Q(kratky_nazev__istartswith=self.q)|
|
Q(kratky_nazev__istartswith=self.q)|
|
||||||
Q(ulice__istartswith=self.q)|
|
Q(ulice__istartswith=self.q)|
|
||||||
Q(mesto__istartswith=self.q))
|
Q(mesto__istartswith=self.q))
|
||||||
|
|
||||||
return qs
|
return qs
|
||||||
|
|
||||||
class LoginRequiredAjaxMixin(object):
|
class LoginRequiredAjaxMixin(object):
|
||||||
|
|
Loading…
Reference in a new issue