VYSOKÁ ŠKOLA POLYTECHNICKÁ JIHLAVA Katedra elektrotechniky a informatiky
Knihovní systém pro grafické školy Jihlava bakalářská práce
Autor: Jakub Rýpal Vedoucí práce: PaedDr. František Smrčka, Ph.D.
Jihlava 2012
Abstrakt Tato bakalářská práce popisuje webovou aplikaci knihovního systému navrženého pro Soukromou Střední Uměleckou Školu Grafickou a Vyšší Uměleckou Školu Grafickou v Jihlavě. Aplikace má za cíl maximálně zjednodušit a zpřehlednit výpůjčky knih a ostatních objektů ze školní knihovny. Aplikace využívá k registraci knih čtení čárových kódů a pro identifikaci uživatelů využívá systém školních magnetických karet. Studentům umožňuje systém rezervaci a sledování zapůjčených knih, případné upomínky se primárně řeší přes email. Správcům potom systém umožňuje přehled nad zapůjčenými knihami a uchovává statistiku pro pozdější inventuru. K tvorbě jsem využil jazyk PHP doplněné o CSS a MySQL.
Klíčová slova Knihovna, PHP, MySQL, Čárové kódy
Abstract This bachelor thesis describes web application of library system designed for Soukromou Střední Uměleckou Školu Grafickou and Vyšší Uměleckou Školu Grafickou in Jihlava. The application is intended to simplify and streamline the borrowing of books and other objects from the school library. The application uses for registration books readingbar codes and identify users using magnetic cards. Students andreservation system allows tracking of books borrowed, any reminders primarily deals via email. Then the system allows administrators to track of borrowed books and keepsstatistics for future inventory. For creation I used PHP language, accompanied by CSS and MySQL
Keywords Library, PHP, MySQL, readingbar codes
Poděkování Rád bych poděkoval vedoucímu mé práce PaedDr. Františku Smrčkovi Ph.D. za jeho trpělivost a rady. Stejně tak bych rád poděkoval Michalu Ryšavému za jeho podporu a shovívavost při řešení a vysvětlování trivialit a hloupostí.
Prohlašuji, že předložená bakalářská práce je původní a zpracoval/a jsem ji samostatně. Prohlašuji, že citace použitých pramenů je úplná, že jsem v práci neporušil/a autorská práva (ve smyslu zákona č. 121/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o změně některých zákonů, v platném znění, dále též „AZ“). Souhlasím s umístěním bakalářské práce v knihovně VŠPJ a s jejím užitím k výuce nebo k vlastní vnitřní potřebě VŠPJ . Byl/a jsem seznámen/a s tím, že na mou bakalářskou práci se plně vztahuje AZ, zejména § 60 (školní dílo). Beru na vědomí, že VŠPJ má právo na uzavření licenční smlouvy o užití mé bakalářské práce a prohlašuji, že s o u h l a s í m s případným užitím mé bakalářské práce (prodej, zapůjčení apod.). Jsem si vědom/a toho, že užít své bakalářské práce či poskytnout licenci k jejímu využití mohu jen se souhlasem VŠPJ, která má právo ode mne požadovat přiměřený příspěvek na úhradu nákladů, vynaložených vysokou školou na vytvoření díla (až do jejich skutečné výše), z výdělku dosaženého v souvislosti s užitím díla či poskytnutím licence. V Jihlavě dne
Podpis
Obsah 1
Úvod ................................................................................................................................... 8
2
Cíle práce.......................................................................................................................... 10
3
Použité technologie .......................................................................................................... 12
4
3.1
HTML ........................................................................................................................ 12
3.2
PHP ............................................................................................................................ 12
3.3
MySQL ...................................................................................................................... 13
3.4
CSS ............................................................................................................................ 13
3.5
LDAP ......................................................................................................................... 14
Analýza............................................................................................................................. 16 4.1
Existující řešení ......................................................................................................... 16
4.1.1
Obecní knihovna Štoky ...................................................................................... 16
4.1.2
Knihovna Hradec Králové .................................................................................. 17
4.1.3
Knihovna Jihlava ................................................................................................ 18
4.2
Moje řešení ................................................................................................................ 19
4.2.1
Pohled správce.................................................................................................... 19
4.2.2
Pohled studenta .................................................................................................. 20
4.3
Popis realizace ........................................................................................................... 21
4.3.1
Tabulka knihy ..................................................................................................... 21
4.3.2
Tabulka Půjčeno ................................................................................................. 22
4.3.3
Tabulka Rezervace ............................................................................................. 22
4.3.4
Tabulka Kontakt ................................................................................................. 23
4.3.5 5
Realizace .......................................................................................................................... 25 5.1
Obecná nastavení ....................................................................................................... 25
5.1.1
Konstanty v souboru names.php ........................................................................ 25
5.1.2
Zabezpečení stránek ........................................................................................... 26
5.1.3
Struktura webu v souboru web.php .................................................................... 28
5.1.4
Společné funkce v souboru funkce.php .............................................................. 29
5.2
6
Tabulka Data ...................................................................................................... 24
Vlastní kód v aplikaci ................................................................................................ 30
5.2.1
Vyhledávací funkce ............................................................................................ 30
5.2.2
Tvorba pdf souboru ............................................................................................ 31
Závěr................................................................................................................................. 34 6.1
Zhodnocení cílů ......................................................................................................... 34
6.2
Možnosti rozšíření ..................................................................................................... 34
Seznam použité literatury ......................................................................................................... 36 Seznam obrázků ....................................................................................................................... 37 Seznam použitých zkratek ........................................................................................................ 38 Slovník pojmů .......................................................................................................................... 38 Seznam příloh ........................................................................................................................... 40
1 Úvod Téma této bakalářské práce mi určila shoda náhod. Střední Soukromá Škola Grafická, pro kterou jsem aplikaci vyvinul, potřebovala jednoduchý knihovní systém, protože sama žádný funkční neměla. Ten původní aktuálně nefungoval, osobně ani nevím, že by někdy fungoval, ale pracoval jsem tam jen pár let. Zadání tedy bylo jednoduché: „Chceme systém do knihovny“. Doplňkovou informací pak byla jeho jednoduchost. Systém by měl být schopen spravovat jakýkoli člověk a hlavně bez nějakých složitých školení. Pro studenty by měl poskytovat rychlé a přehledné prostředí a upozornění emailem, na kterém jsme se s paní knihovnicí domluvili, je jen takový malý bonus. Zapomínáme přece všichni. Zadání jsem se rozhodl zpracovat pomocí PHP, MySQL, CSS a JavaScriptu. Na školním serveru běží i podpora ASP.Net a MSSQL, takže jsem se v počáteční fázi mohl rozhodnout. S ASP nemám mnoho zkušeností, nikdy jsem v něm nenapsal žádný složitější program, a proto jsem zvolil PHP, se kterým mám rozhodně větší zkušenosti a s jehož pomocí jsem už nějaké aplikace vytvořil a odladil. Jazyk PHP mi umožní využívat mnoha hotových funkcí, které jsou i velmi kvalitně popsané ať už na stránkách www.php.net nebo na mnoha různých www stránkách a fórech. Už samo zadání dává tušit několik funkcí, které budu jistě potřebovat, jak mi napovídají moje předchozí zkušenosti. Škola využívá server od společnosti Microsoft, studenty a zaměstnance s přístupem na síť má uložené v Active Directory. To mi usnadnilo správu vlastní databáze uživatelů, nebyla vůbec potřeba. Přihlášení tedy proběhne dotazem na školní server. Ten mi s odpovědí vrátí i status a zařazení uživatele díky čemu rozliším různá přístupová práva pro správce, učitele a studenty. Studenti získají pouze informace o knihách a budou mít možnost si je rezervovat. Učitelé si budou moci knihy půjčit na celý školní rok. No a správci dostanou možnost knihy půjčovat, přidávat a editovat. Vypůjčení knihy, respektive její vrácení proběhne přes formulář, kde obsluha načte čárový kód nebo isbn knihy a potom přidá uživatele buď přes jeho magnetickou kartu nebo jméno. Záznam o zapůjčení už je uložen ve vlastní databázi knihovny. Mimo zapůjčené knihy je nejdůležitější informací statistika vytížení knihovny se záznamy o všech knihách, jejich zápůjčkách a celkový přehled. Na přání obsluhy je tento možné exportovat do pdf a následně vytisknout. Studenti uvidí pouze seznam knih a své aktuálně vypůjčené knihy. Seznam je doplněn o možnost rezervace knihy a to ať 8
už vypůjčené nebo v knihovně dostupné. Rezervace pro studenty je možná pouze na dva dny, aby v systému zbytečně knihy neblokovali. Pro usnadnění komunikace aplikace studentům nabízí možnost zadat svůj email. Toto lehce vachrlaté řešení je nutné kvůli absenci školní pošty pro studenty. Na tento email jim potom chodí upozornění ze systému knihovny o dostupných rezervovaných knihách a překročení maximální povolené doby zapůjčení. Grafické zpracování aplikace je vyřešeno pomocí CSS stylů. Lehkou komplikací je nutnost optimalizace vzhledu i pro program Safari na Mac OS, protože jsou na škole využívány spolu s PC i stroje od firmy Apple. Aplikace má jednoduché a přehledné grafické prostředí, škola očekává, že by pokročilejší zpracování mohlo být tématem ročníkových prací pro její vlastní studenty. Z důvodů bezpečnosti a odladění bude knihovna dočasně přístupná pouze ze školní sítě a nebude povolen přístup přes internet. Toto omezení samozřejmě zmizí v blízké budoucnosti jen, co se systém osvědčí.
9
2 Cíle práce Cíl mé práce je celkem očividný už ze zvoleného zadání. Jak už jsem zmínil v úvodu, přáním klienta je jednoduchý systém. Mým hlavním úkolem je vytvořit stabilní aplikaci hlavně po softwarové stránce, v grafickém zpracování aplikace se nemohu měřit ani se samotnými studenty školy. Jak já si představuji aplikaci, bude rozdělena na dvě základní části, lépe by se asi dalo říct pohledy, pokud se na ni díváme ze strany uživatelů. Jsou jimi pohled studenta jako běžného uživatele a pohled správce jako osoby schopné měnit a upravovat data uložená v databázi jako i přímo odpovědného za hrubý chod vlastní knihovny. Prvním pohledem je tedy pohled administrátora, případně správce aplikace. Ten má jak velká práva, tak i velké povinnosti oproti studentům. První a nejdůležitější starost správce je samozřejmě starost o vlastní položky knihovny, knihy. Musí přidávat, odebírat a editovat jednotlivé položky v centrální databázi. Prostě a jednoduše udržovat knihovnu v aktuálním stavu. Další starostí správce je vydávání a zpětný výběr zapůjčených položek, jak od studentů školy, tak od učitelského sboru. Správce by měl mít přehled co, kdo a jak dlouho má zapůjčeno spolu s jednoduchou možností jak dotyčnou osobu kontaktovat a upozornit na případné zpoždění s vrácením publikace. K tomuto se hodí email, i když je velkou nevýhodou, že škola nemá vlastní interní emailové adresy, které by měli všichni uživatelé. Proto je třeba zavést externí databázi kontaktů, do které budou moci uživatelé zadávat své kontaktní emaily. Velikou nevýhodou toho systému je jeho dobrovolnost, nic na světě k tomu uživatele nemůže nutit, je stále ještě možné, i když nepravděpodobné, že některý z uživatelů email nemá. Poslední věcí, co správce vyžaduje, přesněji je vyžadováno vedením školy po správci, je souhrnná zpráva o stavu knihovny na konci školního roku. S tímto by mu aplikace mohla pomoci zaznamenáváním a následným exportem statistických dat o zápůjčkách knih spolu s přehledem přidaných a odebraných položek. Když bude toto všechno ještě doplněno o export přímo do pdf pro jednoduchý tisk uložených dat, který správce by mohl žádat víc? V první verzi bude jen jednoduchý číselný výpis přehledových dat. Přidání samotných přidaných a odebraných záznamů je prozatím zbytečné. Druhým pohledem na aplikaci ze strany uživatelů je pohled studentů. Studentům stačí základní oprávnění. Studenti musí mít možnost knihovnu procházet, zobrazovat a případně 10
si i rezervovat jednotlivé položky knihovny, pokud budou chtít mít jistotu, že bude například kniha druhý den dostupná k zapůjčení. Na druhou stranu by bylo špatné mít možnost rezervovat knihy na nějaký dlouhý časový úsek, to by mohlo vést k celkovému kolapsu knihovny, protože tato knihovna není nijak velká a nemá knihy ve velkém množství, většina jich je k dispozici maximálně v jednotkách kusů. Proto by se mohla při dlouhých rezervačních dobách dostat do stavu, kdy by sice knihy byly fyzicky přítomné v knihovně, ale nedaly by se půjčit, protože by čekaly, až si je někdo za měsíc vyzvedne. Pro plynulejší funkci knihovny by bylo záhodno, aby každý uživatel uvedl kontaktní email, na kterém je možné ho nebo ji zastihnout a komunikovat ohledně knihovny jako jsou upomínky nebo upozornění.
11
3 Použité technologie V této části popíšu požité technologie pro čtenáře, kteří o nich nikdy neslyšeli. Pokusím se shrnout přesné definice z oficiálních zdrojů tak, jak je chápu a vysvětlit je svými slovy svými slovy.
3.1 HTML HTML je zkratka pro HyperText Markup Language, česky zvaný značkovací jazyk pro hypertext jakkoli je to kostrbatý název. HTML využívá množinu značek, tagů, k rozlišení formátování a celkového stylu dokumentu. Na tyto tagy se právě váže grafická podoba dokumentu skrz kaskádové styly CSS. Tagy mohou být jak párové tak nepárové. Pokud se jedná o tag párový, ukončovací tag je opatřen lomítkem. Jako příklad uvedu párový tag
symbolizující odstavec, kde je úvodní tag, poté vnitřní text a závěrečný tag
Byla jednou jedna holka
. Mezi nepárové tagy patří například tag
zalamující řádek stejně jako klávesa Enter na klávesnici.
3.2 PHP PHP je zkratka pro anglické spojení Hypertext Preprocesor, čili česky Hypertextový preprocesor. To však není nijak důležité. Důležité je, že se jedná o skriptovací programovací jazyk určený primárně pro programování webových stránek. Jedná se jazyk nezávislý na platformě, může být tedy přenášen mezi jednotlivými operačními systémy bez vážnějších zásahů, ty by se pak vztahovaly jen na některé funkce přímo vázané na operační systém. Programovací jazyk PHP zpracovává kód a celou operaci zpracování webu a informací na straně serveru a k uživali přenáší pouze výsledek bez zbytečných podrobností a kódů. V tom je jeho výhoda oproti například JavaScriptu, který všechny úkony prování na straně uživatele v jeho internetovém prohlížeči. Od verze 4.1.0 byly do PHP implementovány superglobální
proměnné $_GET,
$_POST,
$_SERVER
a $_SESSION používané
pro předávání informací mezi prohlížečem a serverem při komunikaci. Hlavně $_SESSION využívám ve své aplikaci hodně jako jednoduchou paměť programu. Zajímavostí u PHP je jedna vlastnost jeho proměnných. Proměnné jsou v PHP dynamicky otypované, proto odpadá
12
nutnost většiny ostatních jazyků proměnou nejdříve deklarovat a určit její typ, případně i velikost. V PHP se s proměnnou prostě začne pracovat. PHP je jedním, né-li nejrozšířenějším a nejpoužívanějším skriptovacím jazykem pro tvorbu webových stránek. Mezi hlavní výhody PHP patří široká paleta funkcí pro všemožné i nemožné případy z praxe spolu s kvalitně zpracovanými knihovnami. Jako příklad bych uvedl funkce pro práci se soubory, zpracování textů i grafiky nebo přístup k velkému množství databázových systémů.
3.3 MySQL MySQL je databázový systém založený na multiplatformní databázi. Pro komunikaci a práci využívá jazyka SQL doplněného o dodatečné rozšiřující funkce. Často se mluví o takzvaném dialektu SQL. MySQL je dostupná ve dvou variantách a to buď jako placená nebo pod GPL licencí, ve zkratce dostane uživatel licenci k tvorbě dalšího svobodného softwaru nebo aplikace. MySQL je hodně jednoduchá a od začátku byla plánována jako rychlá za cenu omezení rozšiřujících funkcí jako jsou triggery nebo pohledy. Na druhou stranu ve spojení s php a myadmin kdy databázi využívám jen k ukládání informací se jedná o jazyk a systém více než dostatečný.
3.4 CSS CSS, jinak nazývané též kaskádové styly, z anglického originálu Cascading Style Sheets. CSS je programovací jazyk určený pro grafickou úpravu webových stránek. Kaskádové styly se neustále vyvíjí a přecházejí od verze jedna do nejnovější verze tři s různými obměnami a hlavně doplněnými funkcemi a vlastnostmi. Smysl css je v oddělení obsahu a obalu webové stránky. Při tvorbě stylu programátor jednoduše nadefinuje jednotlivé styly pro jednotlivé parametry či atributy aplikace a ty poté jen zasadí do webu. Nevýhodou, lépe řečeno Achillovou patou tohoto systému je guláš ve standardizaci a jejím dodržování jednotlivými prohlížeči na trhu. To jak jednotlivé prohlížeče standardy dodržují si může každý uživatel sám ověřit na http://www.acidtests.org/ kde si uživatel může vybrat ze tří testů a ověřit si spolehlivost svého prohlížeče. 13
Toto způsobuje programátorům webových aplikací nemalé problémy při tvorbě grafiky. U novějších prohlížečů už všech většinou vyjde jak má, ale dříve bylo běžné používat speciální css soubory pro různé prohlížeče. Druhou možností u jednodušších grafických návrhů bylo využívání css hacků, kdy se různé prohlížeče chovali různě k nestandardním znakům jako je například podtržítko. Potom mohly být v jednom css souboru za sebou tagy například body a _body každý s jinou hodnotou a uživatel nic nepoznal. Kaskádový styl využitý v mé aplikaci vychází z části z veřejné šablony dostupné na http://www.nuviotemplates.com/. Jako základ jsem použil šablonu Axis-02, kterou jsem ovšem upravil a přeformátoval, aby odpovídala mým potřebám.
Obrázek 1 Náhled šablony css
3.5 LDAP U komunikace pře LDAP se často zaměňují pojmy adresář a adresářová služba. Proto je nutné zde tyto termíny definovat.
14
„Adresář (directory) je databáze (hierarchická struktura), v které jsou uloženy informace o pojmenovaných objektech na síti, které jsou organizovány a sdružovány do skupin. Příkladem je počítač, tiskárna, služba, doména či uživatelský účet. Adresář se liší od relační databáze, je navržen pro časté čtení a vyhledávání a pouze občasný záznam. V adresáři můžeme uchovávat data různých typů, jako text, digitální certifikát či obrázek. Můžeme omezovat přístup k záznamům pomocí ACL (Access Control List). Adresářová služba (directory service - DS) je aplikace či skupina aplikací, které ukládají a organizují informace o uživatelích a zdrojích v počítačové síti. Adresářová služba přistupuje k adresáři, občas označovanému jako adresářové repository (directory repository). Adresářová služba také funguje jako centrální autorizační autorita, která umožňuje (bezpečnou) autentizaci zdrojů (uživatelů, služeb, počítačů).“ [1] Tolik k základním informacím. LDAP samotný je potom protokol určený k přístupu k datům uloženým na serveru ve stromové struktuře. Umožňuje vyhledávání adresářů i informacích o uživatelích. V aplikacích se využívá k práci standartní model klient-server. Já zde využívám základní prvky LDAP pro přihlášení. První z nich je LDAP bind. Tím se aktivuje dotaz do aktive directory pro autentizaci uživatele, pak se opět od AD odpojuji. Pro bezpečnější připojení je možné použít i SASL bind, který je možno šifrovat přes SSL.
15
4 Analýza 4.1 Existující řešení V této části textu bych se podíval na některá existující řešení jiných knihovních systémů a jejich grafické zpracování. Zmíním jen několik drobností, co mě zaujali. Do větších detailů zabíhat nebudu, nevidím v tom smysl.
4.1.1 Obecní knihovna Štoky Stránky Štocké obecní knihovny: http://www.knihovnastoky.wz.cz
Obrázek 2 Náhled knihovna Štoky
Zde se jedná o jednoduché stránky s několika základními informacemi o chodu knihovny. Dále se zde dá najít fotogalerie z několika kulturních událostí. Tyto stránky si na nic nehrají a poskytují jen povrchní informace o provozu knihovny a žádný přehled knih. Jednoduchost u těchto stránek však nevadí, stránky jsou určeny relativně malému množství lidí, kteří si stejně většinou do knihovny rovnou dojdou. Stránky slouží jen jako potvrzení všeobecně známých informací. 16
4.1.2 Knihovna Hradec Králové www stránky Hradecké knihovny:
Obrázek 3 Náhled knihovna HK
Toto je příklad stránek s vysokou informační hodnotou, čtenáři i ostatní zájemci se zde dozví o různých aspektech činnosti knihovny doplněné o informace o službách, cenách i knihách v knihovně. Grafická stránka je jednoduchá až strohá, ten kdo vytvářel grafický návrh, se snažil o jednoduchý a přehledný design.
17
4.1.3 Knihovna Jihlava www stránky Jihlavské knihovny: http://www.knihovna-ji.cz/
Obrázek 4 Náhled knihovna Jihlava
Povedené stránky s množstvím informací pro potencionální čtenáře doplněné i velmi kvalitním grafickým provedením.
18
4.2 Moje řešení Na začátku práce jsem se sešel se školní knihovnicí, panem ředitelem a školním IT specialistou. Každý z nich mi poskytnul svůj vlastní názor na řešení, knihovnice přidala své požadavky jako jednoduchý přístup nebo výpis statistik. S technikem jsem potom prodiskutoval technologické možnosti a omezení školní sítě. Po těchto schůzkách jsem vytvořil první nástin aplikace.
Obrázek 5 První diagram
Základní stavební kámen každé knihovny je její databáze knih. V této to není jinak. Protože školní knihovna obsahuje jak knihy tak i dvd a ostatní podpůrné materiály, bylo by záhodno tyto odlišovat, aby bylo možné přesnější vyhledávání kdy si student bude moci vybrat, co přesně ho zajímá a co chce najít. V obecném textu se však budu pro přehlednost o všech objektech knihovny vyjadřovat jako o knihách. Upřesnění využiji jen kde to bude přímo nutné. Pro řešení předpokládám potřebu dvou základních tabulek, tabulky knihy a tabulky pujceno. Tyto tabulky by vyjadřovaly vztah mezi základními prvky knihovny a to mezi knihami a studenty. Tabulku se studenty tvořit nemusím, uživatelská jména mohu vytáhnout přímo z Active Directory na školním serveru. To mi zjednoduší práci a zpřehlední aplikaci. Nebudu muset řešit aktualizace související s postupem studentů do vyšších ročníků, nástup nových a odchod absolventů.
4.2.1 Pohled správce Hlavním správcem systému musí být logicky knihovnice. Protože je však na škole jen jedna, administrátorská práva jsem přidělil i školním správcům. Ti pak mohou při nepřítomnosti knihovnice zaskočit a knihy přijímat i vydávat.
19
Správce potřebuje mít co největší přehled o dění a statistiky o knihovně. Proto mu musí být po přihlášení nabídnuta široká škála přehledových tabulek. Při popisu bych začal s prvním krokem, tedy přidáním knihy. Zde bude správce zadávat jednotlivé parametry knih jako jméno, autora, isbn a přiřadí jí čárový kód. V budoucnu by mohlo být zajímavým vylepšením přidáním odkazu na Jihlavskou městskou knihovnu, pokud v ní danou knihu mají. Druhou tabulkou musí být přehled knih v databázi, bylo by vhodné, aby se dal řadit a zobrazovat v podskupinách podle jednotlivých parametrů pro snadnější orientaci uživatele. Samozřejmostí by mělo být i vyhledávání, buď základní nebo rozšířené. Do třetice se jistě musí objevit přehled vypůjčených knih a u nich kdy a kdo si je půjčil. Paní knihovnice mě požádala, aby v tomto přehledu viděla přesnou dobu zapůjčení a aby ji systém upozornil, pokud tuto dobu někdo překročí. Pro upozorňování bych rád zavedl možnost, kdy bude moci přihlášený uživatel do školní databáze přidat svůj mail, na který by bylo možné ho kontaktovat. Škola bohužel nemá jednotný systém emailových adres.
4.2.2 Pohled studenta Studentský pohled bude jistě omezenější. Je zbytečné aplikaci doplňovat o nějaké kudrlinky. Základní premisou je, že systém má být co nejjednodušší. Takže student po přihlášení, kde bude požádán o email, viz výše, bude mít přístup k vyhledávání, jednoduchému i podle přesněji zadaných parametrů jako je název knihy, jméno autora, rok vydání atd. Dále bude mít přístup k přehledu vlastních zápůjček doplněných o dobu, po jakou je má zapůjčeny. Výsledky vyhledávání by bylo záhodno doplnit o možnost knihu si rezervovat, s paní knihovnicí jsme se dohodli, že dva pracovní dny jsou adekvátní dobou, aby v systému nevyselo x rezervovaných a přesto nezapůjčených knih.
20
4.3 Popis realizace Základní struktura knihovny stojí na třech pilířích, kterými jsou uživatelé, knihy a vztah mezi nimi. Všechny ostatní tabulky jsou pouhým rozšířením a zpřehledněním výsledné aplikace a na vlastní funkčnost nemají zásadní vliv, doplňují pouze rozšiřující funkce.
Obrázek 6 Podrobný diagram
4.3.1 Tabulka knihy Tabulka knihy by měla obsahovat položky, které by specifikovali danou knihu. Proto bude obsahovat položky nazev, autor, rok, zanr, isbn. Pro zpracovávání čárových kódů ještě doplním položku kod, která bude obsahovat číselnou reprezentací čárového kódu knihy. Pro účely SQL bude nutno dodat ještě položku idk sloužící jako primární klíč tabulky. Pro tuto volbu jsem se rozhodl čistě z praktických pohnutek. Přijde mi to nejjednodušší pro mou následnou práci. Položku idk bude doplňovat aplikace z tabulky data, kterou budu používat jako interní paměť aplikace. Tím bude zajištěn vždy unikátní klíč a zamezí se lidské chybě, která by mohla nastat, pokud bych jako primární klíč využil isbn knihy nebo příslušný čárový kód. Aktuální přehled o počtu jednotlivých knih v knihovně budu řešit pomocí parametrů tabulky knihy celkem a pujceno. Celkem bude obsahovat celkový počet knih v knihovně 21
a pujceno počet zapůjčených. Díky tomu budu mít přehled, zda lze knihu zapůjčit nebo není aktuálně dostupná. Student bude mít možnost, knihu si zarezervovat pokud si zadá kontaktní email a aplikace bude mít tak možnost ho kontaktovat. Bez kontaktního emailu by bylo spojení se studentem složité a bylo by třeba lidského zásahu. Pokud byl email zadán a student si knihu rezervoval, jakmile bude k dispozici, bude mu zaslán email a knihu si nebude moci nikdo jiný zapůjčit. Rezervace však bude trvat opět jen dva dny.
4.3.2 Tabulka Půjčeno V tabulce pujceno se budu zabývat vztahy mezi knihami a studenty. Při záznamu je třeba ukládat jméno knihy a studenta. Pro přesnější zpracování a vyhledávání jsem doplnil ještě ISBN kód knihy, který můžu využít při dalším zpracování výsledků. Tabulka pujceno je po tabulce knihy nejdůležitější tabulkou knihovny a je v podstatě třetí nohou trojnožky základní konstrukce spolu s databází uživatelů, kterou ovšem já nemám vlastní, ale jen exportuji z LDAP databáze školy. LDAP mi dává zajímavé možnosti ve strukturalizaci a dělení uživatelů. Myslím, že je logické předpokládat, a z mých zkušeností to vyplívá, že učitelé si potřebné publikace půjčují na delší časová období. A zvláště na střední škole, jsou oproti studentům zodpovědnější v nakládání a starosti o svěřený majetek. Proto by měla být aplikace schopna rozlišit mezi učitelem a studentem a popřípadě ponechat učiteli možnost si knihu či jinou položku knihovny zapůjčit na daleko delší dobu než studentovi. Takže tabulka pujceno musí obsahovat základní atributy kod, kterým je unikátní číslo relace, uživatel, tedy jméno konkrétního uživatele podle interní školní databáze, jenž si knihu zapůjčil, nazev a isbn, parametry přesně a jedinečně určující danou knihu, no a na konec datum, položku nutnou pro přehled v délce zapůjčení jednotlivými uživateli. Ještě dodám, že položka kod je generována softwarově a je pro všechny relace unikátní. Toto by se dalo využít v pozdějších rozšířeních pro archivaci. Ta zatím není nutná, i když se jeví jako logická volba s ní do budoucna počítat.
4.3.3 Tabulka Rezervace Zajímavostí mého řešení oproti ostatním výše zmiňovaným řešením je možnost studenta si knihu rezervovat. Zde vycházím z předpokladu, že člověk by neměl být závislý pouze na své schopnosti někam dojít. V tomto případě berme přímo knihovnu. Když si uvědomíme, 22
že škola má několik budov a studenti mohou být rozděleni do skupin, je možné, že snaživý žák, který by si knihu chtěl půjčit, se k ní nedostane jen díky tomu, že se například zdrží na hodině nebo jeho spoj, autobus nebo vlak přijede pozdě. Pokud se student připravuje pravidelně na školu, má možnost si knihu zarezervovat a nemusí riskovat možnost, kdy flegmatičtější studenti si knihy ráno rozeberou ráno, až zjistí, co že to vlastně budou ve škole dnes potřebovat. Druhým příkladem je pak možnost, kdy student pracuje na referátu a náhle objeví nutnou potřebu informací z nějaké knihy z knihovny. Pokud by si ji nerezervoval a někdo si ji mezi tím vypůjčil, student by mohl čekat dlouhou dobu na další příležitost, kdy bude kniha v knihovně k dispozici. V horším případě by mohl i zmeškat termín odevzdání referátu. Proto je v knihovně tato možnost zahrnuta. Tabulka rezervace pro svou správnou funkci musí obsahovat čtyři základní atributy. Těmi jsou idr, jmeno, nazev a datum. Idr jako id rezervace je nutné jako primární klíč celé tabulky, tak jako unikátní klíč pro případné vyhledávání v historii záznamů, pokud bych tuto funkci v budoucnu přidal. Jmeno a nazev jsou parametry, které udávají, který uživatel si přál danou knihu zarezervovat. Pro přesná data se bude do atributu jmeno vkládat přímo login uživatele, pod kterým je do systému přihlášen, a do atributu nazev přesný název knihy opět z databáze. Tímto zamezím kanadským vtipálkům vkládat do rezervací posměšné a rádoby vtipné rezervace. Atribut datum je pak jen dodatek, z něhož bude aplikace schopná určit délku rezervace a případně ji automaticky vyřadit z registru, pokud překročí maximální povolenou dobu.
4.3.4 Tabulka Kontakt Už několikrát jsem se zmiňoval možnost, lépe doporučenou možnost, pro studenty zadat kontaktní email, přes který by s nimi aplikace komunikovala. Z toho důvodu zavedu další tabulku s názvem kontakt. Ta bude obsahovat tři parametry. Ids, unikátní id studenta v systému a zároveň bude sloužit jako primární klíč tabulky. Obdobně jako idk zmíněné výše v textu jako id knihy bude i toto generováno aplikací automaticky. Druhým parametrem bude vlastní jméno studenta uložené v atributu login. To se vloží jako přihlašovací jméno, takže žádná uživatelská jména typu „Pepa z depa“, ale oficiální login ze školní databáze. Jedinou položkou, kterou uživatel schopen ovlivnit bude je třetí parametr, mail. Ten bude kontrolován, 23
aby uživatel nezadával nějaké bludy. E-mail má přesně danou strukturu, tedy
[email protected]. Ta musí být zachována, pokud má email vůbec fungovat. Tabulka kontakt bude vymazána spolu se statistikou knihovny vždy na konci školního roku. To zamezí hromadění nepotřebných emailových adres v databázi. Jinak by se tam hromadily adresy absolventů spolu s nefunkčními adresami, které uživatel z jakéhokoli důvodu opustil. Každý uživatel bude mít samozřejmě možnost svou adresu aktualizovat, toto řešení ale zajistí pravidelné vyčištění. Nutnost zadat email jednou ročně nikomu zvlášť neublíží, a pokud škola začne využívat systém školních emailů, bude možno od této praxe upustit, do té doby se mi to zdá jako nejlepší řešení.
4.3.5 Tabulka Data Pro hladký běh aplikace bude jistě nutná i paměť programu. Bude nutné si pamatovat id knih i uživatelů pro zamezení duplicitě stejně jako dat uchovávaných pro statistiku knihovny požadovanou paní knihovnicí. Ukládání těchto dat do zvláštní tabulky mi přijde jako nejlepší řešení ať už z pohledu přehlednosti nebo i praktičnosti při zpracování. Tabulka bude tedy obsahovat atributy idu, idk, idv, cv, cp, co a idr. Všechny tyto atributy budou zvyšovány automaticky přímo v aplikaci a některé z nich v ní budou i mazány jako součást zpracování každoročních statistik. Atribut idu se stará o přidávání unikátních id uživatelům v tabulce kontakt. Každý uživatel v této tabulce bude mít unikátní uživatelské jméno, to je ošetřeno na straně školního serveru a tak by id už tabulka obsahovat nemusela, já ho však přidávám pro jistotu a jako primární klíč. Druhý atribut tabulky se jmenuje idk. Ten má obdobnou funkci jako idu, jen se stará o knihy v databázi. Idv a idr potom obstarávají unikátní identifikátory pro přehled zápůjček z knihovny a také pro přehled rezervací. Zavedl jsem je hlavně jako přípravu na přidání zpětného vyhledávání a historie těchto aktivit. V současném řešení mají význam obdobný parametrům idu nebo idk. Co se týká atributů cv, cp a co, ty mají na starosti statistiku knihovny. Přesně se jedná o celkový počet vypůjčených knih, celkový počet přidaných a odebraných knih. Započítávají se do nich samozřejmě i ostatní položky v databázi knihovny. Všechny výše uvedené parametry mimo idk jsou z tabulky vymazány při ručním spuštění tvorby statistiky knihovny, kterou bude správce knihovny spouštět na konci každého školního roku. Pro jistotu jsou před tím přeneseny do dalšího řádku tabulky, díky tomu se dají tato data 24
dohledat i zpětně. Neobsahují však žádný časový kód, proto by jejich nepravidelné vyvolávání mohlo vést ke zmateným výsledkům statistiky.
5 Realizace V této části textu se chci zaměřit na některé zajímavé funkce a základní stavební kameny, které v aplikaci využívám. Vždy zde uvedu část kódu spolu s vysvětlením o co a jak se stará. Popřípadě takovou ukázku ještě doplním o vysvětlení, proč jsem se rozhodl zrovna k takovému řešení dané situace na úkor jiných, teoreticky i prakticky možných řešení konkrétního problému.
5.1 Obecná nastavení V aplikaci jsem se snažil minimalizovat počet konstant a zobecnit hlavní nastavení tak, aby bylo možné je umístit do vlastních souborů. Tak budou lehce dostupné a zároveň přehledně připravené pro možné budoucí úpravy. Sám si uvědomuji nedokonalosti této aplikace a její pozdější rozšiřování a doplňování o další funkce je podle mě více než jisté. Z toho důvodu jsem se snažil udělat pozdější rozšíření co možná nejsnazší pomocí zobecňování funkcí a závislosti mnoha činností na několika základních konstantách a polích.
5.1.1 Konstanty v souboru names.php Toto je základní soubor se všemi konstantami. Aby byly tyto dostupné na všech stránkách, kde s nimi je třeba pracovat, vkládám tento soubor přes funkci require. Tento soubor obsahuje zaprvé základní konstanty nutné pro připojení do MySQL databáze i školního LDAP serveru. Pokud by došlo k migraci, přesunu či jiné úpravě síťové cesty, stačí vše změnit na jednom místě. V následujícím příkladu uvádím parametry tak, jak jsou nastaveny na mém testovacím serveru. $server="localhost"; $databaze="knihovna"; //parametry ldap $ldap_dn="susg-ji.local"; $ldap_server="ldaps://192.168.0.1";
25
Druhou velmi důležitou součástí souboru names.php jsou pole s popisy tabulek. Všechny výpisy tabulek z databáze, které využívám v aplikaci řeším přes cyklus závislý právě na délce polí uváděných v tomto souboru. Můžu tak velmi jednoduše dodatečně upravovat tabulky v databázi beze strachu rozházení x různých výpisů. Ke každé tabulce jsou přiřazena dvě pole, nazvy a popis. Pro tabulku knihy je to například $nazvy_knihy a $popis_knihy. V těchto polích jsou uloženy korespondující názvy jednotlivých polí z databáze a jejich diakriticky správný český popis. Viz přiložený kód. //Popis tabulek databaze $nazvy_knihy=array('kod','isbn','nazev','autor','zanr','rok','pocet','celkem'); $popis_knihy=array('Kód','ISBN','Název','Autor','Žánr','Rok','Počet','Celkem'); $nazvy_kontakt=array('uzivatel','mail','id'); $popis_kontakt=array('Uživatel','E-Mail','ID'); $nazvy_vypujceno=array('kod','uzivatel','nazev','isbn','datum'); $popis_vypujceno=array('Kód','Uživatel','Název','ISBN','Datum'); $nazvy_pujcit=array('karta','kod_knihy','jmeno','isbn'); $popis_pujcit=array('Karta','Kód knihy','Jméno','ISBN');
5.1.2 Zabezpečení stránek Základem ověřování totožnosti v mojí aplikaci je ověření uživatele proti aktivní session. To je řešeno vložením stránky zab.php pomocí funkce require do každé stránky. Při načtení každé stránky je tak ověřeno že uživatel se úspěšně zalogoval do systému. Pokud tomu tak není, je automaticky přesměrován na chybové hlášení. if(!checkLogin()) { Header('Location: index.php?message=Musíte se přihlásit'); } Ověřování samotného uživatele proti databázi v Active Directory probíhá ve dvou krocích. V prvním kroku se vezme zadané uživatelské jméno, upraví se do specifického tvaru pro AD, dále se aplikace připojí k databázi a provede ověření, výsledkem je pak stav true nebo false podle toho, zda uživatelské jméno a heslo odpovídá databázi. V následujícím kódu uvádím příklad řešení. Tento příklad je hodně zkrácený a neobsahuje všechna ošetření a podmínky, pouze zobrazuje základní princip.
26
function authUserAD($login, $password) { require('config/names.php'); $user_dn = $login."@".$ldap_dn; $connect = ldap_connect($ldap_server); if($connect) { ldap_set_option($connect, LDAP_OPT_PROTOCOL_VERSION, 3); ldap_set_option($connect, LDAP_OPT_REFERRALS, 0); //vse ok if(ldap_bind($connect, $user_dn, $password)) { //vše prošlo //Uložím jméno a heslo return (true); } ldap_close($connect); //jmeno a heslo nejsou správné return(false); Druhá část při komunikaci s AD se zabývá členstvím ve skupině. Active Directory umožňuje dělit uživatele do skupin a těm přidávat určitá práva. Mě tato možnost zajímá. Uživatelé ve školní databázi jsou rozděleni do několika klíčových skupin jako jsou zaměstnanci, správci, studenti atd. Proto, když ověřím, že je daný uživatel členem skupiny správci, mohu mu automaticky přidělit administrátorská oprávnění. Zároveň se tak správci mohou ve škole vesele měnit a knihovna všem vždy přidělí patřičná práva bez jediného zásahu do vlastního kódu knihovny. Ověření, kam uživatel patří se provádí přes funkci clenSkupiny(). „function clenSkupiny($connect, $user_dn, $group_dn) { $atributy = array('members'); $result = ldap_read($connect, $user_dn, "(memberof={$group_dn})", $atributy); if($result == false) { return false; } $entries = ldap_get_entries($ad, $result); return ($entries['count'] > 0); }“ [2]
27
5.1.3 Struktura webu v souboru web.php Soubor web.php obsahuje funkce pro výpis základních bloků každé www stránky jako je hlavička, struktura těla, patka stránky nebo uživatelské menu a submenu. Jednotlivé bloky jsem vložil do samostatných funkcí. Díky nim můžu obecné prvky webu složit velmi rychle. Na příkladu uvedu úvodní stránku. Pokud se uživatel už zalogoval, uvidí stránku uvod.php, pokud ne, zobrazí se mu formulář pro zadání jména a hesla. require("web.php"); Hlavicka(0); if($loged_in) { Header('Location: uvod.php'); } else { Login(); } Konec(); Zajímavostí u funkce Hlavicka() je její parametr. Pokud není v hodnotě 0, hlavička nezobrazí pouze základní menu, ale i submenu. function Submenu($typ) { switch($typ){ case 1: //submenu s prvky Přidat a Odebrat break; case 2: //submenu s prvky Půjčit a Vrátit break; }; //výpis samotného menu složeného z proměnných nastavených v jednotlivých case }
28
Obrázek 7 Náhled menu
Obrázek 8 Náhled submenu
5.1.4 Společné funkce v souboru funkce.php Soubor funkce.php obsahuje univerzální funkce volané při mnoha příležitostech z různých stránek a jejich vlastních funkcí. Nachází se zde funkce, které vrací či zapisují určité hodnoty, vypisují řádky či celé tabulky nebo i upravují jednotlivé hodnoty. Uvedu zde jeden příklad za všechny. V aplikaci několikrát volám formulář. A jedná se o formulář pro přidávání knih, emailů, upravování záznamů ale i vyhledávací. V souboru funkce.php je tento kód: function formular($hodnoty,$p,$popis,$nazvy) { echo "
"; } Tento formulář zobrazí různé počty řádků spolu s jejich příslušnými popisy, pojmenuje textboxy, aby bylo možno s nimi pracovat a je schopen do nich i předvyplnit data, pokud uživatel zadal některou položku špatně.
5.2 Vlastní kód v aplikaci V této části bych zdůraznil jen pár zajímavých funkcí specializovaných na konkrétní činnost na rozdíl od funkcí v předchozí kapitole, které byly naopak velmi obecné. Zvolil jsem kratší funkce, protože nemá smysl zde popisovat padesáti řádkovou funkci na přidání knihy. Tyto specializované funkce stejně vypadají v obecném principu velmi podobně.
5.2.1 Vyhledávací funkce Uvedu například část vyhledávací funkce. Ta má za úkol zobrazit výsledky z panelu rychlého hledání, který je nahoře na stránce. Funkce sama využívá několik obecných funkcí pro zkvalitnění výsledku. Tady je základní funkce. Do proměnné $pole si uloží upravená data, která vrátí funkce Uprav(). Upravená tak, že se z nich vyhází přebytečné znaky, mezery, ošetří se, zda neobsahují nějaký kód a jednotlivá slova se roztrhají do prvků pole. Pokud z těchto prvků vytvořím MySQL dotaz funkcí Dotaz() a spočítám počet řádků výsledku pomocí funkce PocetRadku(), zjistím, zda vůbec nějaký výsledek mám. Pokud ano, nechám si vypsat hlavičku tabulky funkcí VypisHlavicku() a podle počtu řádků výsledku nechám funkcí VypisRadek() dovypsat zbytek tabulky. Díky tomu mi vznikne tabulka s výsledky odpovídajícími fulltextovému vyhledávání. $pole=Uprav($nazvy_knihy); $dotaz=Dotaz($pole,$nazvy_knihy); 30
$rows=PocetRadku($dotaz); if($rows==0) { echo "Tomuto neodpovídá žádná kniha"; } else { $sql=mysql_query($dotaz); //pripravim si tabulku VypisHlavicku($nazvy_knihy,$popis_knihy,$troj,1,count($popis_knihy)-1); echo ""; for($i=0;$i<$rows;$i++) { VypisRadek($sql,$nazvy_knihy,$popis_knihy,$i,1,count($popis_knihy)-1); } echo ""; }
Obrázek 9 Náhled vyhledávání
5.2.2 Tvorba pdf souboru Velmi zajímavou funkcí je tvorba pdf souboru přímo z jazyka PHP. K tomu, abych mohl tohoto dosáhnout jsem využil volně dostupnou knihovnu FPDF. Ta se dá stáhnout zdarma ze stránek www.fpdf.org. Soubor obsahuje jak samotnou knihovnu, tak i velmi pěkně popsané příklady požití spojené do tutoriálu, který pokrývá škálu od základního výpisu až po pokročilé funkce jako je formátování, různé barvy a tvorbu vlastních fontů. To je jediná nevýhoda této knihovny, musel jsem si sám připravit český font, aby se mi korektně zobrazovala diakritika ve vytvořeném pdf souboru. Jak vytvořit vlastní font je popsáno v dokumentaci knihovny, a to přehledně a jasně. Stačí do formuláře na adrese http://fpdf.fruit-lab.de/ vložit nějaký český font, já použil přímo Arial z Windows. Stránka mi vrátila čtyři soubory, které je nutné 31
nakopírovat do složky font ve složce fpdf a pak už se dá vesele tvořit vlastní pdf soubor s českou diakritikou. K tomu se využije následující kód. define('FPDF_FONTPATH','./font/'); header('Content-Type','text/html; charset=windows-1250'); require('./fpdf.php'); $pdf=new FPDF(); $pdf->Open(); $pdf->AddPage(); $pdf->AddFont('muj_font', '', '0cc8680787_times.php'); $pdf->SetFont('muj_font','',16); $pdf->Cell(40,10, "Text s diakritikou: ěščřžýáíéĚŠČŘŽÝÁÍÉŮůÚ"); $pdf->Output(); Toto je vzorový kód, můj se trochu liší. Ale opravdu jen trochu. Všechny použitelné funkce jsou opět popsány přímo v tutoriálu, který se stáhne spolu s knihovnou. Jen doplním, že Ln je odřádkování a SetX je posun v ose X. Pro výpis textů jsem netvořil žádnou funkci vzhledem k tomu, že dat je jen pár a předpokládám, že v blízké budoucnosti se výpis bude měnit. define('FPDF_FONTPATH','/fpdf/font/'); require('fpdf/fpdf.php'); require("zab.php"); require("config/db.php"); require('funkce.php'); $pdf=new FPDF(); $pdf->Open(); $pdf->AddPage(); $pdf->AddFont('muj_arial', '', 'muj_arial.php'); $pdf->SetFont('muj_arial','',20); $pdf->Cell(35); $pdf->Cell(30,30, "Přehled knihovny za školní rok ".(date('Y')-1)."/".date('Y')); $pdf->Ln(5); $pdf->SetFont('muj_arial','',10); $pdf->Cell(50,90, "Vytvořeno ".date('d.m.Y')); $pdf->Ln(20); $pdf->SetX(30); $pdf->Cell(50,90, "V knihovně je aktuálně ".PocetRadku("SELECT * FROM knihy")." knih a ostatních položek"); $pdf->Ln(5); $pdf->SetX(30); 32
$pdf->Cell(50,90, "Za školní rok bylo půjčeno ".vratData("Select cv from data","0")." knih a ostatních položek"); $pdf->Ln(5); $pdf->SetX(30); $pdf->Cell(50,90, "Za školní rok bylo přidáno ".vratData("Select cp from data","0")." knih a ostatních položek"); $pdf->Ln(5); $pdf->SetX(30); $pdf->Cell(50,90, "Za školní rok bylo vyřazeno ".vratData("Select co from data","0")." knih a ostatních položek"); //konec stranky $pdf->AddPage(); $pdf->Output(); //záloha dat ze statistiky ZalohujData($popis_data); //vymaže záznami za školní rok VymazData($popis_data);
Obrázek 10 Náhled pdf souboru
33
6 Závěr 6.1 Zhodnocení cílů Cílem této bakalářské práce bylo navržení jednoduchého a uživatelky přívětivého www prostředí školní knihovny. Zadavatel žádal co nejjednodušší obsluhu jak ze strany správy tak i studentstva doplněnou o statistiky vytíženosti. Těchto cílů se mi podařilo dosáhnout k zadavatelově spokojenosti. Proto aplikace obsahuje systém pro kontrolu a zadávání čárových kódů jednotlivým položkám knihovny a je propojen se školním serverem, tudíž není potřeba kontrolovat a aktualizovat databázi studentů a učitelů, případně zaměstnanců. Pokud se tedy uživatel přihlašuje z počítače či macu ve škole, dojde k ověření uživatelského jména a hesla proti školnímu Active Directory. Po autorizaci se ze systému aplikace dozví i do jaké skupiny, tedy učitel, student, uživatel spadá a podle toho mu přidělí práva a zobrazí povolený obsah. Když se uživatel dostaví osobně do knihovny si položku, knihu nebo dvd, zapůjčit, ověření identity se provede proti SafeQ serveru magnetickou kartou vlastněnou každým uživatelem a kniha je identifikována čtečkou čárových kódů proti interní databázi knihovny. Pokud by uživatel zapomněl kartu doma, je možné zadat i jméno a příjmení. Systém hlídá dobu vypůjčení, a pokud překročí stanovenou hranici, knihu označí a obsluze nabídne možnost uživatele kontaktovat přes email. Poslední částí aplikace je statistická složka. Aplikace zaznamenává celkový stav knihovny, počet nových, vyřazených a zapůjčených knih, který na přání uživatele tiskne v jednotné formě pro účely výroční zprávy. Podrobný seznam knih a dalších položek může být také vytištěn pro potřeby inventury. Při realizaci se jako nejproblematičtější a nejobtížnější projevila komunikace aplikace s Windows Serverem a Active Directory, které zastupuje uživatele a potom SafeQ server a id magnetických karet na něm uložené.
6.2 Možnosti rozšíření Budoucí možnosti rozšíření zmiňovaného systému jsou zajímavé. A jako webová aplikace je knihovna snadno přenositelná a upravitelná. Při tvorbě jsme se nažil co nejvíce prvků a funkcí napsat obecně tak, aby se daly využívat i z případných dalších rozšíření. Proto jsou 34
všechny obecné funkce v souboru funkce.php. Zároveň jsem vložil všechny konstanty a popisová pole do jednoho souboru, přesněji řečeno jedná se o soubor names.php. Jeho jednoduchou úpravou se dá aplikace od základů změnit. Mezi prvními a jistě i nejpravděpodobnějšími je přístup přes webové rozhraní z vnější mimoškolní sítě, ten je naplánován, až a jestli se aplikace v ostrém provozu osvědčí a studenti i učitelé si na ni zvyknou. Je zbytečné tvořit nějaké rozhraní se složitým zabezpečením, pokud knihovnu nikdo nebude využívat. Dalším by pak jistě bylo zavedení školních mailů a jejich plné začlenění do projektu, teď jsou maily jen dobrovolné a nedá se na ně spoléhat. Posledním co mě z možných rozšíření aplikace napadá je překopání grafického designu. Co si budeme povídat, můj jednoduchý styl se nemůže rovnat s kreativním myšlením budoucích grafiků a návrhářů. Posledním rozšířením co mě v průběhu tvorby aplikace napadlo, je přidání čekací fronty. Ve frontě by mohli být evidováni uživatelé, kteří mají zájem o aktuálně zapůjčenou knihu a byli by na základě svého pořadí postupně upozorňováni na dostupnost knihy v knihovně.
35
Seznam použité literatury NARAMORE, Elizabeth, Vytváříme webové aplikace v PHP5, MySQL a Apache. Vydání první. Brno : Computer Press, a.s., 2006. 813 s. ISBN 80-251-1073-7. STANÍČEK, Petr. CSS Kaskádové styly : Kompletní průvodce. Vydání druhé. Brno: Computer Press, 2003. 178 s. ISBN 80-7226-872-4. kisk.phil.muni.cz/ [online] 2008, [cit 2012-05-30] Čárové kódy. Dostupné z www http://kisk.phil.muni.cz/wiki/%C4%8C%C3%A1rov%C3%A9_k%C3%B3dy samuraj-cz.com [online] 2007 [cit 2012-05-30] Série článků o Active Directory. Dostupné z www http://www.samuraj-cz.com/serie/ldap-a-active-directory/ manualy.net [online] 2005.12.06 [cit 2012-05-30] Zabezpečení php stránky. Dostupné z www http://www.manualy.net/article.php?articleID=6 PHP : Hypertext Preprocessor [online]. c2001-2012 [cit. 2012-05-30]. Dostupné z www http://www.php.net/. Interval.cz [online]. c1999-2012 [cit. 2012-05-30]. Dostupné z www http://interval.cz
linuxsoft.cz [online] 2004-2009 [cit 2012-05-30] Série článků o php. Dostupné z www http://www.linuxsoft.cz/php/ zaachi.com [online] 2008 [cit 2012-05-30] Jak na české znaky v FPDF. Dostupné z www http://www.zaachi.com/cs/print/fpdf-jak-na-ceske-znaky.html samuraj-cz.com [online] 2007 [cit 2012-05-30] Autentizace proti AD z php Dostupné z www http://www.samuraj-cz.com/clanek/autentizace-uzivatele-vuci-ad-v-php/ [1] samuraj-cz.com [online] 2007 [cit 2012-05-30] Adresářové služby a LDAP. Dostupné z www http://www.samuraj-cz.com/clanek/adresarove-sluzby-a-ldap/ [2] stackoverflow.com/questions [online] 2011 [cit 2012-05-30] Adresářové služby a LDAP. Dostupné z www http://stackoverflow.com/questions/5327104/php-ldap-get-user-details-ofmember-which-is-a-member-of-a-group
36
Seznam obrázků Obrázek 1 Náhled šablony css ................................................................................................. 14 Obrázek 2 Náhled knihovna Štoky........................................................................................... 16 Obrázek 3 Náhled knihovna HK .............................................................................................. 17 Obrázek 4 Náhled knihovna Jihlava......................................................................................... 18 Obrázek 5 První diagram .......................................................................................................... 19 Obrázek 6 Podrobný diagram ................................................................................................... 21 Obrázek 7 Náhled menu ........................................................................................................... 29 Obrázek 8 Náhled submenu ..................................................................................................... 29 Obrázek 9 Náhled vyhledávání ................................................................................................ 31 Obrázek 10 Náhled pdf souboru............................................................................................... 33
37
Seznam použitých zkratek PHP - Personal Home Page HTML - HyperText Markup Language AD – Active directory MySQL - databázový systém CSS - Cascading Style Sheets (Kaskádové styly) WWW - World Wide Web LDAP – Lightweight Directory Access Protocol
38
Slovník pojmů HTML tagy – značky díky nimž se tvoří HTML kód E-R diagram – model užívaný pro konceptuální znázornění dat Primární klíč – jednoznačný identifikátor tabulky SQL dotaz – dotaz vytvořený pomocí jazyka SQL
39
Seznam příloh A. Datasheet pro FPDF B. CD s aplikací
40