Merge branch 'test'
This commit is contained in:
		
						commit
						daf8cfa0e9
					
				
					 5 changed files with 86 additions and 51 deletions
				
			
		
							
								
								
									
										14
									
								
								deploy_v2/mail_resitelum
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								deploy_v2/mail_resitelum
									
									
									
									
									
										Normal file
									
								
							|  | @ -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ý | ||||||
|  | @ -18,7 +18,7 @@ urlpatterns = [ | ||||||
| 
 | 
 | ||||||
| 	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>.<str:cislo>/', views.CisloView.as_view(), name='seminar_cislo'), | 	path('cislo/<int:rocnik>.<str:cislo>/', views.CisloView.as_view(), name='seminar_cislo'), | ||||||
| 	path('problem/<int:pk>/', views.ProblemView.as_view(), name='seminar_problem'), | 	path('problem/<int:pk>/', views.problemView, name='seminar_problem'), | ||||||
| 	#path('treenode/<int:pk>/', views.TreeNodeView.as_view(), name='seminar_treenode'), | 	#path('treenode/<int:pk>/', views.TreeNodeView.as_view(), name='seminar_treenode'), | ||||||
| 	#path('treenode/<int:pk>/json/', views.TreeNodeJSONView.as_view(), name='seminar_treenode_json'), | 	#path('treenode/<int:pk>/json/', views.TreeNodeJSONView.as_view(), name='seminar_treenode_json'), | ||||||
| 	#path('treenode/text/<int:pk>/', views.TextWebView.as_view(), name='seminar_textnode_web'), | 	#path('treenode/text/<int:pk>/', views.TextWebView.as_view(), name='seminar_textnode_web'), | ||||||
|  |  | ||||||
|  | @ -2,3 +2,6 @@ from .views_all import * | ||||||
| from .autocomplete import * | from .autocomplete import * | ||||||
| from .views_rest import * | from .views_rest import * | ||||||
| from .odevzdavatko import * | from .odevzdavatko import * | ||||||
|  | 
 | ||||||
|  | # Dočsasné views | ||||||
|  | from .docasne import * | ||||||
|  |  | ||||||
							
								
								
									
										16
									
								
								seminar/views/docasne.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								seminar/views/docasne.py
									
									
									
									
									
										Normal file
									
								
							|  | @ -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'<h2>Obsah nelze zobrazit</h2><p>Požadovaný problém {problem.nazev} sice existuje, ale aktuálně jej nelze zobrazit. Omlouváme se za potíže</p>', | ||||||
|  | 		} | ||||||
|  | 	status_code = HTTPStatus.NOT_FOUND | ||||||
|  | 	return render(request, template, context=ctx, status=status_code) | ||||||
|  | 
 | ||||||
|  | @ -360,33 +360,34 @@ class TextWebView(generic.DetailView): | ||||||
| 		return JsonResponse(model_to_dict(self.object,exclude='do_cisla')) | 		return JsonResponse(model_to_dict(self.object,exclude='do_cisla')) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class ProblemView(generic.DetailView): | # FIXME: Pozor, níž je ještě jeden ProblemView! | ||||||
| 	model = s.Problem | #class ProblemView(generic.DetailView): | ||||||
| 	# Zkopírujeme template_name od TreeNodeView, protože jsme prakticky jen trošku upravený TreeNodeView | #	model = s.Problem | ||||||
| 	template_name = TreeNodeView.template_name | #	# 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) | #	def get_context_data(self, **kwargs): | ||||||
| 		user = self.request.user | #		context = super().get_context_data(**kwargs) | ||||||
| 		# Teď potřebujeme doplnit tnldata do kontextu. | #		user = self.request.user | ||||||
| 		# Ošklivý type switch, hezčí by bylo udělat to polymorfni. FIXME. | #		# Teď potřebujeme doplnit tnldata do kontextu. | ||||||
| 		if False: | #		# Ošklivý type switch, hezčí by bylo udělat to polymorfni. FIXME. | ||||||
| 			# Hezčí formátování zbytku :-P | #		if False: | ||||||
| 			pass | #			# Hezčí formátování zbytku :-P | ||||||
| 		elif isinstance(self.object, s.Clanek) or  isinstance(self.object, s.Konfera): | #			pass | ||||||
| 			# Tyhle Problémy mají ŘešeníNode | #		elif isinstance(self.object, s.Clanek) or  isinstance(self.object, s.Konfera): | ||||||
| 			context['tnldata'] = TNLData.from_treenode(self.object.reseninode,user) | #			# Tyhle Problémy mají ŘešeníNode | ||||||
| 		elif isinstance(self.object, s.Uloha): | #			context['tnldata'] = TNLData.from_treenode(self.object.reseninode,user) | ||||||
| 			# 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 | #		elif isinstance(self.object, s.Uloha): | ||||||
| 			tnl_zadani = TNLData.from_treenode(self.object.ulohazadaninode,user) | #			# 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_vzorak = TNLData.from_treenode(self.object.ulohavzoraknode,user) | #			tnl_zadani = TNLData.from_treenode(self.object.ulohazadaninode,user) | ||||||
| 			context['tnldata'] = TNLData.from_tnldata_list([tnl_zadani, tnl_vzorak]) | #			tnl_vzorak = TNLData.from_treenode(self.object.ulohavzoraknode,user) | ||||||
| 		elif isinstance(self.object, s.Tema): | #			context['tnldata'] = TNLData.from_tnldata_list([tnl_zadani, tnl_vzorak]) | ||||||
| 			rocniknode = self.object.rocnik.rocniknode | #		elif isinstance(self.object, s.Tema): | ||||||
| 			context['tnldata'] = TNLData.filter_treenode(rocniknode, lambda x: isinstance(x, s.TemaVCisleNode)) | #			rocniknode = self.object.rocnik.rocniknode | ||||||
| 		else: | #			context['tnldata'] = TNLData.filter_treenode(rocniknode, lambda x: isinstance(x, s.TemaVCisleNode)) | ||||||
| 			raise ValueError("Obecný problém nejde zobrazit.") | #		else: | ||||||
| 		return context | #			raise ValueError("Obecný problém nejde zobrazit.") | ||||||
|  | #		return context | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| #class AktualniZadaniView(generic.TemplateView): | #class AktualniZadaniView(generic.TemplateView): | ||||||
|  | @ -681,29 +682,30 @@ class RocnikView(generic.DetailView): | ||||||
| 		return context | 		return context | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class ProblemView(generic.DetailView): | # FIXME: Pozor, výš je ještě jeden ProblemView! | ||||||
| 	model = Problem | #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): | #	# 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ě... | ||||||
| 		# 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. | #	def get_template_names(self, **kwargs): | ||||||
| 		spravne_templaty = { | #		# 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. | ||||||
| 				s.Uloha: "uloha", | #		spravne_templaty = { | ||||||
| 				s.Tema: "tema", | #				s.Uloha: "uloha", | ||||||
| 				s.Konfera: "konfera", | #				s.Tema: "tema", | ||||||
| 				s.Clanek: "clanek", | #				s.Konfera: "konfera", | ||||||
| 				} | #				s.Clanek: "clanek", | ||||||
| 		context = super().get_context_data(**kwargs) | #				} | ||||||
| 		return ['seminar/archiv/problem_' + spravne_templaty[context['object'].__class__]  + '.html'] | #		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) | #	def get_context_data(self, **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. | #		context = super().get_context_data(**kwargs) | ||||||
| 		if not context['object'].verejne() and not self.request.user.je_org: | #		# 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. | ||||||
| 			raise PermissionDenied() | #		if not context['object'].verejne() and not self.request.user.je_org: | ||||||
| 		if isinstance(context['object'], Clanek): | #			raise PermissionDenied() | ||||||
| 			context['reseni'] = Reseni.objects.filter(problem=context['object']).select_related('resitel').order_by('resitel__prijmeni') | #		if isinstance(context['object'], Clanek): | ||||||
| 		return context | #			context['reseni'] = Reseni.objects.filter(problem=context['object']).select_related('resitel').order_by('resitel__prijmeni') | ||||||
|  | #		return context | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Pavel "LEdoian" Turinsky
						Pavel "LEdoian" Turinsky