From 31b7cbb8d742e7cc9bea5574caf62f5125ee4f0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Sun, 4 Aug 2024 18:53:35 +0200 Subject: [PATCH] Tvorba (templates, admin, views) --- api/tests/test_skola_autocomplete.py | 1 - mamweb/settings_common.py | 1 + mamweb/urls.py | 4 +- seminar/admin.py | 165 +--------------- treenode/templates/treenode/orphanage.html | 2 +- tvorba/__init__.py | 0 tvorba/admin.py | 177 ++++++++++++++++++ tvorba/apps.py | 6 + tvorba/migrations/__init__.py | 0 .../templates/tvorba}/archiv/cisla.html | 0 .../templates/tvorba}/archiv/cislo.html | 0 .../tvorba}/archiv/cislo_vysledkovka.tex | 0 .../templates/tvorba}/archiv/odmeny.html | 0 .../templates/tvorba}/archiv/prispevek.html | 0 .../templates/tvorba}/archiv/problem.html | 0 .../tvorba}/archiv/problem_clanek.html | 0 .../tvorba}/archiv/problem_tema.html | 0 .../tvorba}/archiv/problem_uloha.html | 0 .../tvorba}/archiv/problem_uloha_tema.html | 0 .../templates/tvorba}/archiv/rocnik.html | 0 .../tvorba}/archiv/rocnik_vysledkovka.tex | 0 .../templates/tvorba}/archiv/temata.html | 0 .../templates/tvorba}/archiv/tituly.tex | 0 .../tvorba}/clanky/organizatorske_clanky.html | 0 .../tvorba}/clanky/resitelske_clanky.html | 0 .../templates/tvorba}/tematka/rozcestnik.html | 0 .../templates/tvorba}/tematka/toaletak.html | 0 .../tvorba}/zadani/AktualniVysledkovka.html | 0 .../tvorba}/zadani/AktualniZadani.html | 0 .../templates/tvorba}/zadani/Temata.html | 0 {seminar => tvorba}/urls.py | 2 +- {seminar => tvorba}/views/__init__.py | 0 {seminar => tvorba}/views/docasne.py | 0 {seminar => tvorba}/views/views_all.py | 38 ++-- various/admin.py | 5 + various/views/final.py | 4 +- 36 files changed, 215 insertions(+), 190 deletions(-) create mode 100644 tvorba/__init__.py create mode 100644 tvorba/admin.py create mode 100644 tvorba/apps.py create mode 100644 tvorba/migrations/__init__.py rename {seminar/templates/seminar => tvorba/templates/tvorba}/archiv/cisla.html (100%) rename {seminar/templates/seminar => tvorba/templates/tvorba}/archiv/cislo.html (100%) rename {seminar/templates/seminar => tvorba/templates/tvorba}/archiv/cislo_vysledkovka.tex (100%) rename {seminar/templates/seminar => tvorba/templates/tvorba}/archiv/odmeny.html (100%) rename {seminar/templates/seminar => tvorba/templates/tvorba}/archiv/prispevek.html (100%) rename {seminar/templates/seminar => tvorba/templates/tvorba}/archiv/problem.html (100%) rename {seminar/templates/seminar => tvorba/templates/tvorba}/archiv/problem_clanek.html (100%) rename {seminar/templates/seminar => tvorba/templates/tvorba}/archiv/problem_tema.html (100%) rename {seminar/templates/seminar => tvorba/templates/tvorba}/archiv/problem_uloha.html (100%) rename {seminar/templates/seminar => tvorba/templates/tvorba}/archiv/problem_uloha_tema.html (100%) rename {seminar/templates/seminar => tvorba/templates/tvorba}/archiv/rocnik.html (100%) rename {seminar/templates/seminar => tvorba/templates/tvorba}/archiv/rocnik_vysledkovka.tex (100%) rename {seminar/templates/seminar => tvorba/templates/tvorba}/archiv/temata.html (100%) rename {seminar/templates/seminar => tvorba/templates/tvorba}/archiv/tituly.tex (100%) rename {seminar/templates/seminar => tvorba/templates/tvorba}/clanky/organizatorske_clanky.html (100%) rename {seminar/templates/seminar => tvorba/templates/tvorba}/clanky/resitelske_clanky.html (100%) rename {seminar/templates/seminar => tvorba/templates/tvorba}/tematka/rozcestnik.html (100%) rename {seminar/templates/seminar => tvorba/templates/tvorba}/tematka/toaletak.html (100%) rename {seminar/templates/seminar => tvorba/templates/tvorba}/zadani/AktualniVysledkovka.html (100%) rename {seminar/templates/seminar => tvorba/templates/tvorba}/zadani/AktualniZadani.html (100%) rename {seminar/templates/seminar => tvorba/templates/tvorba}/zadani/Temata.html (100%) rename {seminar => tvorba}/urls.py (98%) rename {seminar => tvorba}/views/__init__.py (100%) rename {seminar => tvorba}/views/docasne.py (100%) rename {seminar => tvorba}/views/views_all.py (94%) diff --git a/api/tests/test_skola_autocomplete.py b/api/tests/test_skola_autocomplete.py index 36df97e8..f69669f0 100644 --- a/api/tests/test_skola_autocomplete.py +++ b/api/tests/test_skola_autocomplete.py @@ -1,7 +1,6 @@ from django.test import TestCase, tag from django.urls import reverse import seminar.models as m -import seminar.views as v from seminar.utils import sync_skoly @tag('stejny-model-na-produkci') diff --git a/mamweb/settings_common.py b/mamweb/settings_common.py index 30d5bedb..078c3d4d 100644 --- a/mamweb/settings_common.py +++ b/mamweb/settings_common.py @@ -131,6 +131,7 @@ INSTALLED_APPS = ( # MaMweb 'mamweb', 'seminar', + 'tvorba', 'galerie', 'korektury', 'prednasky', diff --git a/mamweb/urls.py b/mamweb/urls.py index 9d438d93..4152ae80 100644 --- a/mamweb/urls.py +++ b/mamweb/urls.py @@ -17,8 +17,8 @@ urlpatterns = [ path('admin/', admin.site.urls), # NOQA path('ckeditor/', include('ckeditor_uploader.urls')), - # Seminarova aplikace (ma vlastni podadresare) - path('', include('seminar.urls')), + # Tvorba = ročníky, čísla, problémy atd. (ma vlastni podadresare) + path('', include('tvorba.urls')), # Odevzdavatko (ma vlastni podadresare) path('', include('odevzdavatko.urls')), diff --git a/seminar/admin.py b/seminar/admin.py index f8768ddf..b806edab 100644 --- a/seminar/admin.py +++ b/seminar/admin.py @@ -1,173 +1,11 @@ from django.contrib import admin from django.db import models -from django.forms import widgets, ModelForm -from django.core.exceptions import ValidationError - -from polymorphic.admin import PolymorphicParentModelAdmin, PolymorphicChildModelAdmin, PolymorphicChildModelFilter -from solo.admin import SingletonModelAdmin -from django.utils.safestring import mark_safe +from django.forms import widgets # Todo: reversion import seminar.models as m -admin.site.register(m.Rocnik) -admin.site.register(m.ZmrazenaVysledkovka) - -@admin.register(m.Deadline) -class DeadlineAdmin(admin.ModelAdmin): - actions = ['pregeneruj_vysledkovku'] - - # Nikomu nezobrazovat, ale superuživatelům se může hodit :-) - @admin.action(permissions=['bazmek'], description= 'Přegeneruj výsledkovky vybraných deadlinů') - def pregeneruj_vysledkovku(self, req, qs): - for deadline in qs: - deadline.vygeneruj_vysledkovku() - - def has_bazmek_permission(self, request): - # Boilerplate: potřebujeme nějakou permission, protože nějaká haluz v Djangu… - return request.user.is_superuser - -class DeadlineAdminInline(admin.TabularInline): - model = m.Deadline - extra = 0 - -class CisloForm(ModelForm): - class Meta: - model = m.Cislo - fields = '__all__' - - def clean(self): - if self.cleaned_data.get('verejne_db') == False: - return self.cleaned_data - # cn = m.CisloNode.objects.get(cislo=self.instance) - # errors = [] - # for ch in tl.all_children(cn): - # if isinstance(ch, m.TemaVCisleNode): - # if ch.tema.stav not in \ - # (m.Problem.STAV_ZADANY, m.Problem.STAV_VYRESENY): - # errors.append(ValidationError('Téma %(tema)s není zadané ani vyřešené', params={'tema':ch.tema})) - # - # if isinstance(ch, m.UlohaZadaniNode) or isinstance(ch, m.UlohaVzorakNode): - # if ch.uloha.stav not in \ - # (m.Problem.STAV_ZADANY, m.Problem.STAV_VYRESENY): - # errors.append(ValidationError('Úloha %(uloha)s není zadaná ani vyřešená', params={'uloha':ch.uloha})) - # if isinstance(ch, m.ReseniNode): - # for problem in ch.reseni.problem_set: - # if problem not in \ - # (m.Problem.STAV_ZADANY, m.Problem.STAV_VYRESENY): - # errors.append(ValidationError('Problém %s není zadaný ani vyřešený', code=problem)) - # if errors: - # errors.append(ValidationError(mark_safe('Pokud chceš učinit všechny problémy, co nejsou zadané ani vyřešené, zadanými a číslo zveřejnit, můžeš to udělat pomocí akce v seznamu čísel'))) - # raise ValidationError(errors) - - errors = [] - for ch in m.Uloha.objects.filter(cislo_zadani=self.instance): - if ch.stav not in (m.Problem.STAV_ZADANY, m.Problem.STAV_VYRESENY): - errors.append( - ValidationError('Úloha %(uloha)s není zadaná ani vyřešená', params={'uloha': ch})) - if errors: - errors.append(ValidationError(mark_safe( - 'Pokud chceš učinit všechny problémy, co nejsou zadané ani vyřešené, zadanými a číslo zveřejnit, můžeš to udělat pomocí akce v seznamu čísel'))) - if self.cleaned_data.get('datum_vydani') == None: - self.add_error('datum_vydani','Číslo určené ke zveřejnění nemá nastavené datum vydání') - - if errors: - raise ValidationError(errors) - - return self.cleaned_data - - -@admin.register(m.Cislo) -class CisloAdmin(admin.ModelAdmin): - form = CisloForm - actions = ['force_publish', 'pregeneruj_vysledkovky'] - inlines = (DeadlineAdminInline,) - - def force_publish(self,request,queryset): - for cislo in queryset: - # cn = m.CisloNode.objects.get(cislo=cislo) - # for ch in tl.all_children(cn): - # if isinstance(ch, m.TemaVCisleNode): - # if ch.tema.stav not in (m.Problem.STAV_ZADANY, m.Problem.STAV_VYRESENY): - # ch.tema.stav = m.Problem.STAV_ZADANY - # ch.tema.save() - # - # if isinstance(ch, m.UlohaZadaniNode) or isinstance(ch, m.UlohaVzorakNode): - # if ch.uloha.stav not in (m.Problem.STAV_ZADANY, m.Problem.STAV_VYRESENY): - # ch.uloha.stav = m.Problem.STAV_ZADANY - # ch.uloha.save() - # if isinstance(ch, m.ReseniNode): - # for problem in ch.reseni.problem_set: - # if problem not in (m.Problem.STAV_ZADANY, m.Problem.STAV_VYRESENY): - # problem.stav = m.Problem.STAV_ZADANY - # problem.save() - - for ch in m.Uloha.objects.filter(cislo_zadani=cislo): - if ch.stav not in (m.Problem.STAV_ZADANY, m.Problem.STAV_VYRESENY): - ch.stav = m.Problem.STAV_ZADANY - ch.save() - - hp = ch.hlavni_problem - if hp.stav not in (m.Problem.STAV_ZADANY, m.Problem.STAV_VYRESENY): - hp.stav = m.Problem.STAV_ZADANY - hp.save() - - # TODO Řešení, vzoráky? - # TODO Konfera/Článek? - - cislo.verejne_db = True - cislo.save() - - force_publish.short_description = 'Zveřejnit vybraná čísla a všechny návrhy úloh v nich učinit zadanými' - - # Jen pro superuživatele - @admin.action(permissions=['bazmek'], description='Přegenerovat výsledkovky všech deadlinů vybraných čísel') - def pregeneruj_vysledkovky(self, req, qs): - for cislo in qs: - for deadline in cislo.deadline_v_cisle.all(): - deadline.vygeneruj_vysledkovku() - - def has_bazmek_permission(self, request): - # Boilerplate: potřebujeme nějakou permission, protože nějaká haluz v Djangu… - return request.user.is_superuser - - -@admin.register(m.Problem) -class ProblemAdmin(PolymorphicParentModelAdmin): - base_model = m.Problem - child_models = [ - m.Tema, - m.Clanek, - m.Uloha, - m.Konfera, - ] - # Pokud chceme orezavat na aktualni rocnik, musime do modelu pridat odkaz na rocnik. Zatim bere vse. - search_fields = ['nazev'] - -# V ProblemAdmin to nejde, protoze se to nepropise do deti -class ProblemAdminMixin(object): - show_in_index = True - autocomplete_fields = ['nadproblem','autor','garant'] - filter_horizontal = ['opravovatele'] - - -@admin.register(m.Tema) -class TemaAdmin(ProblemAdminMixin,PolymorphicChildModelAdmin): - base_model = m.Tema - -@admin.register(m.Clanek) -class ClanekAdmin(ProblemAdminMixin,PolymorphicChildModelAdmin): - base_model = m.Clanek - -@admin.register(m.Uloha) -class UlohaAdmin(ProblemAdminMixin,PolymorphicChildModelAdmin): - base_model = m.Uloha - -@admin.register(m.Konfera) -class KonferaAdmin(ProblemAdminMixin,PolymorphicChildModelAdmin): - base_model = m.Konfera - class TextAdminInline(admin.TabularInline): model = m.Text @@ -180,4 +18,3 @@ admin.site.register(m.Text) # admin.site.register(m.Pohadka) admin.site.register(m.Obrazek) -admin.site.register(m.Nastaveni, SingletonModelAdmin) diff --git a/treenode/templates/treenode/orphanage.html b/treenode/templates/treenode/orphanage.html index 53d4ed67..551ea544 100644 --- a/treenode/templates/treenode/orphanage.html +++ b/treenode/templates/treenode/orphanage.html @@ -1,4 +1,4 @@ -{% extends "seminar/archiv/base.html" %} +{% extends "tvorba/archiv/base.html" %} {% load static %} {% block custom_css %} diff --git a/tvorba/__init__.py b/tvorba/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tvorba/admin.py b/tvorba/admin.py new file mode 100644 index 00000000..817c16d3 --- /dev/null +++ b/tvorba/admin.py @@ -0,0 +1,177 @@ +from django.contrib import admin +from django.db import models +from django.forms import widgets, ModelForm +from django.core.exceptions import ValidationError + +from polymorphic.admin import PolymorphicParentModelAdmin, PolymorphicChildModelAdmin, PolymorphicChildModelFilter +from django.utils.safestring import mark_safe + +# Todo: reversion + +import soustredeni.models + +from seminar.models.tvorba import Rocnik, ZmrazenaVysledkovka, Deadline, Uloha, Problem, Tema, Clanek, Cislo + +admin.site.register(Rocnik) +admin.site.register(ZmrazenaVysledkovka) + +@admin.register(Deadline) +class DeadlineAdmin(admin.ModelAdmin): + actions = ['pregeneruj_vysledkovku'] + + # Nikomu nezobrazovat, ale superuživatelům se může hodit :-) + @admin.action(permissions=['bazmek'], description= 'Přegeneruj výsledkovky vybraných deadlinů') + def pregeneruj_vysledkovku(self, req, qs): + for deadline in qs: + deadline.vygeneruj_vysledkovku() + + def has_bazmek_permission(self, request): + # Boilerplate: potřebujeme nějakou permission, protože nějaká haluz v Djangu… + return request.user.is_superuser + + +class DeadlineAdminInline(admin.TabularInline): + model = Deadline + extra = 0 + + +class CisloForm(ModelForm): + class Meta: + model = Cislo + fields = '__all__' + + def clean(self): + if self.cleaned_data.get('verejne_db') == False: + return self.cleaned_data + # cn = CisloNode.objects.get(cislo=self.instance) + # errors = [] + # for ch in tl.all_children(cn): + # if isinstance(ch, TemaVCisleNode): + # if ch.tema.stav not in \ + # (Problem.STAV_ZADANY, Problem.STAV_VYRESENY): + # errors.append(ValidationError('Téma %(tema)s není zadané ani vyřešené', params={'tema':ch.tema})) + # + # if isinstance(ch, UlohaZadaniNode) or isinstance(ch, UlohaVzorakNode): + # if ch.uloha.stav not in \ + # (Problem.STAV_ZADANY, Problem.STAV_VYRESENY): + # errors.append(ValidationError('Úloha %(uloha)s není zadaná ani vyřešená', params={'uloha':ch.uloha})) + # if isinstance(ch, ReseniNode): + # for problem in ch.reseni.problem_set: + # if problem not in \ + # (Problem.STAV_ZADANY, Problem.STAV_VYRESENY): + # errors.append(ValidationError('Problém %s není zadaný ani vyřešený', code=problem)) + # if errors: + # errors.append(ValidationError(mark_safe('Pokud chceš učinit všechny problémy, co nejsou zadané ani vyřešené, zadanými a číslo zveřejnit, můžeš to udělat pomocí akce v seznamu čísel'))) + # raise ValidationError(errors) + + errors = [] + for ch in Uloha.objects.filter(cislo_zadani=self.instance): + if ch.stav not in (Problem.STAV_ZADANY, Problem.STAV_VYRESENY): + errors.append( + ValidationError('Úloha %(uloha)s není zadaná ani vyřešená', params={'uloha': ch})) + if errors: + errors.append(ValidationError(mark_safe( + 'Pokud chceš učinit všechny problémy, co nejsou zadané ani vyřešené, zadanými a číslo zveřejnit, můžeš to udělat pomocí akce v seznamu čísel'))) + if self.cleaned_data.get('datum_vydani') == None: + self.add_error('datum_vydani','Číslo určené ke zveřejnění nemá nastavené datum vydání') + + if errors: + raise ValidationError(errors) + + return self.cleaned_data + + +@admin.register(Cislo) +class CisloAdmin(admin.ModelAdmin): + form = CisloForm + actions = ['force_publish', 'pregeneruj_vysledkovky'] + inlines = (DeadlineAdminInline,) + + def force_publish(self,request,queryset): + for cislo in queryset: + # cn = CisloNode.objects.get(cislo=cislo) + # for ch in tl.all_children(cn): + # if isinstance(ch, TemaVCisleNode): + # if ch.tema.stav not in (Problem.STAV_ZADANY, Problem.STAV_VYRESENY): + # ch.tema.stav = Problem.STAV_ZADANY + # ch.tema.save() + # + # if isinstance(ch, UlohaZadaniNode) or isinstance(ch, UlohaVzorakNode): + # if ch.uloha.stav not in (Problem.STAV_ZADANY, Problem.STAV_VYRESENY): + # ch.uloha.stav = Problem.STAV_ZADANY + # ch.uloha.save() + # if isinstance(ch, ReseniNode): + # for problem in ch.reseni.problem_set: + # if problem not in (Problem.STAV_ZADANY, Problem.STAV_VYRESENY): + # problem.stav = Problem.STAV_ZADANY + # problem.save() + + for ch in Uloha.objects.filter(cislo_zadani=cislo): + if ch.stav not in (Problem.STAV_ZADANY, Problem.STAV_VYRESENY): + ch.stav = Problem.STAV_ZADANY + ch.save() + + hp = ch.hlavni_problem + if hp.stav not in (Problem.STAV_ZADANY, Problem.STAV_VYRESENY): + hp.stav = Problem.STAV_ZADANY + hp.save() + + # TODO Řešení, vzoráky? + # TODO Konfera/Článek? + + cislo.verejne_db = True + cislo.save() + + force_publish.short_description = 'Zveřejnit vybraná čísla a všechny návrhy úloh v nich učinit zadanými' + + # Jen pro superuživatele + @admin.action(permissions=['bazmek'], description='Přegenerovat výsledkovky všech deadlinů vybraných čísel') + def pregeneruj_vysledkovky(self, req, qs): + for cislo in qs: + for deadline in cislo.deadline_v_cisle.all(): + deadline.vygeneruj_vysledkovku() + + def has_bazmek_permission(self, request): + # Boilerplate: potřebujeme nějakou permission, protože nějaká haluz v Djangu… + return request.user.is_superuser + + +@admin.register(Problem) +class ProblemAdmin(PolymorphicParentModelAdmin): + base_model = Problem + child_models = [ + Tema, + Clanek, + Uloha, + soustredeni.models.Konfera, + ] + # Pokud chceme orezavat na aktualni rocnik, musime do modelu pridat odkaz na rocnik. Zatim bere vse. + search_fields = ['nazev'] + + +# V ProblemAdmin to nejde, protoze se to nepropise do deti +class ProblemAdminMixin(object): + show_in_index = True + autocomplete_fields = ['nadproblem','autor','garant'] + filter_horizontal = ['opravovatele'] + + +@admin.register(Tema) +class TemaAdmin(ProblemAdminMixin,PolymorphicChildModelAdmin): + base_model = Tema + + +@admin.register(Clanek) +class ClanekAdmin(ProblemAdminMixin,PolymorphicChildModelAdmin): + base_model = Clanek + + +@admin.register(Uloha) +class UlohaAdmin(ProblemAdminMixin,PolymorphicChildModelAdmin): + base_model = Uloha + + +@admin.register(soustredeni.models.Konfera) +class KonferaAdmin(ProblemAdminMixin,PolymorphicChildModelAdmin): + base_model = soustredeni.models.Konfera + diff --git a/tvorba/apps.py b/tvorba/apps.py new file mode 100644 index 00000000..b04cb04c --- /dev/null +++ b/tvorba/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class TvorbaConfig(AppConfig): + name = 'tvorba' + verbose_name = 'Tvorba' diff --git a/tvorba/migrations/__init__.py b/tvorba/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/seminar/templates/seminar/archiv/cisla.html b/tvorba/templates/tvorba/archiv/cisla.html similarity index 100% rename from seminar/templates/seminar/archiv/cisla.html rename to tvorba/templates/tvorba/archiv/cisla.html diff --git a/seminar/templates/seminar/archiv/cislo.html b/tvorba/templates/tvorba/archiv/cislo.html similarity index 100% rename from seminar/templates/seminar/archiv/cislo.html rename to tvorba/templates/tvorba/archiv/cislo.html diff --git a/seminar/templates/seminar/archiv/cislo_vysledkovka.tex b/tvorba/templates/tvorba/archiv/cislo_vysledkovka.tex similarity index 100% rename from seminar/templates/seminar/archiv/cislo_vysledkovka.tex rename to tvorba/templates/tvorba/archiv/cislo_vysledkovka.tex diff --git a/seminar/templates/seminar/archiv/odmeny.html b/tvorba/templates/tvorba/archiv/odmeny.html similarity index 100% rename from seminar/templates/seminar/archiv/odmeny.html rename to tvorba/templates/tvorba/archiv/odmeny.html diff --git a/seminar/templates/seminar/archiv/prispevek.html b/tvorba/templates/tvorba/archiv/prispevek.html similarity index 100% rename from seminar/templates/seminar/archiv/prispevek.html rename to tvorba/templates/tvorba/archiv/prispevek.html diff --git a/seminar/templates/seminar/archiv/problem.html b/tvorba/templates/tvorba/archiv/problem.html similarity index 100% rename from seminar/templates/seminar/archiv/problem.html rename to tvorba/templates/tvorba/archiv/problem.html diff --git a/seminar/templates/seminar/archiv/problem_clanek.html b/tvorba/templates/tvorba/archiv/problem_clanek.html similarity index 100% rename from seminar/templates/seminar/archiv/problem_clanek.html rename to tvorba/templates/tvorba/archiv/problem_clanek.html diff --git a/seminar/templates/seminar/archiv/problem_tema.html b/tvorba/templates/tvorba/archiv/problem_tema.html similarity index 100% rename from seminar/templates/seminar/archiv/problem_tema.html rename to tvorba/templates/tvorba/archiv/problem_tema.html diff --git a/seminar/templates/seminar/archiv/problem_uloha.html b/tvorba/templates/tvorba/archiv/problem_uloha.html similarity index 100% rename from seminar/templates/seminar/archiv/problem_uloha.html rename to tvorba/templates/tvorba/archiv/problem_uloha.html diff --git a/seminar/templates/seminar/archiv/problem_uloha_tema.html b/tvorba/templates/tvorba/archiv/problem_uloha_tema.html similarity index 100% rename from seminar/templates/seminar/archiv/problem_uloha_tema.html rename to tvorba/templates/tvorba/archiv/problem_uloha_tema.html diff --git a/seminar/templates/seminar/archiv/rocnik.html b/tvorba/templates/tvorba/archiv/rocnik.html similarity index 100% rename from seminar/templates/seminar/archiv/rocnik.html rename to tvorba/templates/tvorba/archiv/rocnik.html diff --git a/seminar/templates/seminar/archiv/rocnik_vysledkovka.tex b/tvorba/templates/tvorba/archiv/rocnik_vysledkovka.tex similarity index 100% rename from seminar/templates/seminar/archiv/rocnik_vysledkovka.tex rename to tvorba/templates/tvorba/archiv/rocnik_vysledkovka.tex diff --git a/seminar/templates/seminar/archiv/temata.html b/tvorba/templates/tvorba/archiv/temata.html similarity index 100% rename from seminar/templates/seminar/archiv/temata.html rename to tvorba/templates/tvorba/archiv/temata.html diff --git a/seminar/templates/seminar/archiv/tituly.tex b/tvorba/templates/tvorba/archiv/tituly.tex similarity index 100% rename from seminar/templates/seminar/archiv/tituly.tex rename to tvorba/templates/tvorba/archiv/tituly.tex diff --git a/seminar/templates/seminar/clanky/organizatorske_clanky.html b/tvorba/templates/tvorba/clanky/organizatorske_clanky.html similarity index 100% rename from seminar/templates/seminar/clanky/organizatorske_clanky.html rename to tvorba/templates/tvorba/clanky/organizatorske_clanky.html diff --git a/seminar/templates/seminar/clanky/resitelske_clanky.html b/tvorba/templates/tvorba/clanky/resitelske_clanky.html similarity index 100% rename from seminar/templates/seminar/clanky/resitelske_clanky.html rename to tvorba/templates/tvorba/clanky/resitelske_clanky.html diff --git a/seminar/templates/seminar/tematka/rozcestnik.html b/tvorba/templates/tvorba/tematka/rozcestnik.html similarity index 100% rename from seminar/templates/seminar/tematka/rozcestnik.html rename to tvorba/templates/tvorba/tematka/rozcestnik.html diff --git a/seminar/templates/seminar/tematka/toaletak.html b/tvorba/templates/tvorba/tematka/toaletak.html similarity index 100% rename from seminar/templates/seminar/tematka/toaletak.html rename to tvorba/templates/tvorba/tematka/toaletak.html diff --git a/seminar/templates/seminar/zadani/AktualniVysledkovka.html b/tvorba/templates/tvorba/zadani/AktualniVysledkovka.html similarity index 100% rename from seminar/templates/seminar/zadani/AktualniVysledkovka.html rename to tvorba/templates/tvorba/zadani/AktualniVysledkovka.html diff --git a/seminar/templates/seminar/zadani/AktualniZadani.html b/tvorba/templates/tvorba/zadani/AktualniZadani.html similarity index 100% rename from seminar/templates/seminar/zadani/AktualniZadani.html rename to tvorba/templates/tvorba/zadani/AktualniZadani.html diff --git a/seminar/templates/seminar/zadani/Temata.html b/tvorba/templates/tvorba/zadani/Temata.html similarity index 100% rename from seminar/templates/seminar/zadani/Temata.html rename to tvorba/templates/tvorba/zadani/Temata.html diff --git a/seminar/urls.py b/tvorba/urls.py similarity index 98% rename from seminar/urls.py rename to tvorba/urls.py index 275f64ba..b5ebed98 100644 --- a/seminar/urls.py +++ b/tvorba/urls.py @@ -1,6 +1,6 @@ from django.urls import path, include, re_path from . import views -from .utils import org_required +from seminar.utils import org_required urlpatterns = [ # path('aktualni/temata/', views.TemataRozcestnikView), diff --git a/seminar/views/__init__.py b/tvorba/views/__init__.py similarity index 100% rename from seminar/views/__init__.py rename to tvorba/views/__init__.py diff --git a/seminar/views/docasne.py b/tvorba/views/docasne.py similarity index 100% rename from seminar/views/docasne.py rename to tvorba/views/docasne.py diff --git a/seminar/views/views_all.py b/tvorba/views/views_all.py similarity index 94% rename from seminar/views/views_all.py rename to tvorba/views/views_all.py index 9f115687..ac8b5477 100644 --- a/seminar/views/views_all.py +++ b/tvorba/views/views_all.py @@ -82,7 +82,7 @@ def get_problemy_k_tematu(tema): #class AktualniZadaniView(generic.TemplateView): -# template_name = 'seminar/treenode.html' +# template_name = 'treenode/treenode.html' # TODO Co chceme vlastně zobrazovat na této stránce? Zatím je zde aktuální číslo, ale může tu být cokoli jiného... #class AktualniZadaniView(TreeNodeView): @@ -100,7 +100,7 @@ def get_problemy_k_tematu(tema): def AktualniZadaniView(request): nastaveni = get_object_or_404(Nastaveni) verejne = nastaveni.aktualni_cislo.verejne() - return render(request, 'seminar/zadani/AktualniZadani.html', + return render(request, 'tvorba/zadani/AktualniZadani.html', {'nastaveni': nastaveni, 'verejne': verejne, }, @@ -111,7 +111,7 @@ def ZadaniTemataView(request): verejne = nastaveni.aktualni_cislo.verejne() akt_rocnik = nastaveni.aktualni_cislo.rocnik temata = s.Tema.objects.filter(rocnik=akt_rocnik, stav='zadany') - return render(request, 'seminar/tematka/rozcestnik.html', + return render(request, 'tvorba/tematka/rozcestnik.html', { 'tematka': temata, 'verejne': verejne, @@ -126,7 +126,7 @@ def ZadaniTemataView(request): # t.prispevky = t.prispevek_set.filter(problem=t) # else: # t.prispevky = t.prispevek_set.filter(problem=t, zverejnit=True) -# return render(request, 'seminar/zadani/Temata.html', +# return render(request, 'tvorba/zadani/Temata.html', # { # 'temata': temata, # } @@ -145,7 +145,7 @@ def ZadaniTemataView(request): # if node.isinstance(node, s.PohadkaNode): # Mohu ignorovat, má pod sebou # pass # -# return render(request, 'seminar/tematka/toaletak.html', {}) +# return render(request, 'tvorba/tematka/toaletak.html', {}) # # #def TemataRozcestnikView(request): @@ -181,7 +181,7 @@ def ZadaniTemataView(request): # "obrazek": tematko_object.obrazek, # "cisla" : cisla # }) -# return render(request, 'seminar/tematka/rozcestnik.html', {"tematka": tematka, "rocnik" : nastaveni.aktualni_rocnik().rocnik}) +# return render(request, 'tvorba/tematka/rozcestnik.html', {"tematka": tematka, "rocnik" : nastaveni.aktualni_rocnik().rocnik}) # def ZadaniAktualniVysledkovkaView(request): @@ -205,7 +205,7 @@ def ZadaniAktualniVysledkovkaView(request): context['rocnik'] = rocnik return render( request, - 'seminar/zadani/AktualniVysledkovka.html', + 'tvorba/zadani/AktualniVysledkovka.html', context ) @@ -224,7 +224,7 @@ def aktualni_temata(rocnik): class ArchivView(generic.ListView): model = Rocnik - template_name='seminar/archiv/cisla.html' + template_name = 'tvorba/archiv/cisla.html' def get_context_data(self, **kwargs): context = super(ArchivView, self).get_context_data(**kwargs) @@ -252,7 +252,7 @@ class ArchivView(generic.ListView): class RocnikView(generic.DetailView): model = Rocnik - template_name = 'seminar/archiv/rocnik.html' + template_name = 'tvorba/archiv/rocnik.html' # Vlastni ziskavani objektu z databaze podle (Rocnik.rocnik) def get_object(self, queryset=None): @@ -292,7 +292,7 @@ def resiteleRocnikuCsvExportView(request, rocnik): # s.Clanek: "clanek", # } # context = super().get_context_data(**kwargs) -# return ['seminar/archiv/problem_' + spravne_templaty[context['object'].__class__] + '.html'] +# return ['tvorba/archiv/problem_' + spravne_templaty[context['object'].__class__] + '.html'] # # def get_context_data(self, **kwargs): # context = super().get_context_data(**kwargs) @@ -308,7 +308,7 @@ def resiteleRocnikuCsvExportView(request, rocnik): class CisloView(generic.DetailView): # FIXME zobrazování témátek a vůbec, teď je tam jen odkaz na číslo v pdf model = Cislo - template_name = 'seminar/archiv/cislo.html' + template_name = 'tvorba/archiv/cislo.html' # Vlastni ziskavani objektu z databaze podle (Rocnik.rocnik) def get_object(self, queryset=None): @@ -351,7 +351,7 @@ class CisloView(generic.DetailView): class ArchivTemataView(generic.ListView): model = Problem - template_name = 'seminar/archiv/temata.html' + template_name = 'tvorba/archiv/temata.html' queryset = Tema.objects.filter(stav=Problem.STAV_ZADANY).select_related('rocnik').order_by('rocnik', 'kod') def get_context_data(self, *args, **kwargs): @@ -362,7 +362,7 @@ class ArchivTemataView(generic.ListView): return ctx class OdmenyView(generic.TemplateView): - template_name = 'seminar/archiv/odmeny.html' + template_name = 'tvorba/archiv/odmeny.html' def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) @@ -408,7 +408,7 @@ class CisloVysledkovkaView(CisloView): """View vytvořené pro stránku zobrazující výsledkovku čísla v TeXu.""" model = Cislo - template_name = 'seminar/archiv/cislo_vysledkovka.tex' + template_name = 'tvorba/archiv/cislo_vysledkovka.tex' #content_type = 'application/x-tex; charset=UTF8' #umozni rovnou stahnout TeXovsky dokument content_type = 'text/plain; charset=UTF8' @@ -439,7 +439,7 @@ class PosledniCisloVysledkovkaView(generic.DetailView): """View vytvořené pro zobrazení výsledkovky posledního čísla v TeXu.""" model = Rocnik - template_name = 'seminar/archiv/cislo_vysledkovka.tex' + template_name = 'tvorba/archiv/cislo_vysledkovka.tex' content_type = 'text/plain; charset=UTF8' def get_object(self, queryset=None): @@ -473,7 +473,7 @@ class PosledniCisloVysledkovkaView(generic.DetailView): class RocnikVysledkovkaView(RocnikView): """ View vytvořené pro stránku zobrazující výsledkovku ročníku v TeXu.""" model = Rocnik - template_name = 'seminar/archiv/rocnik_vysledkovka.tex' + template_name = 'tvorba/archiv/rocnik_vysledkovka.tex' #content_type = 'application/x-tex; charset=UTF8' #umozni rovnou stahnout TeXovsky dokument content_type = 'text/plain; charset=UTF8' @@ -517,7 +517,7 @@ def TitulyView(request, rocnik, cislo): else: jmenovci = True - return render(request, 'seminar/archiv/tituly.tex', + return render(request, 'tvorba/archiv/tituly.tex', {'resitele': resitele,'jmenovci':jmenovci},content_type="text/plain") @@ -548,7 +548,7 @@ def group_by_rocnik(clanky): # FIXME: Původně tu byl kód přímo v těle třídy, což rozbíjelo migrace. Opravil jsem, ale vůbec nevím, jestli to funguje. class ClankyResitelView(generic.ListView): model = Problem - template_name = 'seminar/clanky/resitelske_clanky.html' + template_name = 'tvorba/clanky/resitelske_clanky.html' # FIXME: QuerySet není pole! def get_queryset(self): @@ -564,7 +564,7 @@ class ClankyResitelView(generic.ListView): # FIXME: pokud chceme orgoclanky, tak nejak zavest do modelu a podle toho odkomentovat a upravit #class ClankyOrganizatorView(generic.ListView): # model = Problem -# template_name = 'seminar/clanky/organizatorske_clanky.html' +# template_name = 'tvorba/clanky/organizatorske_clanky.html' # queryset = Problem.objects.filter(stav=Problem.STAV_ZADANY).select_related('cislo_zadani__rocnik').order_by('-cislo_zadani__rocnik__rocnik', 'kod') diff --git a/various/admin.py b/various/admin.py index 694323fa..cd7104c2 100644 --- a/various/admin.py +++ b/various/admin.py @@ -1 +1,6 @@ +from solo.admin import SingletonModelAdmin from django.contrib import admin + +from .models import Nastaveni + +admin.site.register(Nastaveni, SingletonModelAdmin) diff --git a/various/views/final.py b/various/views/final.py index a4c06f74..12a18250 100644 --- a/various/views/final.py +++ b/various/views/final.py @@ -11,7 +11,7 @@ from django.views import generic import novinky.views import seminar.utils -import seminar.views +import tvorba.views from personalni.models import Resitel from seminar import models as m @@ -34,7 +34,7 @@ class TitulniStranaView(generic.ListView): # Aktuální témata nazvy_a_odkazy_na_aktualni_temata = [] - akt_temata = seminar.views.aktualni_temata(nastaveni.aktualni_rocnik) + akt_temata = tvorba.views.aktualni_temata(nastaveni.aktualni_rocnik) for tema in akt_temata: # FIXME: netuším, jestli funguje tema.verejne_url(), nemáme testdata na témátka - je to asi url vzhledem k ročníku