|
@ -543,19 +543,25 @@ class RocnikView(generic.DetailView): |
|
|
class ProblemView(generic.DetailView): |
|
|
class ProblemView(generic.DetailView): |
|
|
model = Problem |
|
|
model = Problem |
|
|
|
|
|
|
|
|
def _je_clanek(self, 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ě... |
|
|
return problem.typ in [Problem.TYP_ORG_CLANEK, Problem.TYP_RES_CLANEK] |
|
|
|
|
|
|
|
|
|
|
|
def get_template_names(self, **kwargs): |
|
|
def get_template_names(self, **kwargs): |
|
|
context = super(ProblemView, self).get_context_data(**kwargs) |
|
|
# 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. |
|
|
return ['seminar/archiv/problem_' + ('clanek.html' if self._je_clanek(context['problem']) else 'uloha_tema.html')] |
|
|
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): |
|
|
def get_context_data(self, **kwargs): |
|
|
context = super(ProblemView, self).get_context_data(**kwargs) |
|
|
context = super().get_context_data(**kwargs) |
|
|
if not context['problem'].verejne() and not self.request.user.is_staff: |
|
|
# 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() |
|
|
raise PermissionDenied() |
|
|
if context['problem'].typ == Problem.TYP_RES_CLANEK: |
|
|
if isinstance(context['object'], Clanek): |
|
|
context['reseni'] = Reseni.objects.filter(problem=context['problem']).select_related('resitel').order_by('resitel__prijmeni') |
|
|
context['reseni'] = Reseni.objects.filter(problem=context['object']).select_related('resitel').order_by('resitel__prijmeni') |
|
|
return context |
|
|
return context |
|
|
|
|
|
|
|
|
|
|
|
|
|
|