.pydevproject
.tmp_*
+# PyCharm
+.idea
+
# Tags file
TAGS
wldoc = WLDocument.from_file(self.xml_file.path)
self.dc = wldoc.book_info.to_dict()
self.type = self.dc["type"]
- assert self.type in ('appendix', 'course', 'synthetic', 'project', 'added'), \
+ assert self.type in ('appendix', 'course', 'synthetic', 'project', 'added', 'added-var'), \
u"Unknown lesson type: %s" % self.type
self.save()
float: left;
position: relative;
width: 43.75em;
- height: 14.6875em;
+ height: 14.688em;
overflow: hidden;
- border-radius: 0.9375em; }
+ border-radius: 0.938em; }
#catalogue-carousel #catalogue-carousel-links {
width: 28.75em;
- height: 14.6875em;
+ height: 14.688em;
list-style: none;
margin: 0;
padding: 0; }
left: 0;
height: 100%;
background-size: 100% 100%;
- border-top-left-radius: 0.9375em 6.38%;
- border-bottom-left-radius: 0.9375em 6.38%;
+ border-top-left-radius: 0.938em 6.38%;
+ border-bottom-left-radius: 0.938em 6.38%;
z-index: 100;
background-color: #888; }
#catalogue-carousel #catalogue-carousel-links li a.catalogue-carousel-link {
text-shadow: 0 0 5px #000; }
#catalogue-carousel #catalogue-carousel-switcher {
margin: 0;
- padding: 1.25em 0 0 3.625em;
+ padding: 0.188em 0 0 3.625em;
width: 11.375em;
- height: 13.4375em;
+ height: 14.188em;
position: absolute;
right: 0;
top: 0;
list-style: none;
- border-radius: 0 0.9375em 0.9375em 0;
+ border-radius: 0 0.938em 0.938em 0;
background-color: #ed7831;
background-image: url(/static/catalogue/img/carousel-right.png);
background-position: 0 0;
background-repeat: no-repeat;
- background-size: auto 14.6875em;
+ background-size: auto 14.688em;
/* right part of mask as background */ }
#catalogue-carousel #catalogue-carousel-switcher li {
- margin-bottom: .5em;
+ margin-bottom: .4em;
font-size: .85em;
line-height: 1em; }
#catalogue-carousel #catalogue-carousel-switcher li a {
}
#catalogue-carousel-switcher {
margin: 0;
- padding: 20*$px 0 0 58*$px;
+ padding: 3*$px 0 0 58*$px;
width: 240*$px - 58*$px;
- height: 235*$px - 20*$px;
+ height: 235*$px - 8*$px;
position: absolute;
right: 0;
top: 0;
/* right part of mask as background */
li {
- margin-bottom: .5em;
+ margin-bottom: .4em;
font-size: .85em;
line-height: 1em;
--- /dev/null
+{% extends "catalogue/lesson/lesson_detail.html" %}
+{% load static from staticfiles %}
+
+{% block lesson-info %}
+<section class="box">
+ <div class="box-icon"><img src="/static/img/icons/activity-time.png"><br>45m</div>
+
+ {% include "catalogue/lesson/box-icons.html" %}
+
+ <p>Ta lekcja jest częścią tematu
+ <a href="{% url 'catalogue_lessons' %}#{{ object.level.slug }}_varsaviana"><strong>Edukacja varsavianistyczna</strong></a>
+ na poziomie {{ object.level|lower }}.
+ </p>
+ <div style="clear: right"></div>
+</section>
+
+{% endblock %}
+
+
+{% block sidebar-top %}
+<div class="buttons" style="padding-bottom: 1em; border-bottom: 1px solid red;">
+
+{% if object.package %}
+ <section class="box-button"><a href="{{ object.package.url }}" class="dl-button">Pobierz całą lekcję</a></section>
+{% endif %}
+{% if object.student_package %}
+ <section><a href="{{ object.student_package.url }}" class="dl-button">Pobierz lekcję w wersji dla ucznia</a></section>
+{% endif %}
+
+</div>
+{% endblock %}
<a href="{% url 'catalogue_lessons' %}">Projekty, <br>{{ lesson.level }}</a>
{% elif lesson.type == 'added' %}
<a href="{% url 'catalogue_lessons' %}#liceum_filmowa">Edukacja filmowa</a>
+{% elif lesson.type == 'added-var' %}
+ <a href="{% url 'catalogue_lessons' %}#liceum_varsaviana">Edukacja varsavianistyczna</a>
{% else %}
<a href="{% url 'catalogue_lessons' %}">Inne</a>
{% endif %}
<a href="{{ les }}#{{ level.slug }}">
<span class="in-box">
<span class="name">{{ level }}</span>
- {{ level.length_synthetic }} lub {{ level.length_course }} godzin
+ {% if level.length_synthetic %}{{ level.length_synthetic }} lub {% endif %}{{ level.length_course }} godzin
</span>
</a>
</li>
</span>
</a>
</li>
+<li class="box7">
+ <a href="{{ les }}#liceum_varsaviana">
+ <span class="in-box">
+ <span class="name">Edukacja varsavianistyczna</span>
+ 10 godzin
+ </span>
+ </a>
+</li>
+
</ul>
c = object_list.count()
return {
'object_list': object_list,
- 'section_width': (700 - 20 * (c - 1)) / c,
+ #'section_width': (700 - 20 * (c - 1)) / c,
+ 'section_width': (700 - 20 * 2) / 3
}
if lesson.section not in lessons['course']:
lessons['course'][lesson.section] = []
lessons['course'][lesson.section].append(lesson)
- elif lesson.type == 'added': continue
+ elif lesson.type.startswith('added'): continue
else:
lessons[lesson.type].append(lesson)
]
],
})
+ added.append({
+ 'slug': 'varsaviana',
+ 'title': u'Edukacja varsavianistyczna',
+ 'lessons': [
+ Lesson.objects.get(slug=s) for s in
+'''
+czego-prus-w-lalce-o-zydach-nie-powiedzial
+jak-zmienila-sie-warszawa-o-dworcu-dawniej-i-dzis
+o-gwarze-praskiej
+poznaj-i-pokaz-prage
+praga-trzech-religii
+sladami-zydow-w-warszawie
+tajemnice-palacu-saskiego
+warszawa-przedwojenne-miasto-neonow
+warszawski-barok
+ziemianska-jako-soczewka-swiata-lat-miedzywojennych
+'''.strip().split()
+ ],
+ })
+
return {
"level": level,
msgstr "Proszę wybrać poziom edukacyjny."
#: templates/curriculum/competence_list.html:8
-msgid "Media and information literacy competencies catalogue"
-msgstr "Katalog kompetencji medialnych i informacyjnych"
+msgid "Media, information and digital literacy competencies catalogue"
+msgstr "Katalog kompetencji medialnych, informacyjnych i cyfrowych"
#: templates/curriculum/competence_list.html:15
msgid "Browse competencies"
{% load chunks %}
{% load i18n %}
-{% block title %}{% trans 'Media and information literacy competencies catalogue' %}{% endblock %}
+{% block title %}{% trans 'Media, information and digital literacy competencies catalogue' %}{% endblock %}
{% block body %}
-<h1>{% trans 'Media and information literacy competencies catalogue' %}</h1>
+<h1>{% trans 'Media, information and digital literacy competencies catalogue' %}</h1>
{% if request.LANGUAGE_CODE == 'pl' %}
{% chunk 'katalog_kompetencji' %}
# -*- coding: utf-8 -*-
from django import forms
from contact.forms import ContactForm
+from django.core.mail import send_mail
+from django.core.exceptions import ValidationError
+from django.core.validators import validate_email
+from django.template.loader import render_to_string
from django.utils.translation import ugettext_lazy as _
email = forms.EmailField(label=u'Adres e-mail', max_length=128)
form_tag = "student"
+# FIXME: doesn't do what is says anymore.
class NoEmptyFormsAllowedBaseFormSet(forms.formsets.BaseFormSet):
"""
Won't allow formset_factory to be submitted with no forms
"""
def clean(self):
+ needed = 3
for form in self.forms:
if form.cleaned_data:
- return
- raise forms.ValidationError(u"Proszę podać dane przynajmniej jednego ucznia.")
+ needed -= 1
+ #return
+ if needed > 0:
+ raise forms.ValidationError(u"Proszę podać dane przynajmniej trzech osób.")
class WTEMForm(ContactForm):
disabled = True
form_tag = "wtem"
form_title = u"WTEM - rejestracja uczestników"
submit_label = u"Wyślij zgłoszenie"
- form_formsets = (forms.formsets.formset_factory(WTEMStudentForm, formset=NoEmptyFormsAllowedBaseFormSet),)
+ admin_list = ['imie', 'nazwisko', 'institution']
+ form_formsets = (forms.formsets.formset_factory(WTEMStudentForm, formset=NoEmptyFormsAllowedBaseFormSet, max_num=5, validate_max=True, extra=5),)
contact = forms.EmailField(label=u'Adres e-mail opiekuna/opiekunki', max_length=128)
imie = forms.CharField(label=u'Imię', max_length=128)
zgoda_regulamin = forms.BooleanField(
label=u'Znam i akceptuję regulamin Wielkiego Turnieju Edukacji Medialnej.',
- help_text=u'Zobacz <a href="/media/chunks/attachment/WTEM_regulamin_TmXC5VU.pdf">regulamin Wielkiego Turnieju Edukacji Medialnej</a>.'
+ help_text=u'Zobacz <a href="/media/chunks/attachment/regulamin_III_edycja.pdf">regulamin Wielkiego Turnieju Edukacji Medialnej</a>.'
)
zgoda_dane = forms.BooleanField(
- label=u'Wyrażam zgodę na przetwarzanie moich danych osobowych oraz danych osobowych moich podopiecznych, a także na publikację prac na wolnej licencji.',
- help_text=u'Zobacz <a href="/media/chunks/attachment/Oswiadczenie_o_danych_osobowych.pdf">pełną treść oświadczenia</a>.'
+ label=u'Wyrażam zgodę na przetwarzanie moich danych osobowych oraz danych osobowych moich podopiecznych.',
+ #help_text=u'Zobacz <a href="/media/chunks/attachment/Oswiadczenie_o_danych_osobowych.pdf">pełną treść oświadczenia</a>.'
)
potw_uczniowie = forms.BooleanField(
current = dict()
return toret
+ def save(self, request, formsets=None):
+ contact = super(WTEMForm, self).save(request, formsets)
+
+ mail_subject = render_to_string('contact/wtem/student_mail_subject.html').strip()
+ mail_body = render_to_string('contact/wtem/student_mail_body.html')
+ for formset in formsets or []:
+ for f in formset.forms:
+ email = f.cleaned_data.get('email', None)
+ try:
+ validate_email(email)
+ except ValidationError:
+ pass
+ else:
+ send_mail(mail_subject, mail_body, 'edukacjamedialna@nowoczesnapolska.org.pl', [email], fail_silently=True)
+
+ return contact
+
class MILForm(ContactForm):
form_tag = 'mil'
max_length = 255,
required = False
)
+
+
+class TEMForm(ContactForm):
+ form_tag = 'tem'
+ form_title = u"TEM - szkolenie dla trenerów edukacji medialnej"
+ admin_list = ['imie', 'nazwisko', 'instytucja', 'contact']
+
+ imie = forms.CharField(label=u'Imię', max_length=128)
+ nazwisko = forms.CharField(label=u'Nazwisko', max_length=128)
+ contact = forms.EmailField(label=u'E-mail', max_length=128)
+ telefon = forms.CharField(label=u'Tel. kontaktowy', max_length=128)
+ instytucja = forms.CharField(label=u'Instytucja', max_length=256)
+ adres = forms.CharField(label=u'Adres',
+ widget=forms.Textarea, max_length=1000)
+ stanowisko = forms.CharField(label=u'Stanowisko', max_length=256)
+ doswiadczenie = forms.CharField(label=u'Jakie jest Pani/Pana doświadczenie w zakresie edukacji medialnej?',
+ widget=forms.Textarea, max_length=500, help_text=u'(max 500 znaków)')
+ dlaczego = forms.CharField(label=u'Dlaczego chce Pani/Pan wziąć udział w szkoleniu?',
+ widget=forms.Textarea, max_length=500, help_text=u'(max 500 znaków)')
+ jak_wykorzystac = forms.CharField(label=u'Jak zamierza Pan/Pani wykorzystać wiedzę zdobytą w czasie szkolenia?',
+ widget=forms.Textarea, max_length=500, help_text=u'(max 500 znaków)')
+
+ zajecia = forms.BooleanField(label=u'W okresie wrzesień-październik 2015 r. przeprowadzę min. 2 godziny zajęć edukacji medialnej z wybraną grupą dzieci lub młodzieży.', required=True)
+ zgoda_informacje = forms.BooleanField(label=u'Wyrażam zgodę na otrzymywanie informacji od Fundacji Nowoczesna Polska związanych z edukacją medialną.', required=False)
+
+
+class SuperwizjaForm(ContactForm):
+ form_tag = 'superwizja'
+ form_title = u"Informacje o zajęciach"
+ admin_list = ['nazwisko', 'contact', 'skype', 'temat']
+ submit_label = u'Wyślij'
+
+ nazwisko = forms.CharField(label=u'Imię i nazwisko', max_length=1024)
+ contact = forms.CharField(label=u'E-mail kontaktowy', required=False)
+ skype = forms.CharField(label=u'Nazwa użytkownika Skype', max_length=255)
+ temat = forms.CharField(label=u'Temat zajęć', max_length=1024)
+ termin = forms.CharField(label=u'Termin zajęć', max_length=1024)
+ czas_trwania = forms.CharField(label=u'Czas trwania zajęć', max_length=1024)
+ miejsce = forms.CharField(label=u'Miejsce prowadzenia zajęć', max_length=1024)
+ rodzaj = forms.ChoiceField(label=u'Rodzaj zajęć', widget=forms.RadioSelect, choices=[('jednorazowe', 'jednorazowe'), ('w ramach cyklu', 'w ramach cyklu')])
+ cykl = forms.CharField(label=u'Jeśli w ramach cyklu, to podaj jego temat i czas trwania', required=False)
+ sposob = forms.ChoiceField(label=u'Sposób prowadzenia zajęć', widget=forms.RadioSelect, choices=[('samodzielnie', 'samodzielnie'), (u'z drugą osobą', 'z drugą osobą')])
+ wrazenia = forms.CharField(label=u'Opisz Twoje ogólne wrażenia po warsztacie.', widget=forms.Textarea, max_length=4096)
+ opiekun = forms.CharField(label=u'Czy opiekun grupy był obecny podczas zajęć? Jeśli tak, opisz krótko jego rolę.', widget=forms.Textarea, max_length=4096)
+ grupa = forms.CharField(label=u'Opisz krótko grupę uczestników zajęć (wiek, liczba osób, czy to pierwszy kontakt z grupą).', widget=forms.Textarea, max_length=4096)
+ cel = forms.CharField(label=u'Jaki był założony cel zajęć? Dlaczego wybrałaś/eś taki cel?', widget=forms.Textarea, max_length=4096)
+ ewaluacja = forms.CharField(label=u'W jaki sposób sprawdziłeś/aś, czy cel zajęć został zrealizowany? Opisz krótko efekty zajęć.', widget=forms.Textarea, max_length=4096)
+ # header
+ przygotowania = forms.CharField(label=u'Opisz w punktach proces przygotowania się do zajęć.', widget=forms.Textarea, max_length=4096)
+ przygotowania_trudnosci = forms.CharField(label=u'Co na etapie przygotowań sprawiło Ci największą trudność?', widget=forms.Textarea, max_length=4096)
+ przygotowania_pomoc = forms.CharField(label=u'Co było pomocne w przygotowaniu zajęć? (Czy korzystałaś/eś z materiałów z serwisu edukacjamedialna.edu.pl? Jeśli tak, to jakich?)', widget=forms.Textarea, max_length=4096)
+ narzedzia = forms.CharField(label=u'Jakie narzędzie/a planowałaś/eś wykorzystać, a jakie wykorzystałaś/eś?', widget=forms.Textarea, max_length=4096)
+ struktura = forms.CharField(label=u'Opisz w punktach strukturę zajęć. Zaznacz ile czasu planowałaś/eś na każdą część, a ile czasu faktycznie Ci to zajęło.', widget=forms.Textarea, max_length=4096)
+ prowadzenie_trudnosci = forms.CharField(label=u'Co sprawiało Ci trudność w prowadzeniu zajęć?', widget=forms.Textarea, max_length=4096)
+ prowadzenie_pomoc = forms.CharField(label=u'Co było pomocne w prowadzeniu zajęć?', widget=forms.Textarea, max_length=4096)
+ kontrakt = forms.CharField(label=u'W jakiej formie został zawarty kontrakt z uczestnikami? Jakie zasady zostały przyjęte? Czy w trakcie zajęć Ty bądź uczestnicy odwoływaliście się do kontraktu?', widget=forms.Textarea, max_length=4096)
+ trudne_sytuacje = forms.CharField(label=u'Czy podczas zajęć miały miejsce tzw. „trudne sytuacje”. Jak na nie zareagowałaś/eś? Czy potrzebowałabyś/łbyś czegoś w związku z nimi?', widget=forms.Textarea, max_length=4096)
+ informacje_zwrotne = forms.CharField(label=u'Czy zbierałaś/eś informacje zwrotne od uczestników? Jeśli tak, na co zwrócili uwagę? W jaki sposób zbierałaś/eś informacje zwrotne?', widget=forms.Textarea, max_length=4096)
+
+ mocne_strony = forms.CharField(label=u'Opisz w punktach mocne strony przeprowadzonych zajęć.', widget=forms.Textarea, max_length=4096)
+ zmiany = forms.CharField(label=u'Opisz w punktach, co byś zmienił(a) na przyszłość.', widget=forms.Textarea, max_length=4096)
+ potrzeby = forms.CharField(label=u'Czy potrzebowałbyś/łbyś czegoś przed następnymi zajęciami?', widget=forms.Textarea, max_length=4096)
+ uwagi = forms.CharField(label=u'Inne uwagi', widget=forms.Textarea, max_length=4096, required=False)
+
'catalogue/css/section_list.scss',
'curriculum/curriculum.scss',
'jquery/colorbox/colorbox.css',
- # 'fnpdjango/annoy/annoy.css',
+ 'fnpdjango/annoy/annoy.css',
'css/forum.scss',
'css/mil.scss'
'curriculum/curriculum.js',
'js/formset.js',
'pybb/js/pybbjs.js',
- # 'fnpdjango/annoy/annoy.js',
+ 'fnpdjango/annoy/annoy.js',
),
'output_filename': 'compressed/base.js',
},
padding: .3em;
vertical-align: top;
text-align: left; }
+.submit-form td ul {
+ padding: 0;
+ list-style: none;
+ margin: 0; }
.submit-form th {
max-width: 16em;
font-weight: normal; }
-.submit-form .required label:before {
+.submit-form .required th label:before {
content: "* ";
color: red; }
.submit-form .errorlist {
vertical-align: top;
text-align: left;
}
+ td ul {
+ padding: 0;
+ list-style: none;
+ margin: 0;
+ }
th {
max-width: 16em;
font-weight: normal;
}
- .required label:before {
+ .required th label:before {
content: "* ";
color: red;
}
<li><a class="menu-kompetencje" href="{% url "curriculum" %}">Kompetencje</a></li>
<li><a class="menu-szkolenia" href="{% url "info" "turniej/" %}">Turniej</a></li>
<li><a class="menu-wesprzyj" href="{% url "info" "wesprzyj/" %}">Wesprzyj nas</a></li>
- <li><a class="menu-o-nas" href="{% url "info" "o-nas/" %}">O nas</a></li>
- <li><a class="menu-kontakt" href="{% url "info" "kontakt/" %}">Kontakt</a></li>
+ <li><a class="menu-o-nas" href="{% url "info" "dlatrenera/" %}">Dla trenera</a></li>
+ <li><a class="menu-kontakt" href="{% url "info" "o-nas/" %}">O projekcie</a></li>
{% endblock %}
{% block sponsors %}
{% block extra_script %}
{% compressed_js 'base' %}
-{% endblock %}
\ No newline at end of file
+{% endblock %}
<!--[if lt IE 9]><script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script></script><![endif]-->
</head>
<body id="{% block body-id %}body{% endblock %}">
- {# 1% {% load fnp_annoy %}{% annoy %} #}
+ {% load fnp_annoy %}{% annoy %}
<div id="header-wrapper">
<header class="main {% block header_class %}{% endblock %}" style="position:relative;">
<!--img
--- /dev/null
+Dziękujemy za przesłanie zgłoszenia.
+
+O wynikach rekrutacji poinformujemy uczestników do 30 kwietnia.
+
+Z pozdrowieniami
+
+Zespół Edukacji Medialnej
+Fundacja Nowoczesna Polska
--- /dev/null
+TEM - szkolenie dla trenerów edukacji medialnej
--- /dev/null
+{% extends "contact/thanks.html" %}
+
+{% block contact_form_description %}
+<p>Dziękujemy za przesłanie zgłoszenia.</p>
+
+<p>O wynikach rekrutacji poinformujemy uczestników do 30 kwietnia.</p>
+{% endblock %}
{% for formset in formsets %}
+ <h3>Dane Uczestników i Uczestniczek:</h3>
+ <p>Można zgłosić 3 do 5 osób.</p>
+
{{ formset.management_form }}
<ul class="errorlist">
</ul>
{% for form in formset.forms %}
- <h3>Dane Uczestnika/Uczestniczki:</h3>
+ <h4>Uczestnik lub Uczestniczka nr {{ forloop.counter }}:</h4>
<table>
{{ form.as_table }}
</table>
{% endfor %}
+{% comment %}
<div id="formstub-{{ formset.prefix }}" style="display:none">
<h3>Dane Uczestnika/Uczestniczki:</h3>
<table>
</div>
<input type="button" value="+ Dodaj kolejną osobę" class="add_more" data-selector="#formstub-{{formset.prefix}}" data-prefix="{{formset.prefix}}">
+{% endcomment %}
<script>
</script>
{% for student in contact.body.student %}
* {{ student.first_name }} {{ student.last_name }}{% endfor %}
-Pierwszy etap Turnieju odbędzie się 18 listopada 2014 r.
-Po zakończeniu rejestracji (31 października) do dn. 12 listopada 2014 r.
-każdy Uczestnik otrzyma maila z indywidualną instrukcją dotyczącą
-udziału w I etapie Turnieju.
+Każdy zgłoszony uczeń powinien otrzymać wiadomość z potwierdzeniem
+rejestracji. Prosimy upewnić się, czy potwierdzenie dotarło do każdego
+ze zgłoszonych uczniów. W ten sposób zweryfikujemy, czy podane adresy
+są prawidłowe.
Wszystkie ogłoszenia związane z Turniejem będą publikowane na stronie
http://edukacjamedialna.edu.pl/WTEM. W razie pytań lub wątpliwości
-Dziękujemy za rejestrację w Wielkim Turnieju Edukacji Medialnej.
+Potwierdzenie zgłoszenia uczniów do Wielkiego Turnieju Edukacji Medialnej
--- /dev/null
+Witaj,
+
+Cieszymy się, że chcesz wziąć udział w Wielkim Turnieju Edukacji Medialnej.
+Ty i Twój zespół zostaliście już zgłoszeni.
+Pamiętajcie, że na realizację zadania i przesłanie dokumentacji
+macie czas do 20 grudnia 2015 r.
+
+Informacje związane z projektem do realizacji na pierwszym etapie
+oraz wszystkie ogłoszenia związane z Turniejem będą publikowane
+na stronie http://edukacjamedialna.edu.pl/WTEM. W razie pytań lub
+wątpliwości możesz kontaktować się z nami, pisząc na adres
+edukacjamedialna@nowoczesnapolska.org.pl.
+
+Z pozdrowieniami
+
+Zespół Edukacji Medialnej
+Fundacja Nowoczesna Polska
--- /dev/null
+Potwierdzenie zgłoszenia do Wielkiego Turnieju Edukacji Medialnej
<p>Na adres adres e-mail Opiekuna została wysłana wiadomość potwierdzająca
rejestrację.</p>
-<p>Pierwszy etap Turnieju odbędzie się 18 listopada 2014 r.<br>
-Serdecznie zapraszamy do udziału.</p>
+<p>Każdy zgłoszony uczeń powinien otrzymać wiadomość z potwierdzeniem rejestracji.
+Prosimy upewnić się, czy potwierdzenie dotarło do każdego ze zgłoszonych uczniów.
+W ten sposób zweryfikujemy, czy podane adresy są prawidłowe. </p>
<p>Zespół Edukacji Medialnej<br>
Fundacja Nowoczesna Polska</p>
<li><a href="{% url 'catalogue_lesson' 'metody' %}">Metody edukacyjne</a></li>
{% if request.user.is_authenticated %}<li><a href="{% url 'pybb:index' %}">Forum</a></li>{% endif %}
<li><a href="{% url 'info' 'infografiki' %}">Infografiki</a></li>
+ <li><a href="{% url 'info' 'aplikacje-mobilne' %}">Aplikacje mobilne</a></li>
+ <li><a href="/media/chunks/attachment/poradnik-bezpieczenstwa-mobilnego.pdf">Poradnik bezpieczeństwa mobilnego (PDF)</a></li>
<li><a href="http://nowoczesnapolska.org.pl/prywatnosc/">Polityka prywatności i ciasteczka</a></li>
</ul>
</section>
url(r'^forum/', include('forum.urls')),
url(r'^forum/', include('pybb.urls', namespace='pybb')),
url(r'^kompetencje/', include('curriculum.urls')),
- url(r'^wtem/', include('wtem.urls')),
+ #url(r'^wtem/', include('wtem.urls')),
+ url(r'^tem/', include('wtem.urls')),
)
a_tag = 'brak'
return mark_safe(('<input type="hidden" name="%s" value="%s"/>' % (name, value)) + a_tag)
+class TextareaWithLinks(forms.Textarea):
+ def render(self, name, value, *args, **kwargs):
+ t, links = value
+ self.links = links
+ output = super(TextareaWithLinks, self).render(name, t, *args, **kwargs)
+ moreoutput = "<div style='margin-left: 106px'>"
+ for k, n, v in links:
+ moreoutput += u"<br>%s: %s" % (k, AttachmentWidget().render(n, v))
+ output += mark_safe(moreoutput + "</div>")
+ return output
+
class SubmissionFormBase(forms.ModelForm):
class Meta:
model = Submission
def get_open_answer(answers, exercise):
def get_option(options, id):
for option in options:
- if option['id'] == int(id):
+ if str(option['id']) == id:
return option
exercise_id = str(exercise['id'])
widget = AttachmentWidget
initial = attachment.file.url if attachment else None
else:
- widget = forms.Textarea(attrs={'readonly':True})
- initial = get_open_answer(answers, exercise)
+ #widget = forms.Textarea(attrs={'readonly':True})
+ widget = TextareaWithLinks(attrs={'readonly':True})
+ links = []
+ qfiles = []
+ for qfield in exercise.get('fields', []):
+ if qfield.get('type') == 'file':
+ qfiles.append((qfield['id'], qfield['caption']))
+ if qfiles:
+ eid = int(exercise['id'])
+ by_tag = {}
+ for att in Attachment.objects.filter(submission=submission, exercise_id=eid).order_by('tag'):
+ by_tag[att.tag] = att.file.url
+ for tag, caption in qfiles:
+ v = by_tag.get(tag)
+ if v:
+ links.append((caption, "file_%s__%s" % (eid, tag), v))
+ initial = get_open_answer(answers, exercise), links
fields[answer_field_name] = forms.CharField(
widget = widget,
initial = initial,
- label = 'Rozwiązanie zadania %s' % exercise['id']
+ label = u'Rozwiązanie zadania %s' % exercise['id'],
+ required = False
)
+ choices = [(None, '-')] # + [(i,i) for i in range(exercise['max_points']+1)],
+ i = 0
+ while i <= exercise['max_points']:
+ choices.append((i, i))
+ i += .5
fields[mark_field_name] = forms.ChoiceField(
- choices = [(None, '-')] + [(i,i) for i in range(exercise['max_points']+1)],
+ choices = choices,
initial = submission.get_mark(user_id = request.user.id, exercise_id = exercise['id']),
label = u'Twoja ocena zadania %s' % exercise['id']
)
submissions = sorted(Submission.objects.all(), key = lambda s: -s.final_result)
toret = render_to_string('wtem/admin_report.csv', dict(
submissionsSet = SubmissionsSet(submissions),
- exercise_ids = map(str, range(1,len(exercises)+1))
+ #exercise_ids = map(str, range(1,len(exercises)+1))
+ exercise_ids = [str(e['id']) for e in exercises]
))
response = HttpResponse(toret, content_type = 'text/csv')
response['Content-Disposition'] = 'attachment; filename="wyniki.csv"'
return response
admin.site.register(Submission, SubmissionAdmin)
-admin.site.register(Assignment)
\ No newline at end of file
+admin.site.register(Assignment)
--- /dev/null
+[
+
+{
+ "id": 1,
+ "type": "edumed_wybor",
+ "description": ["Z jaką licencją Creative Commons jest zgodna OGL (Open Government License) i w jakim kraju się ją stosuje?"],
+ "options": [
+ {"id": 1, "text": "CC BY-SA, w Nowej Zelandii,"},
+ {"id": 2, "text": "CC BY-ND, w Kanadzie,"},
+ {"id": 3, "text": "CC BY-SA, w Wlk. Brytanii,"},
+ {"id": 4, "text": "CC BY, w Wlk. Brytanii."}
+ ],
+ "answer": [4],
+ "points": 1
+},
+
+{
+ "id": 2,
+ "type": "edumed_przyporzadkuj",
+ "description": ["Dopasuj definicje do pojęć:"],
+ "buckets": [
+ {"id": 1, "title": "plonk"},
+ {"id": 2, "title": "OZZ"},
+ {"id": 3, "title": "DRM"},
+ {"id": 4, "title": "booksprint"},
+ {"id": 5, "title": "protokół HTTPS"}
+ ],
+ "buckets_name": "Pojęcia",
+ "items": [
+ {"id": 1, "text": "1", "desc": "Oprogramowanie i sprzęt mające uniemożliwić działania niezgodne z prawem autorskim lub warunkami serwisu/wolą producenta. Stosuje się w muzyce, filmach, grach i innych mediach. Opiera się na mechanizmach kryptograficznych, zabezpieczając np. przed nieautoryzowanym odczytem lub skopiowaniem."},
+ {"id": 2, "text": "2", "desc": "Forma współpracy, polegająca na bardzo szybkim (od kilku godzin do kilku dni) stworzeniu książki przez zespół autorów. Zwykle zespół ten zbiera się przez internet, a książka wydawana jest w formie elektronicznej."},
+ {"id": 3, "text": "4", "desc": "Jeden z protokołów umożliwiający przesyłanie w sieci zaszyfrowanych informacji, dzięki czemu dostęp do treści mają jedynie nadawca oraz odbiorca komunikatu."},
+ {"id": 4, "text": "5", "desc": "Dodanie osoby, której postów nie chcemy czytać, do mechanizmu automatycznego usuwania wiadomości."},
+ {"id": 5, "text": "6", "desc": "Podmiot zarządzający majątkowymi prawami autorskimi, głównie poprzez wydawanie licencji na korzystanie z utworów."}
+ ],
+ "items_name": "Definicje",
+ "answer": {
+ "1": [4],
+ "2": [5],
+ "3": [1],
+ "4": [2],
+ "5": [3]
+ },
+ "points_per_hit": 1
+},
+
+{
+ "id": 3,
+ "type": "open",
+ "description": ["Co Myszka Miki ma wspólnego z wydłużeniem okresu obowiązywania majątkowych praw autorskich? O ile został wydłużony okres obowiązywania praw majątkowych w stosunku do wcześniejszych przepisów?"],
+ "open_part": ["W jaki sposób dotarłeś/aś do tej informacji? Wklej adres strony, z której skorzystałeś/aś."],
+ "open_part_rows": 1,
+ "max_points": 2
+},
+
+{
+ "id": 4,
+ "type": "edumed_wybor",
+ "description": ["W którym z tych miast dojedziesz trolejbusem nr 150 z dworca PKP do al. Racławickich?"],
+ "options": [
+ {"id": 1, "text": "w Lublinie"},
+ {"id": 2, "text": "w Tychach"},
+ {"id": 3, "text": "w Gdyni"}
+ ],
+ "answer": [1],
+ "points": 1,
+ "open_part": ["W jaki sposób dotarłeś/aś do tej informacji? Wklej adres strony, z której skorzystałeś/aś."],
+ "open_part_rows": 1,
+ "max_points": 1.5
+},
+
+{
+ "id": 5,
+ "type": "edumed_wybor",
+ "description": ["Którą frazę należy dodać do zapytania w wyszukiwarce internetowej Google.com, aby wyszukać tylko prezentacje w formacie OpenDocument?"],
+ "options": [
+ {"id": 1, "text": "tylko prezentacje"},
+ {"id": 2, "text": "OpenDocument"},
+ {"id": 3, "text": "filetype:ppt"},
+ {"id": 4, "text": "filetype:odp"}
+ ],
+ "answer": [4],
+ "points": 1
+},
+
+{
+ "id": 6,
+ "type": "edumed_wybor",
+ "description": ["Do jakiej organizacji powinieneś/-nnaś się zwrócić, jeśli zapłaciłeś/-aś za zamówiony przez internet towar i go nie otrzymałeś/-aś, a ze sprzedawcą nie ma kontaktu?"],
+ "options": [
+ {"id": 1, "text": "UOKiK"},
+ {"id": 2, "text": "UKE"},
+ {"id": 3, "text": "RZP"},
+ {"id": 4, "text": "KNF"}
+ ],
+ "answer": [1],
+ "points": 1
+},
+
+{
+ "id": 7,
+ "type": "open",
+ "description": ["Ile czasu, zgodnie z polskim prawem, klient ma na zwrot towaru/usługi zakupionych przez internet? Czy można to zrobić bez podawania przyczyny? Podaj, jaki akt prawny to reguluje."],
+ "max_points": 3
+},
+
+{
+ "id": 8,
+ "type": "open",
+ "description": ["Jakie poziomy widoczności swoich postów możesz ustawić na Facebooku? Wskaż co najmniej dwa."],
+ "max_points": 2
+},
+
+{
+ "id": 9,
+ "type": "open",
+ "description": ["Podaj przykład inicjatywy sfinansowanej metodą crowdfundingu. Czy w Polsce można finansować tą metodą różne przedsięwzięcia? Jeśli tak, to na jakiej podstawie prawnej?"],
+ "max_points": 2
+},
+
+{
+ "id": 10,
+ "type": "edumed_prawdafalsz",
+ "description": ["Oznacz poniższe zdania jako prawdziwe lub fałszywe."],
+ "statements": [
+ ["Akcyza to jeden z elementów polityki antymonopolowej.", false],
+ ["Większość (98%) treści w serwisie ninateka.pl jest dostępna za darmo bez konieczności logowania.", true],
+ ["GIODO to instytucja uprawniona do kontroli zgodności przetwarzanych danych z przepisami o ochronie danych osobowych.", true],
+ ["Polska telewizja publiczna utrzymuje się jedynie z wpływów finansowych z abonamentu radiowo-telewizyjnego.", false],
+ ["Grupa ITI jest właścicielem TV TVN oraz serwisu sympatia.pl.", true]
+ ],
+ "points_per_hit": 0.5
+},
+
+{
+ "id": 11,
+ "type": "open",
+ "description": ["Znajdź w sieci krótki przykład (tekstowy lub filmowy) każdego z podanych poniżej gatunków. W przypadku tekstu - wklej go i podaj jego źródło. Jeśli prezentujesz film - wklej link do strony, na której się znajduje."],
+ "fields": [
+ {"caption": "reportaż", "id": 1},
+ {"caption": "felieton", "id": 2},
+ {"caption": "wywiad", "id": 3}
+ ],
+ "max_points": 3
+},
+
+{
+ "id": 12,
+ "type": "open",
+ "description": ["Na podstawie poniższego tekstu przygotuj:"],
+ "fields": [
+ {"caption": "a. komunikat zawierający Twoją opinię nt. proponowanych w rozporządzeniu zmian. Staraj się uargumentować swoje stanowisko.", "id": 1},
+ {"caption": "b. komunikat perswazyjny będący częścią kampanii informacyjno-promocyjnej nowych przepisów.", "id": 2}
+ ],
+ "description_after": [
+ "Opakowania, pojemniki lub komory ładunkowe w środkach transportu powinny być oznakowane w sposób trwały i czytelny, umożliwiać identyfikację rodzaju transportowanych odpadów oraz posiadać widoczne odporne na warunki atmosferyczne oznakowanie identyfikujące zawierające:<br/>1) kod odpadów w nich transportowanych zgodnie z katalogiem odpadów;<br/>2) imię i nazwisko oraz adres zamieszkania lub nazwę i adres siedziby wytwórcy odpadów. (...)"
+ ],
+ "max_points": 4
+},
+
+{
+ "id": 13,
+ "type": "edumed_wybor",
+ "description": ["Czy możesz opublikować niekomercyjnie remiks wierszy dostępnych w bibliotece internetowej Wolne Lektury? Dlaczego?"],
+ "options": [
+ {"id": 1, "text": "Nie mogę."},
+ {"id": 2, "text": "Mogę, ale dopiero kiedy uzyskam zgodę autorów/autorek lub ich spadkobierców."},
+ {"id": 3, "text": "Mogę. Uiściłem/-am opłaty na rzecz Funduszu Promocji Twórczości."},
+ {"id": 4, "text": "Mogę, wiersze z biblioteki Wolne Lektury znajdują się w domenie publicznej albo publikowane są na licencji CC BY-SA 3.0, która umożliwia taką publikację."}
+ ],
+ "answer": [4],
+ "points": 1
+},
+
+{
+ "id": 14,
+ "type": "open",
+ "description": ["Na czym polega tzw. otwarty dostęp? Podaj dwa przykłady inicjatyw realizowanych zgodnie z tym hasłem. Podaj adres(y) stron(y), na której/ych znalazłeś(-aś) te informacje."],
+ "max_points": 3
+},
+
+{
+ "id": 15,
+ "type": "edumed_wybor",
+ "description": ["Wskaż wszystkie prawidłowe odpowiedzi dotyczące Urzędu Komisji Nadzoru Finansowego:"],
+ "options": [
+ {"id": 1, "text": "wydaje zezwolenia na prowadzenie działalności na rynku finansowym"},
+ {"id": 2, "text": "realizuje postanowienia KNF"},
+ {"id": 3, "text": "pracownicy Urzędu należą do korpusu służby cywilnej"},
+ {"id": 4, "text": "w skład urzędu wchodzi Departament Nadzoru Inwestycji Emerytalnych"}
+ ],
+ "answer": [2, 4],
+ "points_per_hit": 1
+},
+
+{
+ "id": 16,
+ "type": "edumed_wybor",
+ "description": ["Administrator strony zgodnej z <em>Wytycznymi dla dostępności treści internetowych</em> na najwyższym poziomie zgodności (AAA) może:"],
+ "options": [
+ {"id": 1, "text": "umieszczać na niej skany dokumentów bez OCR"},
+ {"id": 2, "text": "zamieszczać najważniejsze informacje w postaci audio lub wideo, dołączając alternatywną wersję tekstową"},
+ {"id": 3, "text": "wymagać od użytkownika wpisania słowa odczytanego z obrazka"},
+ {"id": 4, "text": "pisać, stosując żargon naukowy i nie wyjaśniając znaczenia trudniejszych pojęć"}
+ ],
+ "answer": [2],
+ "points": 1
+},
+
+{
+ "id": 17,
+ "type": "open",
+ "description": ["W pobliskim domu kultury odbywa się koncert Twojej ulubionej grupy. Zaproś swojego nauczyciela języka polskiego (napisz e-mail). Poinformuj o tym wydarzeniu swoich znajomych na Facebooku. Pamiętaj, aby każdy z komunikatów był sformułowany zgodnie z zasadami medialnego savoire vivre'u."],
+ "fields": [
+ {"caption": "e-mail do nauczyciela", "id": 1},
+ {"caption": "wiadomość do znajomych", "id": 2}
+ ],
+ "max_points": 4
+},
+
+{
+ "id": 18,
+ "type": "edumed_wybor",
+ "description": [" Kolega prosi Cię w komentarzu na Facebooku o podanie numeru telefonu wspólnego znajomego. Co robisz?"],
+ "options": [
+ {"id": 1, "text": "telefonujesz do znajomego i pytasz go, czy możesz przekażać nr telefonu koledze"},
+ {"id": 2, "text": "przekazujesz nr znajomego smsem lub w prywatnej wiadomości"},
+ {"id": 3, "text": "podajesz nr telefonu w kolejnym komentarzu"}
+ ],
+ "answer": [1, 2],
+ "answer_mode": "all_or_nothing",
+ "points": 1
+},
+
+{
+ "id": 19,
+ "type": "file_upload",
+ "description": [
+ "Poszukujesz materiałów z blogów lub innych serwisów internetowych dotyczących księcia Józefa Poniatowskiego. Zależy Ci jednak, aby materiały te można było swobodnie wykorzystywać, udostępniać i modyfikować, także w celach komercyjnych. Stwórz odpowiednie zapytanie w wyszukiwarce; zrób zrzut ekranu przedstawiający zapytanie."
+ ],
+ "max_points": 2,
+ "max_file_size_string": "5 megabajtów"
+},
+
+{
+ "id": 20,
+ "type": "edumed_wybor",
+ "description": ["W przypadku logowania się w ramach sieci TOR dostawca internetu użytkownika zna:"],
+ "options": [
+ {"id": 1, "text": "numer IP użytkownika"},
+ {"id": 2, "text": "loginy i hasła użytkownika"},
+ {"id": 3, "text": "dane, które użytkownik przesyła i odbiera"},
+ {"id": 4, "text": "adresy stron, które użytkownik odwiedza"}
+ ],
+ "answer": [1],
+ "points": 1
+},
+
+{
+ "id": 21,
+ "type": "open",
+ "description": ["Podaj trzy przykłady wolnego oprogramowania."],
+ "max_points": 3
+}
+
+]
import os
+import re
from django import forms
from django.utils import simplejson
def save(self):
submission = super(WTEMForm, self).save()
for name, file in self.files.items():
- exercise_id = int(name.split('_')[-1])
+ m = re.match(r'attachment_for_(\d+)(?:__(.*))?', name)
+ exercise_id = int(m.group(1))
+ tag = m.group(2) or None
try:
- attachment = Attachment.objects.get(submission = submission, exercise_id = exercise_id)
+ attachment = Attachment.objects.get(submission = submission, exercise_id = exercise_id, tag=tag)
except Attachment.DoesNotExist:
- attachment = Attachment(submission = submission, exercise_id = exercise_id)
+ attachment = Attachment(submission = submission, exercise_id = exercise_id, tag=tag)
attachment.file = file
attachment.save()
email = EmailMessage(subject, body,
getattr(settings, 'WTEM_FROM', 'edukacjamedialna@nowoczesnapolska.org.pl'),
to, headers = headers)
- email.send(fail_silently = False)
\ No newline at end of file
+ #print email.message()
+ email.send(fail_silently = False)
def send_key(self, submission):
self.stdout.write('>>> sending to ' + submission.email)
send_mail(
- subject = "WTEM - Twój link do zadań",
+ subject = "Egzamin TEM - Twój link do zadań",
body = render_to_string('wtem/email_key.txt', dict(submission = submission)),
to = [submission.email]
- )
\ No newline at end of file
+ )
def get_submissions():
- return Submission.objects.exclude(answers = None).all()
+ return sorted(Submission.objects.exclude(answers = None).all(), key=lambda s: -s.final_result)
-minimum = 47.5
+minimum = 55
class Command(BaseCommand):
def handle_to_students(self, *args, **options):
self.stdout.write('>>> Sending results to students')
- subject = 'Twój wynik w I etapie Wielkiego Turnieju Edukacji Medialnej'
+ subject = 'Wyniki I etapu Wielkiego Turnieju Edukacji Medialnej'
for submission in get_submissions():
if options['only_to'] and submission.email != options['only_to']:
def handle_to_teachers(self, *args, **options):
self.stdout.write('>>> Sending results to teachers')
- subject = 'Wyniki Twoich uczniów w I etapie Wielkiego Turnieju Edukacji Medialnej'
+ subject = 'Wyniki I etapu Wielkiego Turnieju Edukacji Medialnej'
failed = sent = 0
submissions_by_contact = dict()
body = message,
to = [email]
)
- except:
+ except BaseException, e:
self.failed += 1
self.stdout.write('failed sending to: ' + email + ': ' + str(e))
else:
--- /dev/null
+# -*- coding: utf-8 -*-
+
+from optparse import make_option
+
+from django.core.management.base import BaseCommand
+from django.conf import settings
+from wtem.management.commands import send_mail
+from django.utils import translation
+from django.template.loader import render_to_string
+
+from contact.models import Contact
+from wtem.models import Submission
+
+
+def get_submissions():
+ return sorted(Submission.objects.exclude(answers = None).all(), key=lambda s: -s.final_result)
+
+minimum = 55
+
+class Command(BaseCommand):
+ args = 'csv_filename'
+
+ option_list = BaseCommand.option_list + (
+ make_option('--to-teachers',
+ action='store_true',
+ dest='to_teachers',
+ default=False,
+ help='Send emails to teachers'),
+ make_option('--to-students',
+ action='store_true',
+ dest='to_students',
+ default=False,
+ help='Send emails to students'),
+ make_option('--only-to',
+ action='store',
+ dest='only_to',
+ default=None,
+ help='Send emails to students'),
+ )
+
+ def handle(self, csv_filename, *args, **options):
+ translation.activate('pl')
+ self.results = [line.decode('utf-8').strip('\n').split(',') for line in open(csv_filename)]
+ for target in ['to_teachers', 'to_students']:
+ if options[target]:
+ self.sent = 0
+ self.failed = 0
+ getattr(self, 'handle_' + target)(*args, **options)
+
+ def handle_to_students(self, *args, **options):
+ self.stdout.write('>>> Sending results to students')
+ subject = 'Wyniki I etapu Wielkiego Turnieju Edukacji Medialnej'
+
+ for result in self.results:
+ if options['only_to'] and result[1] != options['only_to']:
+ continue
+ final_result = result[4]
+ if result[5] != 'TAK':
+ template = 'results_student_failed.txt'
+ else:
+ template = 'results_student_passed.txt'
+ message = render_to_string('wtem/' + template, dict(final_result=final_result))
+ self.send_message(message, subject, result[1])
+
+ self.sum_up()
+
+ def handle_to_teachers(self, *args, **options):
+ self.stdout.write('>>> Sending results to teachers')
+ subject = 'Wyniki I etapu Wielkiego Turnieju Edukacji Medialnej'
+ failed = sent = 0
+
+ submissions_by_contact = dict()
+
+ from decimal import Decimal, InvalidOperation
+ def dec_or_0(s):
+ try:
+ return Decimal(s)
+ except InvalidOperation:
+ return Decimal(0)
+
+ for result in sorted(self.results, key=lambda r: dec_or_0(r[4]), reverse=True):
+ if options['only_to'] and result[3] != options['only_to']:
+ continue
+ submissions_by_contact.setdefault(result[3], []).append({
+ 'first_name': result[0].split()[0],
+ 'last_name': result[0].split()[1],
+ 'final_result': result[4],
+ })
+
+ for email, submissions in submissions_by_contact.items():
+ # contact = Contact.objects.get(id=contact_id)
+ message = render_to_string('wtem/results_teacher.txt', dict(submissions = submissions))
+ self.send_message(message, subject, email)
+
+ self.sum_up()
+
+ def sum_up(self):
+ self.stdout.write('sent: %s, failed: %s' % (self.sent, self.failed))
+
+ def send_message(self, message, subject, email):
+ self.stdout.write('>>> sending results to %s' % email)
+ try:
+ send_mail(
+ subject = subject,
+ body = message,
+ to = [email]
+ )
+ except BaseException, e:
+ self.failed += 1
+ self.stdout.write('failed sending to: ' + email + ': ' + str(e))
+ else:
+ self.sent += 1
+ self.stdout.write('message sent to: ' + email)
+
+
--- /dev/null
+# -*- coding: utf-8 -*-
+from south.utils import datetime_utils as datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+ # Adding field 'Attachment.tag'
+ db.add_column(u'wtem_attachment', 'tag',
+ self.gf('django.db.models.fields.CharField')(max_length=128, null=True, blank=True),
+ keep_default=False)
+
+
+ def backwards(self, orm):
+ # Deleting field 'Attachment.tag'
+ db.delete_column(u'wtem_attachment', 'tag')
+
+
+ models = {
+ u'auth.group': {
+ 'Meta': {'object_name': 'Group'},
+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+ },
+ u'auth.permission': {
+ 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ u'auth.user': {
+ 'Meta': {'object_name': 'User'},
+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),
+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),
+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+ },
+ u'contact.contact': {
+ 'Meta': {'ordering': "('-created_at',)", 'object_name': 'Contact'},
+ 'body': ('jsonfield.fields.JSONField', [], {}),
+ 'contact': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'form_tag': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'ip': ('django.db.models.fields.IPAddressField', [], {'max_length': '15'})
+ },
+ u'contenttypes.contenttype': {
+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ },
+ u'wtem.assignment': {
+ 'Meta': {'object_name': 'Assignment'},
+ 'exercises': ('jsonfield.fields.JSONField', [], {}),
+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']", 'unique': 'True'})
+ },
+ u'wtem.attachment': {
+ 'Meta': {'object_name': 'Attachment'},
+ 'exercise_id': ('django.db.models.fields.IntegerField', [], {}),
+ 'file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),
+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'submission': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['wtem.Submission']"}),
+ 'tag': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'})
+ },
+ u'wtem.submission': {
+ 'Meta': {'object_name': 'Submission'},
+ 'answers': ('django.db.models.fields.CharField', [], {'max_length': '65536', 'null': 'True', 'blank': 'True'}),
+ 'contact': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contact.Contact']", 'null': 'True'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '100'}),
+ 'end_time': ('django.db.models.fields.CharField', [], {'max_length': '5', 'null': 'True', 'blank': 'True'}),
+ 'examiners': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['auth.User']", 'null': 'True', 'blank': 'True'}),
+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),
+ 'key_sent': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'marks': ('jsonfield.fields.JSONField', [], {'default': '{}'})
+ }
+ }
+
+ complete_apps = ['wtem']
\ No newline at end of file
return marks
def get_final_exercise_mark(self, exercise_id):
- exercise = exercises[int(exercise_id)-1]
+ #exercise = exercises[int(exercise_id)-1]
+ exercise = [e for e in exercises if str(e['id']) == str(exercise_id)][0]
if exercise_checked_manually(exercise):
marks_by_examiner = self.get_exercise_marks_by_examiner(exercise_id)
if len(marks_by_examiner):
- return sum(map(int, marks_by_examiner.values())) / float(len(marks_by_examiner))
+ return sum(map(float, marks_by_examiner.values())) / float(len(marks_by_examiner))
else:
return None
else:
@property
def final_result(self):
final = 0
- for exercise_id in map(str,range(1, len(exercises) + 1)):
+ #for exercise_id in map(str,range(1, len(exercises) + 1)):
+ for exercise_id in [str(x['id']) for x in exercises]:
mark = self.get_final_exercise_mark(exercise_id)
if mark is not None:
final += mark
class Attachment(models.Model):
submission = models.ForeignKey(Submission)
exercise_id = models.IntegerField()
+ tag = models.CharField(max_length=128, null=True, blank=True)
file = models.FileField(upload_to = 'wtem/attachment')
def clean(self):
if not isinstance(self.exercises, list):
raise ValidationError(_('Assigned exercises must be declared in a list format'))
- for exercise in self.exercises:
- if not isinstance(exercise, int) or exercise < 1:
- raise ValidationError(_('Invalid exercise id: %s' % exercise))
+ #for exercise in self.exercises:
+ # if not isinstance(exercise, int) or exercise < 1:
+ # raise ValidationError(_('Invalid exercise id: %s' % exercise))
def __unicode__(self):
return self.user.username + ': ' + ','.join(map(str,self.exercises))
def exercise_checked_manually(exercise):
- return (exercise['type'] in ('open', 'file_upload')) or 'open_part' in exercise
\ No newline at end of file
+ return (exercise['type'] in ('open', 'file_upload')) or 'open_part' in exercise
--- /dev/null
+{% load wtem_csv %}email,nazwisko,imie,suma{% for exercise_id in exercise_ids %}{% csv_header exercise_id submissionsSet %}{% endfor %}{% for submission in submissionsSet.submissions %}
+{{submission.email}},{{submission.last_name}},{{submission.first_name}},{{submission.final_result_as_string}}{% for exercise_id in exercise_ids %},{% csv_row_fragment exercise_id submission submissionsSet %}{% endfor %}{% endfor %}
\ No newline at end of file
--- /dev/null
+{% extends "base.html" %}
+
+{% block title %}Wielki Turniej Edukacji Medialnej{% endblock %}
+
+{% block body %}
+
+ <h1>Wielki Turniej Edukacji Medialnej</h1>
+
+ {% block contact_form_description %}
+ <p class="notice">Rejestracja uczestników została zamknięta.</p>
+ {% endblock %}
+
+{% endblock %}
--- /dev/null
+Droga Trenerko/Drogi Trenerze,
+
+Poniżej znajduje się wygenerowany specjalnie dla Ciebie link, pod którym będziesz mógł/mogła rozwiązać zadania egzaminacyjne TEM.
+Pamiętaj, że egzamin rozpocznie się dziś, 16 listopada o godz. 16.00. Na rozwiązanie zadań masz dokładnie tydzień.
+W razie dodatkowych pytań skontaktuj się z koordynatorką projektu, Dorotą Górecką dorotagorecka@nowoczesnapolska.org.pl.
+
+https://edukacjamedialna.edu.pl{% url 'wtem_form' key=submission.key %}
+
+Powodzenia!
+
+Zespół Edukacji Medialnej
+Fundacja Nowoczesna Polska
+
--- /dev/null
+Poniżej znajduje się wygenerowany specjalnie dla Ciebie link, pod którym będziesz mógł/mogła rozwiązać zadania pierwszego etapu Wielkiego Turnieju Edukacji Medialnej:
+
+http://edukacjamedialna.edu.pl{% url 'wtem_form' key=submission.key %}
+
+Pierwszy etap Turnieju odbędzie się we wtorek 18 listopada o godz. 16.30. Na rozwiązanie testu będziesz mieć ok. 90 min. Aby rozwiązać test, potrzebny Ci będzie komputer ze stabilnym łączem internetowym oraz zainstalowaną i zaktualizowaną przeglądarką.
+
+Każdy uczestnik otrzymał indywidualny link, pod którym może rozwiązywać zadania samodzielnie. Wszelkie działania mogące świadczyć o tym, że uczestnik nie rozwiązuje testu samodzielnie, np. wchodzenie na stronę z zadaniami przez więcej niż jedną osobę, będą przez nas śledzone i poskutkują dyskwalifikacją.
+
+W razie dodatkowych pytań możesz kontaktować się z nami pod adresem edukacjamedialna@nowoczesnapolska.org.pl lub numerem telefonu +48 22 621-30-17.
+
+Przypominamy, że główną nagrodą w Turnieju jest tygodniowy pobyt na Digital Media Summer Camp na Mercer University w Macon (Georgia, USA).
+
+Powodzenia!
+
+Zespół Edukacji Medialnej
+Fundacja Nowoczesna Polska
\ No newline at end of file
--- /dev/null
+Szanowni Państwo,
+
+Informujemy, że na podane przez Państwa adresy e-mail uczestników i uczestniczek Wielkiego Turnieju Edukacji Medialnej zostały wysłane indywidualne linki, które pozwolą im przystąpić do I etapu Turnieju.
+
+Uprzejmie prosimy o sprawdzenie, czy wszyscy otrzymali wiadomość z linkiem. Jeśli któryś z uczestników nie otrzymał swojej instrukcji, prosimy o informację na adres edukacjamedialna@nowoczesnapolska.org.pl najpóźniej do poniedziałku 17 listopada do godz. 12.00. Zgłoszenie problemu powinno zawierać:
+* imię, nazwisko, adres e-mail uczestnika, który nie otrzymał wiadomości z linkiem,
+* imię, nazwisko, adres e-mail Opiekuna/Opiekunki (zgodnie z danymi z formularza zgłoszeniowego).
+
+Pierwszy etap Turnieju odbędzie się we wtorek 18 listopada o godz. 16.30. Na rozwiązanie testu uczestnicy będą mieć ok. 90 min. Aby rozwiązać test, potrzebny jest komputer ze stabilnym łączem internetowym oraz zainstalowaną i zaktualizowaną przeglądarką.
+
+Przypominamy, że główną nagrodą w Turnieju jest tygodniowy pobyt na Digital Media Summer Camp na Mercer University w Macon (Georgia, USA).
+
+W razie dodatkowych pytań prosimy kontaktować się z nami pod adresem edukacjamedialna@nowoczesnapolska.org.pl lub pod numerem telefonu +48 22 621-30-17.
+
+Z pozdrowieniami
+
+Zespół Edukacji Medialnej
+Fundacja Nowoczesna Polska
\ No newline at end of file
--- /dev/null
+Pierwszy etap Wielkiego Turnieju Edukacji Medialnej już wkrótce
\ No newline at end of file
--- /dev/null
+<div class="exercise exercise-wtem prawdafalsz" data-type="prawdafalsz" data-id="{{exercise.id}}">
+
+ <h3>Zadanie {{no}}</h3>
+
+ <div class="question" data-no="1">
+ <div class="description">
+ {% for para in exercise.description %}
+ <p class="paragraph">
+ {{para}}
+ </p>
+ {% endfor %}
+ </div>
+
+ <ul class="lista punkt ">
+ {% for statement in exercise.statements %}
+ <li class="question-piece">
+ <span class="buttons">
+ <a href="#" data-value="true" class="true">Prawda</a>
+ <a href="#" data-value="false" class="false">Fałsz</a>
+ </span>
+ {{statement.0}}
+ </li>
+ {% endfor %}
+ </ul>
+ </div>
+</div>
\ No newline at end of file
--- /dev/null
+<div class="exercise exercise-wtem przyporzadkuj" data-type="przyporzadkuj" data-id="{{exercise.id}}">
+
+ <h3>Zadanie {{no}}</h3>
+
+ <div class="question" data-no="1">
+
+ <div class="description">
+ {% for para in exercise.description %}
+ <p class="paragraph">
+ {{para}}
+ </p>
+
+ {% endfor %}
+ </div>
+
+ <p class="paragraph">{{exercise.buckets_name|default:"kategorie"|capfirst}}:</p>
+
+ <ul class="lista punkt predicate" data-name="kategorie">
+ {% for bucket in exercise.buckets %}
+ <li data-predicate="{{bucket.id}}">
+ {{bucket.title}}
+ <ul class="subjects">
+ <li class="placeholder multiple ui-droppable accepting"></li>
+ </ul>
+ </li>
+ {% endfor %}
+ </ul>
+ <br class="clr">
+
+ <div class="description" style="margin-bottom:10px;">
+ <p class="paragraph">{{exercise.items_name|capfirst}}:</p>
+ {% if not exercise.hide_default_instruction %}
+ <span class="instruction">Przeciągnij i upuść numery odpowiedzi w wybranym polu powyżej.</span>
+ {% endif %}
+ {% if exercise.items_instruction %}
+ <span class="instruction">{{exercise.items_instruction}}</span>
+ {% endif %}
+ </div>
+
+ <ul class="lista punkt subject {% if exercise.items_inline %}wtem-items-inline{% endif %}" data-target="kategorie">
+ {% for item in exercise.items %}
+ {% comment %}
+ data-solution set to single bogus value only to indicate that this piece has no multiple solutions, not used otherwise (see: is_multiple in edumed.coffee).
+ {% endcomment %}
+
+ {% if item.img or item.desc %}
+ <li style="magin-bottom:5px;">
+ <span data-solution="1" data-no="{{forloop.counter}}" data-id="{{item.id}}" class="question-piece draggable ui-draggable">{{item.text}}</span>
+
+ {% if item.img %}
+ {% if item.href %}
+ <a href="{% if not item.href_absolute %}/static/wtem/img/{% endif %}{{item.href}}" target="wtem_aside">
+ {% endif %}
+
+ <img src="/static/wtem/img/{{item.img}}"/>
+
+ {% if item.href %}</a>{% endif %}
+ {% endif %}
+ {% if item.desc %}
+ {{item.desc}}
+ {% endif %}
+ </li>
+ {% else %}
+ <li data-solution="1" data-no="{{forloop.counter}}" data-id="{{item.id}}" class="question-piece draggable ui-draggable">{{item.text}}</li>
+ {% endif %}
+
+ {% endfor %}
+ </ul>
+
+ <br class="clr">
+
+ {% if exercise.description_after %}
+ {% autoescape off %}
+ {% for para in exercise.description_after %}
+ <p class="paragraph">
+ {{para}}
+ </p>
+ {% endfor %}
+ {% endautoescape %}
+ {% endif %}
+
+ </div>
+
+</div>
+
--- /dev/null
+<div class="exercise exercise-wtem uporzadkuj" data-type="uporzadkuj" data-id="{{exercise.id}}">
+
+ <h3>Zadanie {{no}}</h3>
+
+ <div class="question" data-no="1">
+ <div class="description">
+ {% for para in exercise.description %}
+ <p class="paragraph">
+ {{para}}
+ </p>
+ {% endfor %}
+ <span class="instruction">Kliknij i przytrzymaj wybraną odpowiedź, następnie przeciągnij w nowe miejsce.</span>
+ </div>
+
+ <ol class="lista num ui-sortable">
+ {% for item in exercise.items %}
+ <li class="question-piece" data-pos="{{item.id}}">{{item.text}}</li>
+ {% endfor %}
+ </ol>
+
+ </div>
+</div>
+
--- /dev/null
+<div class="exercise exercise-wtem wybor" data-type="wybor" data-id="{{exercise.id}}">
+
+ <h3>Zadanie {{no}}</h3>
+
+ {% autoescape off %}
+ <div class="description">
+ {% for para in exercise.description %}
+ <p class="paragraph">
+ {{para}}
+ </p>
+ {% endfor %}
+ <span class="instruction">
+ {% if exercise.answer|length == 1 %}
+ Tylko jedna odpowiedź jest prawidłowa.
+ {% else %}
+ Zaznacz wszystkie prawidłowe odpowiedzi.
+ {% endif %}
+ </span>
+ </div>
+ {% endautoescape %}
+
+ <div class="question" data-no="1">
+ <ol class="lista num">
+ {% for option in exercise.options %}
+ <li class="question-piece" data-name="{{option.id}}">
+ <input type="{% if exercise.answer|length == 1 %}radio{% else %}checkbox{% endif %}" name="{% if exercise.answer|length == 1 %}e{{no}}{% else %}e{{no}}_{{option.id}}{% endif %}" id="e{{no}}_{{option.id}}">
+ <label for="e{{no}}_{{option.id}}">{{option.text}}</label>
+ </li>
+ {% endfor %}
+ </ol>
+ </div>
+
+ {% if exercise.open_part %}
+ <div class="open_part">
+ <div class="description">
+ {% for para in exercise.open_part %}
+ <p class="paragraph">
+ {{para}}
+ </p>
+ {% endfor %}
+ </div>
+ <textarea style="width: 100%; margin-top:10px;" rows="{{exercise.open_part_rows|default:10}}"></textarea>
+ </div>
+ {% endif %}
+
+</div>
\ No newline at end of file
--- /dev/null
+<div class="exercise-wtem" data-type="file" data-id="{{exercise.id}}">
+
+ <h3>Zadanie {{no}}</h3>
+
+ <div class="description">
+ {% for para in exercise.description %}
+ <p class="paragraph">
+ {{para}}
+ </p>
+ {% endfor %}
+ </div>
+
+ {% if exercise.max_file_size_string %}
+ <p style="font-weight: bold;">Plik nie powinien być większy niż {{exercise.max_file_size_string}}.</p>
+ {% endif %}
+ <div style="margin: 15px auto; width:300px;">
+ <input style="float: left;" type="file" name="attachment_for_{{exercise.id}}"/>
+ <div style="clear:both;"></div>
+ </div>
+
+
+ {% autoescape off %}
+ {% for para in exercise.description_after %}
+ <p>{{para}}</p>
+ {% endfor %}
+ {% endautoescape %}
+
+</div>
\ No newline at end of file
--- /dev/null
+<div class="exercise-wtem" data-type="open" data-id="{{exercise.id}}">
+
+ <h3>Zadanie {{no}}</h3>
+
+ <div class="description">
+ {% autoescape off %}
+ {% for para in exercise.description %}
+ <p class="paragraph">
+ {{para}}
+ </p>
+ {% endfor %}
+ {% endautoescape %}
+ </div>
+
+ {% if exercise.fields %}
+ {% for field in exercise.fields %}
+ <div class="wtem-open-field">
+ <label class="wtem-caption">{{field.caption}} <span class="label_suffix"></span></label>
+ <textarea style="width: 100%;" rows="{{field.rows|default:10}}" data-field-id="{{field.id}}" {% if field.max_length %}maxlength="{{field.max_length}}"{% endif %} {% if field.input_id %}id="{{field.input_id}}"{% endif %}></textarea>
+ </div>
+ {% endfor %}
+ {% else %}
+ <textarea style="width: 100%; margin-top:10px;" rows="{{field.rows|default:10}}" {% if field.max_length %}maxlength="{{field.max_length}}"{% endif %} {% if field.input_id %}id="#{{field.input_id}}"{% endif %}></textarea>
+ {% endif %}
+
+ {% if exercise.description_after %}
+ <div class="description">
+ {% autoescape off %}
+ {% for para in exercise.description_after %}
+ <p class="paragraph">
+ {{para}}
+ </p>
+ {% endfor %}
+ {% endautoescape %}
+ </div>
+ {% endif%}
+
+</div>
\ No newline at end of file
--- /dev/null
+{% extends 'base_super.html' %}
+
+{% block body %}
+<h1>Wielki Turniej Edukacji Medialnej</h1>
+<h2>Niepoprawny link</h2>
+
+<p>Podany adres jest niepoprawny. Żeby móc rozwiązywać zadania, musisz przejść pod dokładnie ten sam adres, co podany w wysłanej do Ciebie wiadomości e-mail.</p>
+
+{% endblock %}
\ No newline at end of file
--- /dev/null
+{% extends 'base_super.html' %}
+
+{% block body %}
+<h1>Wielki Turniej Edukacji Medialnej</h1>
+<h2>Niepoprawny link</h2>
+
+<p>Podany adres jest niepoprawny. Żeby móc rozwiązywać zadania, musisz przejść pod dokładnie ten sam adres, co podany w wysłanej do Ciebie wiadomości e-mail. Jeśli masz z tym kłopot, skontaktuj się z nami pod adresem <a href="mailto:edukacjamedialna@nowoczesnapolska.org.pl">edukacjamedialna@nowoczesnapolska.org.pl</a>.</p>
+
+{% endblock %}
\ No newline at end of file
--- /dev/null
+{% extends 'base_super.html' %}
+{% load compressed %}
+{% load static %}
+{% load cache %}
+
+{% block extra_script %}
+ {% compressed_js 'wtem' %}
+{% endblock %}
+
+
+
+{% block body %}
+<style>
+ .wtem-open-field {
+ margin: 10px 0;
+ }
+ .wtem-open-field textarea {
+ margin-top:0;
+ }
+ .wtem-fixed-info {
+ top: 20px;
+ left: 20px;
+ border: 1px solid black;
+ background: #16a487;
+ border-radius: 0.938em;
+ padding: 5px 2px;
+ color: white;
+ text-align: center;
+ font-weight: bold;
+ }
+ .wtem-items-inline li {
+ display: inline-block;
+ }
+ .instruction {
+ font-weight: bold;
+ }
+ .wtem-disclaimer {
+ font-style: italic;
+ font-size: .9em;
+ }
+
+</style>
+
+<h1>Wielki Turniej Edukacji Medialnej</h1>
+<div class="wtem-fixed-info">Rozwiązania można wysyłać do godziny {{end_time|default:"18.00"}}. <strong>Nie czekaj na ostatnią chwilę!</strong></div>
+
+<p>Witamy w I etapie Wielkiego Turnieju Edukacji Medialnej. Na rozwiązanie zadań masz czas do godz. {{end_time|default:"18.00"}}. Test składa się z 21 pytań. Niektóre z nich mają charakter otwarty - pamiętaj, żeby zostawić sobie odpowiednią ilość czasu na ich rozwiązanie.</p>
+
+<p>Wszelkie aktualności dotyczące Turnieju możesz znaleźć na <a href="http://edukacjamedialna.edu.pl/wtem" target="_info">edukacjamedialna.edu.pl/wtem</a>.</p>
+
+<p>Powodzenia!<br/>
+Zespół Edukacji Medialnej, Fundacja Nowoczesna Polska</p>
+
+<form method="post" enctype="multipart/form-data">
+
+{% cache 30 wtem %}
+{% for exercise in exercises %}
+ {% with 'wtem/exercises/'|add:exercise.type|add:'.html' as template_name %}
+ {% include template_name with exercise=exercise no=forloop.counter %}
+ {% endwith %}
+{% endfor %}
+{% endcache %}
+
+
+<hr/>
+<input type="hidden" name="answers" value=""/>
+
+<p style="text-align:center; margin-top:20px;">Sprawdź jeszcze raz wszystkie swoje odpowiedzi, a następnie wyślij je do nas, klikając w poniższy przycisk:<br/><br/>
+<input type="submit" value="Wyślij moje odpowiedzi" style="display: block; margin: auto;"/>
+<br/>
+<span class="wtem_spinner">
+ <span>Wysyłanie rozwiązań w toku...</span>
+ <img src="{% static 'wtem/spinner.gif' %}"/>
+ <span>Spróbuj jeszcze raz jeśli wysyłanie trwa dłużej niż kilka minut.</span>
+</span>
+</p>
+
+<div class="wtem-fixed-info" style="margin-top:15px;">Rozwiązania można wysyłać do godziny {{end_time|default:"18.00"}}. <strong>Nie czekaj na ostatnią chwilę!</strong></div>
+
+</form>
+
+{% endblock %}
\ No newline at end of file
--- /dev/null
+{% extends 'base_super.html' %}
+
+{% block body %}
+
+<h1>Wielki Turniej Edukacji Medialnej</h1>
+
+<p>Pierszy etap Turnieju został zakończony.</p>
+
+{% endblock %}
\ No newline at end of file
--- /dev/null
+{% extends 'base_super.html' %}
+
+{% block body %}
+
+<h1>Wielki Turniej Edukacji Medialnej</h1>
+
+<p>Pierwszy etap: 18 listopada, 16:30. Czas trwania: ok. 90 minut.</p>
+
+{% endblock %}
\ No newline at end of file
--- /dev/null
+{% load l10n %}Droga Uczestniczko,
+Drogi Uczestniku,
+
+Twój wynik w I etapie Wielkiego Turnieju Edukacji Medialnej to {% localize on %}{{final_result|floatformat}}{% endlocalize %} pkt.
+
+Do zakwalifikowania się do II etapu konieczne było uzyskanie min. 36 pkt.
+
+Dziękujemy za udział w zawodach!
+
+Z pozdrowieniami,
+
+Zespół Edukacji Medialnej
+Fundacja Nowoczesna Polska
--- /dev/null
+{% load l10n %}Droga Uczestniczko,
+Drogi Uczestniku,
+
+Twój wynik w I etapie Wielkiego Turnieju Edukacji Medialnej to {% localize on %}{{final_result|floatformat}}{% endlocalize %} pkt.
+
+Gratulujemy! Zakwalifikowałeś/aś się do II etapu.
+Kolejnym zadaniem, które Cię czeka jest realizacja projektu. Więcej szczegółów opublikujemy na stronie http://edukacjamedialna.edu.pl/wtem w styczniu 2015 r. Zostaniesz o tym poinformowany drogą mailową.
+
+Dziękujemy za udział w zawodach!
+
+Z pozdrowieniami,
+
+Zespół Edukacji Medialnej
+Fundacja Nowoczesna Polska
--- /dev/null
+Szanowna Pani,
+Szanowny Panie,
+
+Wyniki uzyskane przez zgłoszonych przez Panią/Pana uczestników Turnieju to:
+
+{% for submission in submissions %}{{submission.first_name.strip}} {{submission.last_name.strip}}: {{submission.final_result|floatformat}}
+{% endfor %}
+
+Pozostali uczestnicy i uczestniczki zgłoszeni przez Panią/Pana nie przystąpili do rozwiązania testu. Do zakwalifikowania się do II etapu konieczne było uzyskanie min. 36 pkt. Pełna lista uczestników II etapu dostępna jest na stronie http://edukacjamedialna.edu.pl/wtem.
+
+Dziękujemy za udział w zawodach!
+
+Z pozdrowieniami,
+
+Zespół Edukacji Medialnej
+Fundacja Nowoczesna Polska
--- /dev/null
+{% extends 'base_super.html' %}
+
+{% block body %}
+
+<h1>Twoje rozwiązania zostały wysłane</h1>
+
+<p>Dziękujemy za udział w I etapie Wielkiego Turnieju Edukacji Medialnej.
+Twoja praca została wysłana i poprawnie przyjęta przez system.</p>
+
+<p>Jeśli chcesz zmienić którąś z odpowiedzi, do godz. {{end_time|default:"18.00"}} możesz ponownie wysłać rozwiązanie zadań, korzystając z przypisanego Ci linku. W ocenie weźmiemy pod uwagę tylko ostatnie zgłoszenie. Pamiętaj, w zależności od zachowania Twojej przeglądarki, po powrocie do strony z zadaniami część zadań możesz być zmuszony/zmuszona rozwiązać ponownie.</p>
+
+<p>Do końca grudnia otrzymasz e-mail z wynikami I etapu. Informacja o uzyskanych przez Ciebie punktach zostanie również przesłana do osoby, która zgłosiła Twój udział w Turnieju.</p>
+
+<p>Aktualności związane z Turniejem możesz sprawdzać na stronie <a href="/wtem">http://edukacjamedialna.edu.pl/wtem</a>. W razie dodatkowych pytań możesz kontaktować się z nami pod adresem edukacjamedialna@nowoczesnapolska.org.pl lub numerem telefonu +48 22 621-30-17.</p>
+
+<p>Zespół Edukacji Medialnej
+Fundacja Nowoczesna Polska</p>
+
+{% endblock %}
\ No newline at end of file
-Poniżej znajduje się wygenerowany specjalnie dla Ciebie link, pod którym będziesz mógł/mogła rozwiązać zadania pierwszego etapu Wielkiego Turnieju Edukacji Medialnej:
+Droga Trenerko/Drogi Trenerze,
-http://edukacjamedialna.edu.pl{% url 'wtem_form' key=submission.key %}
+Poniżej znajduje się wygenerowany specjalnie dla Ciebie link, pod którym będziesz mógł/mogła rozwiązać zadania egzaminacyjne TEM.
+Pamiętaj, że egzamin rozpocznie się dziś, 16 listopada o godz. 16.00. Na rozwiązanie zadań masz dokładnie tydzień.
+W razie dodatkowych pytań skontaktuj się z koordynatorką projektu, Dorotą Górecką dorotagorecka@nowoczesnapolska.org.pl.
-Pierwszy etap Turnieju odbędzie się we wtorek 18 listopada o godz. 16.30. Na rozwiązanie testu będziesz mieć ok. 90 min. Aby rozwiązać test, potrzebny Ci będzie komputer ze stabilnym łączem internetowym oraz zainstalowaną i zaktualizowaną przeglądarką.
-
-Każdy uczestnik otrzymał indywidualny link, pod którym może rozwiązywać zadania samodzielnie. Wszelkie działania mogące świadczyć o tym, że uczestnik nie rozwiązuje testu samodzielnie, np. wchodzenie na stronę z zadaniami przez więcej niż jedną osobę, będą przez nas śledzone i poskutkują dyskwalifikacją.
-
-W razie dodatkowych pytań możesz kontaktować się z nami pod adresem edukacjamedialna@nowoczesnapolska.org.pl lub numerem telefonu +48 22 621-30-17.
-
-Przypominamy, że główną nagrodą w Turnieju jest tygodniowy pobyt na Digital Media Summer Camp na Mercer University w Macon (Georgia, USA).
+https://edukacjamedialna.edu.pl{% url 'wtem_form' key=submission.key %}
Powodzenia!
Zespół Edukacji Medialnej
-Fundacja Nowoczesna Polska
\ No newline at end of file
+Fundacja Nowoczesna Polska
+
<div class="exercise exercise-wtem wybor" data-type="wybor" data-id="{{exercise.id}}">
- <h3>Zadanie {{no}}</h3>
+{% if not exercise.continuation %}
+<h3>Zadanie {{exercise.id_show|default:exercise.id}} ({{ exercise.max_points }} pkt)</h3>
+{% endif %}
{% autoescape off %}
<div class="description">
</div>
{% endif %}
-</div>
\ No newline at end of file
+</div>
<div class="exercise-wtem" data-type="file" data-id="{{exercise.id}}">
- <h3>Zadanie {{no}}</h3>
+{% if not exercise.continuation %}
+<h3>Zadanie {{exercise.id_show|default:exercise.id}} ({{ exercise.max_points }} pkt)</h3>
+{% endif %}
<div class="description">
{% for para in exercise.description %}
{% endfor %}
{% endautoescape %}
-</div>
\ No newline at end of file
+</div>
<div class="exercise-wtem" data-type="open" data-id="{{exercise.id}}">
- <h3>Zadanie {{no}}</h3>
+{% if not exercise.continuation %}
+<h3>Zadanie {{exercise.id_show|default:exercise.id}} ({{ exercise.max_points }} pkt)</h3>
+{% endif %}
<div class="description">
{% autoescape off %}
{% if exercise.fields %}
{% for field in exercise.fields %}
<div class="wtem-open-field">
- <label class="wtem-caption">{{field.caption}} <span class="label_suffix"></span></label>
+ <label class="wtem-caption">{{field.caption|safe}} <span class="label_suffix"></span></label>
+{% if field.type == 'file' %}
+
+ <div style="margin: 15px auto; width:300px;">
+ <input style="float: left;" type="file" name="attachment_for_{{exercise.id}}__{{field.id}}"/>
+ <div style="clear:both;"></div>
+ </div>
+
+{% else %}
+
<textarea style="width: 100%;" rows="{{field.rows|default:10}}" data-field-id="{{field.id}}" {% if field.max_length %}maxlength="{{field.max_length}}"{% endif %} {% if field.input_id %}id="{{field.input_id}}"{% endif %}></textarea>
+
+{% endif %}
+
</div>
{% endfor %}
{% else %}
</div>
{% endif%}
-</div>
\ No newline at end of file
+</div>
{% extends 'base_super.html' %}
{% block body %}
-<h1>Wielki Turniej Edukacji Medialnej</h1>
+<h1>Trenerzy Edukacji Medialnej - egzamin certyfikujący</h1>
<h2>Niepoprawny link</h2>
<p>Podany adres jest niepoprawny. Żeby móc rozwiązywać zadania, musisz przejść pod dokładnie ten sam adres, co podany w wysłanej do Ciebie wiadomości e-mail.</p>
-{% endblock %}
\ No newline at end of file
+{% endblock %}
{% extends 'base_super.html' %}
{% block body %}
-<h1>Wielki Turniej Edukacji Medialnej</h1>
+<h1>Trenerzy Edukacji Medialnej - egzamin certyfikujący</h1>
<h2>Niepoprawny link</h2>
<p>Podany adres jest niepoprawny. Żeby móc rozwiązywać zadania, musisz przejść pod dokładnie ten sam adres, co podany w wysłanej do Ciebie wiadomości e-mail. Jeśli masz z tym kłopot, skontaktuj się z nami pod adresem <a href="mailto:edukacjamedialna@nowoczesnapolska.org.pl">edukacjamedialna@nowoczesnapolska.org.pl</a>.</p>
-{% endblock %}
\ No newline at end of file
+{% endblock %}
</style>
-<h1>Wielki Turniej Edukacji Medialnej</h1>
-<div class="wtem-fixed-info">Rozwiązania można wysyłać do godziny {{end_time|default:"18.00"}}. <strong>Nie czekaj na ostatnią chwilę!</strong></div>
-
-<p>Witamy w I etapie Wielkiego Turnieju Edukacji Medialnej. Na rozwiązanie zadań masz czas do godz. {{end_time|default:"18.00"}}. Test składa się z 21 pytań. Niektóre z nich mają charakter otwarty - pamiętaj, żeby zostawić sobie odpowiednią ilość czasu na ich rozwiązanie.</p>
-
-<p>Wszelkie aktualności dotyczące Turnieju możesz znaleźć na <a href="http://edukacjamedialna.edu.pl/wtem" target="_info">edukacjamedialna.edu.pl/wtem</a>.</p>
+<h1>Trenerzy Edukacji Medialnej - egzamin certyfikujący</h1>
+<div class="wtem-fixed-info">Rozwiązania można wysyłać do 30 listopada, do godziny 16:00. <strong>Nie czekaj na ostatnią chwilę!</strong></div>
<p>Powodzenia!<br/>
Zespół Edukacji Medialnej, Fundacja Nowoczesna Polska</p>
{% cache 30 wtem %}
{% for exercise in exercises %}
{% with 'wtem/exercises/'|add:exercise.type|add:'.html' as template_name %}
- {% include template_name with exercise=exercise no=forloop.counter %}
+ {% include template_name with exercise=exercise no=exercise.id %}
{% endwith %}
{% endfor %}
{% endcache %}
</span>
</p>
-<div class="wtem-fixed-info" style="margin-top:15px;">Rozwiązania można wysyłać do godziny {{end_time|default:"18.00"}}. <strong>Nie czekaj na ostatnią chwilę!</strong></div>
+<div class="wtem-fixed-info" style="margin-top:15px;">Rozwiązania można wysyłać do 30 listopada, do godziny 16:00. <strong>Nie czekaj na ostatnią chwilę!</strong></div>
</form>
-{% endblock %}
\ No newline at end of file
+{% endblock %}
{% block body %}
-<h1>Wielki Turniej Edukacji Medialnej</h1>
+<h1>Trenerzy Edukacji Medialnej - egzamin certyfikujący</h1>
-<p>Pierszy etap Turnieju został zakończony.</p>
+<p>Egzamin został zakończony.</p>
-{% endblock %}
\ No newline at end of file
+{% endblock %}
{% block body %}
-<h1>Wielki Turniej Edukacji Medialnej</h1>
+<h1>Trenerzy Edukacji Medialnej - egzamin certyfikujący</h1>
-<p>Pierwszy etap: 18 listopada, 16:30. Czas trwania: ok. 90 minut.</p>
+<p>Start: 16 listopada, 16:00. Czas trwania: tydzień.</p>
-{% endblock %}
\ No newline at end of file
+{% endblock %}
-{% load l10n %}Droga Uczestniczko,
-Drogi Uczestniku,
+{% load l10n %}Witaj,
-Twój wynik w I etapie Wielkiego Turnieju Edukacji Medialnej to {% localize on %}{{final_result|floatformat}}{% endlocalize %} pkt.
+Informujemy, że wszystkie projekty zrealizowane i nadesłane w ramach I etapu III edycji Wielkiego Turnieju Edukacji Medialnej zostały ocenione. Otrzymaliśmy ponad 100 projektów, które zrealizowało ponad 420 uczniów i uczennic szkół ponadgimnazjalnych.
-Do zakwalifikowania się do II etapu konieczne było uzyskanie min. 47,5 pkt.
+Liczba punktów, którą uzyskał Twój zespół to {% localize on %}{{final_result}}{% endlocalize %}.
-Dziękujemy za udział w zawodach!
+Niestety, ten wynik nie uprawnia Was do wzięcia udziału II etapie Turnieju. Liczba punktów, która uprawnia do wzięcia udziału w II etapie to 55. Zachęcamy do zgłębiania wiedzy za zakresu edukacji medialnej i wzięcia udziału w kolejnej edycji Wielkiego Turnieju Edukacji Medialnej.
-Z pozdrowieniami,
+Jeżeli temat przewodni III edycji Wielkiego Turnieju Edukacji Medialnej (bezpieczeństwo i prywatność w sieci) jest dla Ciebie interesujący, informujemy, że fundacja Nowoczesna Polska niebawem rozpocznie rekrutację szkół do projektu szkoleniowego realizowanego na zlecenie i ze środków Ministerstwa Edukacji Narodowej - "Cybernauci - kompleksowy projekt kształtowania bezpiecznych zachowań w sieci". Zachęcamy do śledzenia aktualności na stronie: http://cybernauci.edu.pl.
+W razie jakichkolwiek pytań prosimy o kontakt.
+
+Pozdrawiamy,
Zespół Edukacji Medialnej
-Fundacja Nowoczesna Polska
\ No newline at end of file
+fundacja Nowoczesna Polska
-{% load l10n %}Droga Uczestniczko,
-Drogi Uczestniku,
+{% load l10n %}Witaj,
-Twój wynik w I etapie Wielkiego Turnieju Edukacji Medialnej to {% localize on %}{{final_result|floatformat}}{% endlocalize %} pkt.
+Informujemy, że wszystkie projekty zrealizowane i nadesłane w ramach I etapu III edycji Wielkiego Turnieju Edukacji Medialnej zostały ocenione. Otrzymaliśmy ponad 100 projektów, które zrealizowało ponad 420 uczniów i uczennic szkół ponadgimnazjalnych.
-Gratulujemy! Zakwalifikowałeś/aś się do II etapu.
-Kolejnym zadaniem, które Cię czeka jest realizacja projektu. Więcej szczegółów opublikujemy na stronie http://edukacjamedialna.edu.pl/wtem 13 stycznia 2014 r.
+Liczba punktów, którą uzyskał Twój zespół to {% localize on %}{{final_result}}{% endlocalize %}.
-Dziękujemy za udział w zawodach!
+Wynik ten uprawnia Was do wzięcia udziału II etapie Turnieju. Gratulujemy! Przypominamy, że odbędzie się on w lutym i będzie miał formę testu on-line rozwiązywanego przez Was indywidualnie. Niebawem prześlemy dokładne informacje.
-Z pozdrowieniami,
+Jeżeli temat przewodni III edycji Wielkiego Turnieju Edukacji Medialnej (bezpieczeństwo i prywatność w sieci) jest dla Ciebie interesujący, informujemy, że fundacja Nowoczesna Polska niebawem rozpocznie rekrutację szkół do projektu szkoleniowego realizowanego na zlecenie i ze środków Ministerstwa Edukacji Narodowej - "Cybernauci - kompleksowy projekt kształtowania bezpiecznych zachowań w sieci". Zachęcamy do śledzenia aktualności na stronie: http://cybernauci.edu.pl.
+W razie jakichkolwiek pytań prosimy o kontakt.
+
+Pozdrawiamy,
Zespół Edukacji Medialnej
-Fundacja Nowoczesna Polska
\ No newline at end of file
+fundacja Nowoczesna Polska
-Szanowna Pani,
-Szanowny Panie,
+Dzień dobry,
-Wyniki uzyskane przez zgłoszonych przez Panią/Pana uczestników Turnieju to:
+Informujemy, że wszystkie projekty zrealizowane i nadesłane w ramach I etapu III edycji Wielkiego Turnieju Edukacji Medialnej zostały ocenione. Otrzymaliśmy ponad 100 projektów, które zrealizowało ponad 420 uczniów i uczennic szkół ponadgimnazjalnych.
-{% for submission in submissions %}{{submission.first_name.strip}}, {{submission.last_name.strip}}: {{submission.final_result|floatformat}}
+Poniżej znajdują się wyniki uzyskane przez zgłoszonych przez Panią/Pana uczniów i uczennice, którzy nadesłali swoje prace. Jeśli nie są to wszyscy zgłoszeni uczniowie, oznacza to, że zrezygnowali z przystąpienia do konkursu i nie nadesłali swoich prac lub nadesłali je po terminie. Liczba punktów, która uprawnia do wzięcia udziału w II etapie to 55. Gratulujemy tym, którym się to udało. Przypominamy, że II etap Turnieju odbędzie się w lutym i będzie miał formę testu on-line rozwiązywanego przez uczniów indywidualnie. Niebawem prześlemy dokładne informacje.
+
+Wyniki uzyskane przez Pani/Pana podopiecznych:
+
+{% for submission in submissions %}{{submission.first_name.strip}} {{submission.last_name.strip}}: {{submission.final_result}}
{% endfor %}
-Pozostali uczestnicy i uczestniczki zgłoszeni przez Panią/Pana nie przystąpili do rozwiązania testu. Do zakwalifikowania się do II etapu konieczne było uzyskanie min. 47,5 pkt. Pełna lista uczestników II etapu dostępna jest na stronie http://edukacjamedialna.edu.pl/wtem.
+Informacje o wynikach zostały przesłane również uczestnikom i uczestniczkom. Prosimy upewnić się, że wszyscy otrzymali wiadomość. Jeśli jednak do nich nie dotarła, prosimy o podanie danych kontaktowych tych osób (imię i nazwisko, adres e-mail).
+
+Jeżeli temat przewodni III edycji Wielkiego Turnieju Edukacji Medialnej (bezpieczeństwo i prywatność w sieci) jest dla Pani/Pana interesujący, informujemy, że fundacja Nowoczesna Polska niebawem rozpocznie rekrutację szkół do projektu szkoleniowego realizowanego na zlecenie i ze środków Ministerstwa Edukacji Narodowej - "Cybernauci - kompleksowy projekt kształtowania bezpiecznych zachowań w sieci". Zachęcamy do śledzenia aktualności na stronie: http://cybernauci.edu.pl.
-Dziękujemy za udział w zawodach!
+Jeśli chciał(a)by Pani/Pan otrzymywać newsletter z informacjami na temat działań fundacji Nowoczesna Polska w zakresie edukacji medialnej, proszę wypełnić formularz: http://edukacjamedialna.edu.pl/zglos/wspolpraca/.
-Z pozdrowieniami,
+W razie jakichkolwiek pytań prosimy o kontakt.
+Pozdrawiamy,
Zespół Edukacji Medialnej
-Fundacja Nowoczesna Polska
\ No newline at end of file
+fundacja Nowoczesna Polska
<h1>Twoje rozwiązania zostały wysłane</h1>
-<p>Dziękujemy za udział w I etapie Wielkiego Turnieju Edukacji Medialnej.
+<p>Dziękujemy za udział w egzaminie certyfikującym Trenerów Edukacji Medialnej.
Twoja praca została wysłana i poprawnie przyjęta przez system.</p>
-<p>Jeśli chcesz zmienić którąś z odpowiedzi, do godz. {{end_time|default:"18.00"}} możesz ponownie wysłać rozwiązanie zadań, korzystając z przypisanego Ci linku. W ocenie weźmiemy pod uwagę tylko ostatnie zgłoszenie. Pamiętaj, w zależności od zachowania Twojej przeglądarki, po powrocie do strony z zadaniami część zadań możesz być zmuszony/zmuszona rozwiązać ponownie.</p>
-
-<p>Do końca grudnia otrzymasz e-mail z wynikami I etapu. Informacja o uzyskanych przez Ciebie punktach zostanie również przesłana do osoby, która zgłosiła Twój udział w Turnieju.</p>
-
-<p>Aktualności związane z Turniejem możesz sprawdzać na stronie <a href="/wtem">http://edukacjamedialna.edu.pl/wtem</a>. W razie dodatkowych pytań możesz kontaktować się z nami pod adresem edukacjamedialna@nowoczesnapolska.org.pl lub numerem telefonu +48 22 621-30-17.</p>
+<p>Jeśli chcesz zmienić którąś z odpowiedzi, do 23 listopada do godz. 16:00 możesz ponownie wysłać rozwiązanie zadań, korzystając z przypisanego Ci linku. W ocenie weźmiemy pod uwagę tylko ostatnie zgłoszenie. Pamiętaj, w zależności od zachowania Twojej przeglądarki, po powrocie do strony z zadaniami część zadań możesz być zmuszony/zmuszona rozwiązać ponownie.</p>
<p>Zespół Edukacji Medialnej
Fundacja Nowoczesna Polska</p>
-{% endblock %}
\ No newline at end of file
+{% endblock %}