From 33969e26ee2cc68f69243f6a071ca9bf90968bf5 Mon Sep 17 00:00:00 2001
From: "Tomas \"Jethro\" Pokorny" <xtompok@gmail.com>
Date: Tue, 13 Aug 2019 23:16:44 +0200
Subject: [PATCH] Prihlasovaci formular, zatim bez zpracovani.

---
 mamweb/static/css/mamweb.css             | 24 ++++++++++++
 seminar/forms.py                         | 23 ++++++++++-
 seminar/templates/seminar/gdpr.html      | 49 ++++++++++++++++++++++++
 seminar/templates/seminar/prihlaska.html | 29 +++++++++++++-
 seminar/urls.py                          |  2 +-
 seminar/views.py                         |  8 ++--
 6 files changed, 126 insertions(+), 9 deletions(-)
 create mode 100644 seminar/templates/seminar/gdpr.html

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/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 @@
+<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&amp;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&amp;M a Matematicko-fyzikální fakulty UK (dále jen M&amp;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&amp;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>
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 %}
+  <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 %}
+
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 57c85b65..7ddfcf62 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 itertools import groupby
@@ -949,11 +949,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
@@ -963,7 +963,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})