Skip to content
Snippets Groups Projects
Commit a1be9644 authored by Zdenek Kubala's avatar Zdenek Kubala
Browse files

enhanced stage + sifrovacka page + miscs

* assigment of first stage
* finish button at last stage
* removed some debug stuff
parent ae23d9e6
No related branches found
No related tags found
1 merge request!2Added stage web page
......@@ -23,9 +23,10 @@ BASE_DIR = Path(__file__).resolve().parent.parent
SECRET_KEY = 'django-insecure-kog+-x*xtt5e7shmxa-ddldzdtz@u#*tj^s9jzm#%&ghy*a8x%'
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
DEBUG = False
#DEBUG = True
ALLOWED_HOSTS = []
ALLOWED_HOSTS = ['*']
# Application definition
......
......@@ -2,7 +2,10 @@ from django import forms
#from .models import Sifrovacka, Stages, Participants
class PassphraseForm(forms.Form):
passphrase = forms.CharField(label='Vloz heslo k dalsi fazi', max_length=30)
passphrase = forms.CharField(label='Vloz heslo k dalsi fazi',
max_length=30, widget=forms.TextInput(attrs={'class':
'text-input form-field__contro','placeholder':
'sem vloz heslo pro postup do dalsi faze'}))
stage_current_urlhash = forms.CharField()
# def clean(self)
......
# Generated by Django 3.2.3 on 2021-09-07 10:48
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('sifrovacka', '0028_auto_20210906_1357'),
]
operations = [
migrations.AlterField(
model_name='stages',
name='stage_urlhash',
field=models.CharField(default='219a29ae0fc911ecb2d12016b9b07b5b', max_length=32),
),
]
{% extends "base.html" %}
{% load static %}
{% block content %}
<div class="alert alert--red-600">
<span> Stranka nenalezena. </span>
</div>
{% endblock %}
{% extends "base.html" %}
{% load static %}
{% block content %}
<div class="alert alert--red-600">
<!-- intentionally wrong encoded text - JUST FOR TESTING 500.html ERROR page -->
<span>Omlouvme se, ale nastala <b>chyba serveru</b>. </br>Pokud se chyba stala pi bn operaci, prosm kontaktujte sprvce a popite mu situaci vetn screenshotu, kontakt je ne. </span>
</div>
{% endblock %}
{% extends "base.html" %}
{% load static %}
{% block content %}
<div class="alert alert--red-600">
<span>Omlouvame se, ale nastala <b>chyba serveru</b>. </br>Pokud se chyba stala pri bezne operaci, prosim kontaktujte spravce a popiste mu situaci vcetne screenshotu, kontakt je nize. </span>
</div>
{% endblock %}
......@@ -59,7 +59,7 @@
{% include "shared/matomo_snippet.html" with matomo_id=settings.ONBOARDING_MATOMO_ID %}
{% endif %}
<title>Šifrovačky</title>
<title>Šifrovačka</title>
</head>
<body>
......@@ -74,7 +74,7 @@
<div class="navbar__brand my-4 flex items-center lg:pr-8 lg:my-0">
<a href="/"><img src="https://styleguide.pir-test.eu/2.3.x/images/logo-round-white.svg" class="w-8"></a>
<span class="pl-4 font-bold text-xl lg:border-r lg:border-grey-300 lg:pr-8">
<a href={% url "index"%}>Sifrovacky</a>
<a href={% url "index"%}>Sifrovacka</a>
{% if settings.SIFROVACKA_ENV == "dev" %}<sup class="text-cyan-100">(DEV)</sup>{% endif %}
</span>
</div>
......
{% extends "base.html" %}
{% block content %}
<div class="container container--default">
{% if sifrovacky_list %}
{% comment %}
{% if request.user.is_authenticated %}
{% for sifrovacka in available_sifrovacky_list %}
{% endcomment %}
<ul>
<p> <b>Aktivni sifrovacky: </b> </p>
<h1 class="head-alt-md">Aktivni sifrovacky:</h1>
{% for sifrovacka in sifrovacky_list %}
<li><a href={% url 'detail' sifrovacka.id %}>{{ sifrovacka.sifrovacka_name }}</a></li>
{% endfor %}
{% else %}
{% if not request.user.is_authenticated %}
<div class="alert alert--grey-125">
<span>Je nam lito, ale zadne sifrovacky nejsou aktualne dostupne.</span>
</div>
{% else %}
<h1 class="head-alt-md">Aktivni sifrovacky:</h1>
<p>Je nam lito, ale zadne sifrovacky nejsou aktualne dostupne.</p>
{% endif %}
{% endif %}
</ul>
{% if request.user.is_authenticated %}
<ul>
<p> <b>Prihlasene sifrovacky: </b> </p>
<h1 class="head-alt-base">Prihlasene sifrovacky:</h1>
{% if user_active_sifrovacky %}
{% for sifrovacka in user_active_sifrovacky %}
<li><a href={% url 'detail' sifrovacka.sifrovacka.id %}>{{ sifrovacka }}</a></li>
{% endfor %}
{% else %}
<p>Nemate zapsane zadne sifrovacky.</p>
{% endif %}
</ul>
{% endif %}
<ul>
<p> <b>Ukoncene sifrovacky: </b> </p>
{% if archived_sifrovacky %}
<h1 class="head-alt-base">Ukoncene sifrovacky:</h1>
{% for sifrovacka in archived_sifrovacky %}
<li><a href={% url 'detail' sifrovacka.id %}>{{ sifrovacka.sifrovacka_name }}</a></li>
{% endfor %}
{% endif %}
</ul>
{% comment %}
{% else %}
<p>Zadne sifrovacky nejsou aktivni nebo se ucastnite vsech dostupnych.</p>
{% endif %}
{% endcomment %}
{% else %}
<p>Je nam lito, ale zadne sifrovacky nejsou aktualne dostupne.</p>
{% endif %}
{% endcomment %}
</div>
{% endblock %}
......@@ -2,7 +2,8 @@
{% load static %}
{% block content %}
<p> Toto je detail sifrovacky se jmenem: <b>{{sifrovacka_detail}} </b> a id: {{sifrovacka_id}}. </p>
<div class="container container--default">
<h1 class="head-alt-md">{{sifrovacka_detail}}</h1>
</br>
<p> Pocet ukolu: <b> {{ sifrovacka_stage_count }} </b> </br>
<!--
......@@ -10,6 +11,8 @@
Casova narocnost: NONE</p>
-->
<h1 class="head-alt-sm">Pruvodni slovo</h1>
<hr>
</br>
{{ sifrovacka_detail.sifrovacka_description | safe }}
{% if sifrovacka_detail.sifrovacka_img %}
......@@ -19,23 +22,33 @@
Autor: Junius Koolen CC-BY-SA
</figcaption>
</figure>
{{ sifrovacka_detail.sifrovacka_img }}
{% endif%}
<hr>
{% if request.user.is_authenticated %}
{% if not sifrovacka_stage_count == 0 %}
{% if not sifrovacka_current_stage_urlhash %}
<form action="{% url 'home' %}" method="post">
{% csrf_token %}
<button type="submit" value={{ sifrovacka_id }} name='signupsif'>Prihlasit se k sifrovacce</button>
<button class="btn btn--autowidth btn--hoveractive btn--to-grey-500" type="submit" value={{ sifrovacka_id }} name='signupsif'>
<div class="btn__body ">Prihlasit se k sifrovacce</div>
</button>
</form>
{% else %}
<p> Vase Aktualni uroven: </p>
<h1 class="head-alt-sm">Vase Aktualni uroven</h1>
{% for stage in sifrovacka_stages %}
{% if sifrovacka_current_stage_urlhash.at_stage == stage.stage_urlhash %}
<li><a href={% url 'stage' stage.sifrovacka_id stage.stage_urlhash %}>{{ stage }}</a></li>
{% endif %}
{% endfor %}
{% endif %}
{% else %}
<div class="alert alert--grey-125">
<span> Sifrovacka zatim nema zadne urovne, proto neni mozne se k ni prihlasit.</span>
</div>
{% endif %}
{% endif %}
</div>
{% comment %}
</br>
</br>
</br>
......@@ -46,24 +59,5 @@ Debug:
{% endfor %}
</br>
</div>
{% comment %}
<form action="{% url 'sifrovacka:home' sifrovacka.id %}" method="post">
<img src="{{ MEDIA_URL }}{{sifrovacka_detail.sifrovacka_img}}" alt="16x9 Image">
{% csrf_token %}
<button type="submit" value=signupsif name='signupsif'>Prihlasit se k sifrovacce</button>
<button type="submit" value=signupsif onclick="location.href='{% url 'home' %}'" name='_signupsif'>Prihlasit se k sifrovacce</button>
<fieldset>
<legend><h1>{{ sifrovacka_detail }}</h1></legend>
{% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}
{% for choice in question.choice_set.all %}
<input type="radio" name="signupsif" id="signupsif" value="{{ sifrovacka_id }}">
<label for="signupsif"> Začít šifrovačku</label><br>
{% endfor %}
</fieldset>
<input type="submit" name="signupsif" value={{ sifrovacka_id }}>
{% endcomment %}
{% endblock %}
{% extends "sifrovacka.html" %}
{% extends "base.html" %}
{% load static %}
{% comment %}
{{ sifrovacka_current_id }} - {{ sifrovacka_current_stage_url_hash.at_stage }}
{% endcomment %}
{% block content %}
<div class="container container--default">
{% if stage_current_id %}
{% if request.user.is_authenticated %}
<p> <b>{{ sifrovacka_current_stage_urlhash }} </b> - krok cislo {{ stage_current_id.stage_number }} z {{ sifrovacka_stage_count }}. </p>
<h1 class="head-alt-md">{{ sifrovacka_current_stage_urlhash }}</h1>
<p>Krok: <b>{{ stage_current_id.stage_number }}</b> z {{ sifrovacka_stage_count }}. </p>
{% if error_passphrase %}
<div class="alert alert--red-600">
<span>Zadali jste Spatne heslo pro vstup do dalsi urovne. </span>
</div>
{% endif %}
<h1 class="head-alt-sm">Pruvodni slovo</h1>
<hr>
{{ stage_current_id.stage_description | safe }}
{% if stage_current_id.stage_img %}
<figure class="figure">
<img src=" {% get_media_prefix %}{{stage_current_id.stage_img}}" alt="16x9 Image">
{% comment %}
<!-- mozna doprovodny text k fotce -->
<figcaption>
Autor: Junius Koolen CC-BY-SA
Autor: Junius Koolen CC-BY-SA {{ stage_current_picture_extra_text }
</figcaption>
{% endcomment %}
</figure>
{% endif %}
{% if not last_stage %}
{{ stage_current_id.stage_img }}
{{ stage_current_id.stage_urlhash }}
<form action="{% url 'stage' sifrovacka_id stage_current_id.stage_urlhash %}" method="post">
{% csrf_token %}
{{ form.non_field_errors }}
</br>
</br>
<!-- <div class="inline-flex flex-col sm:flex-row space-y-8 sm:space-y-0 sm:space-x-8"> -->
<button class="collapsible btn btn--fullwidth btn--grey-700 ">
<div>
<button class="collapsible btn btn--fullwidth btn--grey-700 " type="button">
<div class="btn__body "> Klikni pro napovedu</div>
</button>
<!-- </div> -->
<!-- <button type="button" class="collapsible">Klikni pro napovedu</button> -->
<div class="content">
<p>{{ stage_current_id.stage_help }}</p>
</div>
......@@ -52,47 +57,48 @@ for (i = 0; i < coll.length; i++) {
});
}
</script>
</div>
<hr>
</br>
<!-- Form field-->
<div class="form-field ">
<div class="form-field__wrapper form-field__wrapper--shadowed">
<div class="fieldWrapper">
{{ passphrase_form.non_field_errors }}
{{ passphrase_form.errors }}
{{ passphrase_form.passphrase.errors }}
<label for="{{ passphrase_form.passphrase.id_for_label }}">Zadejte heslo pro pristup do dalsi urovne: </label>
{{ passphrase_form.passphrase }}
</div>
</div>
<div class="form-field ">
<div class="form-field__wrapper form-field__wrapper--shadowed">
{{ passphrase_form.stage_current_urlhash.errors }}
{% comment %}
<label for="{{ passphrase_form.stage_current_urlhash.id_for_label }}">URLHASH: </label>
{% endcomment %}
{{ passphrase_form.passphrase }}
<input id="id_stage_current_urlhash" type="hidden" name="stage_current_urlhash" required="" value="{{stage_current_id.stage_urlhash}}">
<button class="btn btn--autowidth ">
<div class="btn__body">Odeslat</div>
</button>
</div>
</div>
<!-- End Form field -->
</form>
{% else %}
{% if not participant_sifrovacka.finished %}
{% comment %}
{{ passphrase_form.passphrase }}</br>
{{ passphrase_form.stage_current_urlhash }}
{% endcomment %}
<button class="btn btn--autowidth {{ classes }}">
<div class="btn__body">Odeslat</div>
<form action="{% url 'stage' sifrovacka_id stage_current_id.stage_urlhash %}" method="post">
{% csrf_token %}
<button id="id_finish" class="btn btn--autowidth btn--hoveractive btn--to-grey-500" type="submit" value=True name="finish">
<div class="btn__body ">Dokoncit</div>
</button>
<!-- <input type="submit" value= 'Odeslat' name='passphrase_form'> -->
</form>
{% else %}
nejaky else
<div class="alert alert--green-400">
<span>Tuto sifrovacku mate dokoncenou.</span>
</div>
{% endif %}
{% endif%}
{% comment %}
{% endcomment %}
{% endif %}
{% else %}
<div class="alert alert--red-600">
<span> Stranka neni dostupna </span>
</div>
{% endif %}
</br>
</br>
</br>
Debug:
</div>
{% endblock %}
from django.shortcuts import get_object_or_404, render, redirect
from django.shortcuts import get_object_or_404, redirect, render
# Create your views here.
from django.db import IntegrityError
from django.utils import timezone
from django.http import HttpResponse
from django.http import HttpResponse, Http404
from django.template import loader
from django.contrib.auth import login,logout
from .models import Sifrovacka, Stages, Participants
......@@ -12,18 +12,16 @@ from .models import Sifrovacka, Stages, Participants
from .forms import PassphraseForm
def stage(request, sifrovacka_id, stage_urlhash):
# print(dir(request.user.participants_set.values))
# print(stage_urlhash)
# print(request.user.participants_set.values())
# sifrovacka_current_stage = request.user.participants_set.values_list('id')
passphrase_form = None
sifrovacka_next_stage = None
sifrovacka_current_stage_urlhash = None
sifrovacka_detail = Sifrovacka.objects.get(id = sifrovacka_id)
sifrovacka_detail = get_object_or_404(Sifrovacka,id = sifrovacka_id)
sifrovacka_stages = Stages.objects.filter(sifrovacka__sifrovacka_name = sifrovacka_detail)
sifrovacka_stage_count = sifrovacka_stages.count()
stage_current_id = None
participant_sifrovacka = None
last_stage = False
error_passphrase= False
if request.user.is_authenticated:
sifrovacka_all_user_current_stages= Participants.objects.filter(user = \
request.user).filter(sifrovacka_id = \
......@@ -31,19 +29,22 @@ def stage(request, sifrovacka_id, stage_urlhash):
for s in sifrovacka_all_user_current_stages:
if s['sifrovacka_id'] == sifrovacka_id:
print("---SIFROVACKA---")
# print(s['id'])
tmp_stage_id = s['id']
sifrovacka_current_stage_urlhash = Participants.objects.get(id = \
tmp_stage_id)
tmp_participant_sifrovacka = Participants.objects.filter(user = \
request.user).filter(sifrovacka_id = \
sifrovacka_id)
participant_sifrovacka = Participants.objects.get(id = \
tmp_participant_sifrovacka[0].id)
if (sifrovacka_current_stage_urlhash.at_stage == stage_urlhash):
print('hehe')
stage_current_id = Stages.objects.get(stage_urlhash =
stage_current_id = get_object_or_404(Stages,stage_urlhash =
sifrovacka_current_stage_urlhash.at_stage)
#sifrovacka_current = Participants.objects.get(id = \
# tmp_stage_id)
print(stage_current_id)
else:
print('not same')
raise Http404
if stage_current_id.stage_number < sifrovacka_stage_count:
if request.method == 'POST':
......@@ -56,9 +57,9 @@ def stage(request, sifrovacka_id, stage_urlhash):
print("----BETWEEN STAGES----")
tmp_next_stage_number = stage_current_id.stage_number + 1
print(tmp_next_stage_number)
sifrovacka_current = sifrovacka_stages.filter(stage_number = tmp_next_stage_number)
print(sifrovacka_current)
sifrovacka_next_stage = sifrovacka_current.get(stage_number = tmp_next_stage_number)
tmp_sifrovacka_current = sifrovacka_stages.filter(stage_number = tmp_next_stage_number)
print(tmp_sifrovacka_current)
sifrovacka_next_stage = tmp_sifrovacka_current.get(stage_number = tmp_next_stage_number)
print(sifrovacka_next_stage)
tmp_stage_next_urlhash = sifrovacka_next_stage.stage_urlhash
tmp_stage_next_passphrase = sifrovacka_next_stage.stage_passphrase
......@@ -68,24 +69,61 @@ def stage(request, sifrovacka_id, stage_urlhash):
if tmp_stage_next_passphrase == request.POST['passphrase']:
print('correct passphrase')
try:
setattr(sifrovacka_current_stage_urlhash, 'at_stage', tmp_stage_next_urlhash)
except IntegrityError as e:
print(e)
context = {"sifrovacka_id": sifrovacka_id,
"sifrovacka_detail": sifrovacka_detail,
"sifrovacka_stages": sifrovacka_stages,
"sifrovacka_stage_count": sifrovacka_stage_count,
"sifrovacka_current_stage_urlhash": sifrovacka_current_stage_urlhash,
"stage_current_id": stage_current_id,
"last_stage": last_stage,
"passphrase_form": passphrase_form,
"error_alreadysigned": e
}
return render(request, 'stage.html', context)
else:
sifrovacka_current_stage_urlhash.save()
tmp_stage_url = request.path.split('/')
tmp_stage_url[3] = tmp_stage_next_urlhash
tmp_stage_next_url = "/".join(tmp_stage_url)
print(tmp_stage_next_url)
return redirect(tmp_stage_next_url)
else:
error_passphrase = True
passphrase_form = PassphraseForm()
print("ENDHASH")
else:
print("---GET---")
passphrase_form = PassphraseForm()
else:
print("VETSI")
elif stage_current_id.stage_number == sifrovacka_stage_count:
last_stage = True
print("---Participant---")
print(participant_sifrovacka.finished)
if (sifrovacka_current_stage_urlhash.at_stage == stage_urlhash):
try:
if request.POST['finish']:
print("FINISH")
except KeyError as e:
pass
else:
print("not key")
try:
setattr(participant_sifrovacka, 'finished', True)
except IntegrityError as e:
print(e)
else:
print("xx")
participant_sifrovacka.save()
# else:
# print("VETSI")
print(last_stage)
......@@ -95,8 +133,10 @@ def stage(request, sifrovacka_id, stage_urlhash):
"sifrovacka_stage_count": sifrovacka_stage_count,
"sifrovacka_current_stage_urlhash": sifrovacka_current_stage_urlhash,
"stage_current_id": stage_current_id,
"participant_sifrovacka": participant_sifrovacka,
"last_stage": last_stage,
'passphrase_form': passphrase_form
'passphrase_form': passphrase_form,
"error_passphrase": error_passphrase
}
return render(request, 'stage.html', context)
......@@ -104,7 +144,8 @@ def detail(request, sifrovacka_id):
# print(dir(request))
sifrovacka_current_stage_urlhash = None
sifrovacka_current_id = None
sifrovacka_detail = Sifrovacka.objects.get(id = sifrovacka_id)
sifrovacka_detail = get_object_or_404(Sifrovacka,id = sifrovacka_id)
#sifrovacka_detail = Sifrovacka.objects.get(id = sifrovacka_id)
sifrovacka_stages = Stages.objects.filter(sifrovacka__sifrovacka_name = sifrovacka_detail)
sifrovacka_stage_count = sifrovacka_stages.count()
if request.user.is_authenticated:
......@@ -118,14 +159,7 @@ def detail(request, sifrovacka_id):
tmp_stage_id = s['id']
sifrovacka_current_stage_urlhash = Participants.objects.get(id = \
tmp_stage_id)
# if (sifrovacka_current_stage_urlhash.at_stage == stage_urlhash):
# print('hehe')
sifrovacka_current_id = tmp_stage_id
#sifrovacka_current_id = Participants.objects.get(id = \
# tmp_stage_id)
# else:
# print('not same')
context = {"sifrovacka_id": sifrovacka_id,
"sifrovacka_detail": sifrovacka_detail,
......@@ -144,9 +178,9 @@ def home(request):
participation_sifrovacky_list = Participants.objects.filter(user =
request.user).order_by('sifrovacka_id')
if request.method == 'POST':
if request.POST["signupsif"]:
if request.POST['signupsif']:
post_signupsif = request.POST["signupsif"]
post_signupsif = request.POST['signupsif']
print(post_signupsif)
sifrovacka_detail = Sifrovacka.objects.get(id = post_signupsif)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment