From a1be9644f97b49045f3f5b04f42208edd6a4ea24 Mon Sep 17 00:00:00 2001
From: Zdenek Kubala <zdenek.kubala@pirati.cz>
Date: Tue, 7 Sep 2021 14:49:23 +0000
Subject: [PATCH] enhanced stage + sifrovacka page + miscs

* assigment of first stage
* finish button at last stage
* removed some debug stuff
---
 django_apps/settings.py                       |   5 +-
 sifrovacka/forms.py                           |   5 +-
 .../0029_alter_stages_stage_urlhash.py        |  18 +++
 sifrovacka/templates/404.html                 |   8 +
 sifrovacka/templates/405.html                 |   9 ++
 sifrovacka/templates/500.html                 |   8 +
 sifrovacka/templates/base.html                |   4 +-
 sifrovacka/templates/index.html               |  65 +++++---
 sifrovacka/templates/sifrovacka.html          | 114 +++++++-------
 sifrovacka/templates/stage.html               | 144 +++++++++---------
 sifrovacka/views.py                           | 116 +++++++++-----
 11 files changed, 296 insertions(+), 200 deletions(-)
 create mode 100644 sifrovacka/migrations/0029_alter_stages_stage_urlhash.py
 create mode 100644 sifrovacka/templates/404.html
 create mode 100644 sifrovacka/templates/405.html
 create mode 100644 sifrovacka/templates/500.html

diff --git a/django_apps/settings.py b/django_apps/settings.py
index c6f7342..012e16b 100644
--- a/django_apps/settings.py
+++ b/django_apps/settings.py
@@ -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
diff --git a/sifrovacka/forms.py b/sifrovacka/forms.py
index 363bbdc..7771891 100644
--- a/sifrovacka/forms.py
+++ b/sifrovacka/forms.py
@@ -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)
diff --git a/sifrovacka/migrations/0029_alter_stages_stage_urlhash.py b/sifrovacka/migrations/0029_alter_stages_stage_urlhash.py
new file mode 100644
index 0000000..ccf7108
--- /dev/null
+++ b/sifrovacka/migrations/0029_alter_stages_stage_urlhash.py
@@ -0,0 +1,18 @@
+# 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),
+        ),
+    ]
diff --git a/sifrovacka/templates/404.html b/sifrovacka/templates/404.html
new file mode 100644
index 0000000..e6da427
--- /dev/null
+++ b/sifrovacka/templates/404.html
@@ -0,0 +1,8 @@
+{% extends "base.html" %}
+{% load static %}
+
+{% block content %}
+<div class="alert alert--red-600">
+ <span> Stranka nenalezena. </span>
+</div>
+{% endblock %}
diff --git a/sifrovacka/templates/405.html b/sifrovacka/templates/405.html
new file mode 100644
index 0000000..86cec24
--- /dev/null
+++ b/sifrovacka/templates/405.html
@@ -0,0 +1,9 @@
+{% 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>Omlouváme se, ale nastala <b>chyba serveru</b>. </br>Pokud se chyba stala pżi bżżné operaci, prosím kontaktujte správce a popiżte mu situaci vżetnż screenshotu, kontakt je níże. </span>
+</div>
+{% endblock %}
diff --git a/sifrovacka/templates/500.html b/sifrovacka/templates/500.html
new file mode 100644
index 0000000..be87cb1
--- /dev/null
+++ b/sifrovacka/templates/500.html
@@ -0,0 +1,8 @@
+{% 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 %}
diff --git a/sifrovacka/templates/base.html b/sifrovacka/templates/base.html
index 457cbb4..d82b1d4 100644
--- a/sifrovacka/templates/base.html
+++ b/sifrovacka/templates/base.html
@@ -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>
diff --git a/sifrovacka/templates/index.html b/sifrovacka/templates/index.html
index f33ceda..b1220ae 100644
--- a/sifrovacka/templates/index.html
+++ b/sifrovacka/templates/index.html
@@ -1,37 +1,52 @@
 {% 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>
-    {% for sifrovacka in sifrovacky_list %}
-     <li><a href={% url 'detail' sifrovacka.id %}>{{ sifrovacka.sifrovacka_name }}</a></li>
-    {% endfor %}
-   </ul>
-   {% if request.user.is_authenticated %}
-   <ul>
-    <p> <b>Prihlasene sifrovacky: </b> </p>
-    {% for sifrovacka in user_active_sifrovacky %}
-     <li><a href={% url 'detail' sifrovacka.sifrovacka.id %}>{{ sifrovacka }}</a></li>
-    {% endfor %}
-   </ul>
-   {% endif %}
-   <ul>
-    <p> <b>Ukoncene sifrovacky: </b> </p>
-    {% for sifrovacka in archived_sifrovacky %}
-     <li><a href={% url 'detail' sifrovacka.id %}>{{ sifrovacka.sifrovacka_name }}</a></li>
-    {% endfor %}
-   </ul>
+ <ul>
+  <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>
+  <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>
+ {% 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 %}
diff --git a/sifrovacka/templates/sifrovacka.html b/sifrovacka/templates/sifrovacka.html
index 1dded66..8c49b30 100644
--- a/sifrovacka/templates/sifrovacka.html
+++ b/sifrovacka/templates/sifrovacka.html
@@ -2,68 +2,62 @@
 {% load static %}
 
 {% block content %}
-<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>
--->
+ <div class="container container--default">
+  <h1 class="head-alt-md">{{sifrovacka_detail}}</h1>
+  </br>
+  <p> Pocet ukolu: <b> {{ sifrovacka_stage_count }} </b> </br>
+  <!--
+      Obtiznost: NONE</br>
+      Casova narocnost: NONE</p>
+  -->
 
-</br>
-{{ sifrovacka_detail.sifrovacka_description | safe }}
-{% if sifrovacka_detail.sifrovacka_img %}
- <figure class="figure">
-  <img src=" {% get_media_prefix %}{{sifrovacka_detail.sifrovacka_img}}" alt="16x9 Image">
- <figcaption>
-     Autor: Junius Koolen CC-BY-SA
- </figcaption>
-</figure>
- {{ sifrovacka_detail.sifrovacka_img }}
-{% endif%}
-{% if request.user.is_authenticated %}
- {% 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>
-  </form>
- {% else %}
-   <p> Vase Aktualni uroven: </p>
+  <h1 class="head-alt-sm">Pruvodni slovo</h1>
+  <hr>
+  </br>
+  {{ sifrovacka_detail.sifrovacka_description | safe }}
+  {% if sifrovacka_detail.sifrovacka_img %}
+   <figure class="figure">
+    <img src=" {% get_media_prefix %}{{sifrovacka_detail.sifrovacka_img}}" alt="16x9 Image">
+   <figcaption>
+       Autor: Junius Koolen CC-BY-SA
+   </figcaption>
+  </figure>
+  {% 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 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 %}
+      <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>
+  Debug:
+  <div>
   {% 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 %}
-{% endif %}
-</br>
-</br>
-</br>
-Debug:
-<div>
-{% for stage in sifrovacka_stages %}
-     <li><a href={% url 'stage' stage.sifrovacka_id stage.stage_urlhash %}>{{ stage }}</a></li>
-{% 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 %}
+  </br>
+  </div>
+ {% endcomment %}
 {% endblock %}
diff --git a/sifrovacka/templates/stage.html b/sifrovacka/templates/stage.html
index 061d085..2e55697 100644
--- a/sifrovacka/templates/stage.html
+++ b/sifrovacka/templates/stage.html
@@ -1,98 +1,104 @@
-{% 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>
-   {{ stage_current_id.stage_description | safe }}
+  <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">
-     <figcaption>
-       Autor: Junius Koolen CC-BY-SA
-     </figcaption>
+{% comment  %}
+<!-- mozna doprovodny text k fotce -->
+      <figcaption>
+       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 class="btn__body "> Klikni pro napovedu</div>
-</button>
-<!--     </div> -->
-<!--     <button type="button" class="collapsible">Klikni pro napovedu</button> -->
-     <div class="content">
+     <div>
+      <button class="collapsible btn btn--fullwidth btn--grey-700 " type="button">
+       <div class="btn__body "> Klikni pro napovedu</div>
+      </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>
      </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>
+     <hr>
      </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 %}
-
+<!-- Form field-->
+     <div class="form-field  ">
+      <div class="fieldWrapper">
+       {{ passphrase_form.non_field_errors }}
+       {{ passphrase_form.errors }}
+       {{ passphrase_form.passphrase.errors }}
+      </div>
+      <div class="form-field__wrapper form-field__wrapper--shadowed">
+       {{ 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 {{ classes }}">
-     <div class="btn__body">Odeslat</div>
-    </button>
-<!--     <input type="submit" value= 'Odeslat' name='passphrase_form'>  -->
-    </form>
+       <button class="btn btn--autowidth ">
+        <div class="btn__body">Odeslat</div>
+       </button>
+      </div>
+     </div>
+<!-- End Form field -->
+     </form>
    {% else %}
-    nejaky else
+    {% if not participant_sifrovacka.finished %}
+ {% comment %}
+ {% endcomment %}
+     <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>
+     </form>
+    {% 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 %}
diff --git a/sifrovacka/views.py b/sifrovacka/views.py
index 2907547..4cf0b27 100644
--- a/sifrovacka/views.py
+++ b/sifrovacka/views.py
@@ -1,9 +1,9 @@
-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,25 +69,62 @@ def stage(request, sifrovacka_id, stage_urlhash):
 
                             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)
-        
+                                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)
     context = {"sifrovacka_id": sifrovacka_id,
@@ -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,14 +178,14 @@ 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)
                   sifrovacka_stages = Stages.objects.filter(sifrovacka__sifrovacka_name =
-                          sifrovacka_detail).filter(stage_number = "1")
+                                       sifrovacka_detail).filter(stage_number = "1")
                   stage_current_urlhash = sifrovacka_stages[0].stage_urlhash
                   print(stage_current_urlhash)
                   try:
@@ -161,8 +195,8 @@ def home(request):
                   except IntegrityError as e:
                       print(e)
                       context = {"active_sifrovacky_list": all_sifrovacky_list,
-                                  "participation_sifrovacky_list": participation_sifrovacky_list,
-                                  "error_alreadysigned": e
+                                 "participation_sifrovacky_list": participation_sifrovacky_list,
+                                 "error_alreadysigned": e
                                 }
                       return render(request, 'home.html', context)
                   else:
-- 
GitLab