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
|
||||
ORG=1
|
||||
NIKDY=2
|
||||
UCASTNIK=3
|
||||
VIDITELNOST = (
|
||||
(VZDY, 'Vždy'),
|
||||
(ORG, 'Organizátorům'),
|
||||
(UCASTNIK, 'Účastníkům a orgům'),
|
||||
(NIKDY, 'Nikdy'),
|
||||
)
|
||||
|
||||
|
|
|
@ -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
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 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:
|
||||
if request.user.je_org:
|
||||
preview = True;
|
||||
else:
|
||||
raise Http404
|
||||
return preview
|
||||
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:
|
||||
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,
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue