diff --git a/flat.json b/data/flat.json similarity index 100% rename from flat.json rename to data/flat.json diff --git a/data/fotka_header.json b/data/fotka_header.json new file mode 100644 index 00000000..e057772f --- /dev/null +++ b/data/fotka_header.json @@ -0,0 +1,207 @@ +[ +{ + "model": "mamweb.fotkaheader", + "pk": "baliky.jpg", + "fields": { + "cas": "2020-09-20T09:18:34.562Z", + "fotka": "header/baliky.jpg" + } +}, +{ + "model": "mamweb.fotkaheader", + "pk": "beh.jpg", + "fields": { + "cas": "2020-09-20T09:18:34.562Z", + "fotka": "header/beh.jpg" + } +}, +{ + "model": "mamweb.fotkaheader", + "pk": "kryptografie.jpg", + "fields": { + "cas": "2020-09-20T09:18:34.562Z", + "fotka": "header/kryptografie.jpg" + } +}, +{ + "model": "mamweb.fotkaheader", + "pk": "mam_cernobile.jpg", + "fields": { + "cas": "2020-09-20T09:18:34.562Z", + "fotka": "header/mam_cernobile.jpg" + } +}, +{ + "model": "mamweb.fotkaheader", + "pk": "noc.jpg", + "fields": { + "cas": "2020-09-20T09:18:34.562Z", + "fotka": "header/noc.jpg" + } +}, +{ + "model": "mamweb.fotkaheader", + "pk": "ohen.jpg", + "fields": { + "cas": "2020-09-20T09:18:34.562Z", + "fotka": "header/ohen.jpg" + } +}, +{ + "model": "mamweb.fotkaheader", + "pk": "snih.jpg", + "fields": { + "cas": "2020-09-20T09:18:34.562Z", + "fotka": "header/snih.jpg" + } +}, +{ + "model": "mamweb.fotkaheader", + "pk": "spolecna.jpg", + "fields": { + "cas": "2020-09-20T09:18:34.562Z", + "fotka": "header/spolecna.jpg" + } +}, +{ + "model": "mamweb.fotkaheader", + "pk": "stiny.jpg", + "fields": { + "cas": "2020-09-20T09:18:34.562Z", + "fotka": "header/stiny.jpg" + } +}, +{ + "model": "mamweb.fotkaheader", + "pk": "vikendovka.jpg", + "fields": { + "cas": "2020-09-20T09:18:34.562Z", + "fotka": "header/vikendovka.jpg" + } +}, +{ + "model": "mamweb.fotkaheader", + "pk": "vylet.jpg", + "fields": { + "cas": "2020-09-20T09:18:34.562Z", + "fotka": "header/vylet.jpg" + } +}, +{ + "model": "mamweb.fotkaurlvazba", + "pk": 1, + "fields": { + "url": "/archiv/", + "fotka": "stiny.jpg", + "denni_doba": "oboji" + } +}, +{ + "model": "mamweb.fotkaurlvazba", + "pk": 2, + "fields": { + "url": "/clanky/", + "fotka": "kryptografie.jpg", + "denni_doba": "den" + } +}, +{ + "model": "mamweb.fotkaurlvazba", + "pk": 3, + "fields": { + "url": "/clanky/", + "fotka": "ohen.jpg", + "denni_doba": "noc" + } +}, +{ + "model": "mamweb.fotkaurlvazba", + "pk": 4, + "fields": { + "url": "/zadani/", + "fotka": "baliky.jpg", + "denni_doba": "den" + } +}, +{ + "model": "mamweb.fotkaurlvazba", + "pk": 5, + "fields": { + "url": "/zadani/", + "fotka": "stiny.jpg", + "denni_doba": "noc" + } +}, +{ + "model": "mamweb.fotkaurlvazba", + "pk": 6, + "fields": { + "url": "/co-je-MaM/", + "fotka": "vikendovka.jpg", + "denni_doba": "den" + } +}, +{ + "model": "mamweb.fotkaurlvazba", + "pk": 7, + "fields": { + "url": "/co-je-MaM/", + "fotka": "noc.jpg", + "denni_doba": "noc" + } +}, +{ + "model": "mamweb.fotkaurlvazba", + "pk": 8, + "fields": { + "url": "/soustredeni/", + "fotka": "beh.jpg", + "denni_doba": "den" + } +}, +{ + "model": "mamweb.fotkaurlvazba", + "pk": 9, + "fields": { + "url": "/soustredeni/", + "fotka": "vylet.jpg", + "denni_doba": "noc" + } +}, +{ + "model": "mamweb.fotkaurlvazba", + "pk": 10, + "fields": { + "url": "/login/", + "fotka": "baliky.jpg", + "denni_doba": "den" + } +}, +{ + "model": "mamweb.fotkaurlvazba", + "pk": 11, + "fields": { + "url": "/login/", + "fotka": "stiny.jpg", + "denni_doba": "noc" + } +}, +{ + "model": "mamweb.fotkaurlvazba", + "pk": 12, + "fields": { + "url": "/profil/", + "fotka": "baliky.jpg", + "denni_doba": "den" + } +}, +{ + "model": "mamweb.fotkaurlvazba", + "pk": 13, + "fields": { + "url": "/profil/", + "fotka": "stiny.jpg", + "denni_doba": "noc" + } +} +] \ No newline at end of file diff --git a/sitetree_new.json b/data/sitetree_new.json similarity index 100% rename from sitetree_new.json rename to data/sitetree_new.json diff --git a/galerie/templates/galerie/Base.html b/galerie/templates/galerie/Base.html deleted file mode 100644 index 61f96eb4..00000000 --- a/galerie/templates/galerie/Base.html +++ /dev/null @@ -1,6 +0,0 @@ -{% extends "base.html" %} - -{# TODO predelat pres context processor #} -{% block header %}soustredeni{% endblock %} -{% block menu_soustredeni %}selected{% endblock %} -{% block submenu %}{% include 'seminar/soustredeni/submenu.html' %}{% endblock %} diff --git a/galerie/templates/galerie/Galerie.html b/galerie/templates/galerie/Galerie.html index c23c6c42..b2dfe994 100644 --- a/galerie/templates/galerie/Galerie.html +++ b/galerie/templates/galerie/Galerie.html @@ -1,4 +1,4 @@ -{% extends "galerie/Base.html" %} +{% extends "base.html" %} {% block nadpis1a %} diff --git a/galerie/templates/galerie/GalerieNahled.html b/galerie/templates/galerie/GalerieNahled.html index d1c6873e..ec0d5f67 100644 --- a/galerie/templates/galerie/GalerieNahled.html +++ b/galerie/templates/galerie/GalerieNahled.html @@ -1,4 +1,4 @@ -{% extends "galerie/Base.html" %} +{% extends "base.html" %} {% block nadpis1a %} Galerie {{galerie.nazev}} diff --git a/galerie/templates/galerie/GalerieNew.html b/galerie/templates/galerie/GalerieNew.html index 38237d86..2da23ece 100644 --- a/galerie/templates/galerie/GalerieNew.html +++ b/galerie/templates/galerie/GalerieNew.html @@ -1,4 +1,4 @@ -{% extends "galerie/Base.html" %} +{% extends "base.html" %} {% block title %}{% block nadpis1a %} Vytvářím novou galerii diff --git a/korektury/templates/korektury/base.html b/korektury/templates/korektury/base.html deleted file mode 100644 index 886a15e1..00000000 --- a/korektury/templates/korektury/base.html +++ /dev/null @@ -1,13 +0,0 @@ -{% extends "base.html" %} - -{% block submenu %} - {% include "korektury/submenu.html" %} -{% endblock %} - -{% block content %} -{# blok do kterého se nacita text, v pripade jinyhc templatu obalit vlastnim blokem #} -{% endblock %} - -{% block title %} -{# blok pro titulek stranky #} -{% endblock %} diff --git a/korektury/templates/korektury/help.html b/korektury/templates/korektury/help.html index f2ddafb9..3cce7a4f 100644 --- a/korektury/templates/korektury/help.html +++ b/korektury/templates/korektury/help.html @@ -1,10 +1,4 @@ -{% extends "korektury/base.html" %} - -{% block submenu %} - {% with "help" as selected %} - {% include "korektury/submenu.html" %} - {% endwith %} -{% endblock %} +{% extends "base.html" %} {% load staticfiles %} diff --git a/korektury/templates/korektury/seznam.html b/korektury/templates/korektury/seznam.html index 61f6fff7..57823f6e 100644 --- a/korektury/templates/korektury/seznam.html +++ b/korektury/templates/korektury/seznam.html @@ -1,10 +1,6 @@ -{% extends "korektury/base.html" %} +{% extends "base.html" %} {% load staticfiles %} -{% block submenu %} - {% include "korektury/submenu.html" %} -{% endblock %} - {% block script%} {% endblock %} diff --git a/korektury/templates/korektury/submenu.html b/korektury/templates/korektury/submenu.html deleted file mode 100644 index 0a5ed988..00000000 --- a/korektury/templates/korektury/submenu.html +++ /dev/null @@ -1,13 +0,0 @@ -{% with "/korektury" as cesta %} - -
- -{% endwith %} - - diff --git a/mamweb/admin.py b/mamweb/admin.py index b483bf18..5753ef44 100644 --- a/mamweb/admin.py +++ b/mamweb/admin.py @@ -1,4 +1,5 @@ from django.contrib import admin +from django.contrib.admin import ModelAdmin from django.contrib.flatpages.models import FlatPage # Note: we are renaming the original Admin and Form as we import them! @@ -7,7 +8,9 @@ from django.contrib.flatpages.admin import FlatpageForm as FlatpageFormOld from django import forms from ckeditor_uploader.widgets import CKEditorUploadingWidget - + +import mamweb.models as m + class FlatpageForm(FlatpageFormOld): content = forms.CharField(widget=CKEditorUploadingWidget()) class Meta: @@ -22,3 +25,9 @@ class FlatPageAdmin(FlatPageAdminOld): # We have to unregister the normal admin, and then reregister ours admin.site.unregister(FlatPage) admin.site.register(FlatPage, FlatPageAdmin) + +class FotkaPozadiAdmin(ModelAdmin): + readonly_fields = ['cas'] + +admin.site.register(m.FotkaHeader, FotkaPozadiAdmin) +admin.site.register(m.FotkaUrlVazba) diff --git a/mamweb/context_processors.py b/mamweb/context_processors.py index ec6481df..eb17980b 100644 --- a/mamweb/context_processors.py +++ b/mamweb/context_processors.py @@ -1,12 +1,45 @@ from datetime import datetime, date +import random + +from django.conf import settings + +from mamweb.models import FotkaUrlVazba + def vzhled(request): ''' Podle casu prida do templatu, zdali je nebo neni noc ''' hodin = datetime.now().hour if (hodin <= 6) or (hodin >= 20): noc = True + nedoba = 'den' + doba = 'noc' else: noc = False - return {'noc' : noc} + nedoba = 'noc' + doba = 'den' + url = request.path + + fotky = FotkaUrlVazba.objects.exclude(denni_doba=nedoba) + fotka = None + + # TODO rychlejší patternmatch? + while (fotka is None) and (url != ''): + presne = fotky.filter(url__exact=url) + if presne.count() > 0: + presne_doba = presne.filter(denni_doba=doba) + if presne_doba.count() > 0: + fotka = random.choice(presne_doba).url_fotky() + else: + fotka = random.choice(presne).url_fotky() + + url = url[:-1] + index = url.rfind('/') + if index != -1: + url = url[:index+1] + + if fotka is None: + fotka = settings.STATIC_URL + "images/header/vikendovka.jpg" + + return {'noc': noc, 'fotka': fotka} diff --git a/mamweb/migrations/0001_initial.py b/mamweb/migrations/0001_initial.py new file mode 100644 index 00000000..e96cb262 --- /dev/null +++ b/mamweb/migrations/0001_initial.py @@ -0,0 +1,60 @@ +# Generated by Django 2.2.15 on 2020-09-20 09:14 + +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone + +from shutil import copytree + + +def zkopiruj_fotky(apps, schema_editor): + copytree("mamweb/static/images/header/", "media/header/", dirs_exist_ok=True) + + +class Migration(migrations.Migration): + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='FotkaHeader', + fields=[ + ('cas', models.DateTimeField(default=django.utils.timezone.now, help_text='Čas vložení fotky', + verbose_name='čas vložení fotky')), + ('nazev', + models.CharField(help_text='Název např. archiv_noc', max_length=50, primary_key=True, serialize=False, + unique=True, verbose_name='název fotky')), + ('fotka', models.ImageField(upload_to='header')), + ], + options={ + 'verbose_name': 'fotka do pozadí menu', + 'verbose_name_plural': 'fotky do pozadí menu', + 'db_table': 'fotky_header', + 'ordering': ['-cas'], + }, + ), + migrations.CreateModel( + name='FotkaUrlVazba', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('url', + models.CharField(blank=True, help_text='url prefix stránek např: /archiv/ nebo /', max_length=100, + verbose_name='URL')), + ('denni_doba', models.CharField(choices=[('den', 'Zobrazit jen ve dne'), ('noc', 'Zobrazit jen v noci'), + ('oboji', 'Zobrazovat pořád')], default='oboji', max_length=16, + verbose_name='denní doba')), + ('fotka', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='mamweb.FotkaHeader', + verbose_name='fotka')), + ], + options={ + 'verbose_name': 'vazba url a fotky do pozadí menu', + 'verbose_name_plural': 'vazby url a fotek do pozadí menu', + 'db_table': 'fotky_url_vazby', + 'ordering': ['url'], + }, + + ), + migrations.RunPython(zkopiruj_fotky, migrations.RunPython.noop), + ] diff --git a/mamweb/migrations/__init__.py b/mamweb/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/mamweb/models.py b/mamweb/models.py new file mode 100644 index 00000000..481a652c --- /dev/null +++ b/mamweb/models.py @@ -0,0 +1,65 @@ +from django.core.exceptions import ValidationError +from django.db import models +from django.utils import timezone + + +class FotkaHeader(models.Model): + class Meta: + ordering = ['-cas'] + db_table = 'fotky_header' + verbose_name = u'fotka do pozadí menu' + verbose_name_plural = u'fotky do pozadí menu' + + cas = models.DateTimeField(u'čas vložení fotky', default=timezone.now, help_text='Čas vložení fotky') + + nazev = models.CharField( + u'název fotky', null=False, blank=False, unique=True, primary_key=True, + max_length=50, help_text='Název např. archiv_noc' + ) + + fotka = models.ImageField(upload_to='header', null=False, blank=False) + + def __str__(self): + return self.nazev + + def clean(self): + if not self.fotka: + raise ValidationError("Chybí obrázek") + """ Kontroluje, zda sedí poměr stran """ + if abs(self.fotka.width - (self.fotka.height * 970 / 350)) > 2: + raise ValidationError("Obrázek by měl mít rozměry 970w na 350h, nebo alespoň podobný poměr stran.") + super().clean() + + +class FotkaUrlVazba(models.Model): + class Meta: + ordering = ['url'] + db_table = 'fotky_url_vazby' + verbose_name = u'vazba url a fotky do pozadí menu' + verbose_name_plural = u'vazby url a fotek do pozadí menu' + + url = models.CharField( + u'URL', blank=True, null=False, max_length=100, + help_text='url prefix stránek např: /archiv/ nebo /' + ) + + fotka = models.ForeignKey( + FotkaHeader, blank=False, null=False, verbose_name='fotka', + on_delete=models.CASCADE + ) + + DOBA_DEN = 'den' + DOBA_NOC = 'noc' + DOBA_OBOJI = 'oboji' + DOBA_CHOICES = [ + (DOBA_DEN, 'Zobrazit jen ve dne'), + (DOBA_NOC, 'Zobrazit jen v noci'), + (DOBA_OBOJI, 'Zobrazovat pořád')] + + denni_doba = models.CharField('denní doba', max_length=16, choices=DOBA_CHOICES, blank=False, default=DOBA_OBOJI) + + def __str__(self): + return self.url + + def url_fotky(self): + return self.fotka.fotka.url diff --git a/mamweb/static/css/mamweb.css b/mamweb/static/css/mamweb.css index da7db68a..26c10600 100644 --- a/mamweb/static/css/mamweb.css +++ b/mamweb/static/css/mamweb.css @@ -213,38 +213,6 @@ h1 { top: 58px; } -/* -fotky: - -todo url - -kryptografie -baliky -beh -mam_cernobile -pro archiv? asi ne -vylet -spolecna -spíš ne, moc lidí -snih -ohen -noc -stiny -vikendovka -*/ - -#header.cojemam { background-image: url("../images/header/vikendovka.jpg");} -#header.soustredeni { background-image: url("../images/header/beh.jpg");} -#header.zadani { background-image: url("../images/header/baliky.jpg");} -#header.clanky { background-image: url("../images/header/kryptografie.jpg");} -#header.archiv { background-image: url("../images/header/stiny.jpg");} - -#header.NOC {background-image: url("../images/header/noc.jpg");} -#header.NOCcojemam { background-image: url("../images/header/noc.jpg");} -#header.NOCsoustredeni { background-image: url("../images/header/vylet.jpg");} -#header.NOCzadani { background-image: url("../images/header/stiny.jpg");} -#header.NOCclanky { background-image: url("../images/header/ohen.jpg");} -#header.NOCarchiv { background-image: url("../images/header/stiny.jpg");} - - #header img.logo { position: absolute center; width: 100%; diff --git a/mamweb/templates/base.html b/mamweb/templates/base.html index dff05f55..08897852 100644 --- a/mamweb/templates/base.html +++ b/mamweb/templates/base.html @@ -56,7 +56,8 @@