diff --git a/mamweb/context_processors.py b/mamweb/context_processors.py new file mode 100644 index 00000000..ec6481df --- /dev/null +++ b/mamweb/context_processors.py @@ -0,0 +1,12 @@ + +from datetime import datetime, date + +def vzhled(request): + ''' Podle casu prida do templatu, zdali je nebo neni noc ''' + hodin = datetime.now().hour + if (hodin <= 6) or (hodin >= 20): + noc = True + else: + noc = False + return {'noc' : noc} + diff --git a/mamweb/middleware.py b/mamweb/middleware.py new file mode 100644 index 00000000..1bc0b4fa --- /dev/null +++ b/mamweb/middleware.py @@ -0,0 +1,36 @@ + +from django.http import HttpResponse +from datetime import datetime, date + +class vzhled: + + def process_request(self, request): + return None + + def process_view(self, request, view_func, view_args, view_kwargs): + #print "====== process_request ======" + #print view_func + #print view_args + #print view_kwargs + #print "=============================" + return None + + def process_template_response(self, request, response): + hodin = datetime.now().hour + if (hodin <= 6) or (hodin >= 14): # TODO 20 + response.context_data['noc'] = True + else: + response.context_data['noc'] = False + return response + + def process_response(self, request, response): + #hodin = datetime.now().hour + #if (hodin <= 6) or (hodin >= 14): # TODO 20 + #response.context_data['noc'] = True + #else: + #response.context_data['noc'] = False + return response + + + ##def process_exception(request, exception): + #pass diff --git a/mamweb/settings_common.py b/mamweb/settings_common.py index a46085cf..345bbc3b 100644 --- a/mamweb/settings_common.py +++ b/mamweb/settings_common.py @@ -78,6 +78,7 @@ TEMPLATE_CONTEXT_PROCESSORS = ( 'django.core.context_processors.tz', 'sekizai.context_processors.sekizai', 'django.core.context_processors.static', + 'mamweb.context_processors.vzhled', ) INSTALLED_APPS = ( diff --git a/mamweb/settings_test.py b/mamweb/settings_test.py index f18a419f..cf4c593f 100644 --- a/mamweb/settings_test.py +++ b/mamweb/settings_test.py @@ -25,11 +25,11 @@ INSTALLED_APPS += ( SECRET_KEY = ')^u=i65*zmr_k53a*@f4q_+ji^o@!pgpef*5&8c7zzv9l+zo)n' # SECURITY WARNING: don't run with debug turned on in production! -DEBUG = True +DEBUG = False -TEMPLATE_DEBUG = True +TEMPLATE_DEBUG = False -ALLOWED_HOSTS = ['*.mam.mff.cuni.cz'] +ALLOWED_HOSTS = ['*.mam.mff.cuni.cz', 'atrey.karlin.mff.cuni.cz', 'mam.mff.cuni.cz'] # Database # https://docs.djangoproject.com/en/1.7/ref/settings/#databases @@ -45,6 +45,14 @@ DATABASES = { }, } +import os + +SERVER_EMAIL = 'mamweb-test-errors@mam.mff.cuni.cz' +ADMINS = [ + ('Petr Pecha', 'nejlepsitextovyeditorjevim@gmail.com'), +] + + diff --git a/mamweb/static/css/mamweb.css b/mamweb/static/css/mamweb.css index 73adcb29..2d0a283f 100644 --- a/mamweb/static/css/mamweb.css +++ b/mamweb/static/css/mamweb.css @@ -58,16 +58,24 @@ h2 { #header { position: relative; font-size: 250%; - background: url("../images/header-bg-uvod.png") no-repeat center top; + background: url("../images/header-bg-uvod.jpg") no-repeat center top; height: 255px; top: -1px; } -#header.cojemam { background-image: url("../images/header-bg-uvod.png"); } -#header.soustredeni { background-image: url("../images/header-bg-soustredeni.png"); } -#header.zadani { background-image: url("../images/header-bg-zadani.png"); } -#header.clanky { background-image: url("../images/header-bg-clanek.png"); } -#header.archiv { background-image: url("../images/header-bg-archiv.png"); } + +#header.cojemam { background-image: url("../images/header-bg-uvod.jpg"); } +#header.soustredeni { background-image: url("../images/header-bg-soustredeni.jpg"); } +#header.zadani { background-image: url("../images/header-bg-zadani.jpg"); } +#header.clanky { background-image: url("../images/header-bg-clanek.jpg"); } +#header.archiv { background-image: url("../images/header-bg-archiv.jpg"); } + +#header.NOC {background-image: url("../images/header-bg-uvod-NOC.jpg"); } +#header.NOCcojemam { background-image: url("../images/header-bg-uvod-NOC.jpg"); } +#header.NOCsoustredeni { background-image: url("../images/header-bg-soustredeni-NOC.jpg"); } +#header.NOCzadani { background-image: url("../images/header-bg-zadani-NOC.jpg"); } +#header.NOCclanky { background-image: url("../images/header-bg-clanek-NOC.jpg"); } +#header.NOCarchiv { background-image: url("../images/header-bg-archiv-NOC.jpg"); } #header img.logo { position: absolute; diff --git a/mamweb/static/images/header-bg-archiv-NOC.jpg b/mamweb/static/images/header-bg-archiv-NOC.jpg new file mode 100644 index 00000000..d3732d92 Binary files /dev/null and b/mamweb/static/images/header-bg-archiv-NOC.jpg differ diff --git a/mamweb/static/images/header-bg-archiv.jpg b/mamweb/static/images/header-bg-archiv.jpg new file mode 100644 index 00000000..6f00a321 Binary files /dev/null and b/mamweb/static/images/header-bg-archiv.jpg differ diff --git a/mamweb/static/images/header-bg-archiv.png b/mamweb/static/images/header-bg-archiv.png deleted file mode 100644 index 32870431..00000000 Binary files a/mamweb/static/images/header-bg-archiv.png and /dev/null differ diff --git a/mamweb/static/images/header-bg-clanek-NOC.jpg b/mamweb/static/images/header-bg-clanek-NOC.jpg new file mode 100644 index 00000000..6c21cf02 Binary files /dev/null and b/mamweb/static/images/header-bg-clanek-NOC.jpg differ diff --git a/mamweb/static/images/header-bg-clanek.jpg b/mamweb/static/images/header-bg-clanek.jpg new file mode 100644 index 00000000..29077929 Binary files /dev/null and b/mamweb/static/images/header-bg-clanek.jpg differ diff --git a/mamweb/static/images/header-bg-clanek.png b/mamweb/static/images/header-bg-clanek.png deleted file mode 100644 index 95576fe6..00000000 Binary files a/mamweb/static/images/header-bg-clanek.png and /dev/null differ diff --git a/mamweb/static/images/header-bg-odevzdat-NOC.jpg b/mamweb/static/images/header-bg-odevzdat-NOC.jpg new file mode 100644 index 00000000..3697993b Binary files /dev/null and b/mamweb/static/images/header-bg-odevzdat-NOC.jpg differ diff --git a/mamweb/static/images/header-bg-soustredeni-NOC.jpg b/mamweb/static/images/header-bg-soustredeni-NOC.jpg new file mode 100644 index 00000000..f950069c Binary files /dev/null and b/mamweb/static/images/header-bg-soustredeni-NOC.jpg differ diff --git a/mamweb/static/images/header-bg-soustredeni.jpg b/mamweb/static/images/header-bg-soustredeni.jpg new file mode 100644 index 00000000..a4f4121f Binary files /dev/null and b/mamweb/static/images/header-bg-soustredeni.jpg differ diff --git a/mamweb/static/images/header-bg-soustredeni.png b/mamweb/static/images/header-bg-soustredeni.png deleted file mode 100644 index 00df5e42..00000000 Binary files a/mamweb/static/images/header-bg-soustredeni.png and /dev/null differ diff --git a/mamweb/static/images/header-bg-uvod-NOC.jpg b/mamweb/static/images/header-bg-uvod-NOC.jpg new file mode 100644 index 00000000..6963bf83 Binary files /dev/null and b/mamweb/static/images/header-bg-uvod-NOC.jpg differ diff --git a/mamweb/static/images/header-bg-uvod.jpg b/mamweb/static/images/header-bg-uvod.jpg new file mode 100644 index 00000000..0236ce5e Binary files /dev/null and b/mamweb/static/images/header-bg-uvod.jpg differ diff --git a/mamweb/static/images/header-bg-uvod.png b/mamweb/static/images/header-bg-uvod.png deleted file mode 100644 index 532d9941..00000000 Binary files a/mamweb/static/images/header-bg-uvod.png and /dev/null differ diff --git a/mamweb/static/images/header-bg-zadani-NOC.jpg b/mamweb/static/images/header-bg-zadani-NOC.jpg new file mode 100644 index 00000000..fa2c27b3 Binary files /dev/null and b/mamweb/static/images/header-bg-zadani-NOC.jpg differ diff --git a/mamweb/static/images/header-bg-zadani.jpg b/mamweb/static/images/header-bg-zadani.jpg new file mode 100644 index 00000000..e06a3d02 Binary files /dev/null and b/mamweb/static/images/header-bg-zadani.jpg differ diff --git a/mamweb/static/images/header-bg-zadani.png b/mamweb/static/images/header-bg-zadani.png deleted file mode 100644 index 291c46bb..00000000 Binary files a/mamweb/static/images/header-bg-zadani.png and /dev/null differ diff --git a/mamweb/static/images/header-bg.jpg b/mamweb/static/images/header-bg.jpg new file mode 100644 index 00000000..b6e22870 Binary files /dev/null and b/mamweb/static/images/header-bg.jpg differ diff --git a/mamweb/static/images/header-bg.png b/mamweb/static/images/header-bg.png deleted file mode 100644 index eeb35d6b..00000000 Binary files a/mamweb/static/images/header-bg.png and /dev/null differ diff --git a/mamweb/templates/400.html b/mamweb/templates/400.html new file mode 100644 index 00000000..6c1c7b93 --- /dev/null +++ b/mamweb/templates/400.html @@ -0,0 +1,19 @@ +{% extends "base.html" %} + +{% load staticfiles %} + +{% block content %} +

+ {% block nadpis1a %}{% block nadpis1b %} + O-jo-jo-jo-joj + {% endblock %}{% endblock %} +

+ +

+ Chybička se vloudila. + Zkuste přejít na titulní stránku + nebo se podívat na aktuální zadání. +

+ +{% endblock %} + diff --git a/mamweb/templates/403.html b/mamweb/templates/403.html new file mode 100644 index 00000000..873f599e --- /dev/null +++ b/mamweb/templates/403.html @@ -0,0 +1,19 @@ +{% extends "base.html" %} + +{% load staticfiles %} + +{% block content %} +

+ {% block nadpis1a %}{% block nadpis1b %} + Vrrrrrrrrr + {% endblock %}{% endblock %} +

+ +

+ Tady pravděpodobně nemáte co dělat. + Zkuste přejít na titulní stránku + nebo se podívat na aktuální zadání. +

+ +{% endblock %} + diff --git a/mamweb/templates/base.html b/mamweb/templates/base.html index 6073ac99..a97d5168 100644 --- a/mamweb/templates/base.html +++ b/mamweb/templates/base.html @@ -48,7 +48,7 @@
- diff --git a/seminar/templates/seminar/cojemam/organizatori.html b/seminar/templates/seminar/cojemam/organizatori.html index 12f3a506..0111cd20 100644 --- a/seminar/templates/seminar/cojemam/organizatori.html +++ b/seminar/templates/seminar/cojemam/organizatori.html @@ -53,7 +53,7 @@ Aktivní v letech {{org.organizuje_od_roku | default:"?" }}–{{org.organizuje_do_roku | default:"?" }} {% endif %} {% if org.studuje %} -
  • Studuje: {{org.studuje}} +
  • {{org.studuje}} {% endif %} {% if org.user.email %}
  • Pošta: diff --git a/seminar/templates/seminar/vysledkovka_rocnik.html b/seminar/templates/seminar/vysledkovka_rocnik.html new file mode 100644 index 00000000..91e1d8ca --- /dev/null +++ b/seminar/templates/seminar/vysledkovka_rocnik.html @@ -0,0 +1,31 @@ + + + + +{% endfor %} +
    # + Jméno + R. + Odjakživa + {% for c in rocnik.verejna_cisla %} + {% if c.verejna_vysledkovka %} + + {{c.rocnik.rocnik}}.{{ c.cislo }} + {% endif %} + {% endfor %} + Celkem + +{% for rv in vysledkovka %} +
    {% autoescape off %}{{ rv.poradi }}{% endautoescape %} + + {% if rv.titul %} + {{ rv.titul }}MM + {% endif %} + {{ rv.resitel.plne_jmeno }} + {{ rv.resitel.rocnik }} + {{ rv.body_odjakziva }} + {% for b in rv.body_cisla %} + {{ b }} + {% endfor %} + {{ rv.body_rocnik }} +
    diff --git a/seminar/templates/seminar/zadani/AktualniVysledkovka.html b/seminar/templates/seminar/zadani/AktualniVysledkovka.html new file mode 100644 index 00000000..e541141c --- /dev/null +++ b/seminar/templates/seminar/zadani/AktualniVysledkovka.html @@ -0,0 +1,19 @@ +{% extends "seminar/zadani/base.html" %} + +{% block submenu %} + {% with "vysledkova-listina" as selected %} + {% include 'seminar/zadani/submenu.html' %} + {% endwith %} +{% endblock submenu %} + + +{% block content %} +{% with nastaveni.aktualni_rocnik as rocnik %} +

    Výsledky

    + {% if vysledkovka %} + {% include "seminar/vysledkovka_rocnik.html" %} + {% else %} + V tomto ročníku zatím žádné výsledky nejsou + {% endif %} +{% endwith %} +{% endblock content %} diff --git a/seminar/templates/seminar/zadani/AktualniZadani.html b/seminar/templates/seminar/zadani/AktualniZadani.html index ffca40bf..ff6c3cd3 100644 --- a/seminar/templates/seminar/zadani/AktualniZadani.html +++ b/seminar/templates/seminar/zadani/AktualniZadani.html @@ -18,8 +18,6 @@ {% if ac.zadane_problemy.all %}
    Termín odeslání {{ac.cislo}}. série: {{ac.datum_deadline}} -
    - Termín odeslání 1. série pro účast na soustředění: 21. září 2015
    {% endif %} {#TODO a co speciální deadline pro účast na soustředění? #} diff --git a/seminar/urls.py b/seminar/urls.py index 1af3d42a..be4947c6 100644 --- a/seminar/urls.py +++ b/seminar/urls.py @@ -19,6 +19,7 @@ urlpatterns = patterns('', url(r'^zadani/aktualni/$', views.AktualniZadaniView, name='seminar_aktualni_zadani'), url(r'^zadani/temata/$', views.ZadaniTemataView, name='seminar_temata'), + url(r'^zadani/vysledkova-listina/$', views.ZadaniAktualniVysledkovkaView, name='seminar_vysledky'), url(r'^$', views.TitulniStranaView.as_view(), name='titulni_strana'), url(r'^stare-novinky/$', views.StareNovinkyView.as_view(), name='stare_novinky'), diff --git a/seminar/views.py b/seminar/views.py index 955668e4..46dc0c1d 100644 --- a/seminar/views.py +++ b/seminar/views.py @@ -15,17 +15,22 @@ from datetime import timedelta, date, datetime from itertools import groupby +def verejna_temata(rocnik): + """Vrací queryset zveřejněných témat v daném ročníku. + """ + return Problem.objects.filter(typ=Problem.TYP_TEMA, cislo_zadani__rocnik=rocnik, cislo_zadani__verejne_db=True).order_by('kod') + + def AktualniZadaniView(request): nastaveni = get_object_or_404(Nastaveni) problemy = Problem.objects.filter(cislo_zadani=nastaveni.aktualni_cislo).filter(stav = 'zadany') ulohy = problemy.filter(typ = 'uloha').order_by('kod') serialy = problemy.filter(typ = 'serial').order_by('kod') - temata = problemy.filter(typ = 'tema').order_by('kod') jednorazove_problemy = [ulohy, serialy] return render(request, 'seminar/zadani/AktualniZadani.html', {'nastaveni': nastaveni, 'jednorazove_problemy': jednorazove_problemy, - 'temata': temata, + 'temata': verejna_temata(nastaveni.aktualni_rocnik), }, ) @@ -33,10 +38,21 @@ def ZadaniTemataView(request): nastaveni = get_object_or_404(Nastaveni) return render(request, 'seminar/zadani/Temata.html', { - 'temata': Problem.objects.filter(typ=Problem.TYP_TEMA, stav=Problem.STAV_ZADANY, cislo_zadani__rocnik=nastaveni.aktualni_rocnik).order_by('kod'), + 'temata': verejna_temata(nastaveni.aktualni_rocnik) + } + ) + +def ZadaniAktualniVysledkovkaView(request): + nastaveni = get_object_or_404(Nastaveni) + vysledkovka = vysledkovka_rocniku(nastaveni.aktualni_rocnik) + return render(request, 'seminar/zadani/AktualniVysledkovka.html', + { + 'nastaveni': nastaveni, + 'vysledkovka': vysledkovka, } ) + ### Titulni strana class TitulniStranaView(generic.ListView): @@ -110,6 +126,53 @@ def sloupec_s_poradim(vysledky): return poradi_l +def vysledkovka_rocniku(rocnik): + """Přebírá ročník (např. context["rocnik"]) a vrací výsledkovou listinu ve + formě vhodné pro šablonu "seminar/vysledkovka_rocniku.html" + """ + + #vyberu vsechny verejne vysledky z rocniku + cisla_v_rocniku = VysledkyKCisluZaRocnik.objects.filter(cislo__verejna_vysledkovka=True, cislo__rocnik=rocnik).order_by('cislo') + + #pokud žádné nejsou, výsledkovka se nezobrazí + if not cisla_v_rocniku: + return None + + #vybere vsechny vysledky z posledniho verejneho cisla a setridi sestupne dle bodu + vysledky = list(cisla_v_rocniku.filter(cislo = cisla_v_rocniku[0].cislo).order_by('-body', 'resitel__prijmeni', 'resitel__jmeno').select_related('resitel')) + + vysledkovka = [] + + # doplníme některé údaje do řádků výsledkovky pro řešitele ve skupině + for poradi, v in zip(sloupec_s_poradim(vysledky), vysledky): + v.poradi = poradi + v.resitel.rocnik = v.resitel.rocnik(rocnik) + + verejne_vysl_odjakziva = VysledkyKCisluOdjakziva.objects.filter(cislo__verejna_vysledkovka=True, cislo__rocnik=rocnik, cislo=cisla_v_rocniku[0].cislo) + + v.body_odjakziva = verejne_vysl_odjakziva.filter(resitel = v.resitel)[0].body + v.titul = v.resitel.get_titul(v.body_odjakziva) + v.body_rocnik = v.body + v.body_cisla = [] + + #pokud pro dany rok a cislo nema resitel vysledky, ma defaultne 0 + for cis in rocnik.verejna_cisla(): + if cis.verejna_vysledkovka: + #seznam vysledku se spravnym rocnikem a cislem pro resitele + #zobrazim jen je-li vysledkovka verejna + body_za_cislo = VysledkyZaCislo.objects.filter(cislo__rocnik=rocnik).filter(cislo = cis).filter(resitel = v.resitel) + if body_za_cislo: + #neprazdne vysledky by mely obsahovat prave jeden vysledek + v.body_cisla.append(body_za_cislo[0].body) + else: + #resitel nema za cislo body + v.body_cisla.append(0) + + vysledkovka.append(v) + + return vysledkovka + + class RocnikView(generic.DetailView): model = Rocnik template_name = 'seminar/archiv/rocnik.html' @@ -131,46 +194,8 @@ class RocnikView(generic.DetailView): def get_context_data(self, **kwargs): context = super(RocnikView, self).get_context_data(**kwargs) - cisla_v_rocniku = VysledkyKCisluZaRocnik.objects.filter(cislo__verejna_vysledkovka = True).filter(cislo__rocnik = context['rocnik']).order_by('cislo') - #vyberu vsechny verejne vysledky z rocniku - #pokud žádné nejsou, výsledkovka se nezobrazí - if cisla_v_rocniku: - vysledky = list(cisla_v_rocniku.filter(cislo = cisla_v_rocniku[0].cislo).order_by('-body', 'resitel__prijmeni', 'resitel__jmeno').select_related('resitel')) - #vybere vsechny vysledky z posledniho verejneho cisla a setridi sestupne dle bodu - vysledkovka = [] - - # doplníme některé údaje do řádků výsledkovky pro řešitele ve skupině - for poradi, v in zip(sloupec_s_poradim(vysledky), vysledky): - v.poradi = poradi - v.resitel.rocnik = v.resitel.rocnik(context['rocnik']) - - verejne_vysl_odjakziva = VysledkyKCisluOdjakziva.objects.filter(cislo__verejna_vysledkovka = True).filter(cislo__rocnik = context['rocnik']).filter(cislo = cisla_v_rocniku[0].cislo) - - v.body_odjakziva = verejne_vysl_odjakziva.filter(resitel = v.resitel)[0].body - v.titul = v.resitel.get_titul(v.body_odjakziva) - v.body_rocnik = v.body - v.body_cisla = [] - - #pokud pro dany rok a cislo nema resitel vysledky, ma defaultne 0 - for cis in context['rocnik'].verejna_cisla(): - if cis.verejna_vysledkovka: - body_za_cislo = VysledkyZaCislo.objects.filter(cislo__rocnik = context['rocnik']).filter(cislo = cis).filter(resitel = v.resitel) - #seznam vysledku se spravnym rocnikem a cislem pro resitele - #zobrazim jen je-li vysledkovka verejna - if body_za_cislo: - v.body_cisla.append(body_za_cislo[0].body) - #neprazdne vysledky by mely obsahovat prave jeden vysledek - else: - v.body_cisla.append(0) - #resitel nema za cislo body - - vysledkovka.append(v) - - - context['vysledkovka'] = vysledkovka - - temata_v_rocniku = Problem.objects.filter(typ=Problem.TYP_TEMA, cislo_zadani__rocnik=context['rocnik']).order_by('kod') - context['temata_v_rocniku'] = temata_v_rocniku + context['vysledkovka'] = vysledkovka_rocniku(context["rocnik"]) + context['temata_v_rocniku'] = verejna_temata(context["rocnik"]) return context