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
	
	 Kateřina Čížková
						Kateřina Čížková