Merge remote-tracking branch 'refs/remotes/Gimli/data_migrations' into data_migrations
|
@ -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;
|
||||
}
|
||||
|
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 55 KiB |
Before Width: | Height: | Size: 55 KiB After Width: | Height: | Size: 85 KiB |
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 111 KiB |
Before Width: | Height: | Size: 101 KiB After Width: | Height: | Size: 105 KiB |
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 71 KiB |
Before Width: | Height: | Size: 88 KiB After Width: | Height: | Size: 134 KiB |
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 51 KiB |
|
@ -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)
|
||||
|
||||
|
||||
|
|
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">
|
||||
{% csrf_token %}
|
||||
{{ form }}
|
||||
<input type="submit" value="Submit">
|
||||
{{form.non_field_errors}}
|
||||
<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>
|
||||
|
||||
{% endblock %}
|
||||
|
||||
|
|
|
@ -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(),
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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})
|
||||
|
||||
|
|