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.http import HttpResponseRedirect
|
||||
from django import forms
|
||||
from django.db import models
|
||||
|
||||
# akction
|
||||
|
||||
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)
|
||||
for galerie in queryset:
|
||||
galerie.zobrazit = VZDY
|
||||
|
|
@ -18,7 +19,7 @@ def zverejnit_fotogalerii(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)
|
||||
for galerie in queryset:
|
||||
galerie.zobrazit = ORG
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
from django import forms
|
||||
|
||||
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)
|
||||
|
||||
class NewGalerieForm(forms.Form):
|
||||
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
|
||||
|
||||
from soustredeni.models import Soustredeni
|
||||
from galerie.utils import top_galerie
|
||||
|
||||
VZDY=0
|
||||
ORG=1
|
||||
NIKDY=2
|
||||
# Pozor, diskontinuita, tady bylo `NIKDY`
|
||||
UCASTNIK=3
|
||||
# TODO: Enum!
|
||||
VIDITELNOST = (
|
||||
(VZDY, 'Vždy'),
|
||||
(ORG, 'Organizátorů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í
|
||||
|
|
@ -34,8 +35,7 @@ def galerie_filename(self, filename):
|
|||
cislo_gal = gal.pk
|
||||
|
||||
# najdi kořenovou galerii
|
||||
while (gal.galerie_up):
|
||||
gal = gal.galerie_up
|
||||
gal = top_galerie(gal)
|
||||
|
||||
# soustředění je v cestě jen pokud galerie pod nějaké patří
|
||||
cesta = (
|
||||
|
|
@ -49,29 +49,29 @@ def galerie_filename(self, filename):
|
|||
class Soubor(models.Model):
|
||||
# „originál“ (modulo max. velikost uploadu na web FIXME!)
|
||||
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):
|
||||
OBRAZEK = 'obrazek', 'Obrázek'
|
||||
VIDEO = 'video', 'Video'
|
||||
NEVIM = 'nevim', 'Neznámý typ'
|
||||
typ = models.CharField('Typ', max_length=16, blank=False, null=False, choices=Typ.choices, default=Typ.NEVIM)
|
||||
# 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ů
|
||||
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)
|
||||
galerie = models.ForeignKey('Galerie', blank=True, null=True, on_delete=models.CASCADE)
|
||||
# Primární klíč k řazení pro overridování řazení podle názvu
|
||||
poradi = models.IntegerField('Pořadí', blank=True, null=True)
|
||||
|
||||
def __str__(self):
|
||||
return f'Obrázek {self.nazev} ({self.soubor.name})'
|
||||
return f'Soubor {self.nazev} ({self.soubor.name})'
|
||||
|
||||
class Meta:
|
||||
verbose_name = 'Obrázek'
|
||||
verbose_name_plural = 'Obrázky'
|
||||
verbose_name = 'Soubor'
|
||||
verbose_name_plural = 'Soubory'
|
||||
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):
|
||||
# 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):
|
||||
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_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)
|
||||
zobrazit = models.IntegerField('Zobrazit?', default = ORG, choices = VIDITELNOST)
|
||||
galerie_up = models.ForeignKey('Galerie', blank = True, null = True,
|
||||
|
|
@ -110,3 +110,4 @@ class Galerie(models.Model):
|
|||
class Meta:
|
||||
verbose_name = '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:
|
||||
while g.galerie_up is not None:
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ from datetime import datetime
|
|||
from galerie.utils import top_galerie
|
||||
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 galerie.forms import KomentarForm, NewGalerieForm
|
||||
|
||||
|
|
@ -16,7 +16,7 @@ import logging
|
|||
logger = logging.getLogger(__name__)
|
||||
|
||||
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.is_anonymous: 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:
|
||||
# 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):
|
||||
|
|
|
|||
Loading…
Reference in a new issue