Práva ke galeriím funkční, UI zatím ne
This commit is contained in:
parent
c789775364
commit
b744e844dd
6 changed files with 78 additions and 16 deletions
18
galerie/migrations/0014_alter_galerie_zobrazit.py
Normal file
18
galerie/migrations/0014_alter_galerie_zobrazit.py
Normal 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?'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -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'),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -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
6
galerie/utils.py
Normal 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
|
|
@ -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,
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue