Vysoká škola ekonomická v Praze Fakulta informatiky a statistiky Vyšší odborná škola informačních služeb v Praze
Jan Stejskal Návrh online webové aplikace pro sdílení studijních materiálů a inzerci studentů VOŠIS. Projekt s prototypovým řešením Bakalářská práce
2010
zadávací list
Prohlášení
Prohlašuji, že jsem bakalářskou práci na téma Návrh online webové aplikace pro sdílení studijních materiálů a inzerci studentů VOŠIS zpracoval samostatně a použil pouze zdrojů, které cituji a uvádím v seznamu použité literatury.
V Praze dne Podpis
Poděkování Tímto bych rád poděkoval vedoucímu mé bakalářské práce Ing. Antonínu Skopcovi za to, že se ujal vedení mé práce a za poskytnutí konzultace.
Obsah Prohlášení ................................................................................................................ 3 ............................ Poděkování ................................................................................................................................... 4 ......... Obsah .............................................................................................................................. 5 ..................... 1 Anotace .............................................................................................................................. 7 ................ 2 Úvod ............................................................................................................................................. 8 ...... 3 Vyvíjecí prostředí .................................................................................................. 9 ............................ 3.1 PHP ......................................................................................................................... 9 ..................... 3.2 MySQL ...................................................................................................................... 9 .................. 4 Use Case analýza .......................................................................................................... 10 ................... 4.1 Uživatel ................................................................................................................... 10 ................... 4.2 Administrátor ............................................................................................................... 12 .............. 5 Objektová analýza .......................................................................................................................... .. 15 5.1 Identifikace objektů ................................................................................................. 15 .................. 5.2 Definice atributů a metod objektů .......................................................................................... 15 ... 5.2.1 Uživatel (User) ................................................................................................................... . 15 5.2.2 Administrátor (Administrator) ........................................................................................ 16 .... 5.2.3 Soubor (File) ............................................................................................................... 16 ........ 5.2.4 Inzerát (Ad) ................................................................................................................... 17 ...... 5.2.5 Studijní předmět (Subject) .............................................................................................. 17 .... 5.2.6 Stránka (Page) ............................................................................................................. 17 ........ 5.2.7 Formulář (Form) ...................................................................................................... 17 ........... 5.2.8 Připojení k MySQL (MySQLConnect) ........................................................................ 17 ...... 5.2.9 Výsledek dotazu MySQL (MySQLResultSet) ................................................................. .. 18 5.3 Identifikace tříd, seskupení objektů do tříd .............................................................................. 18 5.3.1 User .................................................................................................................... 18 ................. 5.3.2 Administrator .......................................................................................................... 18 ............ 5.3.3 File ................................................................................................................. 18 ..................... 5.3.4 Ad .................................................................................................................................... 18 .... 5.3.5 Page ............................................................................................................................. 18 ........ 5.3.6 Form ............................................................................................................................... 19 ..... 5.3.7 Subject ......................................................................................................... 19 ....................... 5.3.8 MySQLResult, MySQLConnect ......................................................................... 19 ............... 5.4 Vztahy mezi třídami .......................................................................................... 19 ........................ 6 Relační model .................................................................................................................. 22 ................. 6.1.1 Struktura databáze ............................................................................................................ 22 ... 6.1.2 Tabulka PIS_001_users ..................................................................................................... .. 22 6.1.3 Tabulka PIS_002_subjects ............................................................................................... 24 ... 6.1.4 Tabulka PIS_003_files .................................................................................................... 24 .... 5
6.1.5 Tabulka PIS_004_ads .................................................................................... 25 ..................... 6.1.6 Tabulka SYS_001_SETTINGS .......................................................................................... . 26 6.1.7 Propojení tabulek .................................................................................................. 27 .............. 7 Ovládací rozhraní ............................................................................................................................. . 29 7.1.1 Část rozhraní společná všem návštěvníkům stránek ........................................ .................. 29 7.1.2 Rozhraní pro přihlášené uživatele ............................................................................. 31 .......... 7.1.3 Rozhraní pro administrátora .............................................................................................. .. 34 8 Rozhraní umožňující začlenění do stávajícího informačního systému školy .................................. 36 8.1 Relační model ......................................................................................................... 36 ................... 8.2 Design ............................................................................................................................. 36 ........... 9 Vývoj aplikace ............................................................................................................... 37 ................... 9.1 Index ....................................................................................................................................... 37 .... 9.2 Třídy .............................................................................................................. 37 ............................ 9.3 Registrace .................................................................................................................................. . 37 9.4 Přihlášení a odhlášení ....................................................................................................... 37 ......... 9.5 Studijní materiály ..................................................................................................................... .. 37 9.6 Studijní materiály .......................................................................................... 38 ............................ 9.7 Odstranění souborů ...................................................................................... 39 ............................. 9.8 Inzeráty ..................................................................................................................... 39 ................. 9.9 Administrátorské rozhraní ............................................................................................ 39 ............ 10 Závěr .............................................................................................................................................. .. 41 11 Zdroje ............................................................................................................................. 42 ................ 11.1 Tištěné ................................................................................................................. 42 ..................... 11.2 Elektronické ...................................................................................................... 42 ....................... 12 Přílohy .................................................................................................................................... 43 .........
6
1
Anotace Tato práce se zabývá vytvořením návrhu online webové aplikace určené studentům VOŠIS,
která jim má umožnit sdílet jejich studijní materiály v elektronické podobě a prostřednictvím inzerce prodávat a kupovat použité učebnice. Nejprve jsou rozebrány důvody, které vedly ke vzniku této aplikace. Dále je popsáno prostředí, ve kterém byla aplikace vyvíjena. Následuje návrh aplikace, struktury databáze, uživatelského rozhraní, rozhraní umožňující začlenění do stávajícího informačního systému školy. Praktická část práce je pak věnována vývoji aplikace. V závěru práce je shrnut výsledek návrhu a vývoje.
7
2
Úvod Pro studium na vysoké škole je pro studenty užitečné hromadně sdílet studijní materiály
v elektronické podobě (např. zápisky z přednášek nebo výpisky z učebnic), neboť tak mohou získat přístup ke studijním materiálům, které si sami jinak nedokázali obstarat, ať už důvodů zdravotních, časových nebo jiných. Protože si studenti na každý semestr potřebují obstarat učebnice pro studium předepsaných předmětů, jeví se také jako užitečná možnost prodeje a nákupu použitých učebnic prostřednictvím inzerce. K tomu účelu existují pro studenty Vysoké školy ekonomické stránky VŠEborec1, které umožňují mimo jiné sdílet studijní materiály a inzerovat. Inzerovat lze dokonce i na v mnohých dalších inzertních systémech, kterých lze najít na Internetu mnoho. Někteří studenti rovněž využívají k inzerci dřevěnou nástěnku v budově školy, jejíž hlavní výhoda zjevně spočívá ve snadném oslovení kolemjdoucích studentů. O vyhledávacích a třídících funkcích, vzdálenému přístupu a velké kapacitě zde však nemůže být řeč. Nedostatek těchto aplikací spatřuji v tom, že nejsou přizpůsobeny studijnímu prostředí studentů VOŠIS. Mým cílem bylo vytvořit aplikaci, která sice plní některé funkce jako např. VŠEborec, ale zároveň bude zaměřena výhradně na požadavky studentů VOŠIS, bude přizpůsobena výuce realizované na VOŠIS a inzerce bude zúžena pouze na studenty VOŠIS, a tím bude podle předpokladů autora této práce, umožněno její efektivnější využití. Na stránkách VŠEborec lze totiž získat materiály tříděné podlé kódů jednotlivých předmětů vyučovaných na VŠE, zatímco v nové aplikaci určené pro VOŠIS je zachováno označování předmětů používané v systému VOŠIS. V rámci oboru PIS realizovaném na VOŠIS vyučují často jiní pedagogové než pedagogové jiných oborů – obsah, struktura, pojetí a požadavky výuky se tedy mohou od výuky realizované na VŠE lišit; nadto na VOŠIS mohou být vyučovány i některé jiné předměty, které na VŠE vyučovány nejsou. Tyto úvahy spolu s faktem, že se mi nepodařilo nalézt alternativu k již existujícímu softwaru, která by byla zaměřená výhradně na požadavky studentů VOŠIS, mě dovedly k předpokladu, že je žádoucí vytvořit novou přehlednou aplikaci přizpůsobenou studentům VOŠIS. 1 viz zdroj [B3]
8
3
Vyvíjecí prostředí Cílová aplikace předpokládá vytvoření dynamicky generovaných webových stránek
s využitím databáze a diskového prostoru pro ukládání elektronických studijních materiálů. Po konzultaci se zástupcem ředitele pro informační systém a rozvoj jsem jako programovací jazyk zvolil PHP2 ve verzi 5 a databázový systém MySQL3 rovněž ve verzi 5.
3.1 PHP PHP je skriptovací jazyk interpretovaný na straně serveru využívaný zejména k tvorbě dynamických webových stránek. Jeho název je odvozen z počátečních písmen slov “Hypertext Preprocessor”, která napovídají, že PHP je určeno především k předzpracovávání HTML prováděné PHP interpretem. PHP však lze použít i pro tvorbu např. konzolových aplikací.
3.2 MySQL MySQL je jednou z nejrozšířenějších implementací jazyka SQL. SQL je standardizovaný dotazovací jazyk, který se používá pro práci s daty v relačních databázích. Zkratka SQL je odvozena z počátečních písmen slov „Structured Query Language“ (strukturovaný dotazovací jazyk).
2 Viz zdroj [B1] 3 Viz zdroj [B2]
9
4
Use Case analýza Návrh počítá se dvěma typy účastníků (aktorů), kteří budou aplikaci používat. První typ
tvoří uživatel, který bude s programem pracovat (používat ho). Druhým typem účastníka je administrátor, jehož úlohou je správa programu. Pro objasnění jednotlivých případů použití nám poslouží model funkcionality systému – Use Case Diagram – vytvořený zvlášť z pohledu obecného uživatele a zvlášť z pohledu správce systému (administrátora). Základní precondition, tj. podmínkou, která musí být splněna, aby Use Case mohl začít, je hotová instalace a zprovoznění programu.
4.1 Uživatel Za uživatele jsou v této analýze považováni návštěvníci stránek, které tvoří prezentační vrstvu celé aplikace a odběratelé dat, která je možné získávat i mimo aplikační rozhraní (stahování souborů prostřednictvím přímého odkazu – viz níže). Až do okamžiku, kdy se uživatel přihlásí ke svému účtu, mu jsou zpřístupněny volby zaregistrovat se, přihlásit se a kontaktovat administrátora. Další možností, jak může nepřihlášený uživatel využít aplikaci, resp. její data, je výše zmíněná možnost přístupu ke sdíleným souborům prostřednictvím přímého odkazu, který tvoří URL adresa souboru; přístup k třídícím mechanizmům a ke konkrétním údajům o souborech, mezi které patří i kontaktní údaje o uživatelích, mají však pouze přihlášení uživatelé. Tím jsou tyto údaje a systémové prostředky serveru chráněny před roboty, kteří nejsou schopni projít procesem registrace. K vytvoření účtu uživatele, ke kterému se uživatel může přihlašovat, slouží registrace uživatele. Proces registrace zahajuje uživatel vyvoláním příslušné nabídky programu, ve které je vyzván k zadání registračních údajů. Z důvodu odfiltrování nesprávných registračních údajů procházejí v procesu registrace vyplněné údaje kontrolami na dvou úrovních: Zaprvé program zkontroluje uživatelem zadané údaje, pokud je nalezena chyba, je uživatel vyzván k opravě chybných údajů. Druhá úroveň kontroly spočívá v potvrzení registrace samotným uživatelem. Proces registrace je dokončen teprve tímto potvrzením. 10
Pro zahájení práce se uživatel přihlašuje ke svému účtu, a získává tak přístup k dalším funkcionalitám programu. Přihlášený uživatel má přístup ke sdíleným souborům, k inzerátům a ke správě svého účtu. Jako zpětnou vazbu se uživateli bezprostředně po přihlášení zobrazí informace o počtu jeho souborů a inzerátů. Sdílené soubory může uživatel procházet s použitím třídění podle studijních předmětů a následně je stahovat do svého počítače. Dále uživatel může pod svým účtem nahrávat na server soubory určené ke sdílení s ostatními uživateli, je jejich vlastníkem, a je tak kromě administrátora jediným, kdo má oprávnění tyto soubory ze serveru odstranit. V sekci inzeráty může uživatel procházet inzeráty podle třídících kritérií, kterými může být volba mezi nabídkou nebo poptávkou a výběr inzerátů podle studijního předmětu. Dále uživatel může vkládat své vlastní inzeráty, jejichž znění může následně editovat, popřípadě je z databáze úplně odstranit. Uživatel může spravovat svůj účet změnou svých registračních údajů, svoji registraci může zrušit úplně. Dále může hromadně odstranit všechny své soubory a/nebo všechny své inzeráty, což jsou operace, které je možné provádět za předpokladu, že registrace nebyla zrušena, resp. že uživatel má přístupové údaje nutné pro přihlášení do systému pod účtem, pod kterým byla data vytvořena, v opačném případě by byl potřebný zásah administrátora. I když se jedná o činnosti, které se týkají práce se soubory a s inzeráty, jsou zahrnuty do části správy účtu uživatele, protože se vztahují ke konkrétnímu uživateli, navíc před zrušením registrace má uživatel poslední příležitost tyto operace provést bez nutnosti zásahu administrátora. Po ukončení práce se uživatel může z aplikace odhlásit.
11
Jednotlivé případy jsou znázorněny v následujícím diagramu:
Obr. 41: Use Case Diagram z pohledu uživatele
4.2 Administrátor Administrátor je uživatel svého druhu. Na rozdíl od ostatních uživatelů, pro které platí, že jediná správa, která jim je umožněna, se týká pouze jejich vlastních účtů a jimi vytvořených dat, je administrátor jediným z uživatelů, který může systém spravovat – může provádět jeho nastavení a zasahovat do dat všech uživatelů. Administrátor si musí stejně jako ostatní uživatelé vytvořit svůj účet, ke kterému se bude přihlašovat. Pro tuto registraci platí určitá omezení: Účet administrátora je možné vytvořit pouze jeden. Dalším omezením je požadavek vytvořit účet administrátora ještě před zpřístupněním programu ostatním uživatelům. Pokud by nastal problém s přístupem administrátora k jeho účtu (např. při ztrátě hesla), musel by se obrátit na správce databáze. Bezprostředně po přihlášení se administrátorovi zobrazí agregovaná tabulka s informací o četnosti uživatelů ve vztahu k počtu zadaných inzerátů a nahraných souborů. 12
Administrátor může v nastavení systému určit dobu platnosti inzerátů. Přesáhneli uplynulá doba od vložení inzerátu dobu nastavenou administrátorem, budou takové inzeráty automaticky odstraněny. Zatímco běžní uživatelé mohou odstraňovat pouze vlastní soubory a inzeráty, má administrátor oprávnění odstraňovat soubory a inzeráty všech uživatelů. Rozhraní programu neumožňuje samotnému administrátorovi nahrávat soubory nebo vkládat inzeráty, protože jeho účet je určený pouze ke správě systému. Administrátor může spravovat uživatele, může mazat a blokovat jejich účty, měnit jejich údaje a hromadně smazat všechny jejich soubory a inzeráty. Tato volba je zahrnuta do správy uživatelů, protože se vztahuje ke konkrétním uživatelům. Stejně jako kterýkoli jiný uživatel, může i administrátor spravovat svůj účet, tj. měnit své údaje, popř. účet úplně zrušit. Po ukončení práce se administrátor může z aplikace odhlásit. Jednotlivé případy jsou znázorněny v následujícím diagramu:
13
Obr. 42: Use Case Diagram z pohledu administrátora
14
5 Objektová analýza Objekt je v programu uzavřenou strukturou, která má vnitřní paměť, obsahuje metody objektu, má schopnost přijmout a zpracovat zprávu zvnějšku a může obsahovat jiné objekty ([KRAVAL] – str. 10).
5.1 Identifikace objektů Pro identifikaci objektů si stručně shrňme celý návrh programu: Používají ho uživatelé a spravuje ho administrátor. Uživatelé pracují se soubory, s inzeráty a se svými účty, administrátor zajišťuje správu souborů, inzerátů a uživatelských účtů. Rozhraní programu tvoří dynamicky generované www stránky. Program pracuje s daty uloženými v databázi. Na základě tohoto shrnutí provedu pro lepší přehled pracovní rozdělení objektů do 4 skupin: 1. objekty týkající se aktorů, 2. objekty týkající se dat, 3. objekty týkající se uživatelského rozhraní, 4. objekty týkající se databáze. Do první skupiny spadají objekty Uživatel a Administrátor. Do druhé skupiny patří objekty Soubor, Inzerát a Studijní předmět. Třetí skupinu objektů pak budou zastupovat objekty Stránka a Formulář. A konečně do čtvrté skupiny zařadíme objekt Připojení do databáze a Výsledek dotazu.
5.2 Definice atributů a metod objektů Každý z objektů bude obsahovat metodu construct, proto jí nebudu u jednotlivých objektů již nadále uvádět. 5.2.1
Uživatel (User)
Chráněnými (protected) atributy uživatele jsou uživatelské jméno, heslo, identifikační číslo, křestní jméno, příjmení, telefonní číslo, emailová adresa., datum registrace a příznaky nesoucí informaci o tom, zda je uživatel blokován nebo smazán. 15
Metodami objektu Uživatel budou přihlásit se, odhlásit se, ověřit stav přihlášení, zobrazit stav přihlášení, zaregistrovat se, změnit registraci, zobrazit údaje o počtu inzerátů a souborů uživatele, získat hodnotu atributu uživatele. Mezi chráněné metody bude patřit ověřit registraci, ověřit unikátnost záznamu v databázi, ověřit správnost syntaxe emailové adresy, 5.2.2
Administrátor (Administrator)
Administrátor je potomkem Uživatele, tudíž dědí jeho atributy a metody. Polymorfním způsobem se bude chovat metoda ověřit stav přihlášení, která bude objektem Administrátor přetěžována, stejně tak jako metody zobrazit údaje o počtu inzerátů a souborů uživatele a získat hodnotu atributu uživatele, které nebudou pracovat s přihlášeným uživatelem (kterým je administrátor), ale s ostatními uživateli. Pro údržbu databáze bude sloužit metoda vyčistit, pro správu uživatelů budou sloužit metody editovat uživatele a získat seznam uživatelů. 5.2.3
Soubor (File)
Mezi atributy souboru bude patřit údaj o jeho umístění (cesta), název souboru, pod kterým je uložen na server a původní název, pod kterým byl nahráván, identifikační číslo souboru, studijního předmětu, do kterého je soubor zařazen, a uživatele, který soubor nahrál (a je jeho vlastníkem), velikost souboru, poznámky (komentář) a datum uploadu. Soubor bude mít definovánu metodu odstranit, která bude využívat soukromé (private) metody odstranit z databáze a odstranit z disku. Další metoda bude zjišťovat, zda je daný uživatel vlastníkem souboru. Pro procházení souborů bude definována metoda získat seznam souborů, dále metoda pro upload, která bude využívat několik soukromých metod, mezi které patří kontrolovat chyby při uploadu, upload na disk, vložit záznamy o souboru do databáze a metoda generovat identifikační číslo souboru. Generování ID souboru není ponecháno na databázi (prostřednictvím autoincrementu) z důvodu zajištění návaznosti (kontinuality) jednotlivých ID, metoda bude umožňovat jejich recyklaci v případě odstranění souborů z databáze. Důvod tohoto požadavku je 16
jediný: Usnadnění výpisu určitého počtu naposledy přidaných souborů. 5.2.4
Inzerát (Ad)
Atributy inzerátu bude tvořit název inzerované položky, cena, text inzerátu, příznak určující, zda se jedná o nabídku či poptávku, datum vložení inzerátu. Dále identifikační číslo inzerátu, studijního předmětu, ke kterému se inzerát vztahuje a uživatele, který ho vložil do databáze. Objekt bude mít definovanou metodu vložit, která bude zajišťovat vkládání inzerátu do databáze. Tato metoda bude využívat metodu ověřit vložení a metodu generující identifikační číslo inzerátu (podobně jako metoda nahrávající soubor v objektu Soubor); obě naposled uvedené metody budou definovány jako soukromé. 5.2.5
Studijní předmět (Subject)
Studijní předmět bude mít pouze 2 atributy, a sice název a identifikační číslo. Dále bude mít definovanou metodu pro získání seznamu předmětů. 5.2.6
Stránka (Page)
Objekt Stránka bude sloužit ke generování obsahu stránky. Jako atribut bude mít název stránky. Dále bude mít definovány metody získat hlavní stránku, aktualizovat obsah stránky po přihlášení a odhlášení, získat navigaci a rolovací menu s předměty. 5.2.7
Formulář (Form)
Objekt Formulář bude mít definovány metody pro generování formuláře a jeho součástí, což jsou vstupní pole (input), výběrové pole (select), volba (option), textarea (velké vstupní pole), label (popis pole), fieldset (skupina polí), legend (popis pole), optgroup (skupina voleb), tlačítko (button). 5.2.8
Připojení k MySQL (MySQLConnect)
Objekt pro připojení bude obsahovat dva datové členy, a to připojení a instanci. Definovanými metodami budou vytvořit spojení a uzavřít spojení. Další metodou bude vytvoření result setu, které bude sloužit k vynucení připojení při vytváření result setu ([LAVIN] – str. 88). 17
5.2.9
Výsledek dotazu MySQL (MySQLResultSet)
Jednotlivé atributy objektu budou řetězec SQL, název databáze, spojení a výsledek. Mezi veřejné metody bude patřit vrcení aktuálního řádku, accessor pro vracení jména databáze, získání id naposledy insertovaného záznamu a zjištění celkového počtu bez klauzule LIMIT. Jako soukromá metoda bude definována kontrola, že řetězec SQL je select, zavření result setu a zrušení nastavení a count metody pro specifickou verzi ([LAVIN] – str. 89).
5.3 Identifikace tříd, seskupení objektů do tříd Pro tvorbu výše nastíněných objektů budou sloužit jim odpovídající třídy. 5.3.1
User
Třída User vytváří objekty na základě uživatelského jména a hesla, které jsou při vytváření objektu vyžadovány jako parametry. Pomocí funkce __construct naplní hodnotami všechny atributy třídy. 5.3.2
Administrator
Třída Administrátor, jak již bylo řečeno v definici atributů a metod objektů, je vytvářena s použitím dědění od třídy User s tím, že vytváří některé nové metody a některé přetěžuje. 5.3.3
File
Třída File pro svůj vznik používá __construct, který naplní proměnnou $path obsahující cestu k souborům, která je pro všechny soubory stejná. 5.3.4
Ad
Metody třídy Ad pracují podobně jako metody třídy File, s tím, že neukládají data na disk. 5.3.5
Page
Objekty vytvářené pomocí třídy Page dokáží generovat, popř. získávat obsah stránky.
18
5.3.6
Form
Třída Form byla převzata ze třídy genForm šířené pod GNU licencí. Její název byl upraven tak, aby odpovídal názvové konvenci, podle které se řídí názvy ostatních tříd. Třída zde dále nebude rozebírána. Odkazuji na její dokumentaci4. 5.3.7
Subject
Třída Subject nemá pro běh programu zvláštní význam, byla vytvořena pro dodržení konceptu OOP. 5.3.8
MySQLResult, MySQLConnect
Třídy pro práci s databází jsou převzaty z [LAVIN], resp. přidružené webové stránky [B3].
5.4 Vztahy mezi třídami Vztahy mezi třídami vyjadřuje následující diagram:
4 [Brooks]
19
Obr. 51: Diagram tříd Z grafu je patrná násobnost a typy vztahů. Mezi třídou Page a ostatními třídami existuje vztah závislosti. Třída Page je pak závislá na MySQLResultSet, která je komponentou MySQLConnect a je na ní zcela závislá ([LAVIN] – str.88). Mezi třídou User a Administrátor existuje vztah generalizace (dědičnosti). Mezi třídou User a třídami File a Ad existuje vztah asociace, ve kterém User vlastní tato data. Třída Subject (celek) je ve vztahu agregace ke třídám 20
File a Ad (komponenty).
21
6 Relační model Základním principem přístupu u relačního modelu je ta skutečnost, že veškerá logika systému je vyjádřitelná vztahem mezi daty (citace z [KRAVAL] str. 40). Zvolený databázový systém MySQL je relačním databázovým systémem, který patří do procedurálního typu programování a není vhodný k ukládání objektů. (srov. [KEOGH] str. 114). Vzhledem k tomu, že u navrhovaného systému předpokládám stabilitu analýzy a neočekávám rapidní nárůst počtu a složitosti vztahů mezi tabulkami (jedná se o jednoduchý systém), přistoupil jsem k tvorbě datového modelu a vzájemného propojování tabulek pomocí klíčů zadáváním SQL dotazů. K relačnímu modelu se ještě vrátíme v 8. kapitole. 6.1.1
Struktura databáze
Aplikace využívá několik vzájemně propojených tabulek. Názvy tabulek jsou tvořeny třípísmennou předponou označující studijní obor, výjimku tvoří tabulka s nastavením systému, jejíž název začíná předponou SYS. V názvu pak následuje podtržítkem oddělené číselné označení tabulky, a dále samotný název tabulky. Jednotlivá pole tabulek mají prefix odvozený z prvních dvou počátečních částí názvů tabulek, tj. třípísmenná předpona označující studijní obor následována podtržítkem a číslem tabulky. Tato konvence zajistí lepší orientaci v kódu, neboť usnadní identifikaci tabulek a jejich sloupců. Konkrétně je vytvořena tabulka pro evidenci uživatelů, tabulka se seznamem vyučovaných předmětů, tabulka se seznamem souborů nahraných na server a informacemi o nich, tabulka s inzeráty a tabulka obsahující systémová nastavení. Všechny tabulky jsou vzájemně propojeny pomocí klíčů s výjimkou systémové tabulky, která je jen obdobou konfiguračního souboru a s ostatními tabulkami není v relaci. 6.1.2
Tabulka PIS_001_users
Tabulka pro evidenci uživatelů se nazývá PIS_001_users a obsahuje pole: 22
ID uživatele jako primární klíč (PIS_001_user_id),
přihlašovací jméno (PIS_001_name),
heslo (PIS_001_password),
jméno (PIS_001_first_name),
příjmenní (PIS_001_surname_name),
datum registrace (PIS_001_date_of_registration),
příznak označující, zda je uživatel blokován (PIS_001_blocked_flag),
příznak označující, zda je uživatel smazán (PIS_001_deleted_flag),
emailovou adresu (PIS_001_email),
telefonní číslo (PIS_001_phone_num). Primární klíč je tvořen jednoznačným číslem přidělovaným každému uživateli. Vzhledem k
tomu, že se primární klíč recykluje, udává maximální hodnota tohoto pole zároveň celkový počet provedených registrací v historii. Přihlašovací jméno, heslo a emailová adresa jsou povinné údaje vyplňované při registraci uživatele. Emailová adresa je vyžadována z důvodu možnosti kontaktovat uživatele. Osobní údaje jméno, příjmení a telefonní číslo jsou nepovinné údaje, které slouží jako kontaktní informace užitečné zejm. při zadávání inzerátů. Jako datum registrace se vkládá aktuální datum při registraci, do polí s příznaky označujících blokování nebo smazání uživatele se při registraci defaultně vkládá hodnota 'N', která je při smazání nebo zablokování uživatele přepsána na 'Y'. Zablokování uživatele může provádět pouze administrátor. V modelu pak vypadá tabulka následovně:
23
6.1.3
Tabulka PIS_002_subjects
Tabulka pro evidenci vyučovaných předmětů se nazývá PIS_002_subjects a obsahuje pouze tři pole:
primární klíč (PIS_002_subject_id),
zkratku předmětu (PIS_002_subject),
celý název předmětu (PIS_002_full_name). Primární klíč je tvořen jednoznačným číslem přidělovaným každému jednotlivému
předmětu. Zkratky a názvy předmětů může vkládat, upravovat a odstraňovat pouze administrátor. V modelu pak vypadá tabulka následovně:
6.1.4
Tabulka PIS_003_files
Tabulka se seznamem souborů nahrávaných na server se nazývá PIS_003_files a obsahuje pole:
24
ID souboru jako primární klíč (PIS_003_file_id),
ID vyučovaného předmětu jako cizí klíč (PIS_003_subject_id),
ID uživatele jako cizí klíč (PIS_003_user_id),
název souboru odpovídající názvu souboru, pod kterým je uložen na server
(PIS_003_file_name),
původní název souboru, pod kterým uživatel nahrává svůj soubor na server (PIS_003_file_name_original),
původní velikost souboru v kB (PIS_003_size),
poznámky (PIS_003_notes),
datum nahrání souboru (PIS_003_date_of_upload). Primární klíč je tvořen jednoznačným číslem přidělovaným každému jednotlivému souboru.
Cizí klíče slouží pro přímé propojení s tabulkami uživatelů a vyučovaných předmětů. Jako název souboru je vkládán název, pod kterým je soubor uložen na server, zatímco do pole původní název souboru je vložen název název souboru, pod kterým ho uživatel nahrává na server. Tyto dva názvy se od sebe liší, protože program nahraný soubor zkomprimuje a přejmenuje do standardizované podoby. Oba názvy by byly totožné jedině v případě, že by uživatel nahrával soubor již pod standardizovaným názvem, takže by se původní neupravená podoba názvu po přejmenování nezměnila. Uživatel má možnost do pole s poznámkami připsat svůj komentář. Do pole datum nahrání souboru se vloží aktuální datum v době nahrávání souboru. V modelu pak vypadá tabulka následovně:
6.1.5
Tabulka PIS_004_ads
Tabulka s inzeráty se nazývá PIS_004_ads a obsahuje pole: 25
ID inzerátu jako primární klíč (PIS_004_ad_id),
ID vyučovaného předmětu jako cizí klíč (PIS_004_subject_id),
ID uživatele jako cizí klíč (PIS_004_user_id),
název publikace (PIS_004_item_name),
cena publikace (PIS_004_item_price),
text inzerátu (PIS_004_ad_text),
příznak určující, zda se jedná o nabídku nebo poptávku (PIS_004_demand_supply_flag)
datum zadání inzerátu (PIS_004_date_of_ad). Primární klíč je obdobně jako u předchozích tabulek tvořen jednoznačným číslem
přidělovaným každému jednotlivému inzerátu. Cizí klíče slouží pro propojení s tabulkami uživatelů a vyučovaných předmětů. Název a cena publikace jsou povinně vyplňované údaje, bez jejich vyplnění není možné inzerát vložit. Text inzerátu není povinný. Dále je při zadávání třeba zvolit, zda se jedná o nabídku či poptávku, pomocí příznaku tím budou rozlišeny tyto dva druhy inzerátů, to znamená, že nabízející a poptávající inzeráty budou v jedné tabulce. Jako datum se vloží aktuální datum v době vkládání inzerátu. V modelu pak vypadá tabulka následovně:
6.1.6
Tabulka SYS_001_SETTINGS
Systémová konfigurační tabulka se nazývá SYS_001_SETTINGS a obsahuje 1 pole: •
26
doba platnosti inzerátů (SYS_001_ad_validity).
Tabulka slouží k ukládání hodnost systémových nastavení zadávaných administrátorem. S novými typy nastavení budou k tabulce přibývat nové sloupce. 6.1.7
Propojení tabulek
Tabulky – PIS_001_users (tabulka pro evidenci uživatelů), PIS_002_subjects (tabulka se seznamem vyučovaných předmětů), PIS_003_files (tabulka pro evidenci nahraných souborů) a PIS_004_ads (tabulka s inzeráty) – jsou vzájemně propojeny pomocí klíčů. Tabulka PIS_001_users má jako primární klíč ID uživatele, tabulka PIS_002_subjects má jako primární klíč ID vyučovaného předmětu, tabulka PIS_003_files má jako primární klíč ID nahraného souboru, tabulka PIS_004_ads má jako primární klíč ID inzerátu. Propojení pak vypadá následovně: Tabulka PIS_001_users je propojena s tabulkami PIS_003_files, PIS_004_ads a LOG_001_user_log přes user ID, které je do těchto tabulek vkládáno jako cizí klíč k tabulce PIS_001_users. Přitom pro tabulku PIS_003_files platí, že jeden uživatel může nahrát více souborů a jeden soubor může být nahrán právě jedním uživatelem; obdobné platí pro tabulku PIS_004_ads, tj. jeden uživatel může vložit více inzerátů a jeden inzerát může být vložen právě jedním uživatelem. Obdobně jako tabulka PIS_001_users, je i tabulka PIS_002_subjects propojena s tabulkami PIS_003_files a PIS_004_ads, a to pomocí subject ID, které je do těchto tabulek vkládáno jako cizí klíč k tabulce PIS_002_subjects. Z výše uvedeného vyplývá, že tabulky PIS_003_files a PIS_004_ads zároveň slouží jako vazební tabulky pro propojení tabulek PIS_001_users a PIS_002_subjects.
27
Zobrazme si vztahy mezi jednotlivými tabulkami graficky:
28
7 Ovládací rozhraní Aplikace má 2 typy rozhraní: rozhraní pro uživatele a rozhraní pro administrátora. Přístup k jednotlivým částem rozhraní se řídí úrovní práv přidělených nepřihlášenému uživateli, přihlášenému uživateli a uživateli přihlášenému jako administrátor. Vzhledem k tomu, že se jedná o internetovou aplikaci, je k její prezentaci použit jazyk HTML. Formátování stránek bude probráno v 8. kapitole. 7.1.1
Část rozhraní společná všem návštěvníkům stránek
Obsah výchozí stránky je určen nepřihlášeným uživatelům. Opticky je stránka rozdělena do tří částí tvořených vodorovnými pásy umístěných pod sebou a pro přehlednost oddělených klasickou vodorovnou linkou vytvořenou nepárovým tagem: 1) První část obsahuje navigaci umístěnou pod titulem celých stránek, jejíž obsah se mění kontextově podle toho, zda je uživatel nepřihlášen, přihlášen či přihlášen jako administrátor. Při prvním zavolání výchozí stránky se zobrazuje navigace určená pro nepřihlášené uživatele. 2) Druhá část obsahuje informaci o tom, zda je uživatel přihlášen, pokud ano, tak pod jakým uživatelským jménem. Při prvním zavolání výchozí stránky je uživatel nepřihlášen. 3) Konečně třetí část obsahuje „aktivní okno“ aplikace, tj. obsah vyvolaný zavoláním odkazu z navigace, jehož první řádek tvoří vždy název provedené volby. Při prvním zavolání výchozí stránky se zobrazí rychlá navigace, kterou tvoří odkazy, jejichž využití je předpokládáno jako nejčastější, a uvítací text objasňující význam těchto stránek a jejich souvislost se studiem na VOŠIS. Prvním z odkazů v navigaci je odkaz home, kterým je odkazováno na výchozí stránku. Následují odkazy pro sdílení materiálů, inzerci a pro přihlášení či registraci uživatele. Úvodní nenaformátovaná stránka tedy může vypadat takto: 29
Výsledný vzhled závisí mimo jiné na zvoleném prohlížeči a nastavení operačního systému. Neníli uživatel ještě přihlášen, vedou odkazy pro sdílení materiálů a inzerci k výzvě k přihlášení. Pokud se uživatel bude chtít přihlásit a začít využívat rozhraní pro přihlášené uživatele, bude se muset nejdříve zaregistrovat. K registraci stačí vyplnit formulář, který se zobrazí po přejití na odkaz „Registrace“. Formulář má následující podobu:
30
Pro přihlášení pak stačí vyplnit jméno, heslo a odeslat. Pro intuitivnější navigaci je vedle tlačítka „Login“ znovu odkaz na registraci, který povede ke stejnému cíli jako odkaz z hlavní navigace v horní části:
7.1.2
Rozhraní pro přihlášené uživatele
Po přihlášení jsou v části hlavní navigace nahrazeny volby „Přihlásit“ a „Registrace“ 31
nahrazeny volbami „Odhlásit“ a „Změnit registraci“. Po přejití na odkaz Studijní materiály download se v dolní části okna zobrazí seznam zkratek pro výběr předmětů, za zkratkami předmětů jsou v závorce uvedeny počty nahraných souborů, pokud nějaké nahrané jsou. Neníli žádný soubor vybrán, zobrazí se tabulka s výběrem nejnověji nahraných souborů. Po výběru předmětu se zobrazí tabulka se seznamem všech sdílených souborů pro vybraný předmět, které jsou na serveru k dispozici a odkazy pro jejich stažení. Oblast pro sdílení studijních materiálů by mohla vypadat podobně jako na obrázku:
32
Pro upload souborů jsou vytvořeny tři volby: Zaprvé uživatel z rozevírací nabídky vybere studijní předmět, zadruhé určí cestu k souboru, který má být nahrán a zatřetí může opatřit nahrávaný soubor stručným popisem. Nabídka vypadá takto:
Pro odkaz „Inzerce“ platí obdobné, co pro odkaz na studijní materiály. Uživatel hledající publikaci, kterou by mohl zakoupit, si v rozevírací nabídce vybere studijní předmět, zvolí nabídku či poptávku a zobrazí se mu tabulka s inzeráty, což může vypadat např. jako na následujícím obrázku:
33
Pro zadání inzerátu je potřeba vybrat jeden z nabízených studijních předmětů, určit, zda se jedná o nabídku či poptávku, vyplnit název položky, cenu a volitelně též text inzerátu. Rozhraní pro vložení inzerátu pak bude i s vyplněnými údaji vypadat takto:
7.1.3
Rozhraní pro administrátora
Nabídka v navigaci výrazně změní podobu, pokud se ke svému účtu přihlásí administrátor. Z nabídky zmizí upload souborů a vkládání inzerátů a objeví se nabídka správa uživatelů, správa souborů, správa inzerce a nastavení. V nabídce správa souborů může administrátor procházet soubory a jednotlivě je mazat. Podobně v nabídce je možné prohlížet a mazat jednotlivé inzeráty. V nabídce správa uživatelů je možné měnit registrační údaje uživatele, blokovat ho nebo vymazat. 34
V nabídce nastavení administrátor nastavuje platnost inzerátů, inzeráty jsou po uplynutí této doby mazány.
35
8 Rozhraní umožňující začlenění do stávajícího informačního systému školy 8.1 Relační model Jak bylo předesláno v 6. kapitole, dostáváme se zpátky k relačnímu modelu. Struktura tabulek byla navržena zcela nově. Stávající struktura tabulek obsahuje osobní údaje studentů, které navrhovaná aplikace pro své využití nepotřebuje. Z důvodu jejich zabezpečení tyto tabulky nejsou využity. Aplikace navíc může běžet odděleně na jiném serveru, než je umístěn školní web a využívat jinou databázi.
8.2 Design Pro začlenění do informačního systému školy byl přizpůsoben vzhled stránek zkombinováním horní části stránky tvořící hlavičku a přepracováním zbytku stránky pomocí kaskádových stylů.
36
9 Vývoj aplikace 9.1 Index Rámec celé aplikace tvoří soubor index.php, jeho obsah se mění předáváním hodnot proměnné $main metodou GET použitím metody getMainPage. Načítání tříd je zajištěno pomocí funkce __autoload. Aby se předešlo nekonzistentnímu zobrazování obsahu stránky závislého na přihlášení a odhlášení, je metoda řídící přihlášení a odhlášení volána ještě před načtením prezentovaného obsahu stránky. Mezi hlavičku a zápatí je pak umístěno volání metod generující hlášení o stavu přihlášení uživatele, navigaci a vlastní obsah stránky.
9.2 Třídy Všechny třídy jsou umístěny v podsložce classes. Jejich definice je podrobně popsána v objektové analýze.
9.3 Registrace Registrace je zajištěna formulářem, jehož hodnoty jsou předávány vloženy do cílové tabulky v databázi. Heslo je před odesláním do databáze zašifrováno jednostrannou šifrovací funkcí md5.
9.4 Přihlášení a odhlášení Přihlášení a odhlášení je řízeno metodami login a logout, které nastavují a odnastavují session s uživatelským číslem.
9.5 Studijní materiály Neníli zvolen studijní předmět, jehož soubory se mají zobrazit (situace nastává po zobrazení stránky s materiály, kdy uživatel ještě neodeslal svůj požadavek na zobrazení souborů), zobrazuje se několik nejnověji nahraných souborů, a to bez ohledu na to, k jakému studijnímu předmětu patří. Poté, co si uživatel zvolí studijní předmět, zobrazí se všechny soubory k němu nahrané. Toho je docíleno rozdílným předáváním parametru $subject_id v metodě getFilesTable. 37
Nabídka se seznamem studijních předmětů je umístěna v levé části programu. Obsahuje abecedně řazený seznam zkratek jednotlivých předmětů, přičemž v závorkách je pro lepší orientaci uveden počet nahraných souborů k jednotlivým předmětům. Pokud žádný soubor k danému předmětu není nahrán, nezobrazuje se žádný údaj o počtu souborů. Seznam předmětů je brán z tabulky PIS_002_subjects, která byla iniciálně naplněna insert skriptem vytvořeným na základě zkratek předmětů uvedených na oficiálních stránkách školy5.
9.6 Studijní materiály Upload souborů probíhá ve dvou úrovních: 1) nahrání souboru na server, 2) vložení záznamů o souboru do databáze. Aby byl upload možný, je potřebné nastavit právo zapisovat a číst cílovému adresáři, do kterého jsou data ukládána. Pokud je ovšem uživatelům přiděleno takto silné právo, je potřeba zajistit bezpečnostní opatření, jinak by jakýkoli uživatel mohl získat při uploadu php skriptů v podstatě neomezenou moc nad aplikací. Jako řešení jsem zvolil komprimaci nahraných souborů (tím se změní jejich formát) a jejich přejmenování do standardizované podoby. Koprimací se zároveň zajistí úspornější využití místa na disku a přejmenováním se předejde problémům s případnými nevhodnými názvy (příliš dlouhé, obsahující nevhodné znaky). Standardizovaný název souboru má tyto části: 1. předpona „FILE_“, 2. unikátní číslo odpovídající file_id, 3. koncovku zip informující o formátu souboru.
5 www.sks.cz
38
9.7 Odstranění souborů Pokud je uživatel přihlášen a nechá si zobrazit přehled souborů ke stažení, zobrazí se u každého souboru možnost odstranit tento soubor, pokud je uživatel jeho vlastníkem, resp. informace o tom, že daný soubor může odstranit jen vlastník, v případě, že se jedná o soubor nahraný jiným než přihlášeným uživatelem. Ke smazání dojde na dvou úrovních: 1. Mazání souborů ze serveru se provádí pomocí funkce unlink. 2. Údaje o souboru jsou vymazány z databáze z tabulky PIS_003_files. 9.8
Inzeráty Inzeráty je možné procházet podle vyučovaného předmětu, ke kterému jsou přiřazeny. Při
zadávání inzerátů jsou pro efektivní využití vyhledávání povinné vybrané údaje: název publikace, cena publikace a kontaktní údaje uživatele. Se zadáním inzerátu se automaticky vkládá datum jejich vložení do databáze. 9.9
Administrátorské rozhraní V prostředí pro administrátora bude možnost spravování inzerátů, nahraných souborů,
registrovaných uživatelů a seznamu vyučovaných předmětů. Pro správu inzerátů bude vytvořen nástroj, který bude umožňovat odstraňování inzerátů podle doby zadání, např. odstranit všechny inzeráty starší 6 měsíců, dále podle uživatele, který inzerát zadal a samozřejmě bude možné odstraňovat inzeráty i jednotlivě. Nahrané soubory bude možné odstraňovat jejich označením a hromadným smazáním či podle zadaných kritérií, jako např. podle uživatele, který soubory nahrál. 39
Registrované uživatele bude možné smazat (pak je možná nová registrace pod stejným jménem) nebo blokovat (tím uživatelské jméno zůstává obsazeno a nebude možné ho znovu použít). Konečně v případě změny vyučovaných předmětů – přibude nový předmět nebo naopak přestane být vyučován, popř. se pouze změní název předmětu – bude možné editovat jejich seznam přes administrátorské rozhraní.
40
10 Závěr Aplikace je nyní vyvinuta podle zadání a testována na testovacím serveru6. Naprostou většinu funkcionalit uvedených v analýze se podařilo implementovat, výjimku tvoří např. hromadné mazání souborů, které je zatím začleněno pouze do uživatelského rozhraní, bez toho, aby byla volána metoda provádějící tuto operaci. Po dokončení debaggingu bude možné vypnout varovná hlášení a pustit aplikaci do ostrého provozu.
6 http://vosis.php5.cz
41
11 Zdroje 11.1 Tištěné [LAVIN] LAVIN, Peter. PHP objektově orientované : koncepty, techniky a kód. Eva Grilová; Michal Pospíšek; Vojtěch Kočí. 1. vyd. Praha : Grada Publishing, a.s., 2009. 224 s. ISBN 97880 24721378. [KEOGH] KEOGH, J., GIANNINI, M. OOP bez předchozích znalostí. Brno : Computer Press, 2006. 222 s. ISBN 8025109739. [SCHMULLER] SCHMULLER, Joseph. Myslíme v jazyku UML : knihivna programátora. 1. vyd. Praha : Grada Publishing, 2001. 360 s. ISBN 8024700298. [STEPHENS] STEPHENS, Ryan K. Naučte se SQL za 21 dní : pochopte principy jazyka relačních databází. Brno : Computer Press, a.s., 2004. 581 s. ISBN 8072268708. [OPPEL] OPPEL, Andrew. Databáze bez předchozích znalostí : průvodce pro samouky. Přeložil David Krásenský. 1. vyd. Brno : Computer Press, 2006. 319 s. Obsahuje rejstřík. ISBN 80251 11997. [KOSEK] KOSEK, Jiří. Html tvorba dokonalých stránek : podrobný průvodce. Ilustroval Ondřej Tůma. 1. vyd. Praha : Grada, 1998. 291 s. ISBN 8071696080. [SCHLOSSNAGLE] SCHLOSSNAGLE, George . Pokročilé programování v PHP 5. Překlad J. Gregor, J. Kuklínek, V. Šimek a M. Vokoun. 1. vyd. Brno : Zoner Press, 2004. 640 s. ISBN 80 86815145.
11.2 Elektronické [B1] MySQL AB. MySQL 5.0 Reference Manual [online]. MySQL AB, 20091008 [cit. 200908 10]. Text v angličtině. Dostupný z WWW:
. [B2] PHP.net [online]. c20012009 [cit. 20090810]. Dostupný z WWW: . [B3] Shannon Brooks class.form.zip [online] 2009 [cit. 20091201] Zdrojový kód. Dostupný z http://www.dogdoo.net
42
12 Přílohy Součástí práce je přiložené CD obsahující kompletní zdrojový kód a strukturu pro vytvoření tabulek.
43