Prihlasovaci formular, zatim bez zpracovani.
This commit is contained in:
parent
0dc5442c99
commit
33969e26ee
6 changed files with 126 additions and 9 deletions
|
@ -698,3 +698,27 @@ div.nahledy_cisel {
|
||||||
div.nahledy_cisel div, div.nahledy_cisel img {
|
div.nahledy_cisel div, div.nahledy_cisel img {
|
||||||
position: absolute;
|
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;
|
||||||
|
}
|
||||||
|
|
|
@ -1,6 +1,25 @@
|
||||||
from django import forms
|
from django import forms
|
||||||
|
from seminar.models import Resitel
|
||||||
|
|
||||||
class NameForm(forms.Form):
|
class PrihlaskaForm(forms.Form):
|
||||||
your_name = forms.CharField(label='Your name', max_length=100)
|
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)
|
||||||
|
|
||||||
|
|
||||||
|
|
49
seminar/templates/seminar/gdpr.html
Normal file
49
seminar/templates/seminar/gdpr.html
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
<p>
|
||||||
|
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.
|
||||||
|
</p>
|
||||||
|
<div class="gdpr">
|
||||||
|
<p class="gdpr">
|
||||||
|
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í.
|
||||||
|
</p>
|
||||||
|
<p class="gdpr">
|
||||||
|
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.
|
||||||
|
</p>
|
||||||
|
<p class="gdpr">
|
||||||
|
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.
|
||||||
|
</p>
|
||||||
|
<p class="gdpr">
|
||||||
|
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.
|
||||||
|
</p>
|
||||||
|
<p class="gdpr">
|
||||||
|
<i>Souhlas se zpracováním osobních údajů pro potřeby chodu semináře</i>
|
||||||
|
</p>
|
||||||
|
<p class="gdpr">
|
||||||
|
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).
|
||||||
|
</p>
|
||||||
|
<p class="gdpr">
|
||||||
|
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.).
|
||||||
|
</p>
|
||||||
|
<p class="gdpr">
|
||||||
|
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.
|
||||||
|
</p>
|
||||||
|
<p class="gdpr">
|
||||||
|
Údaje nebudou předány třetí osobě ani využívány k jiným účelům, než ke kterým byly poskytnuty.
|
||||||
|
</p>
|
||||||
|
<p class="gdpr">
|
||||||
|
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.
|
||||||
|
</p>
|
||||||
|
<p class="gdpr">
|
||||||
|
Dále máte právo:
|
||||||
|
<ul>
|
||||||
|
<li>požádat o informaci, jaké osobní údaje jsou o vás zpracovávány,
|
||||||
|
<li>požadovat opravu osobních údajů, pokud jsou neplatné nebo zastaralé,
|
||||||
|
<li>požadovat, aby nebyly vaše osobní údaje zpracovávány do doby, než bude vyřešena oprávněnost výše uvedených požadavků,
|
||||||
|
<li>požadovat, aby byly vaše osobní údaje předány jinému správci,
|
||||||
|
<li>podat stížnost u dozorového úřadu.
|
||||||
|
</p>
|
||||||
|
<p class="gdpr">
|
||||||
|
V případě jakéhokoliv dotazu nebo uplatnění svých práv můžete kontaktovat pověřence pro ochranu osobních údajů na e-mailové adrese gdpr@cuni.cz.
|
||||||
|
</p>
|
||||||
|
</div>
|
|
@ -1,5 +1,30 @@
|
||||||
|
{% extends "seminar/zadani/base.html" %}
|
||||||
|
{% load staticfiles %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<h1>
|
||||||
|
{% block nadpis1a %}{% block nadpis1b %}
|
||||||
|
Přihláška do semináře
|
||||||
|
{% endblock %}{% endblock %}
|
||||||
|
</h1>
|
||||||
<form action="/prihlaska/" method="post">
|
<form action="/prihlaska/" method="post">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{{ form }}
|
{{form.non_field_errors}}
|
||||||
<input type="submit" value="Submit">
|
<ul class="form">
|
||||||
|
{% for field in form %}
|
||||||
|
<li>
|
||||||
|
{% if forloop.last %}
|
||||||
|
{% include "seminar/gdpr.html" %}
|
||||||
|
{% endif %}
|
||||||
|
<label class="field-label{% if field.field.required %} field-required{% endif %}" for="{{ field.name }}">{{ field.label }}:</label>
|
||||||
|
{{ field }}
|
||||||
|
{% if field.help_text %}<span class="field-helptext">{{ field.help_text|safe }}</span>{% endif %}
|
||||||
|
{% if field.errors %}<span class="field-error">{{ field.errors }}</span>{% endif %}
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
<input type="submit" value="Odeslat">
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
|
|
@ -97,7 +97,7 @@ urlpatterns = [
|
||||||
staff_member_required(views.texUploadView),
|
staff_member_required(views.texUploadView),
|
||||||
name='seminar_tex_upload'
|
name='seminar_tex_upload'
|
||||||
),
|
),
|
||||||
path('prihlaska/',views.get_name),
|
path('prihlaska/',views.prihlaskaView),
|
||||||
path('', views.TitulniStranaView.as_view(), name='titulni_strana'),
|
path('', views.TitulniStranaView.as_view(), name='titulni_strana'),
|
||||||
|
|
||||||
# Ceka na autocomplete v3
|
# Ceka na autocomplete v3
|
||||||
|
|
|
@ -15,7 +15,7 @@ from .models import Problem, Cislo, Reseni, Nastaveni, Rocnik, Soustredeni, Orga
|
||||||
#from .models import VysledkyZaCislo, VysledkyKCisluZaRocnik, VysledkyKCisluOdjakziva
|
#from .models import VysledkyZaCislo, VysledkyKCisluZaRocnik, VysledkyKCisluOdjakziva
|
||||||
from . import utils
|
from . import utils
|
||||||
from .unicodecsv import UnicodeWriter
|
from .unicodecsv import UnicodeWriter
|
||||||
from .forms import NameForm
|
from .forms import PrihlaskaForm
|
||||||
|
|
||||||
from datetime import timedelta, date, datetime
|
from datetime import timedelta, date, datetime
|
||||||
from itertools import groupby
|
from itertools import groupby
|
||||||
|
@ -949,11 +949,11 @@ def texDownloadView(request, rocnik, cislo):
|
||||||
|
|
||||||
## Formulare
|
## Formulare
|
||||||
|
|
||||||
def get_name(request):
|
def prihlaskaView(request):
|
||||||
# if this is a POST request we need to process the form data
|
# if this is a POST request we need to process the form data
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
# create a form instance and populate it with data from the request:
|
# 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:
|
# check whether it's valid:
|
||||||
if form.is_valid():
|
if form.is_valid():
|
||||||
# process the data in form.cleaned_data as required
|
# process the data in form.cleaned_data as required
|
||||||
|
@ -963,7 +963,7 @@ def get_name(request):
|
||||||
|
|
||||||
# if a GET (or any other method) we'll create a blank form
|
# if a GET (or any other method) we'll create a blank form
|
||||||
else:
|
else:
|
||||||
form = NameForm()
|
form = PrihlaskaForm()
|
||||||
|
|
||||||
return render(request, 'seminar/prihlaska.html', {'form': form})
|
return render(request, 'seminar/prihlaska.html', {'form': form})
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue