Browse Source

Merge branch 'develop' into test

okenkove_obalky
Jonas Havelka 2 years ago
parent
commit
d7ef2e8044
  1. 2
      personalni/forms.py
  2. 9
      personalni/templates/personalni/udaje/prihlaska.html
  3. 4
      personalni/views.py
  4. 18
      seminar/migrations/0102_osoba_jak_se_dozvedeli.py
  5. 2
      seminar/models/personalni.py
  6. 29
      seminar/views/docasne.py
  7. 2
      various/autentizace/templates/autentizace/login.html

2
personalni/forms.py

@ -70,6 +70,8 @@ class PrihlaskaForm(PasswordResetForm):
zasilat = forms.ChoiceField(label='Kam zasílat čísla a řešení',choices = Resitel.ZASILAT_CHOICES, required=True) zasilat = forms.ChoiceField(label='Kam zasílat čísla a řešení',choices = Resitel.ZASILAT_CHOICES, required=True)
zasilat_cislo_emailem = forms.BooleanField(label='Chci dostávat e-mailem upozornění na vydání nového čísla', required=False) zasilat_cislo_emailem = forms.BooleanField(label='Chci dostávat e-mailem upozornění na vydání nového čísla', required=False)
jak_se_dozvedeli = forms.CharField(widget=forms.Textarea({"rows": 3, "cols": 20}), label='Jak ses o M&M dozvěděl(a)?', required=False)
gdpr = forms.BooleanField(label='Souhlasím se zpracováním osobních údajů', required=True) gdpr = forms.BooleanField(label='Souhlasím se zpracováním osobních údajů', required=True)
spam = forms.BooleanField(label='Souhlasím se zasíláním materiálů od MFF UK', required=False) spam = forms.BooleanField(label='Souhlasím se zasíláním materiálů od MFF UK', required=False)

9
personalni/templates/personalni/udaje/prihlaska.html

@ -112,6 +112,15 @@
<hr> <hr>
<h4>
Ostatní
</h4>
<table class="form">
{% include "personalni/udaje/prihlaska_field.html" with field=form.jak_se_dozvedeli %}
</table>
<input type="submit" value="Odeslat"> <input type="submit" value="Odeslat">
</form> </form>
<script> <script>

4
personalni/views.py

@ -176,7 +176,7 @@ def resitelEditView(request):
return render(request, 'personalni/udaje/edit.html', {'form': form}) return render(request, 'personalni/udaje/edit.html', {'form': form})
@sensitive_post_parameters('jmeno', 'prijmeni', 'email', 'telefon', 'datum_narozeni', 'ulice', 'mesto', 'psc', 'skola') @sensitive_post_parameters('jmeno', 'prijmeni', 'email', 'telefon', 'datum_narozeni', 'ulice', 'mesto', 'psc', 'skola', 'jak_se_dozvedeli')
def prihlaskaView(request): def prihlaskaView(request):
generic_logger = logging.getLogger('seminar.prihlaska') generic_logger = logging.getLogger('seminar.prihlaska')
err_logger = logging.getLogger('seminar.prihlaska.problem') err_logger = logging.getLogger('seminar.prihlaska.problem')
@ -212,6 +212,7 @@ def prihlaskaView(request):
ulice = fcd.get('ulice',''), ulice = fcd.get('ulice',''),
mesto = fcd.get('mesto',''), mesto = fcd.get('mesto',''),
psc = fcd.get('psc',''), psc = fcd.get('psc',''),
jak_se_dozvedeli = fcd.get('jak_se_dozvedeli',''),
poznamka = str(fcd) poznamka = str(fcd)
) )
@ -336,6 +337,7 @@ def dataResiteluCsvResponse(queryset, columns=None, with_header=True):
'osoba__psc', 'osoba__psc',
'osoba__stat', 'osoba__stat',
'skola', #FIXME: dává jen ID 'skola', #FIXME: dává jen ID
'jak_se_dozvedeli',
'poznamka', 'poznamka',
'osoba__poznamka', 'osoba__poznamka',
'rok_maturity', 'rok_maturity',

18
seminar/migrations/0102_osoba_jak_se_dozvedeli.py

@ -0,0 +1,18 @@
# Generated by Django 3.2.15 on 2022-08-15 19:39
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('seminar', '0101_auto_20211213_2306'),
]
operations = [
migrations.AddField(
model_name='osoba',
name='jak_se_dozvedeli',
field=models.TextField(blank=True, verbose_name='Jak se dozvěděli'),
),
]

2
seminar/models/personalni.py

@ -70,6 +70,8 @@ class Osoba(SeminarModelBase):
stat = CountryField('stát', default='CZ', stat = CountryField('stát', default='CZ',
help_text='ISO 3166-1 kód země velkými písmeny (CZ, SK, ...)') help_text='ISO 3166-1 kód země velkými písmeny (CZ, SK, ...)')
jak_se_dozvedeli = models.TextField('Jak se dozvěděli', blank=True)
poznamka = models.TextField('neveřejná poznámka', blank=True, poznamka = models.TextField('neveřejná poznámka', blank=True,
help_text='Neveřejná poznámka k osobě (plain text)') help_text='Neveřejná poznámka k osobě (plain text)')

29
seminar/views/docasne.py

@ -1,5 +1,6 @@
from http import HTTPStatus from http import HTTPStatus
from django.core.exceptions import ValidationError
from django.db import transaction from django.db import transaction
from django.forms import Form, CharField, IntegerField from django.forms import Form, CharField, IntegerField
from django.views.generic import FormView from django.views.generic import FormView
@ -21,28 +22,44 @@ def problemView(request, pk):
# FIXME Tohle možná patří do forms.py # FIXME Tohle možná patří do forms.py
# FIXME Tohle není odladěné, selhává to nekontrolovaně # FIXME Chyby se ve formuláři zobrazují nějak divně
# a obecně je to fujky nekomentovaný kód
class HromadnePridaniForm(Form): class HromadnePridaniForm(Form):
""" Formulář pro hromadné přidání úložek a problémů """
tema = CharField(label="Název tématu:") tema = CharField(label="Název tématu:")
dil = IntegerField(label="Díl:", min_value=1) dil = IntegerField(label="Díl:", min_value=1)
body = CharField(label="Počty bodů (0 pro problém) oddělené čárkami:") body = CharField(label="Počty bodů (0 pro problém) oddělené čárkami:")
def clean_tema(self):
""" Kontrola, že `tema` je název právě jednoho tématu """
if m.Tema.objects.filter(
nazev__exact=self.cleaned_data['tema'],
nadproblem=None).count() != 1:
raise ValidationError("Špatný nebo nepřesně zadaný název témátka")
def clean_body(self):
""" Kontrola, že `body` je seznam čísel """
try:
list(map(int, self.cleaned_data["body"].split(",")))
except ValueError:
raise ValidationError("Špatný formát bodů")
# FIXME Tohle není odladěné, selhává to nekontrolovaně
# a obecně je to fujky nekomentovaný kód
class HromadnePridaniView(FormView): class HromadnePridaniView(FormView):
""" View pro hromadné přidání úložek a problémů """
form_class = HromadnePridaniForm form_class = HromadnePridaniForm
template_name = "generic_form.html" template_name = "generic_form.html"
success_url = 'hromadne_pridani' success_url = 'hromadne_pridani'
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
""" Přidání nadpisu stránky a url, kam se má poslat formulář. """
context = super().get_context_data() context = super().get_context_data()
context["nadpis"] = "Hromadné přidání úloh" context["nadpis"] = "Hromadné přidání úloh"
context["form_url"] = "hromadne_pridani" context["form_url"] = "hromadne_pridani"
return context return context
def form_valid(self, form): def form_valid(self, form):
""" Upravený Pavlův skript na hromadné přidání úložek a problémů. """
cd = form.cleaned_data cd = form.cleaned_data
tema = cd["tema"] tema = cd["tema"]
dil = cd["dil"] dil = cd["dil"]
@ -52,10 +69,10 @@ class HromadnePridaniView(FormView):
with transaction.atomic(): with transaction.atomic():
pfx = f"{t.nazev}, díl {dil}, " pfx = f"{t.nazev}, díl {dil}, "
for k, b in enumerate(body): for k, b in enumerate(body, 1):
u = m.Uloha.objects.create( u = m.Uloha.objects.create(
nadproblem=t, nadproblem=t,
nazev=pfx + f"{'úloha' if b > 0 else 'problém'} {k + 1}", nazev=pfx + f"{'úloha' if b > 0 else 'problém'} {k}",
autor=t.autor, autor=t.autor,
garant=t.garant, garant=t.garant,
max_body=b, max_body=b,

2
various/autentizace/templates/autentizace/login.html

@ -10,7 +10,7 @@
</h1> </h1>
{# Obšlehnuto z Admina :-) #} {# Obšlehnuto z Admina :-) #}
{% if user.is_authenticated %} {% if user.is_authenticated %}
<p>K této stránce nejspíš nemáte přístup. Můžete se zkusit přihlásit jako uživatel, který přístup má.</p> <p>Již jsi přihlášený!</p>
{% endif %} {% endif %}
<form action="{% url 'login' %}" method="post"> <form action="{% url 'login' %}" method="post">
{% csrf_token %} {% csrf_token %}

Loading…
Cancel
Save