diff --git a/.gitignore b/.gitignore index b0af3886860594515460f1df3d25c624bed52200..cb6d38b4f9984f617b359064ea46e0ba964cd909 100644 --- a/.gitignore +++ b/.gitignore @@ -104,4 +104,7 @@ GitHub.sublime-settings !.vscode/launch.json !.vscode/extensions.json .history + +# Custom # db.sqlite3 +media/* diff --git a/django_apps/settings.py b/django_apps/settings.py index 2fca22b0505bf8a1e40ab303c647483ca1e8af68..012e16bbc498f7729f12a8674005f8918be2f0fe 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 @@ -40,6 +41,7 @@ INSTALLED_APPS = [ 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', + 'tinymce', ] MIDDLEWARE = [ @@ -63,6 +65,7 @@ TEMPLATES = [ 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', + 'django.template.context_processors.media', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], @@ -131,3 +134,41 @@ 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, +} + diff --git a/django_apps/urls.py b/django_apps/urls.py index d3c3f95b70ce0af72b597b482f4b954fee07497e..e70575b2d97e698d00ed7a0c6639d4d030e509a0 100644 --- a/django_apps/urls.py +++ b/django_apps/urls.py @@ -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) diff --git a/requirements.txt b/requirements.txt index 83d66431530342db426469989fa4a293a3928085..e245cfaee3958c44f943b0d846424917a0c01ca1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,7 +2,9 @@ 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 @@ -10,8 +12,10 @@ decorator==5.0.9 distlib==0.3.1 Django==3.2.3 django-registration==3.2 +django-tinymce==3.3.0 entrypoints==0.3 filelock==3.0.12 +idna==3.2 importlib-metadata==1.6.0 ipython==7.27.0 ipython-genutils==0.2.0 @@ -27,6 +31,7 @@ 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 @@ -38,11 +43,13 @@ 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 diff --git a/requirements.txt_ b/requirements.txt_ new file mode 100644 index 0000000000000000000000000000000000000000..53b86ebcfdf52b4057d8c7d9c5126d9b5fea0478 --- /dev/null +++ b/requirements.txt_ @@ -0,0 +1,55 @@ +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 diff --git a/sifrovacka/forms.py b/sifrovacka/forms.py new file mode 100644 index 0000000000000000000000000000000000000000..777189152181f14e34c9ed0bf5b28ee4e0e5c72c --- /dev/null +++ b/sifrovacka/forms.py @@ -0,0 +1,26 @@ +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, 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) +# 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') +# diff --git a/sifrovacka/migrations/0012_auto_20210904_1228.py b/sifrovacka/migrations/0012_auto_20210904_1228.py new file mode 100644 index 0000000000000000000000000000000000000000..9c811965ad15ec6bc596218f3e30a2c074564a6d --- /dev/null +++ b/sifrovacka/migrations/0012_auto_20210904_1228.py @@ -0,0 +1,28 @@ +# Generated by Django 3.2.3 on 2021-09-04 12:28 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sifrovacka', '0011_alter_sifrovacka_pub_date'), + ] + + operations = [ + migrations.AddField( + model_name='stages', + name='stage_img', + field=models.ImageField(blank=True, upload_to='UserDirectoryPath'), + ), + migrations.AddField( + model_name='stages', + name='stage_passphrase', + field=models.CharField(default='hesl0Sifrovacka', max_length=30), + ), + migrations.AlterField( + model_name='stages', + name='stage_name', + field=models.CharField(max_length=80), + ), + ] diff --git a/sifrovacka/migrations/0013_stages_stage_urlhash.py b/sifrovacka/migrations/0013_stages_stage_urlhash.py new file mode 100644 index 0000000000000000000000000000000000000000..5e52464d3fb7037f1f54b3e5605bddb3997ffe92 --- /dev/null +++ b/sifrovacka/migrations/0013_stages_stage_urlhash.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.3 on 2021-09-04 12:41 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sifrovacka', '0012_auto_20210904_1228'), + ] + + operations = [ + migrations.AddField( + model_name='stages', + name='stage_urlhash', + field=models.CharField(default='5f2500a80d7d11ec9b142016b9b07b5b', max_length=32), + ), + ] diff --git a/sifrovacka/migrations/0014_auto_20210904_1318.py b/sifrovacka/migrations/0014_auto_20210904_1318.py new file mode 100644 index 0000000000000000000000000000000000000000..1db0ed6ab50e6a08ea2ec0d279317d205b5fce0a --- /dev/null +++ b/sifrovacka/migrations/0014_auto_20210904_1318.py @@ -0,0 +1,34 @@ +# Generated by Django 3.2.3 on 2021-09-04 13:18 + +from django.db import migrations, models +import sifrovacka.models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sifrovacka', '0013_stages_stage_urlhash'), + ] + + operations = [ + migrations.RenameField( + model_name='participants', + old_name='Inactive', + new_name='inactive', + ), + migrations.AddField( + model_name='participants', + name='at_stage', + field=models.IntegerField(default=1), + ), + migrations.AlterField( + model_name='stages', + name='stage_img', + field=models.ImageField(blank=True, upload_to=sifrovacka.models.UserDirectoryPath), + ), + migrations.AlterField( + model_name='stages', + name='stage_urlhash', + field=models.CharField(default='a3c350e80d8211ec9b5f2016b9b07b5b', max_length=32), + ), + ] diff --git a/sifrovacka/migrations/0015_auto_20210904_1328.py b/sifrovacka/migrations/0015_auto_20210904_1328.py new file mode 100644 index 0000000000000000000000000000000000000000..d5fcbcba0326390ae81ba5f69dee16153db9e969 --- /dev/null +++ b/sifrovacka/migrations/0015_auto_20210904_1328.py @@ -0,0 +1,23 @@ +# Generated by Django 3.2.3 on 2021-09-04 13:28 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sifrovacka', '0014_auto_20210904_1318'), + ] + + operations = [ + migrations.AddField( + model_name='stages', + name='stage_description', + field=models.CharField(default='', max_length=500), + ), + migrations.AlterField( + model_name='stages', + name='stage_urlhash', + field=models.CharField(default='fcb0adee0d8311ecb18b2016b9b07b5b', max_length=32), + ), + ] diff --git a/sifrovacka/migrations/0016_auto_20210904_1328.py b/sifrovacka/migrations/0016_auto_20210904_1328.py new file mode 100644 index 0000000000000000000000000000000000000000..cd9b6f548ccf62111e893e6ff3067524447fff41 --- /dev/null +++ b/sifrovacka/migrations/0016_auto_20210904_1328.py @@ -0,0 +1,23 @@ +# Generated by Django 3.2.3 on 2021-09-04 13:28 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sifrovacka', '0015_auto_20210904_1328'), + ] + + operations = [ + migrations.AlterField( + model_name='stages', + name='stage_description', + field=models.CharField(max_length=500), + ), + migrations.AlterField( + model_name='stages', + name='stage_urlhash', + field=models.CharField(default='0582c6140d8411ec9c962016b9b07b5b', max_length=32), + ), + ] diff --git a/sifrovacka/migrations/0017_alter_stages_stage_urlhash.py b/sifrovacka/migrations/0017_alter_stages_stage_urlhash.py new file mode 100644 index 0000000000000000000000000000000000000000..ee146bc37273d52285a4ca6e6b90e4941f9a9049 --- /dev/null +++ b/sifrovacka/migrations/0017_alter_stages_stage_urlhash.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.3 on 2021-09-04 13:29 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sifrovacka', '0016_auto_20210904_1328'), + ] + + operations = [ + migrations.AlterField( + model_name='stages', + name='stage_urlhash', + field=models.CharField(default='2aa2950a0d8411ecb3ad2016b9b07b5b', max_length=32), + ), + ] diff --git a/sifrovacka/migrations/0018_alter_stages_stage_urlhash.py b/sifrovacka/migrations/0018_alter_stages_stage_urlhash.py new file mode 100644 index 0000000000000000000000000000000000000000..65e7543b338e63121c7f6b030873f6ef41ab5ec9 --- /dev/null +++ b/sifrovacka/migrations/0018_alter_stages_stage_urlhash.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.3 on 2021-09-04 18:16 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sifrovacka', '0017_alter_stages_stage_urlhash'), + ] + + operations = [ + migrations.AlterField( + model_name='stages', + name='stage_urlhash', + field=models.CharField(default='2d64fb520dac11ecb4c92016b9b07b5b', max_length=32), + ), + ] diff --git a/sifrovacka/migrations/0019_auto_20210904_1913.py b/sifrovacka/migrations/0019_auto_20210904_1913.py new file mode 100644 index 0000000000000000000000000000000000000000..39d67bfd6636730bea8129353927a3f09a283c3a --- /dev/null +++ b/sifrovacka/migrations/0019_auto_20210904_1913.py @@ -0,0 +1,23 @@ +# Generated by Django 3.2.3 on 2021-09-04 19:13 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sifrovacka', '0018_alter_stages_stage_urlhash'), + ] + + operations = [ + migrations.AlterField( + model_name='participants', + name='at_stage', + field=models.CharField(default='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', max_length=32), + ), + migrations.AlterField( + model_name='stages', + name='stage_urlhash', + field=models.CharField(default='3b1487ba0db411ecae702016b9b07b5b', max_length=32), + ), + ] diff --git a/sifrovacka/migrations/0020_auto_20210905_0834.py b/sifrovacka/migrations/0020_auto_20210905_0834.py new file mode 100644 index 0000000000000000000000000000000000000000..3dc1c5473f4aa12c49257fd352fdc9c56ab46a9a --- /dev/null +++ b/sifrovacka/migrations/0020_auto_20210905_0834.py @@ -0,0 +1,29 @@ +# Generated by Django 3.2.3 on 2021-09-05 08:34 + +from django.db import migrations, models +import sifrovacka.models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sifrovacka', '0019_auto_20210904_1913'), + ] + + operations = [ + migrations.AddField( + model_name='sifrovacka', + name='sifrovacka_description', + field=models.CharField(default='', max_length=500), + ), + migrations.AddField( + model_name='sifrovacka', + name='sifrovacka_img', + field=models.ImageField(blank=True, upload_to=sifrovacka.models.UserDirectoryPath), + ), + migrations.AlterField( + model_name='stages', + name='stage_urlhash', + field=models.CharField(default='25aaa7720e2411ecb82f2016b9b07b5b', max_length=32), + ), + ] diff --git a/sifrovacka/migrations/0021_auto_20210905_0835.py b/sifrovacka/migrations/0021_auto_20210905_0835.py new file mode 100644 index 0000000000000000000000000000000000000000..ef836e414cfb295bf42dca766c5f52b1666c85e4 --- /dev/null +++ b/sifrovacka/migrations/0021_auto_20210905_0835.py @@ -0,0 +1,23 @@ +# Generated by Django 3.2.3 on 2021-09-05 08:35 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sifrovacka', '0020_auto_20210905_0834'), + ] + + operations = [ + migrations.AlterField( + model_name='sifrovacka', + name='sifrovacka_description', + field=models.CharField(max_length=500), + ), + migrations.AlterField( + model_name='stages', + name='stage_urlhash', + field=models.CharField(default='39acc55c0e2411ec9d5e2016b9b07b5b', max_length=32), + ), + ] diff --git a/sifrovacka/migrations/0022_auto_20210905_1653.py b/sifrovacka/migrations/0022_auto_20210905_1653.py new file mode 100644 index 0000000000000000000000000000000000000000..4baf52cf4a1bc4e0d62c5828391967c13250ad0e --- /dev/null +++ b/sifrovacka/migrations/0022_auto_20210905_1653.py @@ -0,0 +1,28 @@ +# Generated by Django 3.2.3 on 2021-09-05 16:53 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sifrovacka', '0021_auto_20210905_0835'), + ] + + operations = [ + migrations.AlterField( + model_name='sifrovacka', + name='sifrovacka_description', + field=models.CharField(max_length=800), + ), + migrations.AlterField( + model_name='stages', + name='stage_description', + field=models.CharField(max_length=800), + ), + migrations.AlterField( + model_name='stages', + name='stage_urlhash', + field=models.CharField(default='baacf3800e6911eca1db2016b9b07b5b', max_length=32), + ), + ] diff --git a/sifrovacka/migrations/0023_auto_20210905_1654.py b/sifrovacka/migrations/0023_auto_20210905_1654.py new file mode 100644 index 0000000000000000000000000000000000000000..c84bfc6e24b37e25913d52a4f049026a5efc516e --- /dev/null +++ b/sifrovacka/migrations/0023_auto_20210905_1654.py @@ -0,0 +1,28 @@ +# Generated by Django 3.2.3 on 2021-09-05 16:54 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sifrovacka', '0022_auto_20210905_1653'), + ] + + operations = [ + migrations.AlterField( + model_name='sifrovacka', + name='sifrovacka_description', + field=models.CharField(max_length=2000), + ), + migrations.AlterField( + model_name='stages', + name='stage_description', + field=models.CharField(max_length=2000), + ), + migrations.AlterField( + model_name='stages', + name='stage_urlhash', + field=models.CharField(default='f70c86ec0e6911ecb6a22016b9b07b5b', max_length=32), + ), + ] diff --git a/sifrovacka/migrations/0024_auto_20210905_1719.py b/sifrovacka/migrations/0024_auto_20210905_1719.py new file mode 100644 index 0000000000000000000000000000000000000000..4fc421d8a01f5d5132038ebedc8358ca929370da --- /dev/null +++ b/sifrovacka/migrations/0024_auto_20210905_1719.py @@ -0,0 +1,29 @@ +# Generated by Django 3.2.3 on 2021-09-05 17:19 + +from django.db import migrations, models +import tinymce.models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sifrovacka', '0023_auto_20210905_1654'), + ] + + operations = [ + migrations.AlterField( + model_name='sifrovacka', + name='sifrovacka_description', + field=tinymce.models.HTMLField(), + ), + migrations.AlterField( + model_name='stages', + name='stage_description', + field=tinymce.models.HTMLField(), + ), + migrations.AlterField( + model_name='stages', + name='stage_urlhash', + field=models.CharField(default='60bf43560e6d11ecba282016b9b07b5b', max_length=32), + ), + ] diff --git a/sifrovacka/migrations/0025_alter_stages_stage_urlhash.py b/sifrovacka/migrations/0025_alter_stages_stage_urlhash.py new file mode 100644 index 0000000000000000000000000000000000000000..834eaab1a20e6ad3772d52a4e884e726461ed1fc --- /dev/null +++ b/sifrovacka/migrations/0025_alter_stages_stage_urlhash.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.3 on 2021-09-05 17:32 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sifrovacka', '0024_auto_20210905_1719'), + ] + + operations = [ + migrations.AlterField( + model_name='stages', + name='stage_urlhash', + field=models.CharField(default='3f5301b00e6f11ecbda72016b9b07b5b', max_length=32), + ), + ] diff --git a/sifrovacka/migrations/0026_alter_stages_stage_urlhash.py b/sifrovacka/migrations/0026_alter_stages_stage_urlhash.py new file mode 100644 index 0000000000000000000000000000000000000000..0ab4de590b264debbcc0e0cb1ecf2150bad98ada --- /dev/null +++ b/sifrovacka/migrations/0026_alter_stages_stage_urlhash.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.3 on 2021-09-05 17:32 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sifrovacka', '0025_alter_stages_stage_urlhash'), + ] + + operations = [ + migrations.AlterField( + model_name='stages', + name='stage_urlhash', + field=models.CharField(default='43efd7700e6f11ecb08f2016b9b07b5b', max_length=32), + ), + ] diff --git a/sifrovacka/migrations/0027_auto_20210906_0919.py b/sifrovacka/migrations/0027_auto_20210906_0919.py new file mode 100644 index 0000000000000000000000000000000000000000..f0297dabd03cebdead156c1b6f114d09cb5e4acd --- /dev/null +++ b/sifrovacka/migrations/0027_auto_20210906_0919.py @@ -0,0 +1,23 @@ +# 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), + ), + ] diff --git a/sifrovacka/migrations/0028_auto_20210906_1357.py b/sifrovacka/migrations/0028_auto_20210906_1357.py new file mode 100644 index 0000000000000000000000000000000000000000..b48c729c86233c8d8e9037fe849926ca4decc495 --- /dev/null +++ b/sifrovacka/migrations/0028_auto_20210906_1357.py @@ -0,0 +1,23 @@ +# 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), + ), + ] 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 0000000000000000000000000000000000000000..ccf71087064f7e68611ef0bb5ac27d7fefaeb87f --- /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/models.py b/sifrovacka/models.py index 6cf73731103779e0a53df9054db62b9f8e01c4eb..a62780ce10386704e4d9ec81068449637e189ff0 100644 --- a/sifrovacka/models.py +++ b/sifrovacka/models.py @@ -3,13 +3,31 @@ from django.db import models # Create your models here. from django.conf import settings - +from uuid import uuid1 +from django.utils import encoding +from tinymce.models import HTMLField + +def UserDirectoryPath(instance, filename): + try: + # file will be uploaded to MEDIA_ROOT/sifrovacka_<id>/stage_<id>/<filename> + return 'sifrovacka_{0}/stage_{1}/{2}'.format(instance.sifrovacka_id, + instance.stage_number, + encoding.smart_str(filename, encoding='utf-8', strings_only = True)) + except: + pass + finally: + # file will be uploaded to MEDIA_ROOT/sifrovacka_<id>/<filename> + return 'sifrovacka_{0}/{1}'.format(instance.id, + encoding.smart_str(filename, encoding='utf-8', strings_only = True)) class Sifrovacka(models.Model): ''' model which describes sifrovacka ''' sifrovacka_name = models.CharField(max_length=200) + sifrovacka_description = HTMLField() + #sifrovacka_description = models.CharField(max_length=2000) + sifrovacka_img = models.ImageField(blank=True, upload_to=UserDirectoryPath) #pub_date = models.DateField() pub_date = models.DateTimeField('date published') startdate_sifrovacka = models.DateField() @@ -19,23 +37,20 @@ class Sifrovacka(models.Model): return self.sifrovacka_name - - class Stages(models.Model): ''' model which describes how many stages are in particular sifrovacka ''' - stage_name = models.CharField(max_length=200) sifrovacka = models.ForeignKey(Sifrovacka, on_delete=models.CASCADE) stage_number = models.IntegerField() -# if not stage_name_text models: -# stage_name = getattr(Stages, sifrovacka_name) -# "-" + getattr(Stages, stage_number)) -# else: -# stage_name = stage_name_text -# votes = models.IntegerField(default=0) -# startdate_stages = models.DateField() -# enddate_stages= models.DateField() + 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') + stage_img = models.ImageField(blank=True, upload_to=UserDirectoryPath) + stage_urlhash = models.CharField(max_length=32, default=uuid1().hex) def __str__(self): return str(self.sifrovacka) + " - Stage " + str(self.stage_number) @@ -44,14 +59,16 @@ class Stages(models.Model): class Meta: unique_together = [['stage_number', 'sifrovacka']] - class Participants(models.Model): ''' table which connects sifrovacka with users who participate ''' user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete = models.CASCADE) sifrovacka = models.ForeignKey(Sifrovacka, on_delete = models.CASCADE) - Inactive = models.BooleanField(default = False) + #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) diff --git a/sifrovacka/templates/404.html b/sifrovacka/templates/404.html new file mode 100644 index 0000000000000000000000000000000000000000..e6da4277c770a3c3010ff35feecaec5248e5a8c6 --- /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 0000000000000000000000000000000000000000..86cec24fe70e527fd3f49eb6a39dbcb50271d3e5 --- /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 0000000000000000000000000000000000000000..be87cb12afb2ab3890a0d24526047938c6ac98b2 --- /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 58a9f665ff9bac18b4c20e78822b55c3a2e0d32e..d82b1d4f6a6b9062ae7a0d57f7f69e2a7df5748f 100644 --- a/sifrovacka/templates/base.html +++ b/sifrovacka/templates/base.html @@ -1,5 +1,5 @@ -{% load static %} <!doctype html> +{% load static %} <html lang="cs"> <head> <!-- Meta --> @@ -31,12 +31,35 @@ 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 %} {% endif %} - <title>Å ifrovaÄky</title> + <title>Å ifrovaÄka</title> </head> <body> @@ -51,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 f33ceda666e63bdfb2d4ec726d867cdf999eede6..b1220ae6ba97dfb2d34f3a33b9ed09506545325e 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 bb322a6288a6c565770dbf452259e7a227249ce0..8c49b306ad9cb271e5532139d485ef4ef2f91aaf 100644 --- a/sifrovacka/templates/sifrovacka.html +++ b/sifrovacka/templates/sifrovacka.html @@ -1,41 +1,63 @@ {% extends "base.html" %} +{% 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> -{% if request.user.is_authenticated %} -<form action="{% url 'home' %}" method="post"> -{% csrf_token %} -{% comment %} -<form action="{% url 'sifrovacka:home' sifrovacka.id %}" method="post"> -{% 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 %} -<button type="submit" value={{ sifrovacka_id }} name='signupsif'>Prihlasit se k sifrovacce</button> -</form> -{% endif %} -</br> -</br> -</br> -Debug: -<div> -{% for stage in sifrovacka_stages %} - {{ stage }}</br> -{% endfor %} -</div> + <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 %} + <li><a href={% url 'stage' stage.sifrovacka_id stage.stage_urlhash %}>{{ stage }}</a></li> + {% endfor %} + </br> + </div> + {% endcomment %} {% endblock %} diff --git a/sifrovacka/templates/stage.html b/sifrovacka/templates/stage.html new file mode 100644 index 0000000000000000000000000000000000000000..2e556979913ce830e6a1e11ea21d2e95e6c98aa1 --- /dev/null +++ b/sifrovacka/templates/stage.html @@ -0,0 +1,104 @@ +{% extends "base.html" %} +{% load static %} + +{% block content %} +<div class="container container--default"> + {% if stage_current_id %} + {% if request.user.is_authenticated %} + + <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 {{ stage_current_picture_extra_text } + </figcaption> +{% endcomment %} + + </figure> + {% endif %} + {% if not last_stage %} + <form action="{% url 'stage' sifrovacka_id stage_current_id.stage_urlhash %}" method="post"> + {% csrf_token %} + </br> + </br> + <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> + <hr> + </br> +<!-- 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 "> + <div class="btn__body">Odeslat</div> + </button> + </div> + </div> +<!-- End Form field --> + </form> + {% 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%} + {% endif %} + {% else %} + <div class="alert alert--red-600"> + <span> Stranka neni dostupna </span> + </div> + {% endif %} +</div> +{% endblock %} diff --git a/sifrovacka/urls.py b/sifrovacka/urls.py index fd54650f39434ed0a70751a75f7df41f516f3cdb..1183f0824c287c68e3c0a1a91aec0c1a3b532aef 100644 --- a/sifrovacka/urls.py +++ b/sifrovacka/urls.py @@ -1,4 +1,6 @@ -from django.urls import include,path +from django.urls import include,path,re_path +from django.conf import settings +from django.conf.urls.static import static from . import views @@ -8,8 +10,13 @@ urlpatterns = [ path('accounts/', include('django.contrib.auth.urls')), # the 'name' value as called by the {% url %} template tag path('<int:sifrovacka_id>/', views.detail, name='detail'), + path('<int:sifrovacka_id>/<slug:stage_urlhash>/', views.stage, name='stage'), # home page path('home/', views.home, name='home'), + # rich test editor + re_path(r'^tinymce/', include('tinymce.urls')), # / path('', views.index, name='index'), -] + ] +# ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) + diff --git a/sifrovacka/views.py b/sifrovacka/views.py index 5eb47d6f78c3e8e7483f338daa68f5d943ac83ac..4cf0b27a242cc1c25cf706263214958d8d052f31 100644 --- a/sifrovacka/views.py +++ b/sifrovacka/views.py @@ -1,22 +1,174 @@ -from django.shortcuts import get_object_or_404, render +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 +# forms +from .forms import PassphraseForm + +def stage(request, sifrovacka_id, stage_urlhash): + passphrase_form = None + sifrovacka_next_stage = None + sifrovacka_current_stage_urlhash = None + 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 = \ + sifrovacka_id).values('sifrovacka_id','id') + for s in sifrovacka_all_user_current_stages: + if s['sifrovacka_id'] == sifrovacka_id: + print("---SIFROVACKA---") + 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 = get_object_or_404(Stages,stage_urlhash = + sifrovacka_current_stage_urlhash.at_stage) + print(stage_current_id) + else: + print('not same') + raise Http404 + + 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) + 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 + 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') + 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() + 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, + "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, + "participant_sifrovacka": participant_sifrovacka, + "last_stage": last_stage, + 'passphrase_form': passphrase_form, + "error_passphrase": error_passphrase + } + return render(request, 'stage.html', context) def detail(request, sifrovacka_id): - sifrovacka_detail = Sifrovacka.objects.get(id = sifrovacka_id) +# print(dir(request)) + sifrovacka_current_stage_urlhash = None + sifrovacka_current_id = None + 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: + 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("---SIFROVACKA---") + # print(s['at_stage']) + tmp_stage_id = s['id'] + sifrovacka_current_stage_urlhash = Participants.objects.get(id = \ + tmp_stage_id) + sifrovacka_current_id = tmp_stage_id + context = {"sifrovacka_id": sifrovacka_id, "sifrovacka_detail": sifrovacka_detail, "sifrovacka_stages": sifrovacka_stages, - "sifrovacka_stage_count": sifrovacka_stage_count} + "sifrovacka_stage_count": sifrovacka_stage_count, + "sifrovacka_current_id": sifrovacka_current_id, + "sifrovacka_current_stage_urlhash": + sifrovacka_current_stage_urlhash + } return render(request, 'sifrovacka.html', context) def home(request): @@ -25,21 +177,28 @@ def home(request): if request.user.is_authenticated: participation_sifrovacky_list = Participants.objects.filter(user = request.user).order_by('sifrovacka_id') - # available_sifrovacky_list = all_sifrovacky_list.difference( - #participation_sifrovacky_list) if request.method == 'POST': - if request.POST["signupsif"]: - post_signupsif = request.POST["signupsif"] + if 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") + stage_current_urlhash = sifrovacka_stages[0].stage_urlhash + print(stage_current_urlhash) try: p = Participants.objects.create(user=request.user, - sifrovacka_id=post_signupsif) + sifrovacka_id=post_signupsif, + at_stage=stage_current_urlhash ) 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: p.save() else: