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

added passphrase into stages and better templates

parent 5a845e71
No related branches found
No related tags found
1 merge request!2Added stage web page
......@@ -40,6 +40,7 @@ INSTALLED_APPS = [
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'tinymce',
]
MIDDLEWARE = [
......@@ -133,6 +134,40 @@ DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
LOGIN_REDIRECT_URL = 'home'
LOGOUT_REDIRECT_URL = 'index'
# Custom settings STATIC
STATIC_URL = "/static/"
STATIC_ROOT = BASE_DIR / 'static'
#STATICFILES_DIRS = BASE_DIR / 'static'
# Custom settings MEDIA
MEDIA_URL = "/media/"
MEDIA_ROOT = BASE_DIR / 'media'
# TinyMCE settings
TINYMCE_DEFAULT_CONFIG = {
'cleanup_on_startup': True,
'custom_undo_redo_levels': 20,
'selector': 'textarea',
'theme': 'silver',
'plugins': '''
textcolor save link image media preview codesample contextmenu
table code lists fullscreen insertdatetime nonbreaking
contextmenu directionality searchreplace wordcount visualblocks
visualchars code fullscreen autolink lists charmap print hr
anchor pagebreak
''',
'toolbar1': '''
fullscreen preview bold italic underline | fontselect,
fontsizeselect | forecolor backcolor | alignleft alignright |
aligncenter alignjustify | indent outdent | bullist numlist table |
| link image media | codesample |
''',
'toolbar2': '''
visualblocks visualchars |
charmap hr pagebreak nonbreaking anchor | code |
''',
'contextmenu': 'formats | link image',
'menubar': True,
'statusbar': True,
}
......@@ -15,9 +15,15 @@ Including another URLconf
"""
from django.contrib import admin
from django.urls import path, include
from django.conf.urls.static import static
from django.conf import settings
urlpatterns = [
# path('polls/', include('polls.urls')),
path('sifrovacka/', include('sifrovacka.urls')),
path('admin/', admin.site.urls),
]
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
appdirs==1.4.4
asgiref==3.3.4
asn1crypto==1.4.0
backcall==0.2.0
certifi==2021.5.30
cffi==1.14.6
charset-normalizer==2.0.4
confusable-homoglyphs==3.2.0
cryptography==3.3.2
dbus-python==1.2.16
decorator==5.0.9
distlib==0.3.1
Django==3.2.3
django-registration==3.2
entrypoints==0.3
filelock==3.0.12
idna==3.2
importlib-metadata==1.6.0
ipython==7.27.0
ipython-genutils==0.2.0
jedi==0.18.0
jeepney==0.6.0
keyring==22.0.1
keyrings.alt==4.0.2
Mako==1.1.3
Markdown==3.3.4
MarkupSafe==1.1.1
matplotlib-inline==0.1.2
more-itertools==4.2.0
parso==0.8.2
pexpect==4.8.0
pickleshare==0.7.5
Pillow==8.3.2
prompt-toolkit==3.0.20
ptyprocess==0.7.0
pycairo==1.20.1
pycparser==2.20
pycrypto==2.6.1
pycryptodomex==3.9.7
Pygments==2.7.1
PyGObject==3.38.0
pytz==2021.1
pyxdg==0.27
PyYAML==5.3.1
requests==2.26.0
SecretStorage==3.3.1
six==1.16.0
sqlparse==0.4.1
traitlets==5.0.5
typing-extensions==3.10.0.0
urllib3==1.26.6
virtualenv==20.4.0+ds
wcwidth==0.2.5
xdg==5
zipp==1.0.0
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)
stage_current_urlhash = forms.CharField()
# def clean(self)
# cleaned_data = super(PassphraseForm, self).clean()
# passphrase = cleaned_data.get('passphrase')
# if request.user.is_authenticated:
# sifrovacka_current_stage_urlhash = Participants.objects.get(id = \
# tmp_stage_id)
# if (sifrovacka_current_stage_urlhash.at_stage == stage_urlhash):
# print('hehe')
# stage_current_id = Stages.objects.get(stage_urlhash =
# sifrovacka_current_stage_urlhash.at_stage)
# #sifrovacka_current = Participants.objects.get(id = \
# # tmp_stage_id)
# else:
# print('not same')
#
# Generated by Django 3.2.3 on 2021-09-06 09:19
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('sifrovacka', '0026_alter_stages_stage_urlhash'),
]
operations = [
migrations.AddField(
model_name='stages',
name='stage_help',
field=models.CharField(blank=True, max_length=200),
),
migrations.AlterField(
model_name='stages',
name='stage_urlhash',
field=models.CharField(default='7aa966760ef311eca0fc2016b9b07b5b', max_length=32),
),
]
# Generated by Django 3.2.3 on 2021-09-06 13:57
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('sifrovacka', '0027_auto_20210906_0919'),
]
operations = [
migrations.AddField(
model_name='participants',
name='finished',
field=models.BooleanField(default=False),
),
migrations.AlterField(
model_name='stages',
name='stage_urlhash',
field=models.CharField(default='5b00798c0f1a11ec936e2016b9b07b5b', max_length=32),
),
]
......@@ -45,6 +45,7 @@ class Stages(models.Model):
stage_number = models.IntegerField()
stage_name = models.CharField(max_length=80)
stage_description = HTMLField()
stage_help = models.CharField(max_length=200, blank=True)
#sifrovacka_description = models.CharField(max_length=2000)
stage_passphrase = models.CharField(max_length=30,
default='hesl0Sifrovacka')
......@@ -67,6 +68,7 @@ class Participants(models.Model):
#at_stage = models.IntegerField(default=1)
at_stage = models.CharField(max_length=32,default='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')
inactive = models.BooleanField(default = False)
finished = models.BooleanField(default = False)
def __str__(self):
return str(self.user) + " - " + str(self.sifrovacka)
......
{% load static %}
<!doctype html>
{% load static %}
<html lang="cs">
<head>
<!-- Meta -->
......@@ -31,6 +31,29 @@
text-decoration: none !important;
}
</style>
<style type="text/css">
.collapsible {
cursor: pointer;
padding: 18px;
width: 100%;
border: none;
text-align: center;
outline: none;
font-size: 15px;
}
.active, .collapsible:hover {
background-color: #555;
}
.content {
padding: 0 18px;
overflow: hidden;
background-color: #f0f0f0;
max-height: 0;
transition: max-height 0.2s ease-out;
}
</style>
{% if settings.SIFROVACKA_ENV == "prod" and settings.ONBOARDING_MATOMO_ID %}
{% include "shared/matomo_snippet.html" with matomo_id=settings.ONBOARDING_MATOMO_ID %}
......
......@@ -5,8 +5,10 @@
<p> Toto je detail sifrovacky se jmenem: <b>{{sifrovacka_detail}} </b> a id: {{sifrovacka_id}}. </p>
</br>
<p> Pocet ukolu: <b> {{ sifrovacka_stage_count }} </b> </br>
<!--
Obtiznost: NONE</br>
Casova narocnost: NONE</p>
-->
</br>
{{ sifrovacka_detail.sifrovacka_description | safe }}
......
{% extends "sifrovacka.html" %}
{% load static %}
{% comment %}
{{ sifrovacka_current_id }} - {{ sifrovacka_current_stage_url_hash.at_stage }}
{% endcomment %}
{% block content %}
{% if sifrovacka_current_stage_urlhash %}
{% 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>
......@@ -19,8 +18,73 @@
Autor: Junius Koolen CC-BY-SA
</figcaption>
</figure>
{{ sifrovacka_detail.sifrovacka_img }}
{% 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 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>
<script>
var coll = document.getElementsByClassName("collapsible");
var i;
for (i = 0; i < coll.length; i++) {
coll[i].addEventListener("click", function() {
this.classList.toggle("active");
var content = this.nextElementSibling;
if (content.style.maxHeight){
content.style.maxHeight = null;
} else {
content.style.maxHeight = content.scrollHeight + "px";
}
});
}
</script>
</br>
<div class="form-field ">
<div class="form-field__wrapper form-field__wrapper--shadowed">
{{ 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 %}
<input id="id_stage_current_urlhash" type="hidden" name="stage_current_urlhash" required="" value="{{stage_current_id.stage_urlhash}}">
</div>
</div>
{% comment %}
{{ passphrase_form.passphrase }}</br>
{{ passphrase_form.stage_current_urlhash }}
{% endcomment %}
<button class="btn btn--autowidth {{ classes }}">
<div class="btn__body">Odeslat</div>
</button>
<!-- <input type="submit" value= 'Odeslat' name='passphrase_form'> -->
</form>
{% else %}
nejaky else
{% endif%}
{% comment %}
{% endcomment %}
{% endif %}
{% else %}
<div class="alert alert--red-600">
......
......@@ -19,8 +19,4 @@ urlpatterns = [
path('', views.index, name='index'),
]
# ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
if settings.DEBUG:
print("XXXXXX")
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
from django.shortcuts import get_object_or_404, render
from django.shortcuts import get_object_or_404, render, redirect
# Create your views here.
from django.db import IntegrityError
......@@ -8,25 +8,30 @@ from django.template import loader
from django.contrib.auth import login,logout
from .models import Sifrovacka, Stages, Participants
# forms
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_current_id = None
sifrovacka_detail = Sifrovacka.objects.get(id = sifrovacka_id)
sifrovacka_stages = Stages.objects.filter(sifrovacka__sifrovacka_name = sifrovacka_detail)
sifrovacka_stage_count = sifrovacka_stages.count()
stage_current_id = None
last_stage = False
if request.user.is_authenticated:
sifrovacka_all_user_current_stages= Participants.objects.filter(user = \
request.user).filter(sifrovacka_id = \
sifrovacka_id).values('sifrovacka_id','id')
for s in sifrovacka_all_user_current_stages:
if s['sifrovacka_id'] == sifrovacka_id:
print("---AA---")
# print(s['at_stage'])
print("---SIFROVACKA---")
# print(s['id'])
tmp_stage_id = s['id']
sifrovacka_current_stage_urlhash = Participants.objects.get(id = \
tmp_stage_id)
......@@ -36,18 +41,62 @@ def stage(request, sifrovacka_id, 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')
# else:
# sifrovacka_current = None
print(sifrovacka_current_id)
if stage_current_id.stage_number < sifrovacka_stage_count:
if request.method == 'POST':
print("---POST---")
passphrase_form = PassphraseForm(request.POST)
if passphrase_form.is_valid():
print(request.path)
print(dir(request))
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)
print(sifrovacka_next_stage)
tmp_stage_next_urlhash = sifrovacka_next_stage.stage_urlhash
tmp_stage_next_passphrase = sifrovacka_next_stage.stage_passphrase
print(tmp_next_stage_number)
print(tmp_stage_next_urlhash)
print(tmp_stage_next_passphrase)
if tmp_stage_next_passphrase == request.POST['passphrase']:
print('correct passphrase')
setattr(sifrovacka_current_stage_urlhash, 'at_stage', tmp_stage_next_urlhash)
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)
passphrase_form = PassphraseForm()
print("ENDHASH")
else:
print("---GET---")
passphrase_form = PassphraseForm()
else:
print("VETSI")
last_stage = True
print(last_stage)
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,
"sifrovacka_current_stage_urlhash": sifrovacka_current_stage_urlhash
"last_stage": last_stage,
'passphrase_form': passphrase_form
}
return render(request, 'stage.html', context)
......@@ -64,7 +113,7 @@ def detail(request, sifrovacka_id):
sifrovacka_id).values('sifrovacka_id','id')
for s in sifrovacka_all_user_current_stages:
if s['sifrovacka_id'] == sifrovacka_id:
print("---AA---")
print("---SIFROVACKA---")
# print(s['at_stage'])
tmp_stage_id = s['id']
sifrovacka_current_stage_urlhash = Participants.objects.get(id = \
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment