Browse Source

Merge branch 'data_migrations' into test

middleware_test
Pavel "LEdoian" Turinsky 4 years ago
parent
commit
275cdb18dd
  1. 2
      mamweb/settings_common.py
  2. 42
      mamweb/templates/base.html
  3. 5
      seminar/templates/seminar/odevzdavatko/detail.html
  4. 2
      seminar/templates/seminar/registrace/password_reset_email.html
  5. 25
      seminar/templatetags/deadliny.py
  6. 14
      seminar/utils.py
  7. 0
      various/__init__.py
  8. 3
      various/admin.py
  9. 5
      various/apps.py
  10. 14
      various/context_processors.py
  11. 0
      various/migrations/__init__.py
  12. 3
      various/models.py
  13. 3
      various/tests.py
  14. 3
      various/views.py

2
mamweb/settings_common.py

@ -78,6 +78,7 @@ TEMPLATES = [
'django.contrib.messages.context_processors.messages',
'sekizai.context_processors.sekizai',
'header_fotky.context_processors.vzhled',
'various.context_processors.april',
)
},
},
@ -132,6 +133,7 @@ INSTALLED_APPS = (
'korektury',
'prednasky',
'header_fotky',
'various',
# Admin upravy:

42
mamweb/templates/base.html

@ -131,6 +131,48 @@
$("a[rel^='gallery-image']").prettyPhoto(prettyparams);
});
</script>
{% if april == 2021 %}
<script type="text/javascript" charset="utf-8">
function rotace(vektor, uhel_deg) {
var uhel = uhel_deg *(Math.PI / 180);
var x = vektor[0];
var y = vektor[1];
return [x*Math.cos(uhel) - y*Math.sin(uhel), x*Math.sin(uhel) + y*Math.cos(uhel)];
}
function rotace_a_posun(obj, uhel) {
var ow = obj.width();
var oh = obj.height();
var rohy = [[0,0], [0,oh], [ow, 0], [ow, oh]];
var minx = 0;
var miny = 0;
for (var roh of rohy) {
var otoceny = rotace(roh, uhel);
if (otoceny[0] < minx) {
minx = otoceny[0];
}
if (otoceny[1] < miny) {
miny = otoceny[1];
}
}
miny *= -1;
minx *= -1;
var transf_str = "translateX("+minx+"px) translateY("+miny+"px) rotate("+uhel+"deg)";
obj.css('transform-origin', 'top left');
obj.css('transform', transf_str);
}
function randomUhel() {
return Math.floor(360*Math.random());
}
$('.container').css('margin', 0);
rotace_a_posun($('.container'), randomUhel());
</script>
{% endif %}
{% render_block "js" %}
</body>
</html>

5
seminar/templates/seminar/odevzdavatko/detail.html

@ -1,5 +1,6 @@
{% extends "base.html" %}
{% load static %}
{% load deadliny %}
{% block content %}
@ -62,7 +63,9 @@ $(document).ready(function(){
<p>Řešitelé: {{ object.resitele.all | join:", " }}</p>
{# https://docs.djangoproject.com/en/3.1/ref/models/instances/#django.db.models.Model.get_FOO_display #}
<p>Forma: {{ object.get_forma_display }}, doručeno {{ object.cas_doruceni }}</p>
<p>Forma: {{ object.get_forma_display }}</p>
<p>Doručeno {{ object.cas_doruceni }}, deadline: {{object.cas_doruceni | deadline_html }}</p>
{# Soubory: #}
<h3>Přílohy:</h3>

2
seminar/templates/seminar/registrace/password_reset_email.html

@ -4,5 +4,5 @@ Obdrželi jsme od Tebe žádost o obnovu hesla uživatele {{ user }} na webu M&M
Pro zadání nového hesla přejdi na následující stránku:
{{ protocol}}://{{ domain }}{% url 'password_reset_confirm' uidb64=uid token=token %}
S pozdravem,
S pozdravem
organizátoři M&M

25
seminar/templatetags/deadliny.py

@ -0,0 +1,25 @@
from django import template
from django.utils.safestring import mark_safe
from seminar.utils import TypDeadline, deadline
register = template.Library()
@register.filter(name='deadline')
def deadline_text(datum):
typ, cislo, dl = deadline(datum)
strings = {
TypDeadline.PredDeadline: f"1. deadline čísla {cislo} ({dl})",
TypDeadline.SousDeadline: f"Soustřeďkový deadline čísla {cislo} ({dl})",
TypDeadline.FinalDeadline: f"Finální deadline čísla {cislo} ({dl})",
}
return strings[typ]
@register.filter(name='deadline_html')
def deadline_html(datum):
typ, _, _ = deadline(datum)
text = deadline_text(datum)
classes = {
TypDeadline.PredDeadline: 'preddeadline',
TypDeadline.SousDeadline: 'sous_deadline',
TypDeadline.FinalDeadline: 'final_deadline',
}
return mark_safe(f'<span class="{classes[typ]}">{text}</span>')

14
seminar/utils.py

@ -309,7 +309,7 @@ def deadline_v_rocniku(datum, rocnik):
deadliny.append((TypDeadline.FinalDeadline, c, c.datum_deadline))
deadliny = sorted(deadliny, key=lambda x: x[2]) # podle data
for dl in deadliny:
if datum <= dl:
if datum <= dl[2]:
# První takový deadline je ten nejtěsnější
return dl
@ -319,20 +319,22 @@ def deadline(datum):
Vrací trojici (TypDeadline, Cislo, datumDeadline: date).
"""
if isinstance(datum, datetime.datetime):
datum = datum.date()
rok = datum.year
# Dva ročníky podezřelé z obsahování dat
pozdejsi_rocnik = m.Rocnik.filter(prvni_rok=rok)
drivejsi_rocnik = m.Rocnik.filter(druhy_rok=rok)
if any(
pozdejsi_rocnik = m.Rocnik.objects.filter(prvni_rok=rok)
drivejsi_rocnik = m.Rocnik.objects.filter(prvni_rok=rok-1)
if any([
pozdejsi_rocnik.count() > 1,
drivejsi_rocnik.count() > 1,
):
]):
raise ValueError(f"Více ročníků začíná/končí stejným rokem: {rok}")
pozdejsi_rocnik = pozdejsi_rocnik.first() if pozdejsi_rocnik.count() > 0 else None
drivejsi_rocnik = drivejsi_rocnik.first() if drivejsi_rocnik.count() > 0 else None
# Předpokládáme, že neexistuje číslo, které má deadline ale nemá finální deadline.
posledni_deadline_drivejsiho_rocniku = m.Cislo.objects.get(rocnik=drivejsi_rocnik, datum_deadline__isnull=False).datum_deadline
posledni_deadline_drivejsiho_rocniku = m.Cislo.objects.filter(rocnik=drivejsi_rocnik, datum_deadline__isnull=False).last().datum_deadline
if datum <= posledni_deadline_drivejsiho_rocniku:
return deadline_v_rocniku(datum, drivejsi_rocnik)

0
various/__init__.py

3
various/admin.py

@ -0,0 +1,3 @@
from django.contrib import admin
# Register your models here.

5
various/apps.py

@ -0,0 +1,5 @@
from django.apps import AppConfig
class VariousConfig(AppConfig):
name = 'various'

14
various/context_processors.py

@ -0,0 +1,14 @@
def april(req):
if 'X-April' in req.headers:
try:
year = int(req.headers['X-April'])
return {'april': year}
except:
pass # Fall-back to regular behaviour
import datetime
today = datetime.date.today()
if today.day == 1 and today.month == 4:
return {'april': today.year}
return {}

0
various/migrations/__init__.py

3
various/models.py

@ -0,0 +1,3 @@
from django.db import models
# Create your models here.

3
various/tests.py

@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

3
various/views.py

@ -0,0 +1,3 @@
from django.shortcuts import render
# Create your views here.
Loading…
Cancel
Save