Drobné pročištění views a modelů týkající se zobrazování témátek
This commit is contained in:
		
							parent
							
								
									6cfde792c0
								
							
						
					
					
						commit
						f007cac724
					
				
					 2 changed files with 19 additions and 13 deletions
				
			
		|  | @ -728,6 +728,9 @@ class Problem(SeminarModelBase,PolymorphicModel): | |||
| 		return '<Není zadaný>' | ||||
| 
 | ||||
| 	def verejne(self): | ||||
| 		# FIXME: Tohle se liší podle typu problému, má se udělat polymorfně. | ||||
| 		# Zatím je tu jen dummy fail-safe default: nic není veřejné. | ||||
| 		return False | ||||
| 		return (self.cislo_zadani and self.cislo_zadani.verejne()) | ||||
| 	verejne.boolean = True | ||||
| 
 | ||||
|  | @ -735,10 +738,7 @@ class Problem(SeminarModelBase,PolymorphicModel): | |||
| 		return reverse('seminar_problem', kwargs={'pk': self.id}) | ||||
| 
 | ||||
| 	def admin_url(self): | ||||
| 		if self.stav == Problem.STAV_ZADANY: | ||||
| 			return reverse('admin:seminar_problemzadany_change', args=(self.id, )) | ||||
| 		else: | ||||
| 			return reverse('admin:seminar_problemnavrh_change', args=(self.id, )) | ||||
| 			return reverse('admin:seminar_problem_change', args=(self.id, )) | ||||
| 
 | ||||
| # FIXME - k úloze | ||||
| 	def body_v_zavorce(self): | ||||
|  |  | |||
|  | @ -543,19 +543,25 @@ class RocnikView(generic.DetailView): | |||
| class ProblemView(generic.DetailView): | ||||
| 	model = Problem | ||||
| 
 | ||||
| 	def _je_clanek(self, problem): | ||||
| 		return problem.typ in [Problem.TYP_ORG_CLANEK, Problem.TYP_RES_CLANEK] | ||||
| 
 | ||||
| 	# 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): | ||||
| 		context = super(ProblemView, self).get_context_data(**kwargs) | ||||
| 		return ['seminar/archiv/problem_' + ('clanek.html' if self._je_clanek(context['problem']) else 'uloha_tema.html')] | ||||
| 		# 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(ProblemView, self).get_context_data(**kwargs) | ||||
| 		if not context['problem'].verejne() and not self.request.user.is_staff: | ||||
| 		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.is_staff: | ||||
| 			raise PermissionDenied() | ||||
| 		if context['problem'].typ == Problem.TYP_RES_CLANEK: | ||||
| 			context['reseni'] = Reseni.objects.filter(problem=context['problem']).select_related('resitel').order_by('resitel__prijmeni') | ||||
| 		if isinstance(context['object'], Clanek): | ||||
| 			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