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 %} | ||||
| 
 | ||||
|  |  | |||
|  | @ -284,6 +284,8 @@ def gen_konfery(size, rnd, organizatori, resitele, soustredeni): | |||
| 
 | ||||
| 	konfery = [] | ||||
| 	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}) | ||||
| 
 | ||||
|  |  | |||
 Pavel "LEdoian" Turinsky
						Pavel "LEdoian" Turinsky