WIP: refactoring, možná to teď nefunguje…
This commit is contained in:
parent
d45b970f77
commit
541ea5f737
5 changed files with 29 additions and 23 deletions
|
|
@ -1,13 +1,14 @@
|
||||||
from galerie.models import Soubor, Galerie, VZDY, ORG, NIKDY, UCASTNIK
|
from galerie.models import Soubor, Galerie, VZDY, ORG, UCASTNIK
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from django.http import HttpResponseRedirect
|
from django.http import HttpResponseRedirect
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
|
||||||
# akction
|
|
||||||
|
|
||||||
def zverejnit_fotogalerii(modeladmin, request, queryset):
|
def zverejnit_fotogalerii(modeladmin, request, queryset):
|
||||||
'''zverejni vybranou fotogalerii i jeji vsechny podgalerie'''
|
'''zveřejní vybranou fotogalerii i její všechny podgalerie'''
|
||||||
|
# TODO: rozbíjí práva. Čistší je mít separátně práva (zobrazit:
|
||||||
|
# VŽDY/ÚČASTNÍKŮM/ORGŮM) a úpravy (bool), přičemž během úprav se zobrazuje
|
||||||
|
# jen orgům?
|
||||||
queryset = queryset.filter(zobrazit=ORG)
|
queryset = queryset.filter(zobrazit=ORG)
|
||||||
for galerie in queryset:
|
for galerie in queryset:
|
||||||
galerie.zobrazit = VZDY
|
galerie.zobrazit = VZDY
|
||||||
|
|
@ -18,7 +19,7 @@ def zverejnit_fotogalerii(modeladmin, request, queryset):
|
||||||
|
|
||||||
|
|
||||||
def prepnout_fotogalerii_do_org_rezimu(modeladmin, request, queryset):
|
def prepnout_fotogalerii_do_org_rezimu(modeladmin, request, queryset):
|
||||||
'''zneverjni vybranou fotogalerii i jeji vsechny podgalerie'''
|
'''zneveřejni vybranou fotogalerii i její všechny podgalerie'''
|
||||||
queryset = queryset.filter(zobrazit=VZDY)
|
queryset = queryset.filter(zobrazit=VZDY)
|
||||||
for galerie in queryset:
|
for galerie in queryset:
|
||||||
galerie.zobrazit = ORG
|
galerie.zobrazit = ORG
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
from django import forms
|
from django import forms
|
||||||
|
|
||||||
class KomentarForm(forms.Form):
|
class KomentarForm(forms.Form):
|
||||||
|
"""Formulář na přidání/úpravu popisku u souboru (obrázku)"""
|
||||||
komentar = forms.CharField(label = "Komentář:", max_length = 300, required=False)
|
komentar = forms.CharField(label = "Komentář:", max_length = 300, required=False)
|
||||||
|
|
||||||
class NewGalerieForm(forms.Form):
|
class NewGalerieForm(forms.Form):
|
||||||
nazev = forms.CharField(label = "Název galerie", max_length = 100)
|
nazev = forms.CharField(label = "Název galerie", max_length = 100)
|
||||||
#popis = forms.CharField(label = "Popis", required = False, max_length = 2000, widget = forms.Textarea)
|
|
||||||
|
|
|
||||||
|
|
@ -6,16 +6,17 @@ from imagekit.processors import ResizeToFit, Transpose
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from soustredeni.models import Soustredeni
|
from soustredeni.models import Soustredeni
|
||||||
|
from galerie.utils import top_galerie
|
||||||
|
|
||||||
VZDY=0
|
VZDY=0
|
||||||
ORG=1
|
ORG=1
|
||||||
NIKDY=2
|
# Pozor, diskontinuita, tady bylo `NIKDY`
|
||||||
UCASTNIK=3
|
UCASTNIK=3
|
||||||
|
# TODO: Enum!
|
||||||
VIDITELNOST = (
|
VIDITELNOST = (
|
||||||
(VZDY, 'Vždy'),
|
(VZDY, 'Vždy'),
|
||||||
(ORG, 'Organizátorům'),
|
(ORG, 'Organizátorům'),
|
||||||
(UCASTNIK, 'Účastníkům a orgům'),
|
(UCASTNIK, 'Účastníkům a orgům'),
|
||||||
(NIKDY, 'Nikdy'),
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# tyhle funkce jsou tady jen kvůli starým migracím, které se na ně odkazují
|
# tyhle funkce jsou tady jen kvůli starým migracím, které se na ně odkazují
|
||||||
|
|
@ -34,8 +35,7 @@ def galerie_filename(self, filename):
|
||||||
cislo_gal = gal.pk
|
cislo_gal = gal.pk
|
||||||
|
|
||||||
# najdi kořenovou galerii
|
# najdi kořenovou galerii
|
||||||
while (gal.galerie_up):
|
gal = top_galerie(gal)
|
||||||
gal = gal.galerie_up
|
|
||||||
|
|
||||||
# soustředění je v cestě jen pokud galerie pod nějaké patří
|
# soustředění je v cestě jen pokud galerie pod nějaké patří
|
||||||
cesta = (
|
cesta = (
|
||||||
|
|
@ -49,29 +49,29 @@ def galerie_filename(self, filename):
|
||||||
class Soubor(models.Model):
|
class Soubor(models.Model):
|
||||||
# „originál“ (modulo max. velikost uploadu na web FIXME!)
|
# „originál“ (modulo max. velikost uploadu na web FIXME!)
|
||||||
soubor = models.FileField(upload_to=galerie_filename,
|
soubor = models.FileField(upload_to=galerie_filename,
|
||||||
help_text = "Lze vložit libovolně velký obrázek. Ideální je, aby alespoň jeden rozměr měl alespoň 500px.")
|
help_text = "Lze vložit libovolně velký obrázek/soubor. Ideální je, aby alespoň jeden rozměr měl alespoň 500px.")
|
||||||
class Typ(models.TextChoices):
|
class Typ(models.TextChoices):
|
||||||
OBRAZEK = 'obrazek', 'Obrázek'
|
OBRAZEK = 'obrazek', 'Obrázek'
|
||||||
VIDEO = 'video', 'Video'
|
VIDEO = 'video', 'Video'
|
||||||
NEVIM = 'nevim', 'Neznámý typ'
|
NEVIM = 'nevim', 'Neznámý typ'
|
||||||
typ = models.CharField('Typ', max_length=16, blank=False, null=False, choices=Typ.choices, default=Typ.NEVIM)
|
typ = models.CharField('Typ', max_length=16, blank=False, null=False, choices=Typ.choices, default=Typ.NEVIM)
|
||||||
# Filename by default; slouží k řazení
|
# Filename by default; slouží k řazení
|
||||||
nazev = models.CharField('Název', max_length=50, blank=True, null=True)
|
nazev = models.CharField('Jméno souboru', max_length=50, blank=True, null=True)
|
||||||
# ~~Rádoby~~ vtipný popisek od orgů
|
# ~~Rádoby~~ vtipný popisek od orgů
|
||||||
popis = models.TextField('Popis', blank=True, null=True)
|
popis = models.TextField('Popisek', blank=True, null=True)
|
||||||
datum_vlozeni = models.DateTimeField('Datum vložení', auto_now_add=True)
|
datum_vlozeni = models.DateTimeField('Datum vložení', auto_now_add=True)
|
||||||
galerie = models.ForeignKey('Galerie', blank=True, null=True, on_delete=models.CASCADE)
|
galerie = models.ForeignKey('Galerie', blank=True, null=True, on_delete=models.CASCADE)
|
||||||
# Primární klíč k řazení pro overridování řazení podle názvu
|
# Primární klíč k řazení pro overridování řazení podle názvu
|
||||||
poradi = models.IntegerField('Pořadí', blank=True, null=True)
|
poradi = models.IntegerField('Pořadí', blank=True, null=True)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f'Obrázek {self.nazev} ({self.soubor.name})'
|
return f'Soubor {self.nazev} ({self.soubor.name})'
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = 'Obrázek'
|
verbose_name = 'Soubor'
|
||||||
verbose_name_plural = 'Obrázky'
|
verbose_name_plural = 'Soubory'
|
||||||
db_table = 'galerie_obrazek' # FIXME: přejmenovat
|
db_table = 'galerie_obrazek' # FIXME: přejmenovat
|
||||||
ordering = ['nazev'] #FIXME: zohlednit pořadí a asi i příslušnost ke galerii
|
ordering = ['galerie', 'poradi', 'nazev']
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
# obrázek potřebuje název, protože se z něj generuje cesta pro jeho uložení
|
# obrázek potřebuje název, protože se z něj generuje cesta pro jeho uložení
|
||||||
|
|
@ -93,10 +93,10 @@ class Soubor(models.Model):
|
||||||
|
|
||||||
|
|
||||||
class Galerie(models.Model):
|
class Galerie(models.Model):
|
||||||
nazev = models.CharField('Název', max_length=100)
|
nazev = models.CharField('Název galerie', max_length=100, help_text='Např. "Soustředění Bratrouchov 2025" nebo "Pondělí", ukazuje se v cestičce')
|
||||||
datum_vytvoreni = models.DateTimeField('Datum vytvoření', auto_now_add = True)
|
datum_vytvoreni = models.DateTimeField('Datum vytvoření', auto_now_add = True)
|
||||||
datum_zmeny = models.DateTimeField('Datum poslední změny', auto_now = True)
|
datum_zmeny = models.DateTimeField('Datum poslední změny', auto_now = True)
|
||||||
popis = models.TextField('Popis', blank = True, null = True)
|
poznamka = models.TextField('neveřejná poznámka', blank = True, null = True)
|
||||||
titulni_obrazek = models.ForeignKey(Soubor, blank = True, null = True, related_name = "+", on_delete = models.SET_NULL)
|
titulni_obrazek = models.ForeignKey(Soubor, blank = True, null = True, related_name = "+", on_delete = models.SET_NULL)
|
||||||
zobrazit = models.IntegerField('Zobrazit?', default = ORG, choices = VIDITELNOST)
|
zobrazit = models.IntegerField('Zobrazit?', default = ORG, choices = VIDITELNOST)
|
||||||
galerie_up = models.ForeignKey('Galerie', blank = True, null = True,
|
galerie_up = models.ForeignKey('Galerie', blank = True, null = True,
|
||||||
|
|
@ -110,3 +110,4 @@ class Galerie(models.Model):
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = 'Galerie'
|
verbose_name = 'Galerie'
|
||||||
verbose_name_plural = 'Galerie'
|
verbose_name_plural = 'Galerie'
|
||||||
|
db_table = 'galerie_galerie'
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,8 @@
|
||||||
from galerie.models import Galerie
|
from __future__ import annotations
|
||||||
|
from typing import TYPE_CHECKING
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from galerie.models import Galerie
|
||||||
|
# Miluju pythoní typing :-P
|
||||||
|
|
||||||
def top_galerie(g: Galerie) -> Galerie:
|
def top_galerie(g: Galerie) -> Galerie:
|
||||||
while g.galerie_up is not None:
|
while g.galerie_up is not None:
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ from datetime import datetime
|
||||||
from galerie.utils import top_galerie
|
from galerie.utils import top_galerie
|
||||||
from personalni.utils import resitel_uzivatele
|
from personalni.utils import resitel_uzivatele
|
||||||
|
|
||||||
from galerie.models import Soubor, Galerie, VZDY, ORG, UCASTNIK, NIKDY
|
from galerie.models import Soubor, Galerie, VZDY, ORG, UCASTNIK
|
||||||
from soustredeni.models import Soustredeni
|
from soustredeni.models import Soustredeni
|
||||||
from galerie.forms import KomentarForm, NewGalerieForm
|
from galerie.forms import KomentarForm, NewGalerieForm
|
||||||
|
|
||||||
|
|
@ -16,7 +16,7 @@ import logging
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
def galerie_ke_zobrazeni(soustredeni: Soustredeni | None, request: HttpRequest) -> tuple[int]:
|
def galerie_ke_zobrazeni(soustredeni: Soustredeni | None, request: HttpRequest) -> tuple[int]:
|
||||||
if request.user.is_superuser: return (VZDY, ORG, UCASTNIK, NIKDY)
|
if request.user.is_superuser: return (VZDY, ORG, UCASTNIK)
|
||||||
if request.user.je_org: return (VZDY, ORG, UCASTNIK)
|
if request.user.je_org: return (VZDY, ORG, UCASTNIK)
|
||||||
if request.user.is_anonymous: return (VZDY,)
|
if request.user.is_anonymous: return (VZDY,)
|
||||||
if soustredeni is None: return (VZDY,)
|
if soustredeni is None: return (VZDY,)
|
||||||
|
|
@ -35,7 +35,7 @@ def zobrazit(galerie: Galerie, request: HttpRequest) -> bool:
|
||||||
|
|
||||||
def dovolit_upravy_popisku(galerie: Galerie, request: HttpRequest) -> bool:
|
def dovolit_upravy_popisku(galerie: Galerie, request: HttpRequest) -> bool:
|
||||||
# FIXME: Dočasné: úpravy jen když je to v org-only stavu. (Odpovídá předchozímu chování)
|
# FIXME: Dočasné: úpravy jen když je to v org-only stavu. (Odpovídá předchozímu chování)
|
||||||
return request.user.je_org and galerie.zobrazit in (ORG, NIKDY)
|
return request.user.je_org and galerie.zobrazit in (ORG,)
|
||||||
|
|
||||||
|
|
||||||
def cesta_od_korene(g):
|
def cesta_od_korene(g):
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue