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 VZDY=0
ORG=1 ORG=1
NIKDY=2 NIKDY=2
UCASTNIK=3
VIDITELNOST = ( VIDITELNOST = (
(VZDY, 'Vždy'), (VZDY, 'Vždy'),
(ORG, 'Organizátorům'), (ORG, 'Organizátorům'),
(UCASTNIK, 'Účastníkům a orgům'),
(NIKDY, 'Nikdy'), (NIKDY, 'Nikdy'),
) )

View file

@ -83,7 +83,7 @@
{# Popisek fotky #} {# Popisek fotky #}
<div class="popis"> <div class="popis">
{% if preview %} {% if upravy_popisku %}
<form action=".#nahoru" method="post" id="komentarform"> <form action=".#nahoru" method="post" id="komentarform">
{% csrf_token %} {% csrf_token %}
<table> <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 django.template import RequestContext
from datetime import datetime 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 soustredeni.models import Soustredeni
from galerie.forms import KomentarForm, NewGalerieForm from galerie.forms import KomentarForm, NewGalerieForm
def zobrazit(galerie, request): def zobrazit(galerie, request):
preview = False soustredeni = top_galerie(galerie).soustredeni
if galerie.zobrazit >= 1: # Superuživatelům úplně všechny galerie.
if request.user.je_org: if request.user.is_superuser: return True
preview = True;
else: if galerie.zobrazit == VZDY: return True
raise Http404 if galerie.zobrazit == NIKDY: return False
return preview if galerie.zobrazit == ORG and request.user.je_org: return True
if galerie.zobrazit == UCASTNIK:
if request.user.je_org:
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): def cesta_od_korene(g):
@ -37,7 +51,8 @@ def nahled(request, pk, soustredeni):
podgalerie = podgalerie.filter(zobrazit__lt=1) podgalerie = podgalerie.filter(zobrazit__lt=1)
obrazky = Obrazek.objects.filter(galerie = galerie).order_by('poradi', 'nazev') 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 = [] sourozenci = []
if galerie.galerie_up: if galerie.galerie_up:
@ -62,7 +77,7 @@ def nahled(request, pk, soustredeni):
{'galerie' : galerie, {'galerie' : galerie,
'podgalerie' : podgalerie, 'podgalerie' : podgalerie,
'obrazky' : obrazky, 'obrazky' : obrazky,
'preview' : preview, 'upravy_popisku' : dovolit_upravy_popisku(galerie, request),
'cesta': cesta, 'cesta': cesta,
'sourozenci': sourozenci, 'sourozenci': sourozenci,
'predchozi': predchozi, 'predchozi': predchozi,
@ -78,7 +93,8 @@ def detail(request, pk, fotka, soustredeni):
NAHLEDU = 1 NAHLEDU = 1
galerie = get_object_or_404(Galerie, pk=pk) 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) obrazek = get_object_or_404(Obrazek, pk=fotka)
obrazky = galerie.obrazek_set.all().order_by('poradi', 'nazev') obrazky = galerie.obrazek_set.all().order_by('poradi', 'nazev')
@ -98,7 +114,7 @@ def detail(request, pk, fotka, soustredeni):
break break
else: else:
# Obrazek neni v galerii/stitku. # 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 # Nacteni okolnich obrazku a galerii
@ -153,7 +169,7 @@ def detail(request, pk, fotka, soustredeni):
'sirka' : sirka, 'sirka' : sirka,
'obrazky_predchozi' : obrazky_predchozi, 'obrazky_predchozi' : obrazky_predchozi,
'obrazky_dalsi' : obrazky_dalsi, 'obrazky_dalsi' : obrazky_dalsi,
'preview' : preview, 'upravy_popisku' : dovolit_upravy_popisku(galerie, request),
'form' : form, 'form' : form,
'cesta': cesta_od_korene(galerie), 'cesta': cesta_od_korene(galerie),
}) })
@ -179,7 +195,7 @@ def new_galerie(request, galerie, soustredeni):
gal = Galerie() gal = Galerie()
gal.nazev = form.cleaned_data['nazev'] gal.nazev = form.cleaned_data['nazev']
#gal.popis = form.cleaned_data['popis'] # popis nepouzivame #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 ''' pokud je to podgalerie pridej nadrazenou galerii
a nadrazene soustredeni nechej volne, a nadrazene soustredeni nechej volne,
pokud je to hlavni galerie, tak nadrazena galerie neexistuje, 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 import get_user_model
from django.contrib.auth.decorators import permission_required, user_passes_test 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 from django.db import transaction
import soustredeni.models import soustredeni.models
@ -182,3 +182,23 @@ def merge_osoby(cilova, zdrojova):
cilova.save() cilova.save()
input("Potvrdit transakci osob (^C pro zrušení) ") 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