+
+ {% include "wtem/exercises/exercise_no.html" %}
+ {% autoescape off %}
+
+ {% for para in exercise.description %}
+
+ {{para}}
+
+ {% endfor %}
+ {% if exercise.points %}
+
+ {% if exercise.answer|length == 1 %}
+ Tylko jedna odpowiedź jest prawidÅowa.
+ {% else %}
+ Zaznacz wszystkie prawidÅowe odpowiedzi.
+ {% endif %}
+
+ {% endif %}
+
+ {% endautoescape %}
+
+
+ {% for option in exercise.options %}
+
+
+
+
+ {% endfor %}
+
+
+
+ {% if exercise.open_part %}
+
+
+ {% for para in exercise.open_part %}
+
+ {{para}}
+
+ {% endfor %}
+
+
+
+ {% endif %}
+
+
diff --git a/wtem/templates/wtem/exercises/exercise_no.html b/wtem/templates/wtem/exercises/exercise_no.html
index aecdd2b..0bd9c6d 100644
--- a/wtem/templates/wtem/exercises/exercise_no.html
+++ b/wtem/templates/wtem/exercises/exercise_no.html
@@ -1,3 +1,3 @@
{% if not exercise.continuation %}
-
Zadanie {{ no }}{# {{exercise.id_show|default:exercise.id}} #}{# ({{ exercise.max_points }} pkt)#}
+
Zadanie {{ no }}/{{ exercise_count }}{# {{exercise.id_show|default:exercise.id}} #}{# ({{ exercise.max_points }} pkt)#}
{% endif %}
\ No newline at end of file
diff --git a/wtem/templates/wtem/main_before.html b/wtem/templates/wtem/main_before.html
index 4ede52b..b3c2b23 100644
--- a/wtem/templates/wtem/main_before.html
+++ b/wtem/templates/wtem/main_before.html
@@ -4,6 +4,12 @@
{% include "wtem/title.html" %}
-
I etap: 15 listopada, 10:00. Czas trwania: ok. 90 minut.
+
Witamy w I etapie Olimpiady Cyfrowej.
+
Test skÅada z 50 pytaÅ, które otrzymasz w losowej kolejnoÅci. Po udzieleniu odpowiedzi na dane pytanie nie ma możliwoÅci powrotu do niego i zmiany odpowiedzi. Uwaga: czÄÅÄ pytaÅ ma jednÄ , a czÄÅÄ kilka poprawnych odpowiedzi.
+
Test rozpocznie siÄ 23 listopada o godzinie 10:00 i potrwa do 11:00.
+
+
Powodzenia!
+
ZespóŠOlimpiady Cyfrowej
+Fundacja Nowoczesna Polska
{% endblock %}
\ No newline at end of file
diff --git a/wtem/templates/wtem/single.html b/wtem/templates/wtem/single.html
index f4b9c19..3380145 100644
--- a/wtem/templates/wtem/single.html
+++ b/wtem/templates/wtem/single.html
@@ -8,7 +8,6 @@
{% endblock %}
-
{% block body %}
-
{% include "wtem/title.html" %}
-
RozwiÄ zania można wysyÅaÄ do godziny {{end_time|default:"11:30"}}. Nie czekaj na ostatniÄ chwilÄ!
+{% if messages %}
+
+ {% for message in messages %}
+
{{ message }}
+ {% endfor %}
+
+{% endif %}
-
Witamy w I etapie Olimpiady Cyfrowej. Na rozwiÄ zanie zadaÅ masz czas do godz. {{end_time|default:"11:30"}}. Test skÅada siÄ z 30 pytaÅ.
-
-
Wszelkie aktualnoÅci dotyczÄ ce Olimpiady możesz znaleÅºÄ tutaj.
-
-
Powodzenia!
-ZespóŠOlimpiady Cyfrowej, fundacja Nowoczesna Polska
Test skÅada z {{ exercise_count }} pytaÅ, które otrzymasz w losowej kolejnoÅci.
+ Po udzieleniu odpowiedzi na dane pytanie nie ma możliwoÅci powrotu do niego i zmiany odpowiedzi.
+ Uwaga: czÄÅÄ pytaÅ ma jednÄ , a czÄÅÄ kilka poprawnych odpowiedzi.
+
Test rozpoczyna siÄ o godzinie 10:00 i trwa do 11:00.
+
+
Powodzenia!
+
ZespóŠOlimpiady Cyfrowej
+ Fundacja Nowoczesna Polska
DziÄkujemy za udziaÅ w I etapie Olimpiady Cyfrowej.
Twoja praca zostaÅa wysÅana i poprawnie przyjÄta przez system.
-
Do koÅca listopada 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 Olimpiadzie.
+
Do koÅca listopada otrzymasz e-mail z wynikami I etapu. Informacja o uzyskanych przez Ciebie punktach zostanie również przesÅana do PrzewodniczÄ cego Komisji Szkolnej, który zgÅosiÅ Twój udziaÅ w Olimpiadzie.
-
AktualnoÅci zwiÄ zane z OlimpiadÄ możesz sprawdzaÄ tutaj. W razie dodatkowych pytaÅ możesz kontaktowaÄ siÄ z nami pod adresem olimpiada@nowoczesnapolska.org.pl lub numerem telefonu +48 515-502-666.
+
AktualnoÅci zwiÄ zane z OlimpiadÄ możesz sprawdzaÄ tutaj. W razie dodatkowych pytaÅ możesz kontaktowaÄ siÄ z nami pod adresem olimpiada@nowoczesnapolska.org.pl lub numerem telefonu +48 22 465 15 35.
ZespóŠOlimpiady Cyfrowej
fundacja Nowoczesna Polska
diff --git a/wtem/urls.py b/wtem/urls.py
index f7a5e99..e498743 100644
--- a/wtem/urls.py
+++ b/wtem/urls.py
@@ -6,6 +6,6 @@ urlpatterns = patterns(
'',
url(r'^potwierdzenie/(?P.*)/(?P.*)/$', views.confirmation, name='student_confirmation'),
url(r'^_test/(?P.*)/$', views.form_during),
- # url(r'^(?P.*)/$', views.form, name='wtem_form'),
- url(r'^(?P.*)/(?P.*)/$', views.form_single, name='form_single'),
+ url(r'^(?P[^/]*)/(?P[^/]*)/$', views.form, name='wtem_form'),
+ url(r'^(?P[^/]*)/(?P[^/]*)/start/$', views.start, name='wtem_start'),
)
diff --git a/wtem/views.py b/wtem/views.py
index 6366e53..d47a2be 100644
--- a/wtem/views.py
+++ b/wtem/views.py
@@ -3,6 +3,7 @@ import json
from copy import deepcopy
from django.conf import settings
+from django.contrib import messages
from django.core.urlresolvers import reverse
from django.http import HttpResponseForbidden
from django.http.response import HttpResponseRedirect
@@ -14,24 +15,24 @@ from wtem.models import Confirmation
from .forms import WTEMForm, WTEMSingleForm
from .models import Submission, DEBUG_KEY, exercises, CompetitionState
-WTEM_CONTEST_STAGE = getattr(settings, 'WTEM_CONTEST_STAGE', 'before')
-
@csrf_exempt
-def form(request, key):
- return globals()['form_' + WTEM_CONTEST_STAGE](request, key)
+def form(request, submission_id, key):
+ state = CompetitionState.get_state()
+ if state == CompetitionState.DURING:
+ state = 'single'
+ return globals()['form_' + state](request, submission_id, key)
-def form_before(request, key):
- try:
- Submission.objects.get(key=key)
- except Submission.DoesNotExist:
+def form_before(request, submission_id, key):
+ submission = Submission.objects.get(id=submission_id)
+ if submission.key != key:
return render(request, 'wtem/key_not_found_before.html')
else:
return render(request, 'wtem/main_before.html')
-def form_after(request, key):
+def form_after(request, submission_id, key):
return render(request, 'wtem/main_after.html')
@@ -39,7 +40,7 @@ def form_after(request, key):
@csrf_exempt
def form_during(request, key):
- if WTEM_CONTEST_STAGE != 'during':
+ if CompetitionState.get_state() != CompetitionState.DURING:
if request.META['REMOTE_ADDR'] not in getattr(settings, 'WTEM_CONTEST_IP_ALLOW', []):
return HttpResponseForbidden('Not allowed')
@@ -86,20 +87,45 @@ def form_single(request, submission_id, key):
i, exercise = submission.current_exercise()
+ exercise_count = len(exercises)
+
if not exercise:
return render(request, 'wtem/thanks_single.html')
if request.method == 'GET':
- return render(request, 'wtem/single.html', {'exercise': exercise, 'no': i})
+ return render(request, 'wtem/single.html', {'exercise': exercise, 'no': i, 'exercise_count': exercise_count})
elif request.method == 'POST':
form = WTEMSingleForm(request.POST, request.FILES, instance=submission)
if form.is_valid():
- form.save()
- return HttpResponseRedirect(reverse('form_single', kwargs={'submission_id': submission_id, 'key': key}))
+ try:
+ form.save()
+ except ValueError as e:
+ if e.message == 'wrong exercise id':
+ messages.error(request, u'Próba wysÅania odpowiedzi ponownie lub poza kolejnoÅciÄ ')
+ print 'wysyÅam redirect', i
+ return HttpResponseRedirect(reverse('wtem_form', kwargs={'submission_id': submission_id, 'key': key}))
else:
raise Exception
+@never_cache
+@csrf_exempt
+def start(request, submission_id, key):
+ state = CompetitionState.get_state()
+ if state in (CompetitionState.BEFORE, CompetitionState.AFTER):
+ return globals()['form_' + state](request, submission_id, key)
+
+ submission = Submission.objects.get(id=submission_id)
+ if submission.key != key:
+ return render(request, 'wtem/key_not_found.html')
+
+ i, exercise = submission.current_exercise()
+ if not exercise:
+ return render(request, 'wtem/thanks_single.html')
+
+ return render(request, 'wtem/start.html', {'exercise_count': len(exercises), 'submission': submission})
+
+
def confirmation(request, id, key):
conf = get_object_or_404(Confirmation, id=id, key=key)
was_confirmed = conf.confirmed
--
2.20.1