O projektu
                  		
	Dokumentace k projektu fotogalerie vypracovaného jako semestrální práce k
	předmětu TW1 na FEL ČVUT.
	
Systém je založen na PHP Frameworku
	
	CodeIgniter. Jeho dokumentace je
	
	zde. Dokumentace zdrojového kódu, který byl vystaven nad CodeIgniter
	standardní třídy je
	
	zde. Některé základní třídy jsem ještě zvlášt poupravil aby vyhovovali
	potřebám galerie, konkrétně uživatelským právům a omezením. 
	Projekt není nahrán na server webdav protože jeho vlastnosti
	neumožňovali funkčnost projektu. Jednalo se o potřebu vytvářet libovolné
	adresáře a poté mít možnost je smazat. Což lze se zapnutým PHP Safe Mode
	pouze při vytvoření adresáře pomocí vrstvy FTP, kterou galerie také
	podporuje, ale na webdavu nejsou bohužel dostupné ftp účty. Proto jsem
	zprovoznil instanci na externím serveru. 
	
	
	Domovská stránka projektu 
	Webové stránky obsahují jak uživatelské (frontend) tak administrační (backend)
	rozhraní. Uživatelská jména jsou shodná pro obě rozhraní. Přístup do
	administrace pro uživatele lze nastavovat z backendu. 
Backend
	
	Přístup do administračního rozhraní
	Navigace v galerii je dostupná z horního menu. Menu obsahuje také položku
	Zpět, která vrací o jednu pozici nazpět a položku Historie, která zobrazuje
	odkazy na posledních 10 provedených akcí. Tyto funkce jsou dostupné i bez
	aktivovaného javascriptu. 
	Po klinutí na položku Odhlásit je uživatel odhlášen z backendu i
	frontendu. Historie po odhlášení zaniká. 
	Uživatelé jsou mají nastavena rozdílná práva. Nastavení práv je prováděno
	pomocí uživatelských skupin a uživatelských rolí. 
	Administrace obsahuje šest editovatelných entit. Všechny jsou dostupné z
	horního menu. Vyjímku tvoří správa fotografií, ke které je přístup z
	galerie. Práce s každou entitou je rozdělena na čtyři základní operace. Jsou
	jimi listování položkami, vkládání, zobrazení, editace a mazání. V dalších
	odstavcích tyto operace spolu s několika dalšími, které jsou specifické jen
	pro určité entity, popíši. 
 
Operace
Listování
	K listování je přístup přímo z horního menu kliknutím na požadovanou entitu.
	Jsou zde v tabulkovém režimu vypsány všechny dostupné položky. Položky jsou
	jednoznačně identifikovány několika sloupci popisujícími jejich vlastnosti.
	Vždy v prvním sloupci jsou položky očíslovány pro lepší orientaci. Poslední
	sloupec označený Akce obsahuje operace, které jsou u položky dostupné.
	Entity jsou vzájemně provázané a je možné se z operace listování dostat na
	zobrazení jiné entity pokud je uvedena ve vypsaných sloupcích. Listování je
	omezeno na zobrazení deseti položek na stránku. V levém dolním rohu, pokud
	je položek více než deset, je možnost posunovat se na další stránky. Po
	odchodu na jinou entitu nebo zvolení nějaké operace a následovném vrácení se
	do listování si aplikace pamatuje posledně zobrazenou stránku. Vyjímkou je
	listování v entitě fotografií, které není rozděleno na stránky, ale je
	rozděleno pomocí galerií, tzn. že všechny obrázky od jedné galerie jsou
	vypsány v jednom seznamu. 
Vkládání
	Operaci vkládání lze vyvolat z operace listování příslušné entity. Vkládání
	obsahuje formulář s položkam, které popisují entitu. Povinné položky jsou
	označeny znakem '*'. Pro lepší práci je vhodné mít zapnutý javascript, který
	dovoluje okamžitou kontrolu zapsaných informaci u položek, které mají nějaká
	integritní omezení. S vypnutým javascriptem se validace provádí až při
	znovunačtení stránky, což trvá nějakou dobu. Tlačítkem Zpět se vrátíte na
	operaci listování. Tlačítkem Uložit položku zapíšete do databáze a budete
	přesměrování na operaci jejího zobrazení. 
Zobrazení
	Na zobrazení položky se dostaneme z operace listování kliknutím na některý z
	prvních sloupců položky (většinou je označen jako název). Zobrazí se nám
	všechny informace popisující položku. Nad tabulkou jsou, pokud jsou
	dostupná, tlačítka dovolující další operace s položkou. Jejich popis je
	nanejvýš výstižný a není třeba je popisovat. 
Editace
	Editace je přístupná buďto z listování ve sloupci Akce nebo ze zobrazení
	položky. Editace je takřtka totožná s vkládáním, rozdíl je pouze v tom, že
	položky jsou již předvyplněny a některé, které nelze po vložení vytvoření
	položky měnit, nejsou editovalné nebo nejsou vůbec zobrazeny. Kliknutím na
	tlačítko Zpět se dostanete na operaci zobrazení nebo listování, podle toho
	odkud jste k editaci přistoupily. Po kliknutí na tlačítko Uložit se položka
	změní v databázi. Dostanete se poté opět na operaci ze které jste editaci
	vyvolali. 
Mazání
	Mazání je dostupné ze stejného umístění jako editace. Po jejím vyvolání
	následuje vždy ještě potvrzovací dialog, ve kterém můžete mazání tlačítkem
	Ne stornovat. Po jeho kliknutí se vrátíte zpět na operaci odkud jste mazání
	vyvolali. Po kliknutí na tlačítko Ano vymažete položku z databáze a budete
	přesměrování na operaci listování. U galerií a fotografií je navíc možnost
	zvolit vymazání dat pouze z databáze, při zachování souborů a složek
	galerie. Tuto možnost mají dostupnou pouze superadministrátoři. 
Vícenásobné přiřazení jiné entity
	Tato operace je dostupná pouze u entit, které jsou provázány s jinou entitou
	vícenásobným vztahem. Konkrétně se jedná o provázání s entitami
	uživatelských rolí a uživatelských skupin. Pokud je operace dostupná, lze ji
	vyvolat ze stejného umístění jako editaci a mazání. Po jejím vyvolání se
	zobrazí formulář se dvěma poli. Pole vlevo obsahuje položky provázané
	entity, které nejsou ke spravované položce přiřazeny, kdežto pole vpravo
	obsahuje ty, které jsou přiřazeny. Přesun položek mezi poli je možný
	vybráním položky. Lze vybrat více položek v jednom i druhém poli. K
	uskutečnění přesunu je potřebné potvrdit operaci tlačítkem Uložit. Po jeho
	kliknutí se dostanete zpět na operaci ze které jste přišli, stejně tak i po
	kliknutí na tlačítko Zpět. 
Nahrání fotografií
	Zcela specifickou operací je nahrávání fotografií do galerie. Akce je
	dostupná z listování entity fotografií kliknutím na tlačítko Nahrát nové
	fotografie. U této akce je velice vhodné mít povolený javascript a
	nainstalovaný Flash plugin verze 9 a novější. Pokud vaše konfigurace splňuje
	tyto požadavky objeví se dialog s možností hromadného vybrání fotografií z
	Vámi zvoleného úložiště. Pokud nemáte povolený javascript tento dialog se
	nezobrazí a místo něj bude k dispozici standardní html pole pro výběr jediné
	Vámi zvolené fotografie. Pokud bude javascript zapnut, ale nebudete mít
	nainstalován Flash plugin, nebo bude starší verze než uvedené, dialog se
	zobrazí, ale ovládací prvky nebudou funkční. Fotografie vyberete po kliknutí
	na Vybrat fotografie. Objeví se standardní dialog Vašeho operačního systému
	s výběrem souborů. Výběr je omezen pouze na soubory typu '.jpg'. Nahrát lze
	obrázky nepřesahující velikost 1024kB a rozměry 1024×1024 px. Kontrola
	rozměrů a velikosti souboru je prováděna samozřejmě až po nahrání souboru na
	server, což trvá delší dobu. Proto je lepší s tímto počítat a obrázky si
	dopředu předpřipravit na požadované rozměry. Pokud je soubor úspěšně
	zvalidován, vypíše se informace o jeho nahrání a případně, pokud musel být
	přejmenován aby nepřepsal soubor se stejným názvem se toto také zobrazí.
	Fotografie jsou defaultně upraveny po nahrání na velikost maximálně 640×640
	px s kvalitou 90% a je vytvořen náhled o velikosti 120×120 px s kvalitou
	60%. Zmenšení fotografie samozřejmě zachovává její proporce. V průběhu
	nahrávání je zobrazen aktuální průběh celého uploadování. V průběhu
	nahrávání lze přidávat další fotografie. Pokud jste vše potřebné nahráli
	tlačítkem Upravit fotografie se vrátíte zpět na jejich správu. Fotografie
	jsou automaticky zařazeny do databáze a není nutné s nimi již provádět další
	operace, pokud nechcete změnit jejich název nebo jim vyplnit popis. 
Popis entit
Uživatelské skupiny
	Uživatelské skupiny jsou spolu s uživatelskými rolemi prvkem dovolujícím
	nastavení různých oprávnění pro různé uživatele. Základními skupinami jsou
	Superadministrátoři a Administrátoři. Rozdíl v těchto dvou skupinách je, že
	superadministrátorům nelze nastavit jakákoli oprávnění. Adminstrátory lze
	omezit zakázáním jejich skupiny pro určitou akci. Obě tyto skupiny nelze
	omezit uživatelskými rolemi a nelze je ze systému smazat. Ostatní skupiny
	lze libovolně vytvářet a mazat pokud neobsahují žádného uživatele. Smazání
	skupiny je podmíněné tím, že nesmí obsahovat žádné členy. Skupiny slouží
	jako omezující prvek pro určitou akci globálně, což znamená, že pokud je
	uplatníme například na akce poskytující prohlížení galerií ve frontendu,
	budou takto omezeny všechny galerie bez rozlišení. Vlastnosti skupiny jsou:
	
Uživatelské role
	Je nástroj, kterým lze omezit specifické uživatele ve skupinách a také
	omezit přístup jen k některým položkám entitity - zatím se jedná pouze o
	galerie a jejich obsah. Znamená to, že pokud aktivujeme u galerie omezení
	uživatelskými rolemi, tak pouze role přiřazené této galerii budou moci
	operovat s danou galerií a jejím obsahem. Uživatel, u kterého chceme aby měl
	galerii dostupnou musí mít alespoň přiřazenu alespoň jednu uživatelské roli
	shodnou s rolemi galerie. Pro funkčnost takto nastavených oprávnění je nutné
	aby v entitě akce bylo u položky, která zprostředkovává zobrazení, editaci
	atd. nastaveno použití omezení pomocí uživatelských rolí. Vlastnosti skupiny
	jsou:
	
Uživatelé
	Mohou být vytvářeny manuálně v administraci nebo je lze vytvořit provedením
	registrace ve frontendu. Každý uživatel musí mít přiřazenu pouze jednu
	uživatelskou skupinu a může mít libovolný počet uživatelských rolí. Uživatel
	je jednoznačně definován uživatelským jménem a heslem. Uživatele lze
	libovolně vytvářet a mazat. Výjmkou je uživatel s admin, kterého nelze
	smazat a nelze mu změnit skupinu, kterou je Superadmnistrátor. Vlastnosti
	uživatele jsou:
	
		- 
		
			Uživatelské jméno - povinné, nelze měnit
		 
- 
		
			Heslo - povinné
		 
- 
		
			Jméno - povinné
		 
- 
		
			Email - povinné
		 
- 
		
			Skupina - povinné
		 
- 
		
			Datum narození - povinné
		 
- 
		
			Zobrazit jméno - povinné, Ano-Ne
		 
- 
		
			Zobrazit email - povinné, Ano-Ne
		 
- 
		
			Ověřen - povinné, Ano-Ne
		 
- 
		
			Zablokován - povinné, Ano-Ne
		 
- 
		
			Frontend vzhled - povinné, výběr
		 
Akce
	Akce zabezpečují celý systém. Každá stránka v systému má svoji unikátní url
	adresu v rámci systému. Některé operace jako Listování nemají další
	volitelné parametry a jiné, například Zobrazení nebo editace položky
	potřebuje ke své definici také jeden nebo více parametrů. Akce jsou lokální
	url adresy bez těchto parametrů. Pokud omezíme akci pomocí uživatelské
	skupiny, je omezena pro všechny parametry poslané s touto url. Pokud ji
	omezíme pomocí uživatelské role musíme vybrat jaká php funkce bude
	obsluhovat kontrolu rolí pro danou akci. Poté systém hledá při přístupu na
	tuto akci zvolenou funkci a pokud je nalezena pošle jí parametry, které jsou
	přidané k url a na funkci je aby posoudila jestli je dané položka entity pro
	uživatele zobrazitelná. Podobně s výběrem php funkce jako u nastavení rolí
	se pracuje při generování dynamického nadpisu pokud je povolen. Tyto
	vlastnosti však při běžném provozu nebude možné měnit, jsou zde pouze nyní
	pro ukázku jednoduchosti nastavování práv. Akce nelze vytvářet a vkládat. U
	akce lze standardně nastavit tyto vlastnosti:
	
		- 
		
			Url - povinné, lokální část url zprostředkovávající určitou operaci
			bez dalších parametrů
		 
- 
		
			Nadpis - povinné
		 
- 
		
			Omezená skupinami - povinné, Ano-Ne, skupiny je nutné dále
			specifikovat
		 
- 
		
			Zobrazit nadpis - povinné, Ano-Ne, určuje jestli se Nadpis zobrazí
		 
- 
		
			Dynamický nadpis - povinné, Ano-Ne, určuje jestli se Dynamický
			nadpis zobrazí - je generován automaticky
		 
- 
		
			Omezená rolemi - povinné, Ano-Ne, přiřazení rolí závisí na nastavení
			rolí daných položek entity na kterou akce směřuje
		 
- 
		
			Zobrazovat v historii - povinné, Ano-Ne, určuje jestli se akce
			zobrazí ve funkci historie administrace
		 
- 
		
			Nadřazená akce - povinné, Ano-Ne, umožňuje vytvářet podsekce, podle
			nich se zobrazují breadcrumbs
		 
Galerie
	Hlavní viditelný obsah webu. Galerie lze libovolně vytvářet a mazat. Pozor,
	při mazání se smažou i její fotografie. Lze je třídit do podsložek. Galerie
	se jednoduše ve stromu přesouvají pomocí nastavení jiné nadřazené akce.
	Pokud není u galerie vybrána nadřazená akce, je zobrazena v hlavní složce
	galerií. Mazání galerie je podmíněné tím, aby neobsahovala žádnou podgalerii.
	Nahrávání a operace s galeriemi a jejich fotografiemi již byly popsány v
	předchozích odstavcích. Vlastnosti galerie jsou:
	
		- 
		
			Název - povinný
		 
- 
		
			Alias - povinný, nelze měnit, je generován automaticky po změně
			Názvu
		 
- 
		
			Počet fotografiií - nelze měnit
		 
- 
		
			Počet galerií - nelze měnit
		 
- 
		
			Vytvořeno - nelze měnit
		 
- 
		
			Vytvořil - nelze měnit
		 
- 
		
			Změněno - nelze měnit
		 
- 
		
			Změnil - nelze měnit
		 
- 
		
			Omezená rolemi - povinné, Ano-Ne, je potřeba dále specifikovat o
			jaké role se jedná
		 
- 
		
			Viditelná - povinné, Ano-Ne, určuje jestli je ve frontendu viditelná
		 
- 
		
			Ikona složky s obázkem - povinné, Ano-Ne, jestli má být ve frontendu
			složka zobrazena s miniaturou některé z fotogarfií z galerie
		 
- 
		
			Nadřezená galerie
		 
Fotografie
	Jsou dostupné odkazem z Listování galeriemi nebo u jejich zobrazení volbou
	Upravit fotografie. Nahrávání fotografií a mazání již bylo popsáno.
	Vlastnosti fotografie jsou:
	
Frontend
	Ve frontendu je možnost prohlížet galerie. Jsou omezeny na základě práv
	nastavených v backendu.
	
Uživatel zde může editovat svůj profil, změnit si heslo nebo pokud není
	registrovaný se registrovat. 
	Při registraci je potřeba potvrdit registraci pomocí url, které uživatel
	obdrží na email zadaný při registraci.