Práva ke galeriím funkční, UI zatím ne

This commit is contained in:
Pavel "LEdoian" Turinsky 2025-04-23 21:07:38 +02:00
parent c789775364
commit b744e844dd
6 changed files with 78 additions and 16 deletions

View file

@ -0,0 +1,18 @@
# Generated by Django 4.2.20 on 2025-04-23 18:37
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('galerie', '0013_post_split_soustredeni'),
]
operations = [
migrations.AlterField(
model_name='galerie',
name='zobrazit',
field=models.IntegerField(choices=[(0, 'Vždy'), (1, 'Organizátorům'), (3, 'Účastníkům a orgům'), (2, 'Nikdy')], default=1, verbose_name='Zobrazit?'),
),
]

View file

@ -10,9 +10,11 @@ from soustredeni.models import Soustredeni
VZDY=0
ORG=1
NIKDY=2
UCASTNIK=3
VIDITELNOST = (
(VZDY, 'Vždy'),
(ORG, 'Organizátorům'),
(UCASTNIK, 'Účastníkům a orgům'),
(NIKDY, 'Nikdy'),
)

View file

@ -83,7 +83,7 @@
{# Popisek fotky #}
<div class="popis">
{% if preview %}
{% if upravy_popisku %}
<form action=".#nahoru" method="post" id="komentarform">
{% csrf_token %}
<table>

6
galerie/utils.py Normal file
View file

@ -0,0 +1,6 @@
from galerie.models import Galerie
def top_galerie(g: Galerie) -> Galerie:
while g.galerie_up is not None:
g = g.galerie_up
return g

View file

@ -5,18 +5,32 @@ from django.shortcuts import render, HttpResponseRedirect, get_object_or_404
from django.template import RequestContext
from datetime import datetime
from galerie.models import Obrazek, Galerie
from galerie.utils import top_galerie
from personalni.utils import resitel_uzivatele
from galerie.models import Obrazek, Galerie, VZDY, ORG, UCASTNIK, NIKDY
from soustredeni.models import Soustredeni
from galerie.forms import KomentarForm, NewGalerieForm
def zobrazit(galerie, request):
preview = False
if galerie.zobrazit >= 1:
soustredeni = top_galerie(galerie).soustredeni
# Superuživatelům úplně všechny galerie.
if request.user.is_superuser: return True
if galerie.zobrazit == VZDY: return True
if galerie.zobrazit == NIKDY: return False
if galerie.zobrazit == ORG and request.user.je_org: return True
if galerie.zobrazit == UCASTNIK:
if request.user.je_org:
preview = True;
else:
raise Http404
return preview
return True
resitel = resitel_uzivatele(request.user)
if resitel is not None and resitel.soustredeni_set.contains(soustredeni):
return True
return False
def dovolit_upravy_popisku(galerie, request):
# 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)
def cesta_od_korene(g):
@ -37,7 +51,8 @@ def nahled(request, pk, soustredeni):
podgalerie = podgalerie.filter(zobrazit__lt=1)
obrazky = Obrazek.objects.filter(galerie = galerie).order_by('poradi', 'nazev')
preview = zobrazit(galerie, request)
ma_se_zobrazit = zobrazit(galerie, request)
if not ma_se_zobrazit: raise Http404("Galerie sice existuje, ale my se tváříme, že ne :-D")
sourozenci = []
if galerie.galerie_up:
@ -62,7 +77,7 @@ def nahled(request, pk, soustredeni):
{'galerie' : galerie,
'podgalerie' : podgalerie,
'obrazky' : obrazky,
'preview' : preview,
'upravy_popisku' : dovolit_upravy_popisku(galerie, request),
'cesta': cesta,
'sourozenci': sourozenci,
'predchozi': predchozi,
@ -78,7 +93,8 @@ def detail(request, pk, fotka, soustredeni):
NAHLEDU = 1
galerie = get_object_or_404(Galerie, pk=pk)
preview = zobrazit(galerie, request)
ma_se_zobrazit = zobrazit(galerie, request)
if not ma_se_zobrazit: raise Http404("Obrázek neukážu!")
obrazek = get_object_or_404(Obrazek, pk=fotka)
obrazky = galerie.obrazek_set.all().order_by('poradi', 'nazev')
@ -98,7 +114,7 @@ def detail(request, pk, fotka, soustredeni):
break
else:
# Obrazek neni v galerii/stitku.
raise Http404
raise Http404("„Obrázek není v galerii/štítku“, ať už to znamená cokoliv…")
# Nacteni okolnich obrazku a galerii
@ -153,7 +169,7 @@ def detail(request, pk, fotka, soustredeni):
'sirka' : sirka,
'obrazky_predchozi' : obrazky_predchozi,
'obrazky_dalsi' : obrazky_dalsi,
'preview' : preview,
'upravy_popisku' : dovolit_upravy_popisku(galerie, request),
'form' : form,
'cesta': cesta_od_korene(galerie),
})
@ -179,7 +195,7 @@ def new_galerie(request, galerie, soustredeni):
gal = Galerie()
gal.nazev = form.cleaned_data['nazev']
#gal.popis = form.cleaned_data['popis'] # popis nepouzivame
gal.zobrazit = 1 # galerie je v procesu vytvareni
gal.zobrazit = ORG # galerie je v procesu vytvareni
''' pokud je to podgalerie pridej nadrazenou galerii
a nadrazene soustredeni nechej volne,
pokud je to hlavni galerie, tak nadrazena galerie neexistuje,

View file

@ -3,7 +3,7 @@ import re
from django.contrib.auth import get_user_model
from django.contrib.auth.decorators import permission_required, user_passes_test
from django.contrib.auth.models import AnonymousUser
from django.contrib.auth.models import AnonymousUser, User
from django.db import transaction
import soustredeni.models
@ -182,3 +182,23 @@ def merge_osoby(cilova, zdrojova):
cilova.save()
input("Potvrdit transakci osob (^C pro zrušení) ")
def osoba_uzivatele(u: User | AnonymousUser) -> Osoba | None:
if u.is_anonymous: return None
try:
return u.osoba
except User.osoba.RelatedObjectDoesNotExist:
return None
def resitel_osoby(o: Osoba) -> Resitel | None:
try:
return o.resitel
except Osoba.resitel.RelatedObjectDoesNotExist:
return None
def resitel_uzivatele(u: User | AnonymousUser) -> Resitel | None:
o = osoba_uzivatele(u)
if o is None: return None
return resitel_osoby(o)
# TODO: organizator_osoby, organizator_uzivatele