Browse Source

Prihlasovaci formular, zatim bez zpracovani.

export_seznamu_prednasek
parent
commit
33969e26ee
  1. 24
      mamweb/static/css/mamweb.css
  2. 23
      seminar/forms.py
  3. 49
      seminar/templates/seminar/gdpr.html
  4. 29
      seminar/templates/seminar/prihlaska.html
  5. 2
      seminar/urls.py
  6. 8
      seminar/views.py

24
mamweb/static/css/mamweb.css

@ -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;
}

23
seminar/forms.py

@ -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

@ -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>

29
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"> <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 %}

2
seminar/urls.py

@ -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

8
seminar/views.py

@ -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…
Cancel
Save