Sem vloûte zadání Vaöí práce.
eské vysoké u ení technické v Praze Fakulta informa ních technologií Katedra softwarového inûen˝rství
Bakalá ská práce
Systém pro da ovou evidenci krátkodob˝ch akcí skautsk˝ch organizací Frantiöek Hána
Vedoucí práce: Mgr. Petr Matyáö 16. kv tna 2012
Pod kování Cht l bych na tomto míst pod kovat p edevöím mému vedoucímu bakalá ské práce Mgr. Petru Matyáöovi za p ipomínky a za metodické vedení práce. Rodi m za podporu b hem studia a Ing. Ond eji Pe inovi za rady p i psaní knihovny na komunikaci se systémem SkautIS.
Prohláöení Prohlaöuji, ûe jsem p edloûenou práci vypracoval samostatn a ûe jsem uvedl veökeré pouûité informa ní zdroje v souladu s Metodick˝m pokynem o etické p íprav vysokoökolsk˝ch záv re n˝ch prací. Beru na v domí, ûe se na moji práci vztahují práva a povinnosti vypl˝vající ze zákona . 121/2000 Sb., autorského zákona, ve zn ní pozd jöích p edpis , zejména skute nost, ûe eské vysoké u ení technické v Praze má právo na uzav ení licen ní smlouvy o uûití této práce jako ökolního díla podle § 60 odst. 1 autorského zákona.
V Praze dne 16. kv tna 2012
..................... 7
eské vysoké u ení technické v Praze Fakulta informa ních technologií c 2012 Frantiöek Hána. Vöechna práva vyhrazena. • Tato práce vznikla jako ökolní dílo na eském vysokém u ení technickém v Praze, Fakult informa ních technologií. Práce je chrán na právními p edpisy a mezinárodními úmluvami o právu autorském a právech souvisejících s právem autorsk˝m. K jejímu uûití, s v˝jimkou bezúplatn˝ch zákonn˝ch licencí, je nezbytn˝ souhlas autora.
Odkaz na tuto práci Frantiöek Hána. Systém pro da ovou evidenci krátkodob˝ch akcí skautsk˝ch organizací: Bakalá ská práce. Praha: VUT v Praze, Fakulta informa ních technologií, 2012.
Abstract The thesis consists of search of available tools for accounting of Scout actions, analysis of it and development of new application for accounting. The developed aplication was finally tested by set of tests. The next part of thesis describes creatinon of library for communication with system SkautIS. Keywords SkautIS, tax records, Scout, Nette Framework
Abstrakt Bakalá ská práce obsahuje reöeröi dostupn˝ch nástroj pro vyú tování krátkodob˝ch akcí, následn anal˝zu a v˝voj nové aplikace a její testování. Dále je sou ástí práce i v˝voj knihovny pro komunikaci se systémem SkautIS. Klí ová slova SkautIS, da ová evidence, Junák, Nette Framework
9
Obsah Úvod
19
1 Anal˝za a návrh 1.1 Srovnání jin˝ch systém . . . . . . 1.2 Specifikace poûadavk . . . . . . . 1.3 Uûivatelské role . . . . . . . . . . . 1.4 Entita pro správu akce . . . . . . . 1.5 P ípady uûití . . . . . . . . . . . . 1.6 V˝b r technologií . . . . . . . . . . 1.7 Datov˝ model . . . . . . . . . . . . 1.8 Navigace . . . . . . . . . . . . . . . 1.9 Komunikace se systémem SkautIS
. . . . . . . . .
. . . . . . . . .
2 Realizace 2.1 Pouûité nástroje . . . . . . . . . . . . 2.2 Knihovna pro komunikaci se systémem 2.3 Architektura a struktura aplikace . . . 2.4 Kontrola oprávn ní . . . . . . . . . . . 3 Testování 3.1 Jednotkové testování . . . . 3.2 Integra ní testy . . . . . . . 3.3 Systémové testy . . . . . . . 3.4 Akcepta ní testy . . . . . . 3.5 Testování nap í prohlíûe i .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
21 21 23 24 24 25 26 29 30 31
. . . . . SkautIS . . . . . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
35 35 35 38 43
. . . . .
47 48 48 48 48 48
. . . . . . . . .
. . . . .
. . . . . . . . .
. . . . .
. . . . . . . . .
. . . . .
. . . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
Záv r
51
Literatura
53
A Seznam pouûit˝ch zkratek
55
B Obsah p iloûeného CD
57
11
Seznam obrázk 1.1 1.2 1.3 1.4 1.5
éivotní cyklus akce P ípady uûití . . . Doménov˝ model . Naviga ní model . SkautIS . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
25 26 30 31 33
2.1
Struktura adresá
a základních soubor . . . . . . . . . . . . . . .
39
13
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
Ukázky zdrojov˝ch kód 1.1 1.2 1.3 1.4 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8
Pouûití Dibi s p ístupem p es objekt . . . . . . . . . . . Pouûití Dibi se statick˝m p ístupem . . . . . . . . . . . Vypsání seznamu poloûek bez pouûití Latte . . . . . . . Vypsání seznamu poloûek pomocí Latte . . . . . . . . . Nastavení parametr knihovny SkautIS – p es argument Nastavení parametr knihovny SkautIS – p es setter . . Nastavení parametr knihovny SkautIS – p es konstantu Volání webové sluûby s nestandardním obalem . . . . . Návratová hodnota webové sluûby . . . . . . . . . . . . Zpracování návratové hodnoty od webové sluûby . . . . Routa pro p ihlaöovací presenter . . . . . . . . . . . . . Ukázka z konfigura ního souboru config.neon . . . . . .
15
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
28 28 29 29 36 36 36 37 37 38 40 45
Seznam tabulek 3.1 3.2
Zobrazení v prohlíûe ích na OS Windows 7 . . . . . . . . . . . . . Zobrazení v prohlíûe ích na OS X Lion . . . . . . . . . . . . . . . .
17
49 49
Úvod Téma pro svoji bakalá skou práci jsem si vybral ze skautského prost edí, protoûe sám jsem lenem organizace Junák - svaz skaut a skautek R a sou asná eöení vyú tování akcí jsou nejednotná a asto velmi zdlouhavá. Da ová evidence (neboli vyú tování) krátkodob˝ch akcí byla doposud v naöem st edisku – základní jednotce – provád na zápisem informací do n kolika soubor XLS s vysokou redundancí. P i ru ním zpracování docházelo ast ji k p eklep m i omyl m, kaûd˝ vedoucí akce vyhotovil vyú tování s odliönostmi a odevzdal v papírové podob , a to velmi znesnad ovalo archivaci a dalöí zpracování. Krátkodobé akce jsou v trvání od dvou do öesti dn a jejich vyú tování se provádí, aby byla zajiöt na správa finan ních prost edk poskytnut˝ch na akci. Na krátkodobé akce lze ûádat dotace od Ministerstva ökolství, mládeûe a t lov˝chovy, kde podmínkou dotace je její následné vyú tování se seznamem ú astník . Obsahov i formáln bezchybné zpracování da ové evidence je proto nezbytné pro úsp öné organizování skautsk˝ch akcí. Uûivatelsky dob e zvladateln˝ program umoûní vypo ádání se s finan ním zpracováním akcí i osobám mén ökolen˝m v práci s po íta ovou technikou a uöet í as p i maximální kvalit zpracování. Celá práce je rozd lena do t í kapitol. První kapitola je zam ena na anal˝zu situace v dob , kdy tato práce za ala vznikat a na návrh nové aplikace. V druhé kapitole je rozebrána realizace aplikace a vznik nové knihovny pro komunikaci se systémem SkautIS. T etí kapitola je zam ena na testování kódu a na otestování zobrazení v r zn˝ch prohlíûe ích.
19
Kapitola
Anal˝za a návrh 1.1
Srovnání jin˝ch systém
Nenaöel jsem ûádn˝ skautsk˝ online systém, kter˝ by byl pouûíván více skautsk˝mi st edisky. V töina st edisek bu ûádn˝ online systém nepouûívá nebo mají systém, kter˝ si sami naprogramovali.
1.1.1
Systém st ediska Hiawatha Praha
Systém je zakomponovan˝ do webov˝ch stránek st ediska, která jsou na adrese https://www.hiawatha.cz/. P ihláöen˝m uûivatel m umoû uje zakládat, upravovat a mazat akce. U kaûdé akce lze p idat p edb ûn˝ rozpo et. Po realizaci akce lze p idat i erpané ástky z jednotliv˝ch kategorií a vyplnit seznam ú astník . Vedoucí akce m ûe uzav ít hospoda ení akce, a tím umoûnit dalöí úpravy pouze hospodá i st ediska. V˝hody systému jsou: • moûnost sestavit rozpo et i v˝sledovku akce, • moûnost p idat k akci reportáû a fotoalbum, • moûnost p edání akce hospodá i, • moûnost p idat seznam ú astník , • po ítá ú astníky v jednotliv˝ch kategoriích. Nev˝hody systému jsou: • minimální moûnost nastavení uûivatelsk˝ch práv, • není propojen se systémem SkautIS, • ástky v jednotliv˝ch ú etních kategoriích se musí spo ítat mimo systém, 21
1
1. Anal˝za a návrh • není moûné evidovat paragony, • není moûné zadat osobu mimo nabízen˝ seznam.
1.1.2
Systém st ediska Blaník
St edisko Blaník vyuûívá vlastní systém naprogramovan˝ v PHP skládající se ze t í základních ástí. První ást LTOI (http://lab.blanik.info/ltoi/) – Letní tábor a obnova inventá e – slouûí pro vyú tování tábor . Zadávají se zde odd len informace o tábo e, p íjmy, v˝daje, ú astníci a cestovní p íkazy. Veökeré informace je moûné nechat vyexportovat do formátu RTF nebo CSV. Druhá ást nazvaná INV (http://lab.blanik.info/inv/) slouûí k inventarizaci majetku jednotliv˝ch oddíl . Pokud je v ásti LTOI nastaven v˝daj s p íznakem „inv“, lze jej jednoduöe importovat do této ásti. Je zde také p ehled, zda na majetek byla erpána dotace, jeho po izovací a aktuální hodnotu a informaci o jeho vy azení. T etí a zárove nejnov jöí (leden 2012) ástí sytému je ROP (Ro ní oddílová pokladna). Zde se ú tují pokladny jednotliv˝ch oddíl za cel˝ rok. V˝hody systému jsou: • moûnost nastavit po et dn ú asti u jednotliv˝ch ú astník tábora (LTOI), • automatická kontrola vnit ních vztah mezi ú astníky a p íjmy (LTOI), • propojení ásti LTOI s ástí INV , • dobr˝ p ehled o majetku oddílu (INV), • moûnost exportovat do dále upravitelné podoby (CSV, RTF), • moûnost vyplnit cestovní p íkaz (LTOI), • moûnost p edat vyú tování akce hospodá i (LTOI). Nev˝hody systému jsou: • uûivatelské rozhraní rozd lené do n kolika systém , • není propojen se systémem SkautIS, • veökeré parametry jsou napevno zadané v kódu – v etn ceny benzínu apod., • moûnost upravovat i údaje, které jsou stálé – I O st ediska, • nulová podpora napovídání jmen ú astník , • uûivatelsky nep ív tivé p idávání ádk , 22
1.2. Specifikace poûadavk • nutnost zadávat vöe textov místo pouûití standardních HTML zna ek (radio button pro ozna ení ádku ke smazání, apod.), • nejednotnost ovládání v jednotliv˝ch ástech.
1.1.3
V˝sledek srovnání
Systém st ediska Hiawata Praha nabízí dobré nástroje pro p ípravu akce, ale postrádá n kolik d leûit˝ch sluûeb, pro následné vyú tování. Systém st ediska Blaník naopak nabízí více nástroj na vyú tování akce a následnou evidenci majetku, ale jeho uûivatelské rozhraní je rozd leno mezi n kolik menöích systém , do kter˝ch je vûdy pot eba se znovu p ihlásit. Ani jeden ze systém není propojen se systémem SkautIS, kde by získával aktuální informace o lenech a ani neumoû uje pouûití systému více st edisky najednou. Proto jsem se rozhodl vytvo it systémem, kter˝ bude p ipojen na SkautIS, bude k dispozici více st edisk m najednou a nabídne základní nástroje na vyú tování akce.
1.2 1.2.1
Specifikace poûadavk Funk ní poûadavky
Aplikace umí • zaloûit novou akci, • uzav ít akci,
• evidovat akce minulé,
• p ijmout údaje z paragonu a ty pak spravovat,
• rozd lit paragony do kategorií a spo ítat jejich sumu, • ud lat seznam ú astník ,
• ud lat hromadn˝ p íjmov˝ doklad, • kontrolovat p ístupová práva,
• spravovat ú astníky na akcích.
1.2.2
Nefunk ní poûadavky
Aplikace • je napsána v jazyce PHP,
• komunikuje se systémem SkautIS p es webové sluûby, 23
1. Anal˝za a návrh • má eské uûivatelské rozhraní,
• funguje na PHP ve verzi alespo 5.2.0 a Mysql 5.
1.3
Uûivatelské role
Uûivatelské role vycházejí z uûivatelsk˝ch rolí v systému SkautIS. U kaûdé jednotky lze p i adit uûivatel m role: • Aktivní •
inovník,
len,
• Hospodá (pouze u st edisek a nad ízen˝ch jednotek), • Vedoucí/Administrátor.
Uûivatelé s rolí Vedoucí/administrátor nebo Hospodá mohou akce zakládat, m nit jejich základní údaje, spravovat jejich ú astníky, spravovat paragony, p ípadn akci i zruöit. Stejná práva v i dané akci má i uûivatel, kter˝ je zadan˝ jako Vedoucí akce. Uûivatel v roli len nebo Aktivní inovník dané jednotky, m ûe akce prohlíûet, ale nemá právo ji upravovat.
1.4
Entita pro správu akce
Kaûdá akce má parametry • ID_Event,
• po adatel (povinn˝), • název (povinn˝),
• za átek (povinn˝), • konec (povinn˝),
• typ (v˝prava, seminá , ...),
• rozsah (oddílová, st edisková, ... ), • místo konání,
• vedoucí akce (povinn˝),
• zástupce vedoucího akce, • hospodá akce, 24
1.5. P ípady uûití kde po adatel, název, za átek, konec, typ a rozsah jsou povinné pro zaloûení akce a p ed uzav ením akce musí b˝t vypln n i vedoucí akce. ID_Event je identifikátor p id len˝ systémem SkautIS p i zaloûení akce.
1.4.1
éivotní cyklus akce
Obrázek 1.1: éivotní cyklus akce éivotní cyklus akce vychází z moûností entity eventGeneral ze systému SkautIS. Ta m ûe nab˝vat t chto stav : • rozpracována, • uzav ena, • zruöena. Akce je ve stavu „rozpracována“ hned po jejím vytvo ení, a to dokud akci neuzav eme nebo nezruöíme. U „uzav ené“ akce je evidováno, kdy a kdo ji uzav el, a v p ípad pot eby ji lze p epnout do stavu „rozpracována“ a dále upravovat. Zm na stavu akce na „zruöená“ je nevratn˝ krok a poté uû akce bude p ístupná pouze pro tení nebo úplné vymazání ze systému.
1.5
P ípady uûití
Vedoucí m ûe zaloûit akci, u které musí vyplnit povinné údaje (viz 1.4), a pokud chce, tak m ûe i volitelné. M ûe pozd ji zm nit údaje zadané p i vytvá ení akce, pokud je akce rozpracována. Lze do seznamu ú astník p idávat osoby z vybrané jednotky, vytvo it nového ú astníka i odebírat ú astníky. U ú astník dále lze nastavit po et dní stráven˝ch na akci a v˝öi ú astnického poplatku. 25
1. Anal˝za a návrh
Obrázek 1.2: Use case diagramy
V pokladní knize lze evidovat vöechny p íjmy a v˝daje související s akcí, rozt íd né do jednotliv˝ch kategorií. Jednotlivé poloûky lze upravovat, mazat nebo exportovat. V p ípad , ûe je vyú tování hotové, lze akci uzav ít a tím zamezit moûnost dalöích úprav bez zm ny stavu akce.
1.6 1.6.1
V˝b r technologií PHP
Na poli PHP framework je v sou asné dob hned n kolik velk˝ch hrá . Mezi nejznám jöí pat í Symfony, Zend Framework a Nette Framework. Symfony obsahuje velmi siln˝ databázov˝ framework Doctrine, ale nemá eskou komunitu. Zend Framework vyvíjí firma Zend Technologies Ltd., která stojí za jádrem PHP od verze 4. Mezi hlavní v˝hody Zend Frameworku pat í velké mnoûství jiû napsan˝ch komponent, silné zázemí komunity a Zend Technologies Ltd. Naopak mu je asto vyt˝kána öpatná práce s formulá i a p íliö dlouhé názvy, které sniûují p ehlednost kódu. 26
1.6. V˝b r technologií Nette Framework, vyvíjen˝ skupinou Nette Foundation, se v posledních letech prosazuje na eské scén ím dál tím více. Jeho hlavními p ednostmi jsou jednoduchá práce s formulá i, öablonovací systém Latte a po etná komunita. asto vöak b˝vá kritizován za to, ûe jeho v˝voj je ízen jeho zakladatelem Davidem Grudlem a nikoli komunitou. Pro aplikaci byl vybrán Nette Framework pro jeho dobré zpracování práce s formulá i a pro jeho p ístup k bezpe nosti aplikace. D leûit˝m faktorem v˝b ru byl i sm r dalöího v˝voje frameworku, aby aplikace nep iöla a moûnost dalöího rozöí ení, kv li ukon ení v˝voje frameworku. Z moûn˝ch verzí byla vybrána verze pro PHP 5.2 bez prefix . Nette Framework Pro tvorbu aplikací v Nette Framework se pouûívá softwarová architektura Model-View-Controller (MVC). MVC slouûí k odd lení kódu zajiö ujícího aplika ní logiku (model) od kódu zajiö ujícího obsluhu (controller) a od zp sobu v˝sledného zobrazení (view). „Model je datov˝ a zejména funk ní základ celé aplikace. Je v n m obsaûena aplika ní logika. Jakákoliv akce uûivatele (p ihláöení, vloûení zboûí do koöíku, zm na hodnoty v databázi) p edstavuje akci modelu. Model si spravuje sv j vnit ní stav a ven nabízí pevn dané rozhraní. Voláním funkcí tohoto rozhraní m ûeme zjiö ovat i m nit jeho stav.“(5) V Nette byl pojem controller nahrazen pojmem „presenter“. Presentery obsluhují poûadavky, získávají data od modelu a p edávají je v pot ebné podob do daného view, které zajistí jejich zobrazení. View jsou zde eöeny öablonovacím systémem Latte (8), kter˝ zajiötuje ochranu proti XSS(9), moûnost pouûít makra a mnoho dalöího.
1.6.2
Databáze
Aplikace bude vybudována s pouûitím MySQL, protoûe je dostupná na v töin webov˝ch hosting a pro rozsah projektu posta uje. Pro p ístup k databázi bylo moûné volit mezi vyuûitím základních MySQL funkcí zabudovan˝ch v PHP a pouûitím n které PHP knihovny pro práci s databází. P i pouûití základních funkcí PHP je velmi t ûké udrûet v kódu p ehlednost a práce s p ipojením je velmi nekomfortní, proto byla vybrána moûnost s pouûitím knihovny. Doctrine 2 je jedna z nejznám jöích knihoven pro práci s databází vyuûívajících ORM, avöak na n která volání pot ebuje p íliö mnoho SQL dotaz . NotORM, od Jakuba Vrány, se prezentuje jako plnohodnotná alternativa k b ûn˝m ORM a prezentuje se svojí rychlostí oproti ostatním(10). Nette Framework p ímo nabízí vlastní vrstvu Nette Database(7) ur enou pro práci s databází, která vychází z NotORM, ale má trochu odliönou syntaxi. David Grudl krom Nette Frameworku vytvo il také databázovou vrstvu dibi http://dibiphp.com/. Mezi její hlavní p ednosti pat í dobré bezpe 27
1. Anal˝za a návrh nostní zabezpe ení a více moûnost, aby si programátor zvolil, jak˝m zp sobem ji zapracuje do projektu. Pro p ístup do databáze p es Dibi jsou dv základní moûnosti. Bu p es objekt DibiConnection, kterému jsou v konstruktoru p edány parametry spojení a následn nad objektem volány jednotlivé dotazy. Nebo p es statick˝ objekt dibi, kter˝ je po prvním nastavení dostupn˝ kdekoliv a sta í nad ním volat dotazy bez dalöích parametr . Ukázka kódu 1.1: Pouûití Dibi s p ístupem p es objekt $params = a r r a y ( ’ driver ’ => ’ host ’ => ’ username ’ => ’ password ’ => ’ database ’ => );
’ mysql ’ , ’ localhost ’ , ’ uzivatelske_jmeno ’ , ’ heslo ’ , ’ nazev_databaze ’ ,
$db = new D i b i C o n n e c t i o n ( $params ) ; $db≠>query ( ’SQL dotaz ’ ) ; Ukázka kódu 1.2: Pouûití Dibi se statick˝m p ístupem d i b i : : c o n n e c t ( $params ) ; d i b i : : query ( ’SQL dotaz ’ ) ; P ístup p es objekt je iteln jöí z pohledu kódu, protoûe je na první pohled vid t, kde je dan˝ objekt pouûit, a která volání jsou nad ním provád na. Oproti tomu statick˝ p ístup umoû uje v töí flexibilitu pouûití na úkor itelnosti a jednoduché dohledatelnosti jeho pouûití. V aplikaci bude bude pouûit statick˝ p ístup, pro jeho jednoduché globální nastavení parametr a tím i následn jednoduch˝ p ístup.
1.6.3
Frontend
HTML kód na v˝stupu bude generován ze öablonovacího systému Latte, kter˝ je sou ástí Nette Frameworku. Hlavní sloûkou öablonovacího systém Latte jsou jeho makra, která zajiötují automatické escapování vypisovaného kódu a zvyöují jeho p ehlednost. Zde jsou ukázky z dokumentace (8) pro porovnání itelnosti kódu bez pouûití Latte maker a s jejich pouûitím. Pro formátování HTML v˝stupu a n které JavaScriptové komponenty bude pouûit „Twitter Bootstrap“(3), coû je mlad˝ projekt od v˝vojá z firmy Twitter. Ostatní JavaScriptové komponenty a události budou vyuûívat populární knihovnu jQuery(2). 28
1.7. Datov˝ model Ukázka kódu 1.3: Vypsání seznamu poloûek bez pouûití Latte 1 2 3
4 5 < l i i d ="item ≠"> 6 8 l i > 9 10
11 Ukázka kódu 1.4: Vypsání seznamu poloûek pomocí Latte 1
2 < l i n : f o r e a c h =" $ i t e m s a s $item " i d ="item≠ 3 { $ i t e r a t o r ≠>c o u n t e r }">{ $item | c a p i t a l i z e } l i > 4
1.7
Datov˝ model
Protoûe byl SkautIS rozöí en o entitu eventGeneral, neboli obecná akce, m ûe b˝t datov˝ model menöí, neû jak˝ byl p vodní plán. V databázi se tedy budu uchovávat paragony s jejich kategorií a to v tabulce tabulce chits, která uchovává vöechny doklady. Tabulka chits je navázána p es actionId na konkretní obecnou akci(eventGeneral) ve SkautISu a p es category na tabulku chitsCategory. Tabulka chits dále obsahuje: • datum p ijetí paragonu do pokladní knihy, • jméno p íjemce, • ú el v˝platy, • ástku, • zp sob v˝po tu ástky - nap . 10 · 17 + 13, • p íznak jestli byl paragon smazán. Tabulka „chitsCategory“ uchovává následující atributy: • název kategorie, 29
1. Anal˝za a návrh Obrázek 1.3: Doménov˝ model
• zkratku kategorie,
• p íznak jestli je doklad p íjmov˝ nebo v˝dajov˝, • parametr pro azení kategorií,
• p íznak jestli byla kategorie smazána.
Kaûdá akce i s ú astníky je v systému SkautIS navázána na konkretní jednotku. Paragony jsou k dané akci navázány p es ID_Event dané akce.
1.8
Navigace
Cel˝ web je p ístupn˝ pouze po p ihláöení p es SkautIS, protoûe na tomto p ihláöení je závislá v töina funkcí systému. Na vöech stránkách je moûné vybrat pouûívanou roli ze seznamu dostupn˝ch rolí systému SkautIS. Na úvodní stránce je seznam vöech akcí, ke kter˝m má p ihláöen˝ uûivatel p ístup a pokud má právo zaloûit akci, tak i odkaz na zaloûení nové akce. Pokud p ihláöen˝ uûivatel vybere akci ke které má oprávn ní a je ve stavu „rozpracovaná“, m ûe upravovat její základní údaje, evidovat seznam ú etních doklad a seznam ú astník i exportovat v˝stupy ze systému. Pokladní kniha spravuje p íjmové i v˝dajové druhotné ú etní doklady. Do seznamu ú astník lze p idávat osoby jejich ozna ením v seznamu. Pokud uûivatel chce p idat osobu, která v seznamu není, musí vyplnit její základní údaje do formulá e a ten odeslat do systému. 30
1.9. Komunikace se systémem SkautIS
Obrázek 1.4: Naviga ní model vytvo en˝ ve Web Ratio
1.9
Komunikace se systémem SkautIS
Veökerá komunikace se systémem SkautIS probíhá p es webové sluûby (Web Services). SkautIS v sou asné dob (23. 3. 2012) nabízí 12 webov˝ch sluûeb rozd len˝ch podle jejich zam ení. Zde uvádím jejich seznam (p ebráno z https://is.skaut.cz/JunakWebservice/), kde tu n ozna ené jsou ty, s kter˝mi vyvíjená aplikace pracuje. • ApplicationManagement.asmx – webová sluûba pro správu p ístup externích aplikací, • Evaluation.asmx – webová sluûba pro práci s hodnocením kvality, • Events.asmx – webová sluûba pro práci s akcemi (sn my apod.), • Exports.asmx – webová sluûba pro export dat do jin˝ch systém , • Journal.asmx – webová sluûba pro práci s asopisy a fakturami, • Message.asmx – interní zpravodajsk˝ systém, 31
1. Anal˝za a návrh • OrganizationUnit.asmx – webová sluûba pro práci s organiza ními jednotkami a osobami, • Reports.asmx – generování tiskov˝ch sestav, • Summary.asmx – exporty/p ehledy,
• Telephony.asmx – skautská telefonní sí ,
• UserManagement.asmx – webová sluûba pro práci s uûivateli (zakládání, p id lování rolí, p ihlaöování apod.), • Welcome.asmx – webová sluûba pro práci s uvítacími balí ky. Sluûba UserManagement.asmx zajiötuje p ihlaöování, odhlaöování a správu dostupn˝ch rolí. P es sluûbu OrganizationUnit.asmx budeme pracovat s organiza ními jednotkami a jejich leny. Skrz Events.asmx budeme spravovat jednotlivé akce s ú astníky a obsazením funkcí vedoucí akce, zástupce vedoucího akce a hospodá akce. Pro jednoduööí p ístup k webov˝m sluûbám systému SkautIS bude pouûita mnou vytvo ená knihovna SkautIS, umoûnující snadn˝ p ístup z vyvíjené aplikace do systému SkautIS a do budoucna zjednoduöující p ístup dalöím v˝vojá m na platform PHP. Pro komunikaci je pot eba, aby se uûivatel p ihlásil na stránkách systému SkautIS se zadan˝m parametrem v url adrese Application ID, které jednozna n ur uje aplikaci. Po úsp öném p ihláöení bude p esm rován na p edem zadanou stránku, která metodou POST obdrûí skautIS_Token, skautIS_IDRole, skautIS_IDUnit a obslouûí p ihláöení na stran aplikace. • skautIS_Token – unikátní token pro uûivatele a konkrétní p ihláöení. Je p edáván jako parametr p i kaûdém volání webové sluûby. Jeho platnost je 30 minut a s kaûd˝m pouûitím se jeho platnost op t nastaví na 30 minut. • skautIS_IDRole – ID p ihláöené role - v˝chozí je naposledy pouûitá role • skautIS_IDUnit – ID jednotky, ke které je navázána p ihláöená role
Po zpracování p ihláöení i na stran aplikace, lze volat funkce jednotliv˝ch webov˝ch sluûeb se zadáním parametru skautIS_Token.
32
1.9. Komunikace se systémem SkautIS
Obrázek 1.5: P íklad komunikace se systémem SkautIS
33
Kapitola
Realizace 2.1
Pouûité nástroje
Pro zálohování a verzování této bakalá ské práce bylo pot eba vybrat verzovací systém. Základním rozhodnutím bylo zda centralizovan˝ nebo distribuovan˝ verzovací systém. Centralizované verzovací systémy mají jeden centrální repozitá a kaûd˝ klient má svoji lokální kopii. Pro odeslání zm n do centrálního repositá e je pot eba, aby lokální kopie obsahoval vöechny dosavadní aktualizace. V opa ném je pot eba nejd íve aktualizovat lokální kopii. Nejznám jöím zástupcem je Apache Subversion znám pod zkratkou SVN. Oproti tomu u distribuovaného verzovacího systému má kaûd˝ sv j lokální repozitá a nemusí existovat ûádné centrální úloûiöt . äí ení zm n probíhá ve dvou fázích. Nejd íve jsou zm ny pouze staûeny, ale nijak neovlivnili lokální repositá . Zm ny se projeví aû po jejich aplikaci na repozitá . Mezi nejznám jöí zástupce pat í Git a Mercurial. Git byl p vodn vytvo en Linusem Torvaldsem pro správu verzí jádra linuxu. V sou asnosti je vyuûíván jak velk˝mi firmami, tak i v˝vojá i na volné noze. Git byl vybrán i pro tento projekt pro jeho jednoduchou správu a öiroké rozöí ení. Záloûní kopie Git repozitá e byla umíst na na servery firmy Github na adresu https://github.com/sinacek, kde byl za tímto ú elem vytvo en privátní prostor.
2.2
Knihovna pro komunikaci se systémem SkautIS
Knihovna má za cíl usnadnit p ístup k webov˝m sluûbám nabízen˝ch systémem SkautIS. S její vyuûitím je do budoucna po ítáno i na dalöí projekty, které budou komunikovat se systémem SkautIS. Pro správu verzí knihovny byl vybrán také projekt Git a ve ejn dostupn˝ repozitá byl umíst n na 35
2
2. Realizace https://github.com/sinacek/SkautIS. Celá knihovna se skládá ze t í ástí: • SkautIS,
• SkautIS_WS,
• Vyjímky (Exceptions).
2.2.1
SkautIS
T ída postavená na návrhovém vzoru Singleton slouûící jako obalující vrstva celé knihovny. Získat instanci a nastavit jí ID_Application m ûeme hned t emi zp soby. Jako argument metody getInstance, p es setter setAppId( $appId) nebo pomocí p edem definované konstanty SkautIS_ID_Application. Ukázka kódu 2.1: Nastavení parametr knihovny SkautIS – p es argument $ s k a u t I s = SkautIS : : g e t I n s t a n c e ( " moje≠a p p l i c a t i o n ≠i d " ) ; Ukázka kódu 2.2: Nastavení parametr knihovny SkautIS – p es setter $ s k a u t I s = SkautIS : : g e t I n s t a n c e ( ) ; $ s k a u t I s ≠>setAppId ( " moje≠a p p l i c a t i o n ≠i d " ) ; Ukázka kódu 2.3: Nastavení parametr knihovny SkautIS – p es konstantu d e f i n e ( " SkautIS_ID_Application " , " moje≠a p p l i c a t i o n ≠i d " ) ; ... $ s k a u t I s = SkautIS : : g e t I n s t a n c e ( ) ; Dále nabízí základní settery a gettery pro nastavení a uchování údaj získan˝ch po p ihláöení do skautISu (viz 1.5), URL pro p ihláöení a odhláöení p es SkautIS. Také se stará o lazy loading t íd SkautIS_WS pro jednotlivé sluûby s moûností vyuûít jejich kratöích alias . Lazy loading je návrhov˝ vzor, kter˝ zajiö uje nahrání entit aû ve chvíli, kdy se k nim bude p istupovat. Tím se uöet í pam , kterou by zabíraly nevyuûité entity.
2.2.2
SkautIS_WS
SkautIS_WS je potomkem PHP t ídy SoapClient a zajiötuje komunikaci p es protokol SOAP vûdy s jednou webovou sluûbou. Pokud je u volání funkce nastaven i druh˝ argument, tak je pouûit jako obalující objekt namísto základního, kter˝ má tvar nazevFunkceInput. Pokud je pot eba sloûit jöí strukturu obalu, jsou jednotlivé vrstvy odd leny lomítkem. 36
2.2. Knihovna pro komunikaci se systémem SkautIS Ukázka kódu 2.4: Volání webové sluûby s nestandardním obalem 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
$ s k a u t i s = SkautIS : : g e t I n s t a n c e ( ) ; $ s k a u t i s ≠>org≠>P e r s o n I n s e r t ( array ( " FirstName"=> " a " , " LastName " => " b " , " I d e n t i f i c a t i o n C o d e " => " 9 1 0 2 0 3 / 0 4 0 5 " ) , " person " ) ; // v o l a n a s l u z b a // //<soap : Envelope . . . > // <soap : Body> // // // o b a l zadany j a k o druhy parametr // guid // s t r i n g I d e n t i f i c a t i o n C o d e > // s t r i n g // s t r i n g // ... // // P e r s o n I n s e r t > // // soap : Envelope> Ukázka kódu 2.5: Návratová hodnota webové sluûby
1 2 <soap : Envelope . . . > 3 <soap : Body> 4
5
6 i n t 7 P e r s o n I n s e r t R e s u l t > 8
9 10 Návratová hodnota webové sluûby je v töinou obalena do dvou PHP t íd stdClass. Tyto t ídy tvo í pouze obal a nep ináöí dalöí informa ní hodnotu, a proto hodnotu z t chto t íd vyjmeme a vrátíme bu jako oby ejné pole s jednou hodnotou nebo jako pole hodnot. Postupn se testuje, zda vrácen˝ objekt obsahuje objekt s názvem názevFunkceResult a pokud ano, tak jestli uvnit n j existuje jeöt objekt názevFunkceOutput. 37
2. Realizace V p ípad , ûe objekt názevFunkceOutput existuje a je to instance t ídy stdClass, tak je vloûen do pole a vrácen. Pokud existuje a není instancí stdClass, tak je pouze vrácen. Pokud je v pr b hu zjiöt no, ûe n kter˝ z hledan˝ch objekt neexistuje, je vrácen naposledy nalezen˝ objekt, viz 2.6. Ukázka kódu 2.6: Zpracování návratové hodnoty od webové sluûby 1 $ r e t ; // hodnota v r a c e n a z webove s l u z b y 2 $fname = " nazevFunkce " ; 3 i f ( i s s e t ( $ r e t ≠>{$fname . " R e s u l t " } ) ) { 4 i f ( i s s e t ( $ r e t ≠>{$fname . " R e s u l t "}≠>{$fname . " Output " } ) ) { 5 i f ( $ r e t ≠>{$fname . " R e s u l t "}≠>{$fname . " Output " } 6 i n s t a n c e o f stdClass ){ 7 // v l o z e n i s amos t at ne hodnoty do p o l e a j e j i v r a c e n i 8 r e t u r n a r r a y ( $ r e t ≠>{$fname . " R e s u l t " } 9 ≠>{$fname . " Output " } ) ; 10 } 11 // v r a c e n i p o l e hodnot 12 r e t u r n $ r e t ≠>{$fname . " R e s u l t "}≠>{$fname . " Output " } ; 13 } 14 // n a v ra t o v a hodnota n e o b s a h o v a l a $fname . " Output " 15 r e t u r n $ r e t ≠>{$fname . " R e s u l t " } ; 16 } 17 // n a v ra t o v a hodnota n e o b s a h o v a l a $fname . " R e s u l t " 18 r e t u r n $ r e t ;
2.2.3
V˝jimky
Tato ást je tvo ena pouze souborem v˝jimek, které mohou b˝t vyhozeny p i volání sluûeb.
2.3
Architektura a struktura aplikace
Aplikace je postavená na architektu e MVC, viz 1.6.1. Model se skládá ze dvou úrovní. První úrove tvo í t ídy typu Service jednotliv˝ch ástí a jsou potomci t ídy BaseService, která . P istupuje se k nim z presenter a zajiö ují p ístup do druhé úrovn modelu a k webov˝m sluûbám systému SkautIS skrze knihovnu. Druhou úrove tvo í t ídy Tables, potomci t ídy BaseTable, které jsou vyhrazeny vûdy pro konkrétní Service a p istupuje se k nim pouze skrz n . Tables zajiö ují volání SQL dotaz nad tabulkami v databázi p es knihovnu dibi. BaseService nastavuje spole né prom nné, vytvá í lokální úloûiöt pro v˝sledky volání sluûeb ze systému SkautIS a poskytuje vöem service t ídám moûnost vytvá et PDF dokumenty. 38
2.3. Architektura a struktura aplikace View pro jednotlivé akce presenter jsou uloûeny v samostatn˝ch souborech pojmenovan˝ch stejn jako daná akce. Vöechny soubory s view jsou pak uloûeny ve sloûce s názvem presenteru. Vöechny view, aû na Error view, se vkládají do základního layoutu @layout.latte skrz blok {block #content}. Namísto pojmu controler, se v Nette Frameworku pouûívá ozna ení presenter, viz 1.6.1. Kaûd˝ presenter zajiötuj jednu jasn vyty enou ást aplikace a jednotlivé presentery budou rozebrány v dalöích odstavcích. app/ // adresá s~aplikací AccountancyModule/ //modul Accountancy presenters/ // presentery modulu Accountancy templates/ // view modulu Accountancy presenters/ // presentery bez modulu templates/ // öablony presenter bez modulu log/ // adresá log temp/ // adresá do asn˝ch soubor pro Nette bootstrap.php // zavád cí soubor aplikace config.neon // hlavní konfigura ní soubor model/ // model css/ // kaskádové styly images/ // adresá pro obrázky js/ // soubory s~javascriptem libs/ // adresá pro knihovny webtemp/ // adresá pro do asné soubory na webu index.php Obrázek 2.1: Struktura adresá
a základních soubor
Intern jsou presentery a jejich view rozd leny do dvou ástí. První ást se naz˝vá „základní ást“, jelikoû obsahuje základ pouûiteln˝ pro v töinu aplikací spolupracující se systémem SkautIS. Druhá ást se zam uje na zpracování ú etní ásti aplikace, a proto je umíst na do vlastního modulu Accountancy.
2.3.1
Základní ást
V základní ásti je: • BasePresenter, od kterého jsou vöechny ostatní presentery pod d né,
• AuthPresenter zajiötující p ihlaöování,
• v˝chozí presenter DefaultPresenter pro zobrazení úvodní stránky, • ErrorPresenter na zpracování chybov˝ch hláöek, • soubor @layout.latte s rozloûením celé stránky.
39
2. Realizace BasePresenter rozöi uje moûnosti formulá o polí ko s kalendá em, zajiötuje zm nu role p ihláöeného uûivatele v i systému SkautIS a vytvá í souhrnné soubory pro kaskádové styly a JavaScript. AuthPresenter p ijímá p ihlaöovací parametry od systému SkautIS, které nastavuje knihovn pro komunikaci a uûivatele p ihlásí (viz 1.9). Obdobn˝m zp sobem zajistí i odhláöení ze systému SkautISu a z aplikace. Pokud p istupuje k aplikaci, bez aktivního p ihláöení, vygeneruje se do adresy et zec „backlink“, díky kterému budeme po p ihláöení p esm rováni zp t do aplikace na stránku, kam jsme p vodn p istupovali. ErrorPresenter obsluhuje vöechny vyhozené v˝jimky aplikací pro upozorn ní na ne ekanou událost. Spadá sem jak poûadavek na neexistující stránku (chyba 404, 4xx, ...), tak i chyby serveru (chyba 500, 5xx, ...).
2.3.2
Modul Accountancy
Modul Accountancy m ûeme rozd lit na tyto ásti: • správa akcí
• správa ú astník • pokladní kniha
Modul má vlastní Accountancy_BasePresenter, pod d n˝ od základního BasePresenteru, kter˝ kontroluje p ihláöení k systému SkautIS. P i absenci p ihláöení nás p esm ruje na úvodní stránku, v opa ném p ípad prodlouûí platnost p ihláöení o 29 min. P ihláöení do aplikace je prodlouûeno o 29 minut, protoûe p ihláöení do SkautISu je platné 30 minut a v p ípad shodné hodnoty by mohlo docházet pouze k áste nému odhláöení. Pokud je zvolená akce, tak kontroluje oprávn ní uûivatele k ní p istupovat. Dále jsou zde nastaveny „routy“ pro cel˝ modul. „Routy“ jsou jednotlivá pravidla pro „routování“, coû je obousm rn˝ p eklad jak z URL adresy na akci presenteru, tak i naopak. Ukázka kódu 2.7: Routa pro p ihlaöovací presenter $ r o u t e r [ ] = new Route ( ’ s i g n /
[/ back≠ ] ’ , array ( " p r e s e n t e r " => " Auth " , " a c t i o n " => " d e f a u l t " , " b a c k l i n k " => NULL ) ); 2.3.2.1
Správa akcí
Na úvodní stránce po p ihláöení uûivatel najde tla ítko pro zaloûení nové akce a seznam vöech akcí, které m ûe filtrovat podle roku konání a stavu akce. 40
2.3. Architektura a struktura aplikace Akce ze seznamu lze smazat nebo je vybrat pro dalöí práci s nimi. Po vybrání akce se zobrazí podrobn jöí informace o akci a jejím vedení. Pokud je akce ve stavu rozpracovaná, lze její základní údaje m nit. V p ípad , ûe je akce jiû ve stavu uzav ena, nejde m nit její údaje, lze pouze vygenerovat záv re nou zprávu nebo akci p evést do otev eného stavu. Vygenerovaná záv re ná zpráva obsahuje: • základní informace o akci a jejím po adateli, • po et ú astník , • po et osobodn , • jednotlivé ú etní kategorie a sumu jejich doklad . 2.3.2.2
Správa ú astník
Pro správu ú astník je k dispozici seznam len z vybrané jednotky, ke které máme dostate né oprávn ní, nebo lze zaloûit úpln nového ú astníka. P i v˝b ru aktuální jednotky lze p epínat mezi stavem se zobrazením len z podízen˝ch jednotek i bez jejich zobrazení. Kaûd˝ ú astník má u sebe uveden˝ po et dn stráven˝ch na akci a ástku, kterou zaplatil jako ú astnick˝ poplatek. Aplikace umoû uje s ozna en˝mi ú astníky provést: • hromadné p idání ze seznamu jednotky do seznamu ú astník , • hromadné nastavení po tu dní na akci, • hromadné nastavení zaplacení ástky, • hromadné odebrání ze seznamu ú astník . Pokud jiû uûivatel má vöechny ástky vypln né, m ûe si nechat vygenerovat p íjmov˝ p íjmov˝ doklad do pokladní knihy. Dále zde m ûe získat seznam ú astník s jejich adresami a daty narození. 2.3.2.3
Pokladní kniha
Do pokladní knihy lze p idávat p íjmové a v˝dajové pokladní doklady. U kaûdého dokladu evidujeme: • datum zaú tování do pokladní knihy, • p íjemce nebo poplatníka pen z, • ú el p íjmu nebo v˝daje, • ástku, 41
2. Realizace • kategorii dokladu. Pokladní kniha kontroluje, jestli p idáním v˝dajového dokladu, se nedostane z statková ástka do záporné hodnoty. Pokud tento stav nastane, je uûivatel o této zkute nosti informován aû do nápravy tohoto jevu, protoûe není reáln moûné, aby v pokladní knize byla záporná ástka. ástku dokladu lze zadat jak ve formátu ísla, tak i jako matematick˝ v˝raz obsahující íslice, operátor s ítání a operátor násobení. V obou p ípadech se finální ástka vypo te jak v prohlíûe i pomocí JavaScriptu pro informaci uûivatele, tak i na stran serveru p es PHP pro p ípad vypnutého JavaScriptu v prohlíûe i. Je zde moûnost exportovat pokladní knihu a doklady do PDF. Doklady m ûeme exportovat jednotliv nebo jako vybranou skupinu. V p ípad exportu více doklad najednou, jsou p íjmové doklady azeny na za átek a vûdy maximáln 3 na jedné stránce. Kaûd˝ v˝dajov˝ doklad má pak vlastní stránku, aby byl dostate n˝ prostor pro nalepení prvotního ú etního dokladu. U kaûdého dokladu jsou generovány faktura ní údaje právnické osoby poádající akci. Na doklad je generována ástka vypsaná jak íslicemi, tak slovy. P evedení ísla na ástku zajiö uje helper priceToString. Helper je statická funkce volaná v öablon , slouûící pro úpravu nebo p eformátování dat. Helper priceToString umí p evést ástku od jedné do devíti set devadesáti devíti tisíc devíti set devadesáti devíti v etn na et zec bez mezer a velk˝ch písmen.
2.3.3
Základní soubory Nette Frameworku
Nette Framework obsahuje zavád cí soubor a jeden nebo více konfigura ních soubor . 2.3.3.1
Zavád cí soubor
Veökeré poûadavky na aplikaci jsou p esm rovány p es nastavení serveru Apache v soubotu .htaccess na stránku index.php. Ta nastaví základní konstanty a spustí zavád cí soubor bootstrap.php. Bootstrap na te celou knihovnu, nastaví konfiguraci podle konfigura ního souboru a vytvo í routy (viz. ukázka 2.7) pro základní ást. 2.3.3.2
Konfigura ní soubor
Konfigurace je zapsána v souboru config.neon ve formátu NEON(6), kter˝ je velmi podobn˝ formátu YAML. Zde jsou nastaveny vöechny sluûby, p ístup do databáze a parametry pro p ipojení k systému SkautIS. Soubor config.neon je len n do t í sekcí: • common, 42
2.4. Kontrola oprávn ní • development, • production, • console. V sekci common jsou nastaveny parametry platné pro vöechny prost edí. Parametry pro v˝vojové prost edí jsou nastaveny v sekci development a pro produk ní prost edí v sekci production. Sekce console nastavuje parametry p i spuöt ní aplikace z konzole, nap íklad p i spuöt ní jednotkov˝ch test . Sluûba skautIS, instance knihovny SkautIS, dostává v konstruktoru (viz ukázka kódu 2.8, ádky 19 – 21) p edány parametry skautisid a skautisTestMode, coû jsou parametry pro p ipojení k systému SkautIS. Vöechny sluûby dostávají v konstruktoru sluûbu skautIS (viz ukázka kódu 2.8, ádek 16) a poté jsou p edány do systémovému kontejneru. Systémov˝ kontejner je statick˝ Dependency Injection(4) kontejner, kter˝ je dostupn˝ ve vöech presenterech p es volání $this->context. Jednotlivé sluûby lze volat p es $this->context->nazevSluzby.
2.4
Kontrola oprávn ní
Stejn jako uûivatelské role vycházejí ze systému SkautIS, tak i kontrola oprávn ní k provedení dané akce vychází z nastavení v systému SkautIS. Jednotlivá oprávn ní se kontrolují v metodách presenter , pomocí sluûby UserService a její metody actionVerify. U akcí jsou kontrolována oprávn ní pro: • vytvo ení akce,
• úpravu základních údaj akce, • úpravu vedení akce,
• zobrazení detailu akce, • zobrazení vedení akce, • smazání akce,
• uzav ení akce, • otev ení akce, • zruöení akce.
P i práci s ú astníky jsou kontrolována oprávn ní pro: • v˝pis ú astník , 43
2. Realizace • p idání ú astníka,
• zm na údaj ú astníka, • odebrání ú astníka.
Pro práci s paragony je uûivatel oprávn n, jestliûe má oprávn ní pro úpravy celé akce.
44
2.4. Kontrola oprávn ní
Ukázka kódu 2.8: Ukázka z konfigura ního souboru config.neon 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
#komentar common : nette : session : a u t o S t a r t : smart save_path : "%tempDir%/ s e s s i o n s " e x p i r a t i o n : "+ 7 days " s e r v i c e s : #n a s t a v e n i s l u z b e b connection c l a s s : DibiConnection #odkaz na parametry d a t a b a s e f a c t o r y : d i b i : : c o n n e c t (%d a t a b a s e%) run : TRUE participantService : c l a s s : P a r t i c i p a n t S e r v i c e ( @skautIS ) skautIS : c l a s s : SkautIS f a c t o r y : SkautIS : : g e t I n s t a n c e ( %s k a u t i s i d %, %ska utisT e stMode%) ... #n a s t a v e n i vyvojoveho p r o s t r e d i development < common : parameters : d a t a b a s e : #n a s t a v e n i d a t a b a z e d r i v e r : mysql host : l o c a l h o s t username : u s e r password : p a s s d a t a b a s e : db charset : utf8 #SkautIS ID_Application s k a u t i s i d = f2197deb ≠... ≠ f 2 3 4 2 7 7 5 7 a 0 7 s ka utis Te s tMo de = t r u e #n a s t a v e n i produkcniho p r o s t r e d i p r o d u c t i o n < common : ...
45
Kapitola
Testování Pro ov ení funk nosti aplikace b hem v˝voje a pro kontrolu vyty en˝ch poûadavk je pot eba, aby aplikace byla ádn otestována. Testovat aplikaci lze z mnoha aspekt . Nap íklad podle fáze, ve které se aplikace testuje, m ûeme testy rozd lit do následujících kategorií: • testy jednotek, • integra ní testy, • systémové testy, • akcepta ní testy. Testy jednotek, neboli unit testy, slouûí k otestování jednotliv˝ch ástí, kter˝mi b˝vají nej ast ji metody a t ídy. Unit testy testují zda pro zadané vstupy jednotka vrací poûadované v˝stupy. Tento typ test je provád n formou testovacích t íd, v töinou za pouûití testovacího frameworku. Jednotkové testy mohou b˝t provád ny automaticky i manuáln . Úkolem integra ních test je ov it integraci jiû d íve otestovan˝ch jednotek mezi sebou. Testuje se zde p edevöím jejich vzájemná komunikace. Systémové testy ov ují funk nost aplikace jako celku a jsou st ûejní ástí celého testování. Podle p edem dan˝ch scéná je aplikace procházena a je testováno, jestli by dan˝ postup prob hl bez problém i nikoliv. Akcepta ní testy jsou systémové testy provád né na stran zákazníka, podle jeho scéná . Test, kter˝ se adí na pomezí systémov˝ch a akcepta ních test je test zobrazení aplikace v jednotliv˝ch prohlíûe ích. Ten ov uje funk nost a vzhled v jednotliv˝ch webov˝ch prohlíûe ích. 47
3
3. Testování
3.1
Jednotkové testování
Pro jednotkové testování aplikace byl vybrán projekt PHPUnit, jehoû autorem je Sebastian Bergmann(1). Ten je distribuován a následn spouöt n p es PEAR a jednotlivé unit testy jsou potomky t ídy PHPUnit_Framework_TestCase. V töina presenter a t íd modelu vyûaduje ke své funk nosti p ihláöení uûivatele do systému SkautIS pro získání dat nebo pro ov ení p ístupu. Protoûe p ihláöení do systému SkautIS lze provést pouze na jeho stránkách, nebylo moûné pouûít unit testy na tyto t ídy. Proto t mito testy byla testována pouze ást modelu spravující paragony a jejich kategorie, která pro svoji funk nost p ístup do systému SkautIS nepot ebuje.
3.2
Integra ní testy
Integra ní testy byly provád ny b hem psaní jednotliv˝ch sekcí aplikace. Komunikace vöech sekcí pak byla testována aû v rámci systémov˝ch test .
3.3
Systémové testy
Aplikace byla testována jako celek, podle následujícího scéná e: zaloûit akci æ nastavit vedení akce æ p idat ty i ú astníky æ odebrat jednoho ú astníka æ p idat p íjmy do pokladní knihy æ p idat dva v˝dajové doklady æ zm nit ástku na dokladu æ smazat doklad.
3.4
Akcepta ní testy
Jako akcepta ní scéná e byly pouûity reálné v˝pravy, které si vedoucí sami v aplikaci vyú tovali a poté zaslali seznam p ipomínek. Tyto p ipomínky byly zapracovány a vedoucí byl vyzván znovu, aby vyú toval dalöí v˝pravu.
3.5
Testování nap í prohlíûe i
V sou asné dob si uûivatelé internetu mohou vybrat, kter˝ prohlíûe budou pouûívat, ze öiroké nabídky. Jak prohlíûe vykreslí HTML kód p ijat˝ z aplikace, závisí na tom, které renderovací jádro pouûívá. Mezi nejvíce rozöí ená renderovací jádra pat í: • WebKit, • Gecko, • Presto, • Trident. 48
3.5. Testování nap í prohlíûe i Renderovací jádro WebKit pouûívají prohlíûe e Safari a Chrome. Jádro Gecko vyuûívá Mozilla Firefox, Presto prohlíûec Opera a na jádru Trident b ûí vöechny verze prohlíûe e Internet Explorer od verze 4.0. Protoûe v˝sledné zobrazení se m ûe liöit i podle opera ního systému, byla aplikace testována na opera ním systému Windows 7 Home Premium s rozliöením obrazovky 1920x1080 a dále na opera ním systému OS X Lion s rozliöením obrazovky 1280x800. Tabulka 3.1: Zobrazení v prohlíûe ích na OS Windows 7 Test. oblast / Prohlíûe Ajax Filtrování akcí Editace ú astníka Zobrazení pokladní knihy Editace paragonu Zm na uû. role
IE 8 ano ano ano ne ano ano
Chrome 18.0 ano ano ano ano ano ano
Mozilla Firefox 12.0 ano ano ano ano ano ano
Na opera ním systému Windows 7 se aplikace v prohlíûe ích Chrome 18.0 a Mozilla Firefox 12.0 zobrazila pln korektn . V prohlíûe i Internet Explorer 8 byla pokladní kniha funk ní, jen se sousední bloky zobrazily pod sebe a aplikace m la ost ejöí hrany tla ítek, protoûe Internet Explorer 8 nepodporuje CSS 3, se kter˝m Twitter Boostrap pracuje. Tabulka 3.2: Zobrazení v prohlíûe ích na OS X Lion Test. oblast / Prohlíûe Ajax Filtrování akcí Editace ú astníka Zobrazení pokladní knihy Editace paragonu Zm na uû. role
Safari 5 ano ano ano ano ano ano
Chrome 18.0 ano ano ano ano ano ano
M. Firefox 12.0 ano ano ano ano ano ano
Opera 11 ano ano ano ne ano ano
Na opera ním systému OS X Lion se aplikace zobrazila ve vöech prohlíûe ích korektn . Jen v prohlíûe i Opera se zobrazila jiná p epínací tla ítka ve formulá i, protoûe prohlíûe Opera k jejich zobrazení pouûívá vlastní styl.
49
Záv r V˝sledkem mé práce je aplikace ke zpracování da ové evidence krátkodob˝ch akcí skautsk˝ch organizací. V pr b hu v˝voje jsem v aplikaci n kolikrát zm nil jednotlivé sekce, protoûe bu byly stále málo intuitivní pro uûivatele nebo n které funkce chyb ly a n které naopak p eb˝valy. V˝sledkem je podle reakcí uûivatel jednoduchá a snadno pouûitelná aplikace pro vyú tování v˝prav, coû bylo m˝m cílem. Aplikace toho zatím neumí tolik, aby pln pokryla pot eby vöech st edisek na vöechny akce, coû ale ani nebylo jejím cílem. Jejím cílem bylo, aby byl spolehliv˝, p ehledn˝ a uûivatelsky srozumiteln˝. S jejím dalöím v˝vojem a rozöi ováním po ítám do budoucna, kde by m la p ib˝t sekce na proplácení cestovních náhrad, známá jako „ces áky“. Dalöím moûn˝m rozöí ením, je zapracování tábor , které vyûadují o n co podrobn jöí vyú tování. Knihovna pro komunikace se systémem SkautIS, která vznikla b hem v˝voje této aplikace, by m la do budoucna pomoci dalöím skautsk˝m programátor m, kte í by cht li propojit p ihlaöování na webové stránky jejich st ediska se systémem SkautIS nebo vytvo it vlastní aplikaci. Knihovna je voln dostupná a st edisko Blaník uvaûuje o jejím zapracování do jejich systému, kter˝ je popsán v anal˝ze. Mám v plánu za átkem ökolního roku 2012/2013 aplikace nabídnout vöem st edisk m k vyuûití a do té doby zapracovat návrhy a p ipomínky od dalöích st edisek, protoûe kaûdé st edisko zpracovává krátkodobé akce trochu odliön .
51
Literatura (1) Bergmann, S.: PHPUnit. 2012, [cit. 2012-05-07]. Dostupné z WWW: (2) jQueryFoundation: jQuery. 2012, [cit. 2012-05-06]. Dostupné z WWW: (3) Mark Otto, J. T.: Twitter Bootstrap. 2012, [cit. 2012-05-06]. Dostupné z WWW: (4) NetteFoundation: Dependency injection. 2012, [cit. 201205-06]. Dostupné z WWW: (5) NetteFoundation: MVC aplikace a presentery. 2012, [cit. 201205-05]. Dostupné z WWW: (6) NetteFoundation: NEON. 2012, [cit. 2012-05-06]. Dostupné z WWW: (7) NetteFoundation: PHPUnit. 2012, [cit. 2012-05-07]. Dostupné z WWW: (8) NetteFoundation: äablony Latte. 2012, [cit. 2012-05-05]. Dostupné z WWW: (9) Pejöa, J.: Co je Cross-site scripting jak mu p edcházet. http://zdrojak.root.cz/clanky/co-je-xss-jak-mu-predchazet/, 2009, [cit. 2012-05-05]. (10) Vrána, J.: NotORM je rychlejöí neû Doctrine 2 i Dibi. 2010, [cit. 2012-05-05]. Dostupné z WWW:
53
P íloha
Seznam pouûit˝ch zkratek CSV Comma-separated values ORM Object-relational mapping PDF Portable Document Format PEAR PHP Extension and Application Repository PHP PHP: Hypertext Preprocessor RTF Rich Text Format SVN Apache Subversion SQL Structured Query Language YAML YAML Ain’t Markup Language XSS Cross-site scripting
55
A
P íloha
Obsah p iloûeného CD
readme.txt...................................stru n˝ popis obsahu CD exe ....................... adresá se spustitelnou formou implementace src thesis ...................... zdrojová forma práce ve formátu LATEX text ....................................................... text práce thesis.pdf ............................. text práce ve formátu PDF 57
B