@ -16,7 +16,8 @@ from django.contrib.auth.mixins import LoginRequiredMixin
from django . db import transaction
from dal import autocomplete
from . models import Problem , Cislo , Reseni , Nastaveni , Rocnik , Soustredeni , Organizator , Resitel , Novinky , Soustredeni_Ucastnici , Pohadka , Tema , Clanek , Osoba , Skola
import seminar . models as s
from . models import Problem , Cislo , Reseni , Nastaveni , Rocnik , Soustredeni , Organizator , Resitel , Novinky , Soustredeni_Ucastnici , Pohadka , Tema , Clanek , Osoba , Skola # Tohle je stare a chceme se toho zbavit. Pouzivejte s.ToCoChci
#from .models import VysledkyZaCislo, VysledkyKCisluZaRocnik, VysledkyKCisluOdjakziva
from . import utils
from . unicodecsv import UnicodeWriter
@ -74,6 +75,91 @@ def ZadaniTemataView(request):
}
)
#TODO na příště - implementovat DFS, které vrátí seznam objektů, jejich hloubku a objekt, který chci zobrazit,
#TODO na příště - rozmyslet, jak zobrazovat objekty - u každého Nodu se objekt, na který ukazuje jmenuje jinak, zavést metodu, která se u každé subclassy bude jmenovat stejně? __str__
#TODO na příště - v jaké formě předávat templatu? Jak řešit rozbalovací tagy?
#TODO na příště - implementace vpisování rozbalovacích tagů, vytvořit si nový objekt, který bude mít stejnou metodu jako objekty, které mají node, která bude vracet vhodný tag a prostě ji přidat do seznamu?
def vytahniZLesaSeznam ( tematko , koren , pouze_zajimave = False ) :
returnVal = [ ]
stack = [ ]
stack . append ( ( koren . first_child , 0 , False ) ) #Tuple of node, depth and relevance
while len ( stack ) > 0 :
wn , wd , wr = stack . pop ( )
if wn . succ != None :
stack . append ( ( wn . succ , wd , wr ) )
if isinstance ( wn , s . TemaVCisleNode ) :
print ( " TEMA " )
print ( wn . tema . id )
print ( tematko . id )
if wn . tema . id == tematko . id :
returnVal . append ( ( posledni_cislo , 0 ) )
print ( " PRIDANO " )
wr = True
wd = 1
if wn . srolovatelne :
tagOpen = s . Text ( na_web = " Otevírací srolovací tag " )
tagOpenNode = s . TextNode ( text = tagOpen )
tagClose = s . Text ( na_web = " Zavírací srolovací tag " )
tagCloseNode = s . TextNode ( text = tagClose )
stack . append ( ( tagCloseNode , wd , True ) )
if wn . first_child != None :
stack . append ( ( wn . first_child , wd + 1 , wr ) )
if isinstance ( wn , s . CisloNode ) :
posledni_cislo = wn
print ( wn )
if wr :
print ( " ZAJIMAVE " )
if pouze_zajimave :
if not wn . zajimave :
continue
returnVal . append ( ( wn , wd ) )
return returnVal
def TematkoView ( request ) :
neco
def TemataRozcestnikView ( request ) :
print ( " ============================================= " )
nastaveni = s . Nastaveni . objects . first ( )
tematka_objects = s . Tema . objects . filter ( rocnik = nastaveni . aktualni_rocnik ( ) )
tematka = [ ] #List tematka obsahuje pro kazde tematko object a list vsech TemaVCisleNodu - implementované pomocí slovníku
for tematko_object in tematka_objects :
print ( " AKTUALNI TEMATKO " )
print ( tematko_object . id )
odkazy = vytahniZLesaSeznam ( tematko_object , nastaveni . aktualni_rocnik ( ) . rocniknode , pouze_zajimave = True ) #Odkazy jsou tuply (node, depth) v listu
print ( odkazy )
cisla = [ ] # List tuplů (nazev cisla, list odkazů)
vcisle = [ ]
cislo = None
for odkaz in odkazy :
if odkaz [ 1 ] == 0 :
if cislo != None :
cisla . append ( ( cislo , vcisle ) )
cislo = ( odkaz [ 0 ] . getOdkazStr ( ) , odkaz [ 0 ] . getOdkaz ( ) )
vcisle = [ ]
else :
print ( odkaz [ 0 ] . getOdkaz ( ) )
vcisle . append ( ( odkaz [ 0 ] . getOdkazStr ( ) , odkaz [ 0 ] . getOdkaz ( ) ) )
if cislo != None :
cisla . append ( ( cislo , vcisle ) )
print ( cisla )
tematka . append ( {
" kod " : tematko_object . kod ,
" nazev " : tematko_object . nazev ,
" abstrakt " : tematko_object . abstrakt ,
" obrazek " : tematko_object . obrazek ,
" cisla " : cisla
} )
return render ( request , ' seminar/tematka/rozcestnik.html ' , { " tematka " : tematka } )
#def ZadaniAktualniVysledkovkaView(request):
# nastaveni = get_object_or_404(Nastaveni)
@ -1028,15 +1114,16 @@ def prihlaska_log_gdpr_safe(logger, gdpr_logger, msg, form_data):
from django . forms . models import model_to_dict
def resitelEditView ( request ) :
err_logger = logging . getLogger ( ' seminar.prihlaska.problem ' )
## Načtení objektu Osoba a Resitel, patrici k aktuálně přihlášenému uživately
u = request . user
osoba_edit = Osoba . objects . get ( user = u )
resitel_edit = osoba_edit . resitel
user_edit = osoba_edit . user
## Vytvoření slovníku, kterým předvyplním formulář
prefill_1 = model_to_dict ( osoba _edit)
prefill_1 = model_to_dict ( user _edit)
prefill_2 = model_to_dict ( resitel_edit )
prefill_3 = model_to_dict ( user _edit)
prefill_3 = model_to_dict ( osoba _edit)
prefill_1 . update ( prefill_2 )
prefill_1 . update ( prefill_3 )
form = EditForm ( initial = prefill_1 )
@ -1044,7 +1131,35 @@ def resitelEditView(request):
if request . method == ' POST ' :
form = EditForm ( request . POST )
if form . is_valid ( ) :
osoba_edit . prijmeni = ' NOVOTA '
## Změny v osobě
fcd = form . cleaned_data
osoba_edit . jmeno = fcd [ ' jmeno ' ]
osoba_edit . prijmeni = fcd [ ' prijmeni ' ]
osoba_edit . pohlavi_muz = fcd [ ' pohlavi_muz ' ]
osoba_edit . email = fcd [ ' email ' ]
osoba_edit . telefon = fcd [ ' telefon ' ]
osoba_edit . ulice = fcd [ ' ulice ' ]
osoba_edit . mesto = fcd [ ' mesto ' ]
osoba_edit . psc = fcd [ ' psc ' ]
## Změny v osobě s podmínkami
if fcd . get ( ' spam ' , False ) :
osoba_edit . datum_souhlasu_zasilani = date . today ( )
if fcd . get ( ' stat ' , ' ' ) in ( ' CZ ' , ' SK ' ) :
osoba_edit . stat = fcd [ ' stat ' ]
else :
## Neznámá země
msg = " Unknown country {} " . format ( fcd [ ' stat_text ' ] )
## Změny v řešiteli
resitel_edit . skola = fcd [ ' skola ' ]
resitel_edit . rok_maturity = fcd [ ' rok_maturity ' ]
resitel_edit . zasilat = fcd [ ' zasilat ' ]
if fcd . get ( ' skola ' ) :
resitel_edit . skola = fcd [ ' skola ' ]
else :
# Unknown school - log it
msg = " Unknown school {} , {} " . format ( fcd [ ' skola_nazev ' ] , fcd [ ' skola_adresa ' ] )
resitel_edit . save ( )
osoba_edit . save ( )
return HttpResponseRedirect ( ' /thanks/ ' )
else :