Powered by slightly modified MediaWiki and TED Notepad.

Doc:Dev/Fotky

Autor: Jana Skotáková

Contents

Uložení obrazových dat fotek

Vlastnosti fotky jako je jméno, vlastník, popis apod. jsou uloženy v entitě Photo, se kterou pak pracují všechny stránky. Samotná obrazová data jsou uchovávána v entitě Image. V entitě Photo je uložen pouze odkaz na příslušnou entitu Image (uloženou v databázi). Několik fotek tedy může mít odkaz na stejný Image, není nutné ukládat obrazová data několikrát.

Při přidávání nové fotky a jejích dat do databáze se nejprve zkontroluje, jestli už taková data v databázi nejsou. K jejich vyhledání se použije md5 hash. Pokud jsou data nalezena, zkontroluje se i shodnost samotných dat. Pokud jsou stejná, použijí se pro novou fotku dříve vložená data, jinak se do databáze data přidají.

Generování náhledu fotky

Náhledy fotek jsou reprezentovány entitou PhotoPreview. Každý vygenerovaný náhled má záznam v databázi se jménem souboru, ve kterém je uložený a pokud se náhledy ukládají do databáze, tak jsou v záznamu uložena i samotná data náhledu.

Náhled fotky se podle nastavení generuje buď do souboru nebo do databáze.

Náhled se generuje až po přijetí požadavku od prohlížeče, nepřipravuje se předem.

Poznámka: Apache server posílá prohlížeči soubory mnohem rychleji než skript. Je proto výhodnější generovat náhledy do souboru na disk než do databáze.

Generování do souboru

Při generování náhledu do souboru se nejprve zkontroluje, zda už soubor existuje nebo nikoliv. Pokud existuje, použije se tento soubor a nový náhled se nevytváří. Pokud soubor neexistuje nebo tento náhled ještě nebyl nikdy vytvářen, tak se vygeneruje nový.

Připraví se obrázek se zmenšený na požadovanou velikost a přidá se watermark, pokud je nastaven.

Poznámka: Pokud se watermark přidává vedle fotky, tak se připravený obrázek zvětší o velikost watermarku.

Poté se data uloží do souboru, data v záznamu v databázi zůstanou prázdná. Do výstupu se posílá adresa souboru.

V případě, že se nepodaří uložit vygenerovaný náhled do souboru, uloží se do databáze.

Generování do databáze

Při generování náhledu do databáze se náhled zobrazuje přes stránku PhotoPreviewPage, která zapíše obrazová data přímo na výstup (Output).

Postup při generování náhledu do databáze je shodný, pouze se kontrolují data v databázi nikoliv existence souboru.

Rozdělení stránek

Stránky, které mají být uživatelům přístupné přes URL adresu, musí být potomky třídy Page. Mezi tyto potomky patří především přehled fotek (PhotoListPage) a detail fotky (PhotoDetailPage) a také stránka obstarávající nahrání fotek do databáze (PhotoAddPage).

Naopak stránky, které umožňují operace s více fotkami najednou jsou odvozeny od třídy SubPage. Mezi ně patří stránka obstarávající editaci fotek (PhotoEditSubPage), stránka pro editaci tagů (PhotoTagSubPage), přidání fotek do alba (PhotoAlbumsAddSubPage) a další.

Nahrávání fotek do databáze

Po přenosu souborů na server se nejprve soubory zkontrolují, jestli obsahují obrazová data v podporovaném formátu, jestli nepřekračují povolenou velikost apod.

Pokud projdou všechny tyto testy úspěšně, soubory jsou zkopírovány do pomocného adresáře. Poté se spustí kontroly zobrazených formulářů.

Pokud je vše v pořádku, zkopírují se data do databáze a vytvoří se nová fotka.

Pokud dojde k nějaké chybě (např. příliš dlouhý popis fotek), zobrazí se znovu formulář pro nahrávání fotek spolu s informací o chybě, ovšem už bez možnosti výběru souborů. Místo toho se zobrazí seznam souborů, které se podařilo nahrát na server. Uživatel tedy nemusí fotky znovu nahrávat.