diff --git a/mamweb/static/css/mamweb.css b/mamweb/static/css/mamweb.css index 6e5b9488..b48357e8 100644 --- a/mamweb/static/css/mamweb.css +++ b/mamweb/static/css/mamweb.css @@ -698,3 +698,27 @@ div.nahledy_cisel { div.nahledy_cisel div, div.nahledy_cisel img { position: absolute; } +ul.form { + list-style-type: none; + padding-left: 0px; +} +label.field-label { + font-weight: normal; +} +label.field-required { + font-weight: bold; +} +.field-error { + font-size: 14px; + color: red; +} +ul.form li{ + margin-bottom: 3px; +} +p.gdpr { + font-size: 6pt; + margin-bottom: .66em; +} +div.gdpr { + font-size: 6pt; +} diff --git a/mamweb/static/images/header-bg-archiv-NOC.jpg b/mamweb/static/images/header-bg-archiv-NOC.jpg index d3732d92..6f00a321 100644 Binary files a/mamweb/static/images/header-bg-archiv-NOC.jpg 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 index 6f00a321..43ddd41e 100644 Binary files a/mamweb/static/images/header-bg-archiv.jpg and b/mamweb/static/images/header-bg-archiv.jpg differ diff --git a/mamweb/static/images/header-bg-soustredeni-NOC.jpg b/mamweb/static/images/header-bg-soustredeni-NOC.jpg index f950069c..0a4fdfe0 100644 Binary files a/mamweb/static/images/header-bg-soustredeni-NOC.jpg 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 index a4f4121f..a9b0b8fe 100644 Binary files a/mamweb/static/images/header-bg-soustredeni.jpg and b/mamweb/static/images/header-bg-soustredeni.jpg differ diff --git a/mamweb/static/images/header-bg-uvod-NOC.jpg b/mamweb/static/images/header-bg-uvod-NOC.jpg index 6963bf83..f2fe6c07 100644 Binary files a/mamweb/static/images/header-bg-uvod-NOC.jpg 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 index 0236ce5e..cf55ebcf 100644 Binary files a/mamweb/static/images/header-bg-uvod.jpg and b/mamweb/static/images/header-bg-uvod.jpg differ diff --git a/mamweb/static/images/header-bg-zadani.jpg b/mamweb/static/images/header-bg-zadani.jpg index e06a3d02..2c8a82fb 100644 Binary files a/mamweb/static/images/header-bg-zadani.jpg and b/mamweb/static/images/header-bg-zadani.jpg differ diff --git a/seminar/forms.py b/seminar/forms.py index 693e36df..a9aa725c 100644 --- a/seminar/forms.py +++ b/seminar/forms.py @@ -1,6 +1,25 @@ from django import forms +from seminar.models import Resitel -class NameForm(forms.Form): - your_name = forms.CharField(label='Your name', max_length=100) +class PrihlaskaForm(forms.Form): + jmeno = forms.CharField(label='Jméno', max_length=256, required=True) + prijmeni = forms.CharField(label='Příjmení', max_length=256, required=True) + pohlavi = forms.ChoiceField(label='Pohlaví', + choices = ((True,'muž'),(False,'žena')), required=True) + email = forms.EmailField(label='E-mail',max_length=256, required=True) + telefon = forms.CharField(label='Telefon',max_length=256, required=False) + datum_narozeni = forms.DateField(label='Datum narození', required=False) + ulice = forms.CharField(label='Ulice', max_length=256, required=False) + mesto = forms.CharField(label='Město', max_length=256, required=False) + psc = forms.CharField(label='PSČ', max_length=32, required=False) + stat = forms.ChoiceField(label='Stát', + choices = (('CZ', 'Česká Republika'), + ('SK', 'Slovenská Republika'), + ('other', 'Jiné')), + required=False) + #TODO skola + rok_maturity = forms.IntegerField(label='Rok maturity', min_value=2019, required=True) + zasilat = forms.ChoiceField(label='Kam zasílat čísla a řešení',choices = Resitel.ZASILAT_CHOICES, required=True) + gdpr = forms.BooleanField(label='Souhlasím se zpracováním osobních údajů', required=True) diff --git a/seminar/templates/seminar/gdpr.html b/seminar/templates/seminar/gdpr.html new file mode 100644 index 00000000..74e253f5 --- /dev/null +++ b/seminar/templates/seminar/gdpr.html @@ -0,0 +1,49 @@ +

+TL;DR: +K tomu, abychom mohli zpracovávat Tvá data (uložit si tvou adresu, zobrazit Tvé jméno ve výsledkové listině, opravit Tvá řešení) od Tebe potřebujeme souhlas. +Pokud se zpracováváním souhlasíš dle níže uvedených podmínek, zaškrtni políčko níže. +

+
+

+Získáváme od Tebe údaje vyplněné v přihlášce do semináře (jméno, příjmení, poštovní a e-mailovou adresu, školu, kterou navštěvuješ a rok maturity), případně v přihlášce na soustředění (navíc datum narození, telefonní číslo). Také uchováváme všechna řešení, která nám pošleš, a jejich hodnocení. +

+

+Slibujeme Ti, že Tvá osobní data nezneužijeme k ničemu, co by nesouviselo s M&M nebo s dalšími aktivitami Matfyzu, a nikdy je nepředáme nikomu cizímu. Údaje využíváme k zajištění chodu semináře a také je sdílíme s ostatními propagačními akcemi Matfyzu, abychom mohli vyhodnocovat úspěšnost akcí. Pokud budeš mít zájem, budeme Ti také posílat zajímavé zprávy a novinky týkajíci se Matfyzu. +

+

+Veřejně vystavujeme pouze výsledkové listiny, které také uchováváme pro archivní účely. Pokud ale z nějakého důvodu nebudeš chtít mít své jméno či školu uvedené ve výsledkové listině, není problém to zařídit, napiš nám. Z tištěných materiálů samozřejmě údaje už odstranit nemůžeme. +

+

+Na soustředěních a dalších akcích semináře navíc pořizujeme fotografie a videozáznamy a používáme je ke zpravodajským a propagačním účelům. Pro propagační účely si od Tebe vyžádáme samostatný souhlas na začátku akce. +

+

+Souhlas se zpracováním osobních údajů pro potřeby chodu semináře +

+

+Tímto uděluji souhlas Univerzitě Karlově, se sídlem Ovocný trh 560/5, 116 36 Praha 1, IČO 00216208 (dále jen UK), která je správcem osobních údajů všech fakult a součástí UK, ke zpracování osobních údajů pro potřeby Korespondenčního semináře M&M a Matematicko-fyzikální fakulty UK (dále jen M&M a MFF UK). +

+

+Tento souhlas uděluji pro všechny výše uvedené osobní údaje, a to po dobu účasti v semináři a 10 let poté, a dále souhlasím s uchováváním potřebných dat pro archivní účely i po této lhůtě (vystavené výsledkové listiny aj.). +

+

+MFF UK tyto údaje zpracovává za účelem evidence řešitelů a účastníků M&M, k zajištění celoročního fungování semináře, analýze účinnosti jednotlivých propagačních akcí MFF UK a zpravodajským účelům. Osobám, které o to projeví zájem v nastavení svého účtu, bude MFF UK také zasílat propagační materiály. +

+

+Údaje nebudou předány třetí osobě ani využívány k jiným účelům, než ke kterým byly poskytnuty. +

+

+Tento souhlas uděluji ze své vlastní a svobodné vůle a beru na vědomí, že jej mohu kdykoliv odvolat zasláním e-mailu na adresu mam@matfyz.cz. Stejně tak může být požadováno vymazání i z archivních údajů M&M, pokud to bude technicky možné. Beru na vědomí, že údaje z tištěných publikací není možné zpětně odstranit. +

+

+Dále máte právo: +

diff --git a/seminar/templates/seminar/prihlaska.html b/seminar/templates/seminar/prihlaska.html index 891bdb6d..9e5fbbc8 100644 --- a/seminar/templates/seminar/prihlaska.html +++ b/seminar/templates/seminar/prihlaska.html @@ -1,5 +1,30 @@ +{% extends "seminar/zadani/base.html" %} +{% load staticfiles %} + +{% block content %} +

+ {% block nadpis1a %}{% block nadpis1b %} + Přihláška do semináře + {% endblock %}{% endblock %} +

{% csrf_token %} - {{ form }} - + {{form.non_field_errors}} + +
+ +{% endblock %} + diff --git a/seminar/testutils.py b/seminar/testutils.py index 5977128c..bb60c11e 100644 --- a/seminar/testutils.py +++ b/seminar/testutils.py @@ -283,7 +283,9 @@ def gen_konfery(size, rnd, organizatori, resitele, soustredeni): logger.info('Generuji konfery (size={})...'.format(size)) konfery = [] - for _ in range(1, size): #FIXME Tu range si změňte jak chcete, nevím, co přesně znamená size (asi Anet?) + for _ in range(1, size): #FIXME Tu range si změňte jak chcete, nevím, co přesně znamená size (asi Anet?) + # Anet: size je parametr udávající velikost testovacích dat a dá se pomocí ní škálovat, + # kolik dat se nageneruje konfera = Konfera.objects.create( nazev=rnd.choice(['Pozorování', 'Zkoumání', 'Modelování', 'Počítání', 'Zkoušení']) + rnd.choice([' vlastností', ' jevů', ' charakteristik']) + rnd.choice([' vektorových prostorů', ' kinetické terorie látek', ' molekulární biologie', ' syntentických stromů']), anotace=lorem.paragraph(), diff --git a/seminar/urls.py b/seminar/urls.py index 67d0b526..d3b8c645 100644 --- a/seminar/urls.py +++ b/seminar/urls.py @@ -97,7 +97,7 @@ urlpatterns = [ staff_member_required(views.texUploadView), name='seminar_tex_upload' ), - path('prihlaska/',views.get_name), + path('prihlaska/',views.prihlaskaView), path('', views.TitulniStranaView.as_view(), name='titulni_strana'), # Ceka na autocomplete v3 diff --git a/seminar/views.py b/seminar/views.py index 02a27909..f0f6049d 100644 --- a/seminar/views.py +++ b/seminar/views.py @@ -15,7 +15,7 @@ from .models import Problem, Cislo, Reseni, Nastaveni, Rocnik, Soustredeni, Orga #from .models import VysledkyZaCislo, VysledkyKCisluZaRocnik, VysledkyKCisluOdjakziva from . import utils from .unicodecsv import UnicodeWriter -from .forms import NameForm +from .forms import PrihlaskaForm from datetime import timedelta, date, datetime from django.utils import timezone @@ -950,11 +950,11 @@ def texDownloadView(request, rocnik, cislo): ## Formulare -def get_name(request): +def prihlaskaView(request): # if this is a POST request we need to process the form data if request.method == 'POST': # create a form instance and populate it with data from the request: - form = NameForm(request.POST) + form = PrihlaskaForm(request.POST) # check whether it's valid: if form.is_valid(): # process the data in form.cleaned_data as required @@ -964,7 +964,7 @@ def get_name(request): # if a GET (or any other method) we'll create a blank form else: - form = NameForm() + form = PrihlaskaForm() return render(request, 'seminar/prihlaska.html', {'form': form})