import random from django.http import HttpResponse, Http404 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 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 def cesta_od_korene(g): """Vrátí seznam galerií od kořene ke g""" cesta = [] while g is not None: cesta.append(g) g = g.galerie_up return reversed(cesta) def nahled(request, pk, soustredeni): """Zobrazeni nahledu vsech fotek ve skupine.""" galerie = get_object_or_404(Galerie, pk=pk) podgalerie = Galerie.objects.filter(galerie_up = galerie).order_by('poradi') if not request.user.je_org: podgalerie = podgalerie.filter(zobrazit__lt=1) obrazky = Obrazek.objects.filter(galerie = galerie).order_by('poradi', 'nazev') preview = zobrazit(galerie, request) sourozenci = [] if galerie.galerie_up: sourozenci = galerie.galerie_up.galerie_set.all().order_by('poradi') if not request.user.je_org: sourozenci = sourozenci.filter(zobrazit__lt=1) predchozi = None nasledujici = None minuly = None for g in sourozenci: if g.pk == galerie.pk: predchozi = minuly if minuly is not None and minuly.pk == galerie.pk: nasledujici = g break minuly = g cesta = cesta_od_korene(galerie) return render(request, 'galerie/GalerieNahled.html', {'galerie' : galerie, 'podgalerie' : podgalerie, 'obrazky' : obrazky, 'preview' : preview, 'cesta': cesta, 'sourozenci': sourozenci, 'predchozi': predchozi, 'nasledujici': nasledujici, }) def detail(request, pk, fotka, soustredeni): """Zobrazeni nahledu fotky s id 'fotka'.""" MAX_VYSKA = 900 MAX_SIRKA = 900 MAX_VYSKA_MALA = 100 MAX_SIRKA_MALA = 200 NAHLEDU = 1 galerie = get_object_or_404(Galerie, pk=pk) preview = zobrazit(galerie, request) obrazek = get_object_or_404(Obrazek, pk=fotka) obrazky = galerie.obrazek_set.all().order_by('poradi', 'nazev') # vytvoreni a obslouzeni formulare if request.method == 'POST': form = KomentarForm(request.POST) if form.is_valid(): obrazek.popis = form.cleaned_data['komentar'] obrazek.save() else: form = KomentarForm({'komentar': obrazek.popis}) # Poradi aktualniho obrazku v galerii/stitku. for i in range(len(obrazky)): if obrazky[i] == obrazek: poradi = i break else: # Obrazek neni v galerii/stitku. raise Http404 # Nacteni okolnich obrazku a galerii # TODO vyjmout zjisteni predchozich a nasledujicich galerii # a udelat z toho funkci, ktera se pouzije u nahledu predchozi_galerie = None nasledujici_galerie = None obrazky_dalsi = obrazky[poradi+1:poradi+NAHLEDU+1] if (poradi+1) > NAHLEDU: obrazky_predchozi = obrazky[poradi-NAHLEDU:poradi] else: obrazky_predchozi = obrazky[0:poradi] if galerie.poradi > 1: predchozi_galerie = Galerie.objects.\ filter(galerie_up=galerie.galerie_up).\ filter(poradi=(galerie.poradi-1)) if predchozi_galerie: predchozi_galerie = predchozi_galerie[0] else: predchozi_galerie = None if (poradi+1) == len(obrazky): # Tohle je poslední obrázek if (galerie.poradi is not None and galerie.galerie_up is not None): nasledujici_galerie = Galerie.objects.\ filter(galerie_up=galerie.galerie_up).\ filter(poradi=(galerie.poradi+1)) else: nasledujici_galerie = None if nasledujici_galerie: nasledujici_galerie = nasledujici_galerie[0] else: nasledujici_galerie = None # Preskalovani obrazku do vybraneho prostoru. vyska = obrazek.obrazek_stredni.height sirka = obrazek.obrazek_stredni.width if vyska > MAX_VYSKA: sirka = sirka * MAX_VYSKA / vyska vyska = MAX_VYSKA if sirka > MAX_SIRKA: vyska = vyska * MAX_SIRKA / sirka sirka = MAX_SIRKA return render(request, 'galerie/Galerie.html', {'galerie' : galerie, 'predchozi_galerie' : predchozi_galerie, 'nasledujici_galerie' : nasledujici_galerie, 'obrazek' : obrazek, 'vyska' : vyska, 'sirka' : sirka, 'obrazky_predchozi' : obrazky_predchozi, 'obrazky_dalsi' : obrazky_dalsi, 'preview' : preview, 'form' : form, 'cesta': cesta_od_korene(galerie), }) def new_galerie(request, galerie, soustredeni): # zjistime k jakemu soustredeni se vaze nove vytvarena galerie soustredeni = get_object_or_404(Soustredeni, pk = soustredeni) # pokud je parametr galerie 0, pak jde o hlavni galerii # kdyz je nejaky jiny, pak je pk galerie pod kterou tu dalsi vytvarim if int(galerie) == 0: galerie_up = False galerie_text = "Hlavní fotogalerie soustředění" else: galerie_up = get_object_or_404(Galerie, pk = int(galerie)) galerie_text = "podgalerii ke galerii " + str(galerie_up) # obsluha formulare umoznujiciho multiple nahravani fotek if request.method == 'POST': form = NewGalerieForm(request.POST, request.FILES) if form.is_valid(): # vytvoreni nove galerie gal = Galerie() gal.nazev = form.cleaned_data['nazev'] #gal.popis = form.cleaned_data['popis'] # popis nepouzivame gal.zobrazit = 1 # 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, ale v takovem pripade musi byt nadrazene soustredeni a ne jinak ''' if galerie_up: gal.galerie_up = galerie_up else: gal.soustredeni = soustredeni if gal.galerie_up: gal.poradi = int(len(gal.galerie_up.galerie_set.all())) + 1 gal.save() # zpracovani obrazku v galerii for obr in request.FILES.getlist('obr'): o = Obrazek() o.obrazek_velky = obr o.nazev = str(obr) o.galerie = gal o.save() # presmerovani na prave vzniklou galerii return HttpResponseRedirect('../../' + str(gal.pk)) else: form = NewGalerieForm() return render(request, 'galerie/GalerieNew.html', { 'form' : form, 'soustredeni' : soustredeni, 'galerie_text' : galerie_text, }) def plus_galerie(request, galerie, soustredeni, subgalerie): galerie = get_object_or_404(Galerie, pk=subgalerie) if galerie.poradi: galerie.poradi += 1 else: galerie.poradi = int(len(galerie.galerie_up.galerie_set.all())) galerie.save() return HttpResponseRedirect('../../') def minus_galerie(request, galerie, soustredeni, subgalerie): galerie = get_object_or_404(Galerie, pk=subgalerie) if galerie.poradi: galerie.poradi -= 1 else: galerie.poradi = 1 galerie.save() return HttpResponseRedirect('../../')