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:
  • Název
  • Popis
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:
  • Název
  • Popis
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:
  • Název - povinné, vygenerován z originálního názvu po nahrání na server
  • Autor
  • Místo
  • Souřadnice GPS
  • Datum pořízení
  • Čas pořízení
  • Typ fotoaparátu
  • Originální šířka
  • Originální výška

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.