local changes from the server
authorJan Szejko <j-sz@o2.pl>
Thu, 11 Feb 2016 12:37:08 +0000 (13:37 +0100)
committerJan Szejko <j-sz@o2.pl>
Thu, 11 Feb 2016 12:37:08 +0000 (13:37 +0100)
71 files changed:
.gitignore
catalogue/models.py
catalogue/static/catalogue/css/carousel.css
catalogue/static/catalogue/css/carousel.scss
catalogue/templates/catalogue/lesson/added-var/lesson_detail.html [new file with mode: 0644]
catalogue/templates/catalogue/snippets/lesson_nav.html
catalogue/templates/catalogue/snippets/levels_main.html
catalogue/templatetags/catalogue_tags.py
curriculum/locale/pl/LC_MESSAGES/django.mo
curriculum/locale/pl/LC_MESSAGES/django.po
curriculum/templates/curriculum/competence_list.html
edumed/contact_forms.py
edumed/settings.d/50-static.py
edumed/static/css/form.css
edumed/static/css/form.scss
edumed/templates/base.html
edumed/templates/base_super.html
edumed/templates/contact/tem/mail_body.txt [new file with mode: 0755]
edumed/templates/contact/tem/mail_subject.txt [new file with mode: 0755]
edumed/templates/contact/tem/thanks.html [new file with mode: 0755]
edumed/templates/contact/wtem/form.html
edumed/templates/contact/wtem/mail_body.txt
edumed/templates/contact/wtem/mail_subject.txt
edumed/templates/contact/wtem/student_mail_body.html [new file with mode: 0644]
edumed/templates/contact/wtem/student_mail_subject.html [new file with mode: 0644]
edumed/templates/contact/wtem/thanks.html
edumed/templates/home.html
edumed/urls.py
wtem/admin.py
wtem/fixtures/exercises-2014.json [new file with mode: 0644]
wtem/forms.py
wtem/management/commands/__init__.py
wtem/management/commands/wtem_send_keys.py
wtem/management/commands/wtem_send_results.py
wtem/management/commands/wtem_send_results_csv.py [new file with mode: 0644]
wtem/migrations/0009_auto__add_field_attachment_tag.py [new file with mode: 0644]
wtem/models.py
wtem/templates/wtem-wtem/admin_report.csv [new file with mode: 0644]
wtem/templates/wtem-wtem/disabled_contact_form.html [new file with mode: 0644]
wtem/templates/wtem-wtem/email_key.txt [new file with mode: 0644]
wtem/templates/wtem-wtem/email_key.txt.wtem [new file with mode: 0644]
wtem/templates/wtem-wtem/email_teacher_before.txt [new file with mode: 0644]
wtem/templates/wtem-wtem/email_teacher_before_subject.txt [new file with mode: 0644]
wtem/templates/wtem-wtem/exercises/edumed_prawdafalsz.html [new file with mode: 0644]
wtem/templates/wtem-wtem/exercises/edumed_przyporzadkuj.html [new file with mode: 0644]
wtem/templates/wtem-wtem/exercises/edumed_uporzadkuj.html [new file with mode: 0644]
wtem/templates/wtem-wtem/exercises/edumed_wybor.html [new file with mode: 0644]
wtem/templates/wtem-wtem/exercises/file_upload.html [new file with mode: 0644]
wtem/templates/wtem-wtem/exercises/open.html [new file with mode: 0644]
wtem/templates/wtem-wtem/key_not_found.html [new file with mode: 0644]
wtem/templates/wtem-wtem/key_not_found_before.html [new file with mode: 0644]
wtem/templates/wtem-wtem/main.html [new file with mode: 0644]
wtem/templates/wtem-wtem/main_after.html [new file with mode: 0644]
wtem/templates/wtem-wtem/main_before.html [new file with mode: 0644]
wtem/templates/wtem-wtem/results_student_failed.txt [new file with mode: 0644]
wtem/templates/wtem-wtem/results_student_passed.txt [new file with mode: 0644]
wtem/templates/wtem-wtem/results_teacher.txt [new file with mode: 0644]
wtem/templates/wtem-wtem/thanks.html [new file with mode: 0644]
wtem/templates/wtem/email_key.txt
wtem/templates/wtem/exercises/edumed_wybor.html
wtem/templates/wtem/exercises/file_upload.html
wtem/templates/wtem/exercises/open.html
wtem/templates/wtem/key_not_found.html
wtem/templates/wtem/key_not_found_before.html
wtem/templates/wtem/main.html
wtem/templates/wtem/main_after.html
wtem/templates/wtem/main_before.html
wtem/templates/wtem/results_student_failed.txt
wtem/templates/wtem/results_student_passed.txt
wtem/templates/wtem/results_teacher.txt
wtem/templates/wtem/thanks.html

index 554bc70..512ac11 100644 (file)
@@ -30,6 +30,9 @@ thumbs.db
 .pydevproject
 .tmp_*
 
+# PyCharm
+.idea
+
 # Tags file
 TAGS
 
index e291c42..85f0af0 100644 (file)
@@ -151,7 +151,7 @@ class Lesson(models.Model):
         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()
 
index a7f365c..2d014da 100644 (file)
@@ -2,12 +2,12 @@
   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; }
@@ -18,8 +18,8 @@
       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 {
index bc2041d..17f83d9 100755 (executable)
@@ -91,9 +91,9 @@ $ciemny: #363a3e;
     }
     #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;
@@ -108,7 +108,7 @@ $ciemny: #363a3e;
         /* right part of mask as background */
 
         li {
-            margin-bottom: .5em;
+            margin-bottom: .4em;
             font-size: .85em;
             line-height: 1em;
 
diff --git a/catalogue/templates/catalogue/lesson/added-var/lesson_detail.html b/catalogue/templates/catalogue/lesson/added-var/lesson_detail.html
new file mode 100644 (file)
index 0000000..a40c999
--- /dev/null
@@ -0,0 +1,31 @@
+{% 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 %}
index e3b21cf..0e64225 100755 (executable)
@@ -7,6 +7,8 @@
     <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 %}
index 97c5033..54ceed9 100644 (file)
@@ -11,7 +11,7 @@
     <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>
index 8b05bf6..eecf9dc 100755 (executable)
@@ -20,7 +20,8 @@ def catalogue_levels_main():
     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
     }
 
 
@@ -48,7 +49,7 @@ def level_box(level):
             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)
 
@@ -77,6 +78,26 @@ def level_box(level):
                 ]
             ],
             })
+        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,
index e26e73a..8f3c6c3 100644 (file)
Binary files a/curriculum/locale/pl/LC_MESSAGES/django.mo and b/curriculum/locale/pl/LC_MESSAGES/django.mo differ
index a9cdad2..91686bf 100644 (file)
@@ -103,8 +103,8 @@ msgid "You must select at least one education 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"
index a180ae7..cea4d4e 100755 (executable)
@@ -2,10 +2,10 @@
 {% 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' %}
index 0ff8415..3e7abab 100644 (file)
@@ -1,6 +1,10 @@
 # -*- 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 _
 
 
@@ -90,15 +94,19 @@ class WTEMStudentForm(forms.Form):
     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
@@ -106,7 +114,8 @@ class WTEMForm(ContactForm):
     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)
@@ -120,11 +129,11 @@ class WTEMForm(ContactForm):
 
     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(
@@ -165,6 +174,23 @@ class WTEMForm(ContactForm):
             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'
@@ -205,3 +231,67 @@ class MILForm(ContactForm):
         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)
+
index 0578903..c667c32 100644 (file)
@@ -25,7 +25,7 @@ PIPELINE_CSS = {
           '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'
@@ -48,7 +48,7 @@ PIPELINE_JS = {
             'curriculum/curriculum.js',
             'js/formset.js',
             'pybb/js/pybbjs.js',
-            'fnpdjango/annoy/annoy.js',
+            'fnpdjango/annoy/annoy.js',
         ),
         'output_filename': 'compressed/base.js',
     },
index 878de75..ac11db0 100644 (file)
@@ -2,10 +2,14 @@
   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 {
index 83c7938..8ef87de 100755 (executable)
@@ -4,11 +4,16 @@
         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;
     }
index e6d0c61..ee49951 100644 (file)
@@ -11,8 +11,8 @@
     <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 %}
@@ -21,4 +21,4 @@
 
 {% block extra_script %}
     {% compressed_js 'base' %}
-{% endblock %}
\ No newline at end of file
+{% endblock %}
index 1209c03..430422c 100644 (file)
@@ -25,7 +25,7 @@
         <!--[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
diff --git a/edumed/templates/contact/tem/mail_body.txt b/edumed/templates/contact/tem/mail_body.txt
new file mode 100755 (executable)
index 0000000..729f4a8
--- /dev/null
@@ -0,0 +1,8 @@
+Dziękujemy za przesłanie zgłoszenia.
+
+O wynikach rekrutacji poinformujemy uczestników do 30 kwietnia. 
+
+Z pozdrowieniami
+
+Zespół Edukacji Medialnej
+Fundacja Nowoczesna Polska
diff --git a/edumed/templates/contact/tem/mail_subject.txt b/edumed/templates/contact/tem/mail_subject.txt
new file mode 100755 (executable)
index 0000000..edd517f
--- /dev/null
@@ -0,0 +1 @@
+TEM - szkolenie dla trenerów edukacji medialnej
diff --git a/edumed/templates/contact/tem/thanks.html b/edumed/templates/contact/tem/thanks.html
new file mode 100755 (executable)
index 0000000..0f0c893
--- /dev/null
@@ -0,0 +1,7 @@
+{% 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 %}
index ca3b930..e340633 100755 (executable)
@@ -27,6 +27,9 @@
 
     {% 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>
@@ -51,6 +55,7 @@
         </div>
 
         <input type="button" value="+ Dodaj kolejną osobę" class="add_more" data-selector="#formstub-{{formset.prefix}}" data-prefix="{{formset.prefix}}">
+{% endcomment %}
         <script>
 
         </script>
index 7b9f096..ab99f55 100755 (executable)
@@ -3,10 +3,10 @@ Do udziału zostały zgłoszone następujące osoby:
 {% 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
index 15f682a..e33d9f0 100755 (executable)
@@ -1 +1 @@
-Dziękujemy za rejestrację w Wielkim Turnieju Edukacji Medialnej.
+Potwierdzenie zgłoszenia uczniów do Wielkiego Turnieju Edukacji Medialnej 
diff --git a/edumed/templates/contact/wtem/student_mail_body.html b/edumed/templates/contact/wtem/student_mail_body.html
new file mode 100644 (file)
index 0000000..84bfedb
--- /dev/null
@@ -0,0 +1,17 @@
+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
diff --git a/edumed/templates/contact/wtem/student_mail_subject.html b/edumed/templates/contact/wtem/student_mail_subject.html
new file mode 100644 (file)
index 0000000..b731079
--- /dev/null
@@ -0,0 +1 @@
+Potwierdzenie zgłoszenia do Wielkiego Turnieju Edukacji Medialnej
index 061f5f9..5db332f 100755 (executable)
@@ -6,8 +6,9 @@
 <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>
index d96e710..2c90fbc 100755 (executable)
@@ -55,6 +55,8 @@
     <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>
index fb09204..e813824 100644 (file)
@@ -15,7 +15,8 @@ urlpatterns = patterns('',
     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')),
 )
 
 
index d4b6682..78ca9b9 100644 (file)
@@ -34,6 +34,17 @@ class AttachmentWidget(forms.Widget):
             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
@@ -43,7 +54,7 @@ class SubmissionFormBase(forms.ModelForm):
 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'])
@@ -91,17 +102,38 @@ def get_form(request, submission):
                     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']
                 )
@@ -195,11 +227,12 @@ def report_view(request):
     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)
diff --git a/wtem/fixtures/exercises-2014.json b/wtem/fixtures/exercises-2014.json
new file mode 100644 (file)
index 0000000..0793ce5
--- /dev/null
@@ -0,0 +1,266 @@
+[
+
+{
+    "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
+}
+
+]
index fcce303..8cdfe79 100644 (file)
@@ -1,4 +1,5 @@
 import os
+import re
 
 from django import forms
 from django.utils import simplejson
@@ -21,11 +22,13 @@ class WTEMForm(forms.ModelForm):
     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()
 
index 494edb6..e39656a 100644 (file)
@@ -13,4 +13,5 @@ def send_mail(subject, body, to):
     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)
index 05ffcbb..914c8b1 100644 (file)
@@ -63,7 +63,7 @@ class Command(BaseCommand):
     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
+            )
index c0da6fd..c443ed1 100644 (file)
@@ -13,9 +13,9 @@ from wtem.models import Submission
 
 
 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):
 
@@ -47,7 +47,7 @@ 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']:
@@ -64,7 +64,7 @@ class Command(BaseCommand):
 
     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()
@@ -92,7 +92,7 @@ class Command(BaseCommand):
                 body = message,
                 to = [email]
             )
-        except:
+        except BaseException, e:
             self.failed += 1
             self.stdout.write('failed sending to: ' + email + ': ' + str(e))
         else:
diff --git a/wtem/management/commands/wtem_send_results_csv.py b/wtem/management/commands/wtem_send_results_csv.py
new file mode 100644 (file)
index 0000000..0d15c17
--- /dev/null
@@ -0,0 +1,115 @@
+# -*- 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)
+
+
diff --git a/wtem/migrations/0009_auto__add_field_attachment_tag.py b/wtem/migrations/0009_auto__add_field_attachment_tag.py
new file mode 100644 (file)
index 0000000..8ea943a
--- /dev/null
@@ -0,0 +1,98 @@
+# -*- 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
index fd8e834..0c7f78a 100644 (file)
@@ -80,11 +80,12 @@ class Submission(models.Model):
         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:
@@ -138,7 +139,8 @@ class Submission(models.Model):
     @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
@@ -151,6 +153,7 @@ class Submission(models.Model):
 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')
 
 
@@ -161,13 +164,13 @@ class Assignment(models.Model):
     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
diff --git a/wtem/templates/wtem-wtem/admin_report.csv b/wtem/templates/wtem-wtem/admin_report.csv
new file mode 100644 (file)
index 0000000..c6ef91f
--- /dev/null
@@ -0,0 +1,2 @@
+{% 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
diff --git a/wtem/templates/wtem-wtem/disabled_contact_form.html b/wtem/templates/wtem-wtem/disabled_contact_form.html
new file mode 100644 (file)
index 0000000..4d5ab23
--- /dev/null
@@ -0,0 +1,13 @@
+{% 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 %}
diff --git a/wtem/templates/wtem-wtem/email_key.txt b/wtem/templates/wtem-wtem/email_key.txt
new file mode 100644 (file)
index 0000000..2f0caba
--- /dev/null
@@ -0,0 +1,13 @@
+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 
+
diff --git a/wtem/templates/wtem-wtem/email_key.txt.wtem b/wtem/templates/wtem-wtem/email_key.txt.wtem
new file mode 100644 (file)
index 0000000..3b69c9d
--- /dev/null
@@ -0,0 +1,16 @@
+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
diff --git a/wtem/templates/wtem-wtem/email_teacher_before.txt b/wtem/templates/wtem-wtem/email_teacher_before.txt
new file mode 100644 (file)
index 0000000..967f9a9
--- /dev/null
@@ -0,0 +1,18 @@
+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
diff --git a/wtem/templates/wtem-wtem/email_teacher_before_subject.txt b/wtem/templates/wtem-wtem/email_teacher_before_subject.txt
new file mode 100644 (file)
index 0000000..5649e56
--- /dev/null
@@ -0,0 +1 @@
+Pierwszy etap Wielkiego Turnieju Edukacji Medialnej już wkrótce
\ No newline at end of file
diff --git a/wtem/templates/wtem-wtem/exercises/edumed_prawdafalsz.html b/wtem/templates/wtem-wtem/exercises/edumed_prawdafalsz.html
new file mode 100644 (file)
index 0000000..9ea5a5a
--- /dev/null
@@ -0,0 +1,26 @@
+<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
diff --git a/wtem/templates/wtem-wtem/exercises/edumed_przyporzadkuj.html b/wtem/templates/wtem-wtem/exercises/edumed_przyporzadkuj.html
new file mode 100644 (file)
index 0000000..00140e3
--- /dev/null
@@ -0,0 +1,85 @@
+<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>
+
diff --git a/wtem/templates/wtem-wtem/exercises/edumed_uporzadkuj.html b/wtem/templates/wtem-wtem/exercises/edumed_uporzadkuj.html
new file mode 100644 (file)
index 0000000..0876895
--- /dev/null
@@ -0,0 +1,23 @@
+<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>
+
diff --git a/wtem/templates/wtem-wtem/exercises/edumed_wybor.html b/wtem/templates/wtem-wtem/exercises/edumed_wybor.html
new file mode 100644 (file)
index 0000000..5238c2f
--- /dev/null
@@ -0,0 +1,46 @@
+<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
diff --git a/wtem/templates/wtem-wtem/exercises/file_upload.html b/wtem/templates/wtem-wtem/exercises/file_upload.html
new file mode 100644 (file)
index 0000000..eadcdfd
--- /dev/null
@@ -0,0 +1,28 @@
+<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
diff --git a/wtem/templates/wtem-wtem/exercises/open.html b/wtem/templates/wtem-wtem/exercises/open.html
new file mode 100644 (file)
index 0000000..8645d46
--- /dev/null
@@ -0,0 +1,38 @@
+<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
diff --git a/wtem/templates/wtem-wtem/key_not_found.html b/wtem/templates/wtem-wtem/key_not_found.html
new file mode 100644 (file)
index 0000000..54b4adc
--- /dev/null
@@ -0,0 +1,9 @@
+{% 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
diff --git a/wtem/templates/wtem-wtem/key_not_found_before.html b/wtem/templates/wtem-wtem/key_not_found_before.html
new file mode 100644 (file)
index 0000000..d125ba1
--- /dev/null
@@ -0,0 +1,9 @@
+{% 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
diff --git a/wtem/templates/wtem-wtem/main.html b/wtem/templates/wtem-wtem/main.html
new file mode 100644 (file)
index 0000000..e338ad4
--- /dev/null
@@ -0,0 +1,82 @@
+{% 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
diff --git a/wtem/templates/wtem-wtem/main_after.html b/wtem/templates/wtem-wtem/main_after.html
new file mode 100644 (file)
index 0000000..dbb7ad8
--- /dev/null
@@ -0,0 +1,9 @@
+{% 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
diff --git a/wtem/templates/wtem-wtem/main_before.html b/wtem/templates/wtem-wtem/main_before.html
new file mode 100644 (file)
index 0000000..b4e98f4
--- /dev/null
@@ -0,0 +1,9 @@
+{% 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
diff --git a/wtem/templates/wtem-wtem/results_student_failed.txt b/wtem/templates/wtem-wtem/results_student_failed.txt
new file mode 100644 (file)
index 0000000..84569a1
--- /dev/null
@@ -0,0 +1,13 @@
+{% 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
diff --git a/wtem/templates/wtem-wtem/results_student_passed.txt b/wtem/templates/wtem-wtem/results_student_passed.txt
new file mode 100644 (file)
index 0000000..06f0170
--- /dev/null
@@ -0,0 +1,14 @@
+{% 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
diff --git a/wtem/templates/wtem-wtem/results_teacher.txt b/wtem/templates/wtem-wtem/results_teacher.txt
new file mode 100644 (file)
index 0000000..c08afb0
--- /dev/null
@@ -0,0 +1,16 @@
+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
diff --git a/wtem/templates/wtem-wtem/thanks.html b/wtem/templates/wtem-wtem/thanks.html
new file mode 100644 (file)
index 0000000..ad3812a
--- /dev/null
@@ -0,0 +1,19 @@
+{% 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
index 3b69c9d..2f0caba 100644 (file)
@@ -1,16 +1,13 @@
-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 
+
index 5238c2f..d035f21 100644 (file)
@@ -1,6 +1,8 @@
 <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">
@@ -43,4 +45,4 @@
     </div>
     {% endif %}
 
-</div>
\ No newline at end of file
+</div>
index eadcdfd..24a15b4 100644 (file)
@@ -1,6 +1,8 @@
 <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 %}
@@ -25,4 +27,4 @@
     {% endfor %}
     {% endautoescape %}
 
-</div>
\ No newline at end of file
+</div>
index 8645d46..25fa8e0 100644 (file)
@@ -1,6 +1,8 @@
 <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 %}
@@ -35,4 +49,4 @@
         </div>
     {% endif%}
 
-</div>
\ No newline at end of file
+</div>
index 54b4adc..c1ffc0d 100644 (file)
@@ -1,9 +1,9 @@
 {% 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 %}
index d125ba1..6790546 100644 (file)
@@ -1,9 +1,9 @@
 {% 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 %}
index e338ad4..22ad031 100644 (file)
 
 </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>
@@ -56,7 +52,7 @@ 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 %}
@@ -75,8 +71,8 @@ Zespół Edukacji Medialnej, Fundacja Nowoczesna Polska</p>
 </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 %}
index dbb7ad8..6b33414 100644 (file)
@@ -2,8 +2,8 @@
 
 {% 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 %}
index b4e98f4..8f709c1 100644 (file)
@@ -2,8 +2,8 @@
 
 {% 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 %}
index 591948d..8af210a 100644 (file)
@@ -1,13 +1,15 @@
-{% 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
index 4ed6904..d5e03d5 100644 (file)
@@ -1,14 +1,15 @@
-{% 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
index a2ff4c5..10f0b29 100644 (file)
@@ -1,16 +1,22 @@
-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
index ad3812a..805fafb 100644 (file)
@@ -4,16 +4,12 @@
 
 <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 %}