Univerzita Karlova v Praze Matematicko-fyzikální fakulta
BAKALÁSKÁ PRÁCE
Ji°í Kun£ar
Informa£ní systém pro jazykovou agenturu Ústav formální a aplikované lingvistiky
Vedoucí bakalá°ské práce: RNDr. Miroslav Spousta
Studijní program: informatika, správa po£íta£ových systém·
2009
D¥kuji panu RNDr. Miroslavu Spoustovi za pomoc, p°ipomínky, cenné rady a za odborné vedení bakalá°ské práce. Dále bych rád pod¥koval spole£nosti Prima Lingua s.r.o. za poskytnutí informací a podklad· k vývoji aplikace. Speciální pod¥kování pat°í p°edev²ím paní majitelce Mgr. Milu²i Psotové a paní RNDr. Jitce Kun£arové, která vývoj informa£ního systému iniciovala.
Prohla²uji, ºe jsem svou bakalá°skou práci napsal samostatn¥ a výhradn¥ s pouºitím citovaných pramen·. Souhlasím se zap·j£ováním práce a jejím zve°ej¬ováním. V Praze dne 6.8.2009
Ji°í Kun£ar
2
Obsah 1 Úvod
7
1.1
Cíle práce
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
1.2
Obsah práce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
2 Analýza úlohy
9
2.1
Denice a up°esn¥ní pojm· . . . . . . . . . . . . . . . . . . . . . . .
9
2.2
Analýza poºadavk· klienta . . . . . . . . . . . . . . . . . . . . . . .
10
3 Návrh °e²ení
13
3.1
Konceptuální návrh . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
3.2
Logický návrh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
3.3
Fyzický návrh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
4 Pouºité technologie a frameworky
20
4.1
Server
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
4.2
Klient
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
5 Programátorská dokumentace
26
5.1
Adresá°ová struktura . . . . . . . . . . . . . . . . . . . . . . . . . .
26
5.2
Modely (Models )
27
5.3
adi£e (Controllers )
. . . . . . . . . . . . . . . . . . . . . . . . . .
30
5.4
Zásuvné moduly (Plugins ) . . . . . . . . . . . . . . . . . . . . . . .
34
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
6 Uºivatelská dokumentace
36
6.1
Instalace serveru
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
6.2
Up°es¬ující informace . . . . . . . . . . . . . . . . . . . . . . . . . .
38
6.3
Správce
6.4
Dodavatel
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42
6.5
Zákazníci (studenti) . . . . . . . . . . . . . . . . . . . . . . . . . . .
42
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
38
7 Existující implementace
43
7.1
Správci obsahu (CMS )
. . . . . . . . . . . . . . . . . . . . . . . . .
44
7.2
E-Learning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47
8 Záv¥r
51
A Obsah p°iloºeného CD
54
B Databázové schéma
55
4
Název práce: Informa£ní systém pro jazykovou agenturu Autor: Ji°í Kun£ar Katedra (ústav): Ústav formální a aplikované lingvistiky Vedoucí bakalá°ské práce: RNDr. Miroslav Spousta e-mail vedoucího: Miroslav.Spousta@m.cuni.cz Cílem práce je navrhnout a implementovat modulární informa£ní systém pro rmu zabývající se výukou jazyk·. Sou£ástí informa£ního systému bude zejména: - modul pro nabídku a prodej kurz· pro ve°ejnost, individuální výuku, jazykovou výuku pro podniky, p°eklady a tlumo£ení - modul produkty (výuka, p°eklady, tlumo£ení), výuka (individuální výuka, kurzy pro ve°ejnost, jazyková výuka pro podniky) - modul pro News (hromadné rozesílání mailem), rozvrh výuky, t°ídní knihy, studijní materiály - modul dodavatelé (smlouvy s lektory, p°ekladateli, tlumo£níky, m¥sí£ní výkazy odpracovaných hodin, m¥sí£ní p°ehledy náklad· na lektory, p°ekladatele, tlumo£níky) - modul odb¥ratelé (zápisy do kurz· pro ve°ejnost, objednávky, smlouvy, p°ílohy faktur za období od-do) - modul pro testování znalostí (jednoduché testovací prost°edí) - modul pro správu IS (uºivatelé, jejich práva, p°ehled zm¥n). Klí£ová slova: informa£ní systém, PHP, MySQL
Title: Information system of a language school Author: Ji°í Kun£ar Department: Institute of Formal and Applied Linguistics Supervisor: RNDr. Miroslav Spousta Supervisor's e-mail address: Miroslav.Spousta@m.cuni.cz Abstract: The goal of the thesis is to design and implement a modular information system for a company involved in teaching of foreign languages. The main parts of the information system will include, particularly: - a module for oer and sale of courses to the public and individuals, language training for businesses, translation and interpretation - a module of products (teaching, translation and interpretation), training (individual training courses for the public, language classes for businesses) - a module for News (sending bulk mail), the schedule of teaching, class books, study material
5
- a module of suppliers (contracts with teachers, translators, interpreters, monthly class-sheets, monthly reports on the cost of sta translators and interpreters) - a module of customers (registration in courses, orders, contracts, supplements to invoices for "from-to" periods) - a module for testing of knowledge levels (a simple testing environment) - a module for managing the IS (users, their rights and a summary of changes) Keywords: information system, PHP, MySQL
6
Kapitola 1 Úvod Informa£ní systémy hrají v rychle se rozvíjející spole£nosti svou nepostradatelou roli. Internet, který se stal v posledních létech dostupným pro ²irokou ve°ejnost, jim poskytl výbornou platformu k dal²ímu rozvoji. Ve d°íve nep°íli² vyuºívaném virtuálním prost°edí umoº¬ují rychlou a snadnou distribuci, zpracování a vyhledávání informací. Díky globálnímu dosahu Internetu se tak stávají dostupné pro ²ir²í spektrum zákazník·, dodavatel· i samotných zam¥stanc·. A práv¥ takto nabízené informace o aktuální nabídce umoº¬ují snadno a efektivn¥ oslovovat nové zákazníky, kte°í postupn¥ za£ínají p°evaºovat nad zákazníky oslovenými jinými komunika£ními kanály. S vyuºíváním Internetu zárove¬ rostou nároky na bezpe£nost a dostupnost uloºených informací. Ty jsou d·leºité pro správu podnik· a bývají jejich nejcenn¥j²ím majetkem. Zvy²ující se poºadavky vyºadují kvalitní nástroje pouºité p°i implementaci systému a jejich robustnost, jelikoº i malá chyba m·ºe zap°í£init únik citlivých dat a jejich zneuºití v globálním m¥°ítku, které nelze vrátit zp¥t. P°ed zavád¥ním informa£ního systému je nutné stanovit, £eho chce podnik s jeho vyuºitím v daném £ase dosáhnout. Tomu by m¥la pomoci d·kladná analýza proces· a jejich optimalizace.
Kdo nepozná vlastní remní procesy, nem·ºe je zlep²ovat. [4] Zm¥na zavedených proces· bývá náro£ná, jak z nan£ního hlediska, tak z hlediska její vlastní realizace. D·leºitou roli zde hraje plánování £asového harmonogramu a jeho dodrºování. Zlep²ení výsledk· £innosti podniku se nemusí dostavit okamºit¥ po spu²t¥ní nového systému, ale aº po adaptaci v²ech zú£astn¥ných stran. Výhodou je, pokud byl daný systém navrºen v souladu se zab¥hnutými a fungujícími procesy. Proto bude práce v¥novaná p°edev²ím jejich d·kladnému popisu, na kterém bude dále stav¥t.
7
1.1 Cíle práce Cílem práce je návrh a základní implementace webového informa£ního systému, usnad¬ující £innost a spolupráci více nezávislých subjekt·. Implementace bude provedena pomocí vhodných open source technologií a framework· v pouºitých programovacích jazycích. V práci budou rozebrány funkce systém· pro správu, udrºování a sdílení informací v prost°edí Internetu. Implementovaný systém bude mimo jiné obsahovat prost°edky pro správu uºivatel·, evidenci zakázek, kalkulaci náklad· na mzdy a fakturaci sluºeb. Cílem práce není, vzhledem k náro£ným právním úpravám a £astým zm¥nám, vytvo°it komplexní ú£etní program, ale pouze systém umoºnící efektivní práci s informacemi a tvorbu podklad· pro ú£etní evidenci, které mohou být v budoucnu zavedeny do n¥kterého jiº existujícího ú£etního programu.
1.2 Obsah práce Nejd·leºit¥j²í £ástí této práce je analýza úlohy a p°esné stanovení poºadavk· na °e²ení informa£ního systému konkrétního podniku, které jsou obsaºené ve druhé kapitole. T°etí kapitola popisuje návrh vlastní implementace s ohledem na poºadavky stanovené v kapitole druhé. Jsou zde základní návrhová rozhodnutí a d·vody pro volbu konkrétních °e²ení. Ve £tvrté kapitole jsou stru£n¥ popsány technologie dále pouºívané v této práci a je ukázáno jejich pouºití. Pátá kapitola obsahuje programátorskou dokumentaci. Je zde popsáno technické °e²ení implementace a jsou nastín¥ny n¥které problémy, které byly p°i implementaci nutné °e²it. Uºivatelská dokumentace je obsaºena v ²esté kapitole. Popisuje uºivatelské rozhraní vytvo°ených aplikací a ukazuje jejich pouºití na konkrétních p°íkladech. P°edposlední kapitola se zabývá popisem existujících implementací a jejich porovnáním s implementovaným systémem. V záv¥ru jsou p°ehledn¥ shrnuty výsledky, kterých bylo p°i vývoji systému dosaºeno a jsou nazna£eny moºnosti dal²ího roz²í°ení.
8
Kapitola 2 Analýza úlohy V kapitole budou popsány základní pojmy pouºívané p°i popisu poºadavk· klienta, specické poºadavky na systém a popis základních proces·. Cílem je p°iblíºit problematiku konkrétního informa£ního systému a moºné problémy skrývajíci se ve zdánliv¥ jednoduchých úkolech. Analýza úlohy vychází z informací získaných p°i rozhovorech s klientem a jím dodaných materiál·. Snaºí se je co nep°esn¥ji interpretovat pro pouºití v dal²ích fázích návrhu a implementace.
2.1 Denice a up°esn¥ní pojm· Dále uvedené pojmy mívají v r·zných odv¥tvích mírn¥ odli²né významy. Zde budou p°eneseny a vysv¥tleny v oblasti podnik· zabývající se jazykovou výukou, p°eklady a tlumo£ením.
Agentura S pojmem agentura se m·ºeme setkat p°eváºn¥ v oblastech cestovního ruchu, reklamy, personalistiky, bezpe£nosti a jazykových sluºeb. Dále v práci bude pojem agentury pouºíván práv¥ v poslední zmi¬ované oblasti. Jazyková agentura je podnik zaji²´ující sluºby spojené s výukou jazyk·, tlumo£ením a p°eklady. Je prost°edníkem p°i jejich realizaci, pop°ípad¥ usnad¬uje zákazník·m orientaci na trhu s uvedenými sluºbami.
Infoma£ní systém Informa£ní systém (IS ) je dosti ²iroký pojem, který se postupem let vyvíjí a nabírá nové významy. Z d°ív¥j²ích papírových kartoték, telefonních seznam· a dal²í
9
remní evidence, které se velice obtíºn¥ sdílely s více subjekty, se vyvinuly systémy, jenº poskytují rmám prost°edí pro efektivn¥j²í práci a komunikaci. Informa£ním systémem rozumíme prost°edí pro sb¥r, udrºování, zpracování a poskytování informací [5], ve kterém by m¥la z·stat zachována d·v¥rnost a integrita uloºených dat.
Produkt Produktem bude rozum¥no po°ádání jazykové výuky pro danou skupinu lidí (kurz), dále tlumo£ení, p°eklady a p°eklady s ov¥°ením. Jedná se tedy o spojení sluºeb, jejichº výsledkem je znalost cizího jazyka - tedy nehmotný výrobek, a p°edm¥t· vzniklých lidskou prací - p°eklad·.
Uºivatelé Uºivateli jsou my²leny v²echny osoby podílející se na zaji²´ování i realizaci produkt·. Pat°í mezi n¥ nejen dodavatelé, odb¥ratelé, studenti, ale i samotná agentura a administrativní pracovníci.
2.2 Analýza poºadavk· klienta Základním úkolem jazykové agentury je zaji²´ovat sluºby v oblasti jazykového vzd¥lání, p°eklad· a tlumo£ení p°edev²ím pro ²iroké spektrum odb¥ratel·, tj. podnik· a individuálních zákazník·. Podniky posílají poptávky bez ohledu na nabídku konkrétních kurz·. Manaºer vy°izuje zakázku elektronickou po²tou, telefonicky nebo osobn¥. V²echny získané informace musí být schopen zaznamenat pro pozd¥j²í zaji²´ování vhodných dodavatel· (lektor·) a kalkulaci náklad·. Individuální zákazníci, tj. ve°ejnost posílá zápisové listy s ohledem na nabídku konkrétních kurz· ur£ených pro ve°ejnost. Manaºer sestavuje skupiny podle zápisových list· a potvrzuje místo, termíny a cenu výuky. Sou£asn¥ probíhá proces zaji²´ování lektor·. Na za£átku vývoje byl rovn¥º poºadavek zjednodu²it proces zpracování m¥sí£ních výkaz· lektor·, p°ekladatel· a tlumo£ník· tvo°ících podklady pro mzdy a fakturaci sluºeb. Tyto m¥sí£ní výkazy nem¥ly jednotný vzor a ani nebylo jednodu²e moºné, bez znalostí místních pom¥r·, p°i°adit vykázanou £innost k jednotlivým produkt·m. Na základ¥ vyty£ených poºadavk· byl zpracován následující návrh.
10
Zavedení jednotných identikátor· Kv·li vý²e uvedným problém·m se za£alo s postupným zavád¥ním jednotných identikátor· závazných pro v²echny zú£astn¥né strany. Tento nepopulární krok byl ze za£átku velmi t¥ºce p°íjmán a trvalo n¥kolik m¥síc·, neº se proces tvorby ustálil a za£al být v²emi akceptován.
•
Z identikátoru musí být z°ejmé, o jakou kategorii produktu se jedná, pro koho je ur£en a kdy byl zaveden, aby se p°ede²lo kolizím jmen v budoucnu.
•
V pr·b¥hu m¥síce vkládá administrátor zadané p°eklady, nov¥ zahájené kurzy a individuální výuku.
•
U produktu vloºí poskytovatele, p°i°adí zákazníka, studenty, lektora nebo p°ekladatele. Dále cenu za jednotku a zp·sob kalkulace ceny pro zákazníka.
•
U lektora £i p°ekladatele stanoví sazbu za jednotku.
•
U kurz· vloºí p°edpokládaný rozvh, kde jsou uvedeny dny, £as, lektor a u£ebna. Tento rozvrh slouºí zárove¬ jako pom·cka pro stanovení p°edb¥ºných náklad· v budoucích m¥sících.
M¥sí£ní výkazy Po zavedení identikátor· bylo pot°eba sjednotit formulá°e m¥sí£ních výkaz· a p°ipravit dodavatele na moºnost jejich elektronického vypl¬ování. Papírové formulá°e budou do systému vkládány administrativním pracovníkem a elektronické budou potvrzeny a uzam£eny.
•
Kaºdý m¥síc si administrátor m·ºe z výkaz· odpracovaných jednotek lektora, p°ekladatele a tlumo£níka zobrazit a vytiskout p°ehled, kde je souhrn toho, kolik jednotek opracoval v jednotlivých dnech a celkem u jednotlivých produkt·.
•
Systém musí zobrazit varování p°i p°ekro£ení stanoveného po£tu vykázaných odpracovaných hodin nebo p°eloºených normostran na danou smlouvu.
•
Podle pot°eby pot°ebuje administrátor rychle °e²it suplování a zm¥ny lektor·, k tomu pot°ebuje aktuální stav. P°íleºitostn¥ je t°eba zjistit vytíºení p°ekladatel·.
•
Na za£átku týdne tiskne administrátor podle pot°eby aktuální rozvrhy u£eben a informuje zú£astn¥né strany o zm¥nách. asy individuální výuky jsou pohyblivé, lekto°i musí v¥d¥t, kdy je v u£ebnách volno.
11
Podklady pro fakturaci Se vzr·stajícím objemem p°eklad· a odu£ených hodin p°estávalo být únosné ru£ní vytvá°ení m¥sí£ních p°ehled· realizované výuky pro zákazníky. Ti si p°áli být informování nejen o po£tu odu£ených hodin, ale i o v²ech zm¥nách zavedeném m¥sí£ním rozvrhu a p°ípadném suplování. Zárove¬ musely být v systému zachyceny vazby mezi produktem, zákazníkem a vlastními ú£astníky tak, aby bylo moºné stanovit výslednou cenu zakázky, která m·ºe být závislá jak od po£tu odu£ených hodin £i p°eloºených stran, tak od po£tu ú£astník·.
•
P°ed fakturací pro klienta si administrátor m·ºe sestavit seznam poloºek k fakturaci, tzv. p°ílohu faktury.
•
P°íloha za p°eklady a výuku se li²í. U p°eklad· není uvedeno jméno p°ekladatele z d·vodu zabrán¥ní navázání p°ímého kontaktu.
Správa lektor· a p°ekladatel· Pro agenturu je d·leºité shromaº¤ování kontakt· na osoby zabývající se výukou, p°eklady a tlumo£ením. Musí být umoºn¥no rychlé vyhledání a jednoduchá editace.
•
V pr·b¥hu m¥síce pr·b¥ºn¥ administrátor vkládá nové dodavatele tj. zájemce o spolupráci a aktualizuje zm¥ny u stávajících.
•
Jedenkrát m¥sí£n¥ odesílá administrátor minibuletin News vybraným lektor·m a p°ekladatel·m.
•
News by m¥ly být v systému p°ístupné pro lektory i p°ekladatele, protoºe obsahují p°ílohy platné pro celý rok, nap°. formulá°e k evidenci docházky.
Odd¥lení správy dat více agentur Vzhledem ke sloºitým pom¥r·m v agentu°e bylo pot°eba odd¥lit evidenci zakázek vy°izovaných manaºerem pro r·zné agentury a fyzické osoby, jenº s agenturami úzce spolupracují.
•
P°i vytvá°ení produktu manaºer zvolí poskytovatele sluºeb podle pot°eb zákazníka.
Podpora jazykových verzí Systém je ur£en primárn¥ pro jazykové agentury, kde se po£ítá s komunikací se zákazníky i v jiném neº £eském jazyce. K tomu bylo pot°eba p°izp·sobit systém jiº od po£átku, aby m¥li uºivatelé moºnost si jednodu²e vybrat mezi n¥kolika jazykovými variantami.
12
Kapitola 3 Návrh °e²ení Na základ¥ poºadavk· bylo vytvo°eno databázové schéma a popis jeho napojení na existující podniková data. Pro ukládání dat byla vybrána rela£ní databáze. Ta poskytuje prost°edky pro vytvo°ení, £tení, zm¥nu a smazání uloºených infor-
1
mací . V tomto p°ípad¥ se jeví jako nejlep²í volba z r·zným variant ukládání dat v souborech. P°edpokládá se nutnost p°ístupu k °ádov¥ stovek aº tisíc· produktu a p°ibliºn¥ stejnému mnoºství uºivatel·. Zárove¬ je nutné evidovat kolem tisíce jednotlivých záznam· m¥sí£n¥ o vykázané £innosti. V rámci vývoje a testování vybrané technologie byl rovn¥º vytvo°en návrh
2
zjednodu²ené verze XML
databáze uchovávané v souboru a zpracovávané pomocí
jazyka XPath, XQuery nebo XSLT. Výsledky byly dobré p°i zpracování omezeného mnoºství dat a jednouºivatelském p°ístupu. Se vzr·stajícím objemem uloºených dat se za£ala projevovat prostorová náro£nost pouºitého zna£kovacího jazyka. Proto bylo nutné pouºít kompresi a rozd¥lení dat do více soubor·. Alternativu tvo°í n¥které specializované XML databáze nebo rela£ní databáze s podporou XML. Toto °e²ení, ale nakonec nebylo implementováno ani v rámci testování. Návrh dob°e strukturované rela£ní databáze vyºaduje p°edev²ích pochopení vztah· a proces· fungování podniku, který ji bude vyuºívat. Problémem s optimalizací navrºeného modelu pomáhají °e²it algoritmy logického návrhu rela£ní databáze, které se snaºí zajistit, aby navºená databáze byla prostorov¥ efektivní, eliminovala vznik anomálií a zárove¬ umoº¬ovala rychlé zpracování uºivatelských poºadavk·. Celý proces návrhu m·ºeme rozd¥lit na £ty°i základní fáze: analýza poºadavk· a specikace, konceptuální návrh, logický návrh a fyzický návrh [6]. Analýza poºadavk· a specikace byla provedena v p°edcházející kapitole.
CRUD z anglických slov create, read, update, delete. Extensible Markup Language - standardní formát pro vým¥nu informací a popis stuktury
1 N¥kdy je pouºívaní zkratka 2 dokumentu
13
3.1 Konceptuální návrh Zpracováním poºadavk· vznikl prvotní model budoucí databáze, který by m¥l pokrývat v²echny d·leºité vazby a informace.
Produkty Ne v²echny informace o daných produktech je pot°eba udrºovat jako speciální atributy. Byla proto p°ijata varianta jedné tabulky s minimem poloºek pro produkt. V budoucnu by roz²i°ovaní m¥lo být realizováno pomocí tabulek se specikými informacemi nebo pomocí strukturovaných poznámek.
•
Identikátor obsahuje infomace o jazycích, typu produktu a stru£ný jednozna£ný popis.
•
Kategorie ur£uje za°azení produktu do skupin. N¥které skupiny produkt· mohou být ve°ejnosti online nabízeny na webových stránkách.
•
Poskytovatel produktu je podnik (uºivatel), který realizuje produkty, tj. zaji²´uje dodavatele a vystavuje faktury zákazníkovi.
•
asové informace jsou pouºívány dle pot°eb pro ur£ení doby konání kurz·, tlumo£ení nebo up°esn¥ní poºadavk· na vyhotovení p°ekladu.
•
Popis je ve°ejná informace k produktu pro v²echny zú£astn¥né strany.
•
Nastavení zp·sobu ú£tování pro správné stanovení ceny produktu (zapo£ítat mnoºství odpracovaných jednotek nebo po£et ú£astník· na p°ihlá²ce).
•
Jednotka a jednotková cena slouºí zákazníkovi pro informaci
P°ihlá²ky (objednávky) Tabulka slouºí k evidenci zákazník· (plátc·) a produkt·, které si objednali.
•
Produkt, ke kterému se p°ihlá²ka vztahuje.
•
Zákazník vybraný z tabulky uºivatel· je plátcem produktu.
•
Evidence plateb.
14
Ú£astníci Ú£astníci jsou p°i°azeni k danému produktu p°es p°ihlá²ku s uvedením plátcem.
•
P°ihlá²ka
•
Ú£astník vybraný z tabulky uºivatel·.
Smlouvy V návrhu se do budoucna po£ítá s kontrolou maximálního po£tu odpracovaných jednotek. N¥které moºnosti nastavení typu smluv jsou pevn¥ zakomponované a p·jde je zm¥nit pouze zásahem do zdrojových kód· nebo databáze.
•
Dodavatel je smluvním partnerem jazykové agentury - poskytovatele jazykových sluºeb
•
Maximální po£et jednotek, které m·ºe na smlouvu vykonat.
•
Zp·sob platby a typ smlouvy umoº¬ují generování ú£etních p°ehled·.
Výkazy Tabulka výkaz· se nedrºí papírové podoby, která je pro ukládání v databázi nevhodná z d·vodu malé hustoty záznam· (obvykle 5-10 záznam· za m¥síc na jeden produkt). Jednotlivé záznamy budou ukládány v odd¥lené tabulce s dal²ími up°es¬ujícími informacemi. Z poºadavk· rovn¥º vyplývá pot°eba uzamykání výkazu k danému datu. Jelikoº se jedná o velmi d·leºitá data, m¥la by být jejich kontrola provád¥na na databázové úrovni pomocí triggeru, pokud to bude daná databáze bude podporovat.
•
Produkt, ke kterému se výkaz vztahuje.
•
Sazba za jednotku a jednotka, jenº náleºí dodavateli, jako odm¥na.
•
Smlouva na níº je provád¥na daná £innost.
•
Datum p°ed kterým jiº není moºné p°idávat, editovat nebo mazat odpracované jednotky.
15
Události Seznam událostí je p°i°azen k výkazu a kaºdá událost je dopln¥na o up°es¬ující informace.
•
Výkaz, ke kterému se událost vztahuje.
•
Po£et jednotek typu uvedeného v p°i°azeném výkazu.
•
Datum a £as, kdy byla práce vykonávána. Slouºí rovn¥º pro tvorbu rozvrhu hodin.
•
Místo vybrané z £íselníku.
Uºivatelé O v²ech uºivatelích systému je pot°eba vést obdobné informace. Proto jsou uloºeni v jedné tabulce a o jejich specikaci je rozhodnuto aº p°i°azením do skupiny. Kaºdý uºivatel m·ºe být ve více skupinách.
•
Osobní údaje - jméno, p°íjmení, titul a zobrazované jméno
•
P°ihla²ovací údaje - p°ihla²ovací jméno, heslo a stav ú£tu
•
Doru£ovací a faktura£ní adresa
•
Ostatní ne£len¥né informace
íselníky Byly navrhnuty pro zjednodu²ení práce s vypl¬ováním formulá°· a odstran¥ní duplicit v tabulkách.
•
Místa
•
Kategorie
•
Jednotky
•
Dan¥
•
Skupiny
•
Oprávn¥ní
16
3.2 Logický návrh Dále budou popsány t°i hlavní skupiny souvisejících tabulek, které jsou sou£ástí hlavního schématu. Nejd·leºit¥j²í £ást se týká správy uºivatel·, kde v²echny informace o uºivateli jsou uloºeny v jedné tabulce. Dekompozice na adresy a prolové informace je do budoucna moºná, ale v dob¥ návrhu nebylo pot°eba data dále strukturovat. Pro zachycení kardinality vztahu M:N mezi skupinami a uºivateli stejn¥ jako mezi skupinami a oprávn¥ními byly vytvo°eny vazební tabulky
groups_users a groups_permissions.
Obrázek 3.1: Schéma uºivatel·, skupin a oprávn¥ní Schéma na obrázku 3.2 zachycuje vztahy uºivatel· k produkt·m. Dodavatelé mají vytvo°enou smlouvu, ke které je p°idán výkaz odpracovaných ú£tovacích jednotek na produktu. Zákazníci jsou evidováni p°es p°ihlá²ku se seznamem ú£astník·. Záznam docházky je realizován tabulkou participators_events, kde existence záznamu s víceatributovým klí£em sloºeného s id ú£astníka a id události indikuje p°ítomnost osoby ve výuce. Evidence plateb je svázána s p°ihlá²kami, aby bylo moºné snadno a rychle ur£it, za které sluºby jiº bylo zaplaceno. Spolu s informací o DPH mohou být platby sdruºeny do jednoho ú£etního dokladu, jehoº schéma je zobrazeno na obrázku 3.3.
17
Obrázek 3.2: Schéma produkt· a vazeb na uºivatele
Obrázek 3.3: Evidence plateb
18
3.3 Fyzický návrh V uvedeném návrhu je pot°eba zajistit integritu dat a optimalizace pro rychlej²í p°ístup k dat·m. K tomu slouºí vytvo°ené cizí klí£e, triggery a indexy. Jejich seznam a denice lze nalézt v na p°iloºeném CD. P°i vytvá°ení trigger· pro MySQL verze 5.2 nastal problém s vyvoláním vyjímky uvnit° triggeru, pokud vkládaný, editovaný £i odstra¬ovaný objekt nespl¬oval zadaná kritéria. e²ení spo£ívá ve vytvo°ení tabulky s integritním omezením
UNIQUE na jednom sloupci a funkce FAIL('chyba'). Ta se pokusí naplnit tabulku dv¥mi indentickými záznamy, coº poru²í omezení na jedine£nost záznamu ve sloupci a vyvolaná vyjímka zabrání potvrzení transakce. Uvedené °e²ení je pouze náhradou za RAISE EXCEPTION známé t°eba z PostgreSQL, která nemá omezení na místo odkud m·ºe být vyvolána vyjímka.
-- Tabulka s unikátním klí£em na sloupci ` message ` CREATE TABLE ` error ` ( `id ` int (10) unsigned NOT NULL auto_increment , ` message ` varchar (128) default NULL , ` created ` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP , PRIMARY KEY (` id `) , UNIQUE KEY ` message_index ` ( ` message `) ) ENGINE = MEMORY DEFAULT CHARSET = utf8 COLLATE = utf8_bin ROW_FORMAT = FIXED AUTO_INCREMENT =1 ; -- Fuknce pro vyvolání vyjímky . DELIMITER $$ CREATE PROCEDURE fail ( _Message VARCHAR (128)) BEGIN INSERT INTO error ( message ) VALUES ( _Message ); INSERT INTO error ( message ) VALUES ( _Message ); END$$ V poslední fázi bylo schéma dopln¥no o tabulky pro správu menu, vyhledávání, token·, log· a emailových p°íloh. Také p°ibylo schéma pro správu £lánk· a test·. Celkov¥ schéma (B) simuluje remní procesy velice p°esn¥ a umoº¬uje uchovávat v²echna pot°ebná data. Problémem m·ºe být náro£n¥j²í zp·sob výpo£tu ceny pro zákazníka. Pokud se totiº cena odvíjí od mnoºství vykázaných jednotek dodavateli, je pot°eba spojit více tabulek a pouºít agrega£ní funkci SUM() na po£ty odpracovaných jednotek v jednotlivých událostech.
19
Kapitola 4 Pouºité technologie a frameworky Pouºité technologie byly £áste£n¥ determinovány poºadavky klienta. Systém tak vyuºívá výhradn¥ open source technologie, aby nebyly zvy²ovány náklady na nákup licencí.
4.1 Server Informa£ní systém vyuºívá technologi PHP - jazyk, interpret a knihovny. PHP vychází se skriptovacího víceú£elového jazyka, který byl p·vodn¥ vyvinut pro tvorbu dynamických webových stránek. Z tohoto vyuºití vznikla i zkratka z anglických slov Personal Home Page (osobní domácí stránka). Pozd¥ji byly nahrazeny slovy
1 PHP: Hypertext Preprocessor dající vznik rekurzivní zkratce .
Výhodou pouºití PHP je existence interpretu pro r·zné opera£ní systémy a podobnost jeho syntaxe s C, Javou. Nevýhodou, která brzdí dal²í rozvoj a roz²í°ení, je absence normy. Jazyk je tak de facto standardizovaný interpretem a mnoºstvím
2
lidí , kte°í jej vyuºívají. I kdyº existují mnohé polemiky a ºivé diskuze mezi jeho zastánci a odp·rci o jeho výkonnosti, bezpe£nosti a vhodnosti pro velké projekty,
3
existují vyjímky , které tyto názory vyvrací a zárove¬ se podílejí na vývoji, a tak se snaºí p°isp¥t k jeho v¥t²í výkonnosti a bezpe£nosti. Vývoj jazyka sebou nese i stinné stránky. Po letech vývoje dochází k úpravám API
4
n¥kterých vestav¥ných funkcí a zm¥na syntaxe. To m·ºe zap°í£init, ºe po
aktualizaci interpretu jazyka, p°estanou fungovat n¥které £ásti nebo celá aplikace. Nesporná výhoda pouºívání framework· spo£ívá v jednodu²²ím vývoji aplikací
1 http://cs.wikipedia.org/wiki/Rekurzivní_zkratka
2 viz statistiky na http://www.php.net/usage.php 3 Facebook, YouTube, Wikipedia (MediaWiki) a dal²í 4
Application Programming Interface, ozna£uje sadu funkcí, procedur nebo t°íd programu po-
p°ípad¥ knihovny, které mohou být vyuºívány programátorem
20
Obrázek 4.1: Diagram MVC dotazu [13]
a minimalizací rizika chyb v jinak ru£n¥ psaném jádru aplikace. Toto platí pouze za p°edpokladu, ºe je dostupná kvalitní dokumentace a vývoj v£etn¥ testování je zast°e²en silnou komunitou nebo spole£ností. N¥které frameworky rovn¥º dokáºí do jisté míry zakrýt rozdíly mezi ve verzích jazyka. D¥je se tak, za cenu zpomalení n¥kterých £ástí aplikace, díky kontrole verze p°eklada£e a vykonáním alternativního kódu. P°i výb¥ru frameworku byl kladen d·raz hlavn¥ na kvalitní dokumentaci, roz²í°itelnost a moºnost práce s r·znými rela£ními databázemi. Frameworky spl¬ující vet²inu poºadavk· jsou Zend, Prado, Symfony a CakePHP, který navíc ve výkonostních testech podle [8] dopadl velmi dob°e, a tak byl vybrán pro vývoj informa£ního systému.
CakePHP CakePHP je open source framework, který poskytuje v¥t²inu nástroj· pro snadný vývoj webové aplikace a dává v¥t²í p°íleºitost v¥novat se návrhu schématu a logiky aplikace [11].
MVC
Model-View-Controller (Model-Pohled-adi£) - softwarová architektura od-
d¥lující data, uºivatelské rozhraní a logiku aplikace[13]. Výsledný kód aplikace se stává p°ehledn¥j²ím a umoº¬uje zm¥nu libovolné komponenty s minimálními dopady na ostatní £ásti aplikace (nap°. zm¥na databáze, výstup v XML £i jiném formátu, ovládání p°es webové rozhraní nebo konzoli).
21
Obrázek 4.1 zobrazuje základní schéma procesu zpracování poºadavku kli-
5
enta. Klient po²le (1) poºadavek na URL , které je plánova£em (Dispatcher ) zkontrolováno a p°edáno (2) správnému p°epína£i (Controller ). Ten se na základ¥ parametr·, které obdrºí od plánova£e, rozhodne o spu²t¥ní správné akce a p°edání parametr·. V °adi£i je obsaºena vlastní aplika£ní logika (v£etn¥ nap°. kontroly p°ihlá²ení a práv uºivatele), která m·ºe vyuºívat modely pro p°ístup k uloºeným dat·m a jejich modikaci (3 a 4). Aº °adi£ získá v²echna pot°ebná data, p°edá (5) je zbývající vrstv¥ - pohledu (View ). V té jsou data zformátována do poºadované podoby a poslány (6) klientovi.
ORM
Object-relational mapping (objektov¥ rela£ní mapování) - programátorská
technika ur£ená pro konverzi dat mezi nekompatibilními systémy ur£enými pro ukládání dat a objektov¥ orientovanými jazyky[15]. Nejv¥t²í výhoda tedy spo£ívá v odstín¥ní zp·sobu práce s odli²nými zdroji dat. A´ uº jde o r·zné rela£ními databáze (MySQL, PostgreSQL, Oracle, MSSQL) nebo dokonce vlastní denováné zdroje dat. Mezi ty mohou pat°it formátované soubory (CSV, XML, JSON) nebo sí´ové sluºby poskytující informace skrze ve°ejné API (LDAP, Twitter, IMAP a dal²í). Mezi dal²í výhody, které CakePHP nabízí, pat°í SEO optimalizace stránek, podpora i18n
6
i l10n
7
pro tvorbu vícejazy£ných aplikací. Kód je jiº zapracován do
jádra frameworku a otestován komunitou, díky které není pot°eba psát jiº jednou napsané £ásti, ale je moºné ²et°it lidské zdroje na vlastní vývoj aplika£ní logiky. CakePHP zastává programátorskou losoi DRY - Don't Repeat Yourself. Ta zd·raz¬uje, ºe jednotlivé £ásti kódu by se v programu nem¥ly opakovat, jelikoº se sniºuje srozumitelnost kódu a p°i modikaci se musí upravovat stejný kód na více místech, coº £asto vede k nesnadno odhalitelným chybám programu. K tomuto ú£elu se pouºívají pomocníci (helpers ) a komponenty (components ). P°i pot°eb¥ zm¥ny je lze snadno upravit, bez pot°eby zásahu do míst odkud jsou voláni. Za nejv¥t²í p°ínos samotného frameworku v po£átku návrhu aplikace je povaºována pekárna kódu (baker ) a podpora le²ení (scaolding ), které umoº¬ují pracovat s automaticky generovaným rozhraním podporujícím CRUD. Pekárna kódu (bakery ) umí vygenerovat modely i s valida£ními kritérii, prezenta£ní vrstvu a °adi£e. Navíc sama najde relace mezi tabulkami a p°idá tuto informaci do odpovídajícího modelu. Hledání relací probíhá na základ¥ názv· tabulek a jejich atribut·. Proto je doporu£eno p°i práci s CakePHP dodrºovat následující konvence, které nejsou nijak závazné a jdou zm¥nit v denici kaºdého modelu.
5
Uniform Resource Locator
(jednotný lokátor zdroj·) popisuje sémantiku a syntaxi °et¥zce
znak· slouºící k p°esné specikaci zdroje informací v prost°edí Internetu [14].
6 P°íprava aplikace na podporu r·zných kulturních zvyklostí. [16]
7 Dopln¥ní aplikace o data specická pro konkrétní národní prost°edí [17]
22
•
Názvy tabulek jsou pojmenované anglicky v plurálu. Nepravidelné sklo¬ování nebo denice plurálu pro jiný jazyk lze nastavit v souboru app/con-
g/inections.php.
•
Cizí klí£e se jmenují stejn¥ jako tabulka v jednotném £ísle a kon£í na _id
•
Primární klí£ má název id.
Díky t¥mto úsporám je moºné se zam¥°it na ergonomii dané aplikace a její moºnou optimalizaci, která je ov²em limitována výkonností pouºitého skriptovacího jazyka. Tato omezení lze minimalizovat tzv. ke²ováním
8
£ástí zpracovaného zdro-
jového kódu v pam¥ti, jeho p°edkompilací pop°ípad¥ jedná-li se o statické stránky lze ukládat výstup skriptu, který je p°i následujícím stejném poºadavku vrácen klientovi. Dal²í moºnou optimalizací, která sice p°ímo nesouvisí s CakePHP, ale je v n¥m snadno implementovatelná, je sníºení po£tu poºadavk· na stránku. S pouºíváním javascriptových framework· a knihoven se snadno m·ºe stát, ºe po£et vkládaných odkaz· na skripty a kaskádové styly (CSS) se vy²plhá aº k desítkám a za£ne se neúm¥rn¥ prodluºovat doba pot°ebná na staºení v²ech pot°ebných £ástí. Zvy²uje se tak po£et poºadavk· na server a díky reºii protokolu HTTP
9
v¥t²í objem dat. Tento problém úsp¥²n¥ °e²í projekty jsMin
je ve výsledku staºen
10
a CSSTidy
11
.
MySQL MySQL je multiplatformní systém pro °ízení báze dat (DBMS, zkrácen¥ databázový systém), který poskytuje v²echny pot°ebné vlastnosti nutné pro b¥h tohoto informa£ního systému:
•
indexy, fulltext
•
cizí klí£e (foreign-keys)
•
poddotazy (subselect)
•
pohledy (views)
•
transakce
•
triggery
cache, ozna£uje vyrovnávací pam¥´ Hypertext Transfer Protocol, internetový protokol ur£ený pro vým¥nu dokument·
8 z anglického slova 9
10 http://code.google.com/p/jsmin-php/ 11 http://csstidy.sourceforge.net/
23
Systém byl p·vodn¥ vyvinut Michaelem Wideniusem a Davidem Axmarkem v roce 1994, kte°í se podíleli na zaloºení rmy MySQL AB. Ta byla aº do roku 2008, kdy byla provedena akvizice s rmou Sun Microsystems, jednou z nejv¥t²ích open source spole£ností na sv¥t¥. MySQL je nabízeno jak pod bezplatnou licencí, tak pod komer£ní licencí s plnou technickou podporou [24]. T¥²í se velké oblib¥ hlavn¥ mezi vývojá°i webových aplikací, kde je sou£ástí platformy ozna£ované jako LAMP, která obsahuje Linux, Apache, MySQL a PHP. Obecn¥ jednotlivé £ásti mohou být zam¥n¥ny (nap°. PHP za Perl nebo Python, MySQL za Postgres) p°i zachování zkratky, která je zauºívaným ozna£ením pro opera£ní systém, webový server, databázový systém a skriptovací jazyk slouºící k obsluze a generování webových stránek.
4.2 Klient Pro vlastní b¥h aplika£ní logiky je moºné se spolehnout na to, ºe serverová £ást aplikace bude zpracována jednou verzí PHP interpretu v uzav°eném, nem¥nném a otestovaném prost°edí. Naproti tomu klientská £ást bude prezentována na odli²ných opera£ních systémech v mnoha prohlíºe£ích nejr·zn¥j²ích verzích. Aplikace je primárn¥ vyvíjena pro nejnov¥j²í verze nejpouºívan¥j²ích voln¥ dostupných prohlíºe£· dodrºujících standardy (doporu£ení) konsorcia W3C. Mezi podprované prohlíºe£e pat°í Mozilla Firefox 3.5, Opera 9, Google Chrome, Safari a dal²í zaloºené na vykreslovacím jád°e Webkit nebo Gecko. Základními poºadavky kladené na prohlíºe£ jsou:
12
•
XHTML 1.0
•
CSS 2.1
•
JavaScript je dialektem ECMASriptu. Minimálním implementovaným stan-
13
dardem by m¥l být ECMA-262, revize 3 [25]. S XHTML a CSS prohlíºe£e problémy nemívají. Hor²í je to, ale s implementacemi javascriptu, které se mezi prohlíºe£i dost li²í. Tento problém byl vy°e²en díky
14
provázanosti CakePHP a javascriptového frameworku Prototype
15
°ení Script.aculo.us
a jeho roz²í-
, které se dohromady snaºí zakrýt rozdíly mezi prohlíºe£i a
zp°íjemnit uºivateli pracovní prost°edí pomocí vizuálních efekt·. Prototype není jediným £i nejlep²ím frameworkem. Existují i jiné, které mají rozsáhlej²í schopnosti v oblasti pouºívaní dotazovacího jazyka XPath nebo tvorby
12 http://www.w3.org/TR/xhtml1/ 13 http://www.w3.org/TR/CSS2/
14 Aktuální verzi naleznete nahttp://www.prototypejs.org/ 15 Knihovna se nachází na http://script.aculo.us
24
GUI
16
. Mezi hojn¥ vyuºívané pat°í JQuery, MooTools, Yahoo User Interface Lib-
rary a Dojo. Nelze °íct, ºe by jeden z nich byl o mnoho lep²í, a proto si kaºdý vývojá° musí stanovit, co od frameworku o£ekává. Pomoci s výb¥rem m·ºe i n¥kolik výkonostních test·, jenº lze nalést v [9]. Jak uº bylo zmín¥no vý²e, Prototype je skv¥le provázán s CakePHP, který tak programátorovi umoº¬uje psát kód pouze v jednom programovacím jazyce -
17
PHP. Krom¥ Scipt.aculo.us, je v systému pouºita i knihovna Livepipe
, která se
zam¥°uje na tvorbu uºivatelského rozhraní - záloºky, okna a dal²í prvky známé z klasických newebových aplikací.
16 z anglických slov
Graphical User Interface,
uºivatelské prost°edí, jenº umoºnuje uºivateli
ovládat aplikaci pomocí grackých ovládacích prvk·
17 Dokumentace a staºení knihovny na http://livepipe.net
25
Kapitola 5 Programátorská dokumentace V následující kapitole je popsána základní adresá°ová struktura projektu, propojení databázového schématu s t°ídami a metody pouºitých t°íd. Pro kompletní dokumentaci v²ech jaderných metod a plné pochopení fungování frameworku CakePHP je vhodné si nejprve nastudovat [11]. Dále jsou vysv¥tleny jen nejd·leºit¥j²í £ásti a zm¥ny v jaderných metodách frameworku. Popis celého API je k dispozici na p°iloºeném CD-ROMu.
5.1 Adresá°ová struktura Kód aplikace je logicky roz£len¥n podle p·vodu do 3 hlavních sloºek. P°i pojmenovávání soubor· ve sloºkách je dobré se °ídit zavedenými konvencemi v [11].
•
app - vlastní kód aplikace
cong - kongura£ní soubory (nastavení databáze, p°episování URL a ostatní konstanty)
controllers - °adi£e a komponenty locale - obsahuje podadresá°e s p°eloºenými °et¥zci pouºitými v aplikaci models - modely, dopl¬ková chování a denice zdroj· dat plugins - zásuvné moduly a znovupouºitelné balíky tmp - zapisovatelná sloºka pro ukládání do£asných soubor· views - ²ablony, elementy a prezenta£ní data webroot - kaskádové styly, javascriptové knihovny a obrázky
•
cake - zdrojové kódy frameworku, do kterých by se nem¥lo zasahovat
•
vendors - knihovny t°etích stran pouºité v systému (TCPDF, CssTidy, JsMin)
26
5.2 Modely (Models ) V²echny modely v aplikaci jsou odvozeny od t°ídy Object, která je zakryta t°ídou
Overloadable. Ta je navrºena tak, aby zakryla rozdíly mezi PHP verze 4 a 5. Modely jsou £áste£n¥ determinovány návrhem databáze. Relace mezi jednotlivými modely odpovídají relacím v databázi a je moºné je upravovat ve vlastnostech dané t°ídy. Existují £ty°i druhy relací, jenº jdou v CakePHP modelovat. Relace 1:1 (hasOne ), 1:N (hasMany ) a N:1 (belongsTo ) mají v¥t²inu nastavení spole£nou:
className
jméno t°ídy asociovaného modelu
foreignKey
jméno cizího klí£e v asociovaném modelu
elds
seznam polí, jenº mají být na£teny p°i pouºití dané asociace
order
£ást SQL dotazu slouºící k denici po°adí výsledk·
conditions
£ást SQL dotazu slouºící k ltraci nalezených výsledk·
P°i modelování relace M:N (hasAndBelongsToMany - HABTM ) je pot°eba nadenovat tabulku (joinTable ), p°es kterou bude provád¥no spojení nalezených dat, a cizí klí£ do asociované tabulky (associationForeignKey ). P°i pouºití pekárny kódu jsou relace vyhledány automaticky podle pravidel popsaných v 4.1 na stran¥ 22. Pro získání dat se pouºívá metoda nd($typ, $parametry) na p°íslu²ném modelu. První parametr ur£uje typ dotazu, který m·ºe být jedním z následujích:
all
najde v²echny data spl¬ující podmínky denované ve druhém parametru
rst
najde první záznam vyhovující podmínkám (li²í se od p°edcházejícího ve struktu°e vráceného pole)
count list
vrátí po£et vyhovujících záznam·
vygeneruje pole s hodnotami ze sloupce tabulky denované v atributu displa-
yField daného modelu indexované standardn¥ primárním klí£em
threaded neighbors
1
vygeneruje vno°ené pole podle zadaného intervalu (ltf - rght )
vrátí poloºku p°ed (prev ) a za (next ) poloºkou, která by byla nalezena
pomocí nd('rst', $podminky)
1 Detailní popis p°íkladu, jak uchovávat stromové struktury v rela£ní m·ºete nalést na http://dev.mysql.com/tech-resources/articles/hierarchical-data.html.
27
Pole s vyhledávacími podmínkami m·ºe vypadat jako v následujícím p°íkladu, kde jsou uvedeny v²echny základní moºnosti. Dal²í parametry mohou být p°idávány pro dopl¬kové roz²í°ení chování jednotlivých model·.
array ( ' conditions ' => array (' Model . field ' => $thisValue ), // vygeneruje klauzuli WHERE Model . field = $thisValue ' recursive ' = > 1, // int ' fields ' = > array (' Model . field1 ') , // sloupe£ky v dotazu SELECT ' order ' => array ( ' Model . created ' , ' Model . field3 ' => 'DESC ') , // definice klauzule ORDER BY ' group ' => array ( ' Model . field ') , // sloupe£ky pouºité v klauzuli GROUP BY ' limit ' => n , // po£et záznam· na stránku 'page ' => i , // najdi i - tou stranu ' callbacks ' = > true // moºné hodnoty jsou : false , ' before ' , ' after ' ) Zajímavým parametrem je recursive, který ur£uje do jaké hloubky mají být na£ítána data. Pokud data z asociovaných model· nejsou pot°eba, je vhodné jej nastavit na -1. V systému, kde je pot°eba vyhledávat sdruºovat data podle model·, jenº jsou v °et¥zci asociací dále, bylo výchozí chování parametru nedostate£né. Na²t¥stí existují roz²i°ující chování modelu, které takové £innosti umoº¬ují.
Roz²í°ení chování model· (Behaviors ) V základní výbav¥ CakePHP je obsaºeno roz²í°ení Containable, které umoº¬uje
2
dynamicky p°idávat asociované modely bez omezení hloubky rekurze . Je to ale pouze syntaktický cukr k metodám bindModel() a unbindModel(), které umoº¬ují p°idávat a odebírat asociace p°íslu²ící danému modelu. Containtable p°idává modelu metodu contain(), jenº je volána i pokud je nalezen index contain v poli s vyhledávacími parametry metody nd(). Ta se postará o dynamickou asociaci pot°ebných model·. Také vý²e zmín¥né roz²í°ení má ur£ité nedostatky a to hlavn¥ pokud je pot°eba ltrovat data podle model· asociovaných ve v¥t²í hloubce. Proto je pouºité roz²í°ení Linkable [20], které má obdobnou syntaxi nastavení, ale vytvá°í pouze jeden SQL dotaz za pomocí klauzují JOIN.
2 Je ov²em pot°eba vzít na v¥domí, ºe CakePHP tak vygeneruje zna£né mnoºství dotaz·, které mohou mít negativní vliv na výkon dané aplikace.
28
Pro usnadn¥ní práce s relacemi typu M:N p°es tabulku s klí£i je pouºito roz²í°ení Extend Associations [21]. To umoº¬uje jednoduché p°idání nebo smazání asociací, bez ovlivn¥ní jiº existujících záznam·. K tomu slouºí nov¥ denovaná sada metod:
•
habtmAdd(&$model, $assoc, $id, $assoc_ids ) - p°idá asociace k danému záznamu v modelu
•
habtmDelete(&$model, $assoc, $id, $assoc_ids) - smaºe asociace s danou kombinací klí£·
•
habtmDeleteAll(&$model, $assoc, $id) - smaºe v£echny asociace k danému záznamu modelu
Pro p°eklady do cizích jazyk· bylo pouºito roz²í°ení Translate, které umoº¬uje nadenovat seznam sloupc· tabulky, které mají být p°ekládány. P°eloºená data jsou ukládána v odd¥lené tabulce (i18n - lze zm¥nit v konguraci pro kaºdý model) a p°i dotazu je vyto°eno spojení s touto tabulkou pomocí sloºeného klí£e - jméno modelu, cizí klí£ daného modelu a jméno p°ekládaného sloupce. A pro úplnost jsou zde uvedneny zbývající roz²í°ení pouºité v aplikaci, které zatím nejsou sou£ástí základních knihoven frameworku.
Slugable
Vytvá°í texty pouºitelné v URL z denovaných sloupc·.
Versionable Logable
Ukládá aktuální verzi záznamu p°ed zm¥nou £i smazáním.
Zaznamenává akce uºivatel·.
Úpravy základních metod AppModel Jelikoº je kontrola konzistence dat po p°idání, smazání a editaci záznamu ponechána na databázi, bylo pot°eba zajistit zpracování chybových hlá²ení z databáze. To se d¥je v metod¥ onError(), která je volána pokaºdé, kdyº metoda Dbo-
Source::execute() vrátí chybu. V na²em p°ípad¥ je chyba zpracována a chybové hlá²ení je uloºeno pro pozd¥j²í prezentaci uºivateli. Pro plnou lokalizaci aplikace bylo pot°eba roz²í°it metodu invalidate($záznam,
$chybovéHlá²ení) o p°eklad chybového hlá²ení, pokud daný záznam nepro²el validací. Lokalizaci lze rovn¥º provád¥t p°i generování pohledu, ale to se z hlediska údrºby kódu nejeví jako nejvhodn¥j²í °e²ení.
29
5.3 adi£e (Controllers ) adi£e jsou pouºívany ke správ¥ aplika£ní logiky. Pro moºnost pouºívat stejný kus kódu v r·zných °adi£ích je vhodné pouºívat komponenty. Tyto komponenty usnad¬ují autentikaci, autorizaci uºivatel·, vyhledávání v databázi, posílání email· nebo validaci uºivatelských formulá°·.
Komponenty Komponenty se v CakePHP obecn¥ pouºívají ke sdílení logiky (kódu) mezi r·znými °adi£i tak, aby byla zachována lozoe DRY.
Auth/Authmd5
Standardní knihovna p°idává k heslu °et¥zec denovaný v app/-
cong/core.php v interní prom¥nné Security.salt. Tato vlastnost byla v systému na obtíº, hlavn¥ kv·li p°enositelnosti jiº zadaných hesel v p°edchozí aplikaci. Proto byla vytvo°ena komponenta Authmd5, která nep°idává zabezpe£ovací °et¥zec k heslu. Dal²í drobnou zm¥nou oproti p·vodní komponent¥ je automatické hashovaní hesla z formulá°e, i kdyº není zadáno p°ihla²ovací jméno.
P28n
P°i na£tení komponenty se zkontroluje zda si jiº uºivatel n¥kdy vybral vy-
bral jazyk, který byl uloºen do cookie
3
pomocí metody change($lang). Pokud
se jazyk v cookie nenachází zvolí se výchozí jazyk aplikace podle prom¥nné
HTTP_ACCEPT_LANGUAGE, pokud je prohlíºe£em nastavena. V opa£ném p°ípad¥ je pouºit jazyk denovaný v konstan¥ DEFAULT_LANGUAGE v souboru app/cong/core.php [18].
Password Helper
Vygeneruje hezké a bezpe£né heslo zadané délky bez opa-
kujících se znak·. Jednotlivé znaky jsou vybírány z atributu possible dané komponenty [19].
Autocomplete
P°idává metodu autocomplete(), která zpracuje získaná data z for-
mulá°ového prvku s atributem name data[Model][poloºka] . Následn¥ vyhledá vyhovující záznamy a vygeneruje seznam s výsledky. P°idání dopl¬kových podmínek pro vyhledávání je moºné v metod¥ beforeFilter() daného °adi£e nebo jeho p°edka. D¥je se tak nastavením atributu handles, kde index v zadaném poli ur£uje poloºky tabulky, kterých se mají podmínky týkat. Následující p°íklad je vybrán z °adi£e produkt·, kde má být zákazník·m umoºn¥no vyhledávat pouze v produktech, které se jich p°ímo týkají.
3 Ozna£ení pro data v protokolu HTTP uloºená v po£íta£i uºivatele, která prohlíºe£ obdrºel od WWW serveru a p°i kaºdé dal²í komunikaci je posílá zp¥t.
30
function beforeFilter () { parent :: beforeFilter () ; $this - > Autocomplete - > handles = false ; // standardn¥ je doporu£eno vypnutí v²ech polí£ek if ( $this - > Auth - > user () ) { if ( isset ( $this - > params [ ' prefix ']) { // podle prefixu m·ºeme omezit práva komponentou Auth if ( $this - > params [ ' prefix '] === ' admin ') { $this - > Autocomplete - > handles = array ( ' Product .* ') ; // administrato°i mohou £íst v²chny poloºky produktu } if ( $this - > params [ ' prefix '] === ' customers ') { $this - > Product - > Behaviors - > attach ( ' Linkable ') ; // dynamické na£tení chování $this - > Autocomplete - > handles = array ( ' Product . name ' = > array ( ' link ' = > array ( ' Application ') , ' conditions ' = > array ( ' Application . user_id ' = > User :: get ( ' id ') ) // zákazníci mohou vyhledávat pouze v produktech , // kterých se ú£astní )); } } }
Ajaxupdate
Slouºí pro usnadn¥ní editace záznam· p°es AJAX za podpory ja-
vascriptové knihovny control.js, která je sou£ástí balíku scriptaculous.js.
Filter
Komponenta pro validaci vyhledávacích formulá°· a vygenerování podmí-
nek pro vyhledávání.
Email
Slouºí k odesílání email·. Lze pouºívat ²ablony a p°idávat p°ílohy.
Request Handler
Detekuje typ poºadavku podle odeslané hlavi£ky.
Popis °adi£· (Controllers ) V této £ásti budou popsány nejd·leºit¥j²í £ásti aplika£ní logiky. P°i vytvá°ení základní kostry byla pouºita pekárna kódu, jejiº vygenerovaný kód byl posléze upraven.
Uºivatelé Nejd·leºit¥j²ími akcemi jsou bezpochyby p°ihlá²ení a odhlá²ení uºivatele. Ty jsou zaji²t¥ny komponentou Auth, která se nastavuje v metod¥ beforeFilter() °adi£e aplikace (AppController ) .
31
login()
Po p°ihlá²ení je aktualizována poloºka poslední p°ihlá²ení v databázi,
nastavena zpráva uºivateli a uºivatel je p°esm¥rován na poºadovanou nebo výchozí stránku.
logout()
Smaºe cookie, nastaví zprávu o úsp¥²ném odhlá²ení a p°esm¥ruje na
výchozí stránku.
account()
Slouºí ke zm¥n¥ hesla uºivatele. Pokud jsou poslány data a hesla pro-
jdou validací, je uºivateli nastaveno nové heslo.
recover()
Uºivatel si m·ºe nechat zaslat nové heslo po zadání emailu. Je vytvo°en
token s platností 1 den. V budoucnu by bylo dobré roz²í°it moºnost obnovy hesla o kontrolní otázku.
verify($token)
Zkontroluje zda se zadaný token nachází v databázi a pokud ano,
za²le uºivateli nov¥ vygenerované heslo.
register()
Jednoduchá registrace uºivatele po jejímº dokon£ení je uºivateli zaslán
aktiva£ní email. Vý²e uvedené akce jsou povoleny i nep°ihlá²eným uºivatel·m pomocí metody
Auth::allow($akce).
admin_account($id)
Umoºní administrátorovi zm¥nit heslo uºivateli s daným
id bez znalosti starého.
admin_reset_password($id)
Vygeneruje uºivateli s daným id náhodné heslo
a za²le ho uºivateli na email zadaný p°i registraci.
admin_invoiceattachment()
Jakmile jsou vypln¥ny informace o poskytovateli,
zákazníkovi a £asovém období, je vygenerován seznam produkt·, na kterých se v tomto období pracovalo. Provede spojení tabulek uºivatel·, smluv, výkaz·, produkt·, událostí a p°ihlá²ek daného zákazníka. Vyberou se pouze ty, které mají záznam v tabulce událostí v daném intervalu. Nakonec jsou k nalezeným záznam·m p°idány informace o jednotlivých datech a mnoºství vykázaných jednotek. Podle nastavení zp·sobu ú£tování je vypo£ítána výsledná cena bez DPH.
Produkty Krom¥ b¥ºných akcí pro trování, zobrazení, editování a smazání produktu administrátorem, jsou zde i metody pro export dat a tisk p°ehled·.
admin_export()
Vygeneruje CSV soubor s nalezenými produkty podle vypln¥-
ného ltru.
32
admin_schedule()
Pro kaºdý produkt vyhovující podmínkám ltru vyhledá dny
v týdnu, ve kterých probíhá výuka a p°idá informaci o £asovém intervalu.
admin_schedulePdf()
Pouºije vý²e uvedenou metodu k nalezení dat. Poté vy-
generuje pdf soubor a nabídne jej uºivateli ke staºení.
Smlouvy adi£ smluv denuje r·zný p°ístup k dat·m pro administrátora a dodavatele, kte°í mohou nahlíºet pouze na své smlouvy a nemohou je editovat (metody employees_index(),
employess_view($id) ).
admin_payment()
Na základ¥ ltru vybere odpovídající smlouvy a vygeneruje
p°ehled pro sestavení mezd a kontrolu p°ijatých faktur od dodavatel·. Základní schéma výpo£tu pro rok 2008 bylo následující:
if typ_sluºby == sluºba then if zp·sob_platby == hotov¥ then zaokrouhli mzdu na 50 halé°· endif else if plátce dan¥ then if mzda > 5000 then zálohová_da¬ := 15% ze mzdy else sráºková_da¬ := 15% ze mzdy endif endif Slabinou systému je, ºe nedokáºe generovat p°ehledy pro odvody na sociálním a zdravotním poji²t¥ní placených zam¥stnavatelem.
P°íjmové doklady Pro zobrazení dokladu a vygenerování poloºek k zaplacení slouºí metoda ad-
min_view($id). Pro kaºdý produkt se se£tou jiº zaplacené poloºky a celkový po£et poloºek k zaplacení. Rozdíl t¥chto dvou mezivýsledk· ur£uje nedoplatek pop°ípad¥ p°eplatek na daném produktu. Jelikoº je rozhraní pro p°idávání a mazání poloºek z dokladu postaveno na AJAXu jsou vytvo°eny dv¥ metody admin_additem() a
admin_delitem(), které po provedení akce vygenerují element s aktualizovanými poloºkami dokladu.
33
Události v kalendá°i Pro p°ehledné zobrazení událostí jsou na výb¥r dv¥ moºnosti. Tou první je zobrazení v²ech událostí v daném m¥síci v tabulce podobné kalendá°i. K tomuto ú£elu slouºí metoda PREFIX_calendar(), kterou jsou získány v²echny záznamy vyhovující ltru a pro generování pohledu je pouºit pomocník t°ídy CalendarHel-
per::calendar(). Druhou variantou je týdenní zobrazení v£etn¥ £asu. Data jsou nejd°ív se°azena a vícedenní záznamy se rozd¥lí do n¥kolika jednodenních (nap°. událost 8.7.2009 16:00 - 9.7.2009 14:00 je rozd¥lena na 8.7.2009 16:00-24:00 a 9.7-2009 00:00-14:00). Rozd¥lené záznamy jsou pak vykresleny pomocí metody CalendarHelper::week().
5.4 Zásuvné moduly (Plugins ) V této £ásti budou popsány moduly jiných autor· a jejich úpravy a vylep²ení, které byly pouºity p°i implementaci systému.
Vyhledávací modul (Searchable ) Nejd·leºit¥j²ím poºadavkem na tento modul je rychlost. Jelikoº byl vybrán databázový systém MySQL, který ve verzi 5.2 umoº¬uje fultextové vyhledánání pouze nad tabulkami typu MyISAM, bylo pot°eba zajistit, ºe p·jde rychle vyhledávat i data obsaºená tabulkách typu InnoDB. Idea spo£ívá ve vytvo°ení tabulky typu MyISAM, do které jsou uloºeny v²echna data z textových sloupc· indexované tabulky. Výhodou je, ºe lze prohledávat více tabulek jedním dotazem. Nalezené °ádky jsou spojeny se záznamy v p·vodní tabulce. Úpravy se do£kalo generování výstupu pro na²eptáva£ (6.1), jinak v²e z·stalo podle [23].
Komprimace skript· a kaskádových styl· (Asset ) Modul vyuºívá projekt· JsMin a CssTidy pro komprimaci javascriptu a kaskádových styl·. Vybere v²echny soubory, které byly do stránky vloºeny voláním
$javascript->link(nazev) a $html->css(nazev), a ty pak tranformuje do optimalizovaných soubor·.
Optimalizace generování dotaz· (Url_cache ) P°i optimalizaci výkonu bylo zji²t¥no, ºe na stránkách, kde je pot°eba generovat v¥t²í mnoºství odkaz·, dochází k výraznému spomalení generování výstupu. Slabé
34
místo bylo nalezeno v metod¥ Router::url(), která je volána pro vytvo°ení URL podle nastaveného sm¥rování v app/coug/routes.php. Tento modul zavádí ukládání vygenerovaných URL do vyrovnávací pam¥ti a odbourává nutnost neustálého volání vý²e zmín¥né metody.
35
Kapitola 6 Uºivatelská dokumentace Cílem kapitoly je stru£n¥ p°iblíºit výhody informa£ního systému a jeho základním zp·sobem ovládání. V jednotlivých £ástech je vysv¥tleno, jak má správce postupovat od úvodní instalace, p°es inicializaci databáze, uloºení informací o uºivatelích, p°idání produkt· aº po tisk ú£etních podklad·. Dodavatel·m a zam¥stnanc·m je názorn¥ p°edvedeno, jak správn¥ vyplnit m¥sí£ní výkazy a jak vést evidenci docházky ú£astník· kurz·. Zákazník·m je vysv¥tlen postup, kterým jednodu²e zjistí, kolik z objednaných sluºeb jiº bylo zaplaceno, zkontrolují pr·b¥h aktuálních kurz· £i po£et p°eloºených stran p°ekladu. Studenti si mohou zobrazit rozvrh hodin na dal²í týdny a zkontrolovat zaznamenanou docházku.
6.1 Instalace serveru Pro b¥h serverové aplikace je nutné mít program, který umoºnuje zpracování zdrojových kód· a prezentaci výstupu protokolem HTTP pop°ípad¥ HTTPS. Nejzná-
1
m¥j²ím voln¥ dostupným programem je Apache , který umoºnuje pomocí modul· p°idat podporu pro jazyk PHP nutný k b¥hu IS. Následující postupy jsou pouze orienta£ní a mohou se li²it podle opera£ního systému a jeho verze. Pokud je systém instalován na fungující server, je doporu£eno vytvo°it nej°íve zálohu a pak p°ejít rovnou na následující kapitolu.
Staºení a instalace Apache Pokud je systém instalován na n¥kterou z moderních linuxových distribucí, je doporu£eno nejd°íve prohledat její repozitá°e. Ve v¥t²in¥ p°ípad· se zde nachází jiº hotový balík upravený pro snadn¥j²í instalaci a konguraci.
1 http://httpd.apache.org
36
# Debian a jeho derivace ( Ubuntu , Kubuntu , ...): apt - get install apache2 # Gentoo emerge apache2 V opa£ném p°ípad¥ je nutné stáhnout archív zdrojových kód· nebo p°edkom-
2
pilovanou ze stránek projektu
a postupovat podle [22].
Kongurace Apache Pro správnou funkci aplikace je pot°eba doinstalovat, pop°ípad¥ povolit následující moduly: mod_php5, mod_rewrite a mod_ssl. Pro správnou funkci zabezpe£eného p°ipojení je nutné vygenerovat certikáty a upravit konguraci stránek.
Staºení a instalace MySQL serveru P°i instalaci MySQL serveru se postupuje obdobn¥ jako s instalací Apache. Nejprve ov¥°te zda se balík nenachází v repozitá°ích. Pokud tomu tak není, je pot°eba stáhnout instala£ní soubory z http://dev.mysql.com/downloads/ a postupovat podle návodu uvedeného v dokumentaci dostupné rovn¥º z vý²e uvedeného odkazu. Po nainstalováni serveru je pot°eba vytvo°it nového uºivatele a databázi. Po p°ipojení k databázi jako správce (obvykle se jménem root nebo mysql a heslem zadaným p°i instalaci) a je vhodné vytvo°it novou databázi a uºivatele pro pot°eby informa£ního systému. K tomu poslouºí následující skript.
-- Vytvo°ení databáze . CREATE DATABASE isa_database ; -- Vytvo°ení uºivatele s heslem . CREATE USER ' isa_admin '@ ' localhost ' IDENTIFIED BY ' isa_password '; -- P°idání v²ech oprávn¥ní k databázi . GRANT ALL PRIVILEGES ON isa_database .* TO ' isa_admin '@ ' localhost ' WITH GRANT OPTION ; Jméno databáze (isa_database ), uºivatele (isa_admin ) i heslo (isa_password ) je doporu£eno zm¥nit podle vlastních zvyklostí.
Umíst¥ní aplikace Pokud máme server správn¥ nakongurovaný, zkopírujeme sloºku s aplikací do adresá°e zvoleného v konguraci Apache (obvykle /var/www nebo C:\\Program
2 http://httpd.apache.org/download.cgi
37
Files\apache2\www ). Pro v¥t²í bezpe£nost je doporu£eno doplnit prom¥nnou DocumentRoot v konguraci Apache o /app/webroot. Dále je pot°eba nastavit p°ihla²ovací údaje k databázi podle p°edchozí £ásti v souboru app/cong/database.php.
Inicializace databáze V souboru app/cong/sql/isa_init.sql se nachází MySQL 5.2+ kompatibilní skript, který vytvo°í tabulky a naplní je daty nutnými k prvnímu p°ihlá²ení administrátora. Spu²t¥ní skriptu lze provést následujícím p°íkazem z adresá°e se skriptem.
shell > mysql -- user = isa_admin -- password = isa_password \ isa_database < isa_init . sql
6.2 Up°es¬ující informace Pro dal²í £tení manuálu je pot°eba up°esnit n¥kolik d·leºitých, které se budou dále vyskytovat.
Systémová skupina Správce: Editor:
je nutná pro správné fungování IS.
pov¥°ený uºivatel s plnými právy ke v²em modul·m systému.
osoba s omezenými právy k editaci vybraných modul·.
Dodavatelé:
zam¥stnanec, brigádník £i jiný subjekt vykonávající zadanou práci.
Odb¥ratelé:
zákazníci, kte°í si objednali libovolný produkt.
Poskytovatelé:
subjekty, které jsou vedeny pod jednou st°echou a sdílí £ást
informací.
Ú£astníci:
studenti jednotlivých kurz·.
Vý²e popsané role mohou být zm¥n¥ny £i zakázány administrátorem systému. tená°i je doporu£eno £íst pouze £ásti, jenº se ho týkají.
Poznámka:
Texty u odkazu na zobrazení, editaci nebo smazání záznamu mohou
být nahrazeny po °ad¥ obrázky:
,
a
.
6.3 Správce Má standardn¥ nastavena ve²kerá p°ístupová práva ke v²em modul·m systému. Jedná se o roli manaºera agentury rozhodujícím o p°ístupech k jednotlivým modul· a nastavujícím práva k systému. M·ºe delegovat £ást oprávn¥ní na dal²í skupiny nap°. administrativních pracovník· nebo lektor· s p°ístupem ke tvorb¥ test·.
38
Uºivatelé (Users) Modul Uºivatelé nabízí ve²keré nastavení pot°ebné pro denování moºností p°i uºívání systému osobami majícími vztah k IS. Dále jsou zde uchovány ve²keré osobní informace d·v¥rného charakteru.
Filtr seznam uºivatel· /admin/Users/index :
V horní £ásti se nachází od-
kazy na akce související s uºivateli. Filtry pro práci se seznamem uºivatel· jsou umíst¥ny nad hlavní tabulkou a v hlavi£ce tabulky s funkcí na²eptáva£e.
P°idání uºivatele [/admin/Users/add]:
Odkaz na formulá° je hlavním menu
a v £ástech, které na uºivatelích závisí. Jedinou povinnou poloºkou je zob-
razované jméno, která slouºí jako popisek ve v²ech ltrech. Ostatní poloºky je moºné vyplnit aº p°i jejich pot°eb¥ ve výpisu. Volba aktivní slouºí k aktivaci uºivatelského ú£tu. Uºivatel je schopen se p°ihlásit pouze pokud je jeho ú£et takto ozna£en.
Editace uºivatele:
Uºivatele lze vyhledat p°es ltr seznam· uºivatel· nebo p°es
formulá° rychlého hledání. V prním p°ípad¥ klikn¥te na Vyberte odpovídající skupinu k editaci a pro uloºení zm¥n pouºijte tla£ítko Uloºit. V p°ípad¥ chybového hlá²ení zkontrolujte v²echny skupiny údaj·.
Zobrazení uºivatele:
@todo
Nastavení £i zm¥na hesla:
V prolu uºivatele klikn¥te na odkaz Zm¥nit heslo
a vypl¬te nové heslo do obou kolonek. Správce m·ºe editovat hesla v²em uºivatel·m a m¥l by je o této zm¥n¥ informovat zabezpe£eným kanálem[@todo denovat zabezpeceny kanal], aby se p°ede²lo zneuºití jejich ú£tu.
Skupiny a oprávn¥ní V tomto modulu m·ºete p°idávat a mazat uºivatelské skupiny a oprávn¥ní. Pro zachování správného fungování systému nemaºte tyto systémové skupiny: customers, employees, providers, students a admin. P°i implicitní nastavení má kaºdá ze systémových skupin práva denované a p°i°azené oprávn¥ní k prexovaným akcím jednotlivých modul·. Tyto oprávn¥ní jsou denovány tímto zp·sobem: *:customers_*, *:employees_*, *:providers_*,
*:students_*, *:admin_* a °íkají, ºe daná skupina m·ºe v libovolném modulu spou²t¥t akce za£ínajícím jejich jménem. V p°íkladu byl pouºit expanzní znak *, který je moºné pouºívat k nahrazení libovoného po£tu libovolných znak·, a :, jenº ur£uje hranici mezi modulem a akcí (nap°. oprávn¥ní Users:*_view umoºní zobrazit v²echny prexované akce view v modulu
39
Uºivatelé).
Kaºdá skupina m·ºe m·ºe mít p°i°azeno více denovaných oprávn¥ní a je na správci, jak s nimi bude zacházet.
íselníky V této £ásti se seznámíme se v²emi £íselníky, jejich funkcemi v systému a moºností editace. V²echy dále uvedené moduly obsahují automaticky generovaný £íselný identikátor (dále jen id ), který slouºí pro interní pot°eby systému a není moºné ho zm¥nit. Dále je pot°eba upozornit na fakt, ºe vytvo°ené poloºky v £íselníku, které jiº byly v systému p°izazeny n¥jakým záznam·m, nelze vymazat. Vymazání je umoºn¥no aº kdyº je £íselník u daných záznam· zm¥n¥n.
Kategorie
obsahuje název, zkratku, jednoduchý slovní popis a za²ktávací polí£ko
ur£ující, zda se produkty v této kategorii povaºují za ve°ejné a má se zobrazovat jejich rozvh na webových stránkách. Ú£el £íselníku spo£íva v roz£len¥ní mnoºství produkt· do skupin, podle kterých lze vytvá°et tiskové sestavy (p°ílohy faktur, rozvrhy, m¥sí£ní p°ehledy náklad·, ...).
Místa
obsahují název a adresu. Slouºí k odkazu na místo v událostech.
títky
obsahují název a odkaz na nad°azený ²títek, pro moºnost tvorby hierar-
chické struktury £lánk·.
Produkty Modul Produkty je závislý na správn¥ rozd¥lených uºivatelích do systémových skupin. Rovn¥º je doporu£eno p°edvyplnit £íselník kategorií produkt·.
Vytvo°ení nového produktu (jednoduchá verze) Vyberte kategorii a poskytovatele. Dále vypl¬te název produktu a infomaci o datu zahájení a p°edpokládaném £i ºádaném datu ukon£ení prací. Dále si °ekn¥me, jak se vypo£ítá výsledná cena (bez DPH) pro zákazníka. Od toho se bude odvíjet dal²í vypl¬ování formulá°e. Stanovte si, jak budete daný produkt nabízet a od £eho se odvíjí náklady. V p°ípad¥, ºe se náklady odvíjí od po£tu zú£astn¥ných osob za²rtn¥te moºnost Po£ítat
ú£astníky. Pokud nevíte dop°edu kolik hodin bude odu£eno £i kolik normostran bude ú£továno a náklady na n¥ nejsou xní, za²krtn¥te moºnost Po£ítat mnoºství. Celková cena bude spo£ítána takto:
•
Jednotková cena je vynásobena po£tem ú£astník· pokud byla odpovídající volba za²krtnuta
40
Obrázek 6.1: Na²eptáva£
•
Mezisou£et je vynásoben sou£tem odpracovaných jednotek v událostech ve výkazech p°i°azených v produktu pokud byla volba po£ítat mnoºství za²krtnuta.
Te¤ uº zbývá doplnit zbývající povinné poloºky a to jednotku a jednotkovou cenu.
Filtrování produkt· Pro ltrování produkt· m·ºete pouºít na²eptáva£ u jednotlivých polí. Vypln¥ním £ásti hledaného výrazu, se zobrazí seznam poloºek, které tento výraz obsahují (obrázek 6.1).
Odstran¥ní produktu Odstran¥ní produktu není povoleno, pokud obsahuje výkazy nebo p°ihlá²ky. Nejprve je nutné zkontrolovat, ºe jednotlivé poloºky na výkazech nebyly zaú£továny a ty pak následn¥ vymazat. Dal²í problém m·ºe nastat, pokud jiº byl vydán p°íjmový doklad. V tom p°ípad¥ z n¥j musíte stornovat p°íslu²té poloºky vztahující se k danému produktu. P°i spln¥ní v²ech t¥chto podmínek bude smazání umoºn¥no.
Výkazy Vyhledání a ltrování výkaz· V menu nebo produktech klikn¥te na Zobrazit výkazy. V horní tabulce je moºné za²krtnou pouze n¥které kategorie produkt·, ke kterým byly výkazy p°idány.
41
Vytvo°ení a p°i°azení výkazu k produktu Vytvo°ení a p°i°azení výkazu k produktu provád¥jte pouze pokud je produkt, ke kterému chcete p°idat výkaz, jiº vytvo°en. V menu klikn¥te na poloºku P°idat výkaz a vypl¬te následný formulá°. U dodavatele se rozli²uje se i typ smlouvy uvedený v závorce. Sazba a jednotka jsou rovn¥º povinné poloºky. Dal²í moºností, jak p°i°adit nový výkaz, je p°es modul
Produkty (nebo p°es
rychlé hledání), kde lze snadno vyhledat daný produkt. Zobrazte si detaily nalezeného produktu a ve skupin¥ P°i°azené výkazy klikn¥te na odkaz P°idat výkaz.
P°idání události k výkazu Vyhledejte a zobrazte výkaz.
Tipy na urychlení práce Zvlá²tní formulá° na p°idání produktu spolu se zákazníkem i dodavatelem umoºní rychlej²í zadávání v¥t²ího mnoºství nových produkt·. Je standardn¥ dostupný p°es hlavní menu nebo na adrese /admin/products/addall.
6.4 Dodavatel Dodavatel má p°ístup, ke v²em produkt·m, kde m¥l p°i°azen alespo¬ jeden výkaz.
6.5 Zákazníci (studenti)
42
Kapitola 7 Existující implementace Existujicí implementace lze rozd¥lit na n¥kolik skupin. ádná v²ak nepokrývá ve²keré poºadavky v plném rozsahu vzhledem ke specickým poºadavk·m na zp·sob vedení evidence a ú£tování sluºeb. Oblastmi, kde by vyuºití existujících systému p°ipadalo v úvahu jsou správa obsahu pro prezentaci na Internetu a podpora on-line
1
vzd¥lávání. První skupina systém· je ozna£ována anglickou zkratkou CMS
nebo
WCMS a lze ji rozd¥lit do podskupin podle zp·sobu, jakým prezentují uloºená data.
Oine zpracování
Server vygeneruje statické HTML p°ed samotnou publikací.
Proto takové systémy nepot°ebují, aby server aplikoval ²ablony na data p°i kaºdém poºadavku. Výhody jsou zjevné pro vytíºené CMS pouºívané p°eváºn¥ pro £tení dat. Naopak p°i £astých zm¥nách dat mohou být tyto systémy pomalé nebo neaktuální, proto je nutné si jejich nasazení °ádn¥ rozmyslet. P°íkladem takového systému je nap°íklad Vignette CMS.
Online zpracování
Server generuje prezenta£ní data aº na základ¥ poºadavk·
klienta. To znamená, ºe server má daleko více práce. Proto je vhodné, aby vygenerovaná data uloºil do vyrovnávací pam¥ti a p°i dal²ím stejném dotazu vrátil poºadovaná data p°ímo z ní. Mezi nejznám¥j²í open source systémy pat°í Joomla, Drupal, WordPress, TangoCMS, DotNetNuke a Zope. Pokro£ilé systémy umoº¬ují i úpravy základních ²ablon, bez zásahu do zdrojových kódu.
Hybridní
Jak jiº název napovídá, tyto systémy kombinují oba p°edchozí p°ístupy.
P°íkladem takového systému je Blosxom, který se do£kal mnoha implementací v r·zných programovacích jazycích.
1
Content Management System - systém pro správu obsahu
43
7.1 Správci obsahu (CMS ) Systému pro správu obsahu existuje celá °ada. Zde si stru£n¥ p°edstavíme nejznám¥j²í trojici open source správc· webového obsahu napsaných v PHP. Celkov¥ se systémy moc neodli²ují a v²echny mají silnou komunitu, která se stará o vývoj a roz²í°ení. Je moºné, ºe p°i dal²ím vývoji informa£ního systému, n¥který z t¥chto správc· nahradí primitivní publika£ní systém, jenº byl v systému implementován.
Joomla! Systém Joomla! je vyvíjen od roku 2005 a vznikl od²t¥pením £ásti vývojá°· od projektu Mamboo. Joomla ve verzi 1.5 a vy²²í nabízí kompletní lokalizaci, blogy, fóra, hlasování, kalendá°, indexaci stránek, RSS kanály a r·zná témata. Pro Joomlu je napsáno p°es 3000 open source dopl¬k· a existují i komer£ní
2
dopl¬ky nap°íklad pro e-learning . Snadno lze vytvo°it také internetové obchody, rezerva£ní systémy a dal²í vlastní aplikace díky snadno roz²í°itelné MVC architektu°e. V neprosp¥ch Joomly nahrává málo strukturované rozd¥lení práv uºivatel· k jednotlivým £lánk·m a obsahu, coº se má ale s verzí 1.7 zm¥nit. Velikost základní instalace dosahuje 13,8 MB a drºí se hesla: nabídneme uºivateli rad¥ji víc, aby uºivatel nemusel nic p°idávat.
Obrázek 7.1: Joomla! - administrátorské rozhraní
2 http://www.joomlalms.com/
44
Drupal Drupal se stal open source projektem v roce 2001. Nabízí propracované rozhraní pro správu uºivatel·, statistiku p°ístup·, blogy, fóra a dal²í moduly v£etn¥ p°eklad· do mnoha jazyk·. V systému je dbáno hlavn¥ na bezpe£nost. Proto mohou být administráto°i automaticky upozorn¥ni na aktualizace jak jádra aplikace, tak p°idavných modul·. Navíc lze p°ístup do systému jednodu²e omezit podle IP adresy. Nejzajímav¥j²ím roz²í°ením s ohledem na cíl této práce je DrupalEd. Umoºnuje tvorbu a správu výukových materiál·, rozd¥lení uºivatel· do skupin (t°íd) s moºností nastavení p°ístupových práv k jednotlivých stránkám. Ob£as je Drupalu vy£ítano, ºe je oproti Joomle, v n¥kterých nasazeních pomalej²í. P°esto se jedná o velmi dobrý produkt vhodný i pro v¥t²í projekty, který s p°icházející verzí 7 tyto nedostatky postupn¥ odstra¬uje. Z pohledu vývojá°e m·ºe být p°ekáºkou trochu zastaralý neobjektový p°ístup. Kladn¥ je naopak p°íjmána velikost základní instalace, která se pohybuje kolem 4,8 MB.
Obrázek 7.2: Drupal - nastavení rolí v systému
45
Obrázek 7.3: Wordpress - správa widget·
Wordpress Wordpress je propracovaným publika£ním nástrojem, jehoº rozhraní je velice intuitivní a p°ehledné. Funkcionalitu lze roz²í°it pomocí zásuvných modul· a na po-
3
stranní panel lze p°idávat widgety , které lze v administrátorském prost°edí nastavit drag-and-drop
4
akcemi.
Na velice dobré úrovni je podpora t°íd¥ní £lánk· pomocí kategorií a ²títk·, kde je také umoºn¥no vytvo°ení trvalého odkazu na £lánek pro p°ípad zm¥ny za°azení do kategorií. K £lánk·m lze p°idávat fotogalerie, odkazy i videa. S verzí 2.7 rovn¥º p°ibyla moºnost stahovaní aktualizací a modul· p°es administrátorské rozhraní. Tento nástroj se zatím jeví jako vhodná alternativa k p°ede²lým dv¥ma komplexním správc·m, pro jednoduché publikování s minimálními nároky na studium administrátorského prost°edí. Také velikost projektu odpovídá jeho schopnostem, kdyº po rozbalení archívu má instalace velikost 6,9 MB. Je ov²em nutné podoknout, ºe samotné javascriptové knihovny zabírají t°etinu místa.
3 prvek na stránce zobrazující dopl¬kové informace 4 zp·sob práce s elementy, které lze p°esouvat mezi jednotlivými aplikacemi £i jejich £ástmi
46
7.2 E-Learning Samotnou kategorii p°edstavují specializované open source systémy pro e-learning, evidenci kurz· a jejich prodej. P°i popisu t¥chto systém· je moºné se setkat s následujícími výrazy:
•
5 Course Management System (CMS ) - systém pro správu kurz·
•
Learning Management System (LMS) - systém pro °ízení výuky
•
Virtual Learning Enviroment (VLE) - virtuální výukové prost°edí
V posledních letech zaºívají tyto systémy bou°livý vývoj. Vznikají bu¤ jako naprosto nové systémy, nebo jako roz²í°ení do stávajících CMS. D·leºitým faktorem pro práci s e-learningovými systémy je dodrºování standard· tak, aby bylo moºné rychle a snadno za£lenit jiº existující výukový materiál, který mohl vzniknout jiº p°ed samotným nasazením systému. Mezi tyto standardy
6
pat°í SCORM . Jedná se o soubor specikací, jenº by m¥l daný systém podporovat, aby v n¥m bylo moºné provozovat libovolný kompatibilní výukový obsah.
Moodle Open source implementace e-learningových systému jsou jiº dnes hojn¥ vyuºívány. P°íkladem je Moodle, který je roz²í°en v mnoha zemích v£etn¥ eské republiky a je vyuºíván i na n¥kolika zdej²ích univerzitách. Mezi ty nejv¥t²í pat°í UK, VUT a ZU. Podle [10] umoº¬uje £i podporuje snadnou publikaci studijních materiál·, zakládání diskusních fór, sb¥r a hodnocení elektronicky odevzdávaných úkol·, tvorbu online test· a °adu dal²ích £inností slouºících pro podporu výuky. Podporuje i napojení na jiné sluºby jako je LDAP nebo IMAP.
ATutor ATutor je navrºen s maximálním ohledem na p°ístupnost dle standardu W3C WCAG 1.0. P°i správ¥ výukového obsahu se m·ºete spolehnou na kompatibilitu s SCORM 1.2, pokro£ilou správu práv uºivatel· a kurz·. Lze v n¥m vytvá°et blogy, fóra, testy a vést evidenci o studijních výsledcích. Systém je snadno p°izp·sobitelný pomocí témat a výhodou je moºnost instalovat aktualizace a opravy p°ímo z webového prohlíºe£e.
5 Zkratka je v tomto p°ípad¥ shodná se systémy pro správu obsahu, která bude dále v textu up°ednot¬ována.
6
Shareable Content Object Reference Model - referen£ní model sdílitelných obsahových objekt· 47
Obrázek 7.4: Moodle - rozhraní pro u£itele
Obrázek 7.5: ATutor - instalátor aktualizací a oprav
48
Obrázek 7.6: eFront - úvodní administrátorská obrazovka
eFront EFront je vysoce propracovaný systém postavený na technologii AJAX s atraktivním designem. Samoz°ejmostí je podpora vícejazyková podpora a SCORM. Pro v¥t²í rmy m·ºe být p°ínosem spolupráce s LDAP. Navíc má jiº v základní instalaci integrován platební nástroj PayPal.
Claroline Claroline má jednoduché a p°ehledné rozhraní. Studenti mohou vyuºívat chat, diskuzní fóra a wiki. U£itelé mají moºnost vytvá°et úkoly nebo cvi£ení a zobrazit si jejich statistiky. P°i vytvá°ení obsahu je moºné se p°epnout do jiné role a zkontrolovat, jak se data zobrazují dané skupin¥ uºivatel·. Dále systém umoºnuje import kurz· ve formátu SCORM 1.2 a nastavení p°ístupu k jednotlivým stránkách podle p°íslu²noti ke skupinám. Administrátor si m·ºe zobrazit statistiky aktivit jednotlivých uºivatel· a jednodu²e spravovat jimi vytvo°ena data.
49
Obrázek 7.7: Claroline - rozhraní pro vedoucího kurzu
50
Kapitola 8 Záv¥r Implementovaný systém po n¥kfolika m¥sících ostrého provozu v jazykové agentu°e mnohonásobn¥ zkrátil dobu pot°ebnou k evidenci kurz·, zákazník·, student·, p°íprav¥ mezd a kontrole faktur. Do²lo ke zefektivn¥ní a zrychlení práce p°i vy°izování zakázek. Byly odstran¥ny duplicitní £innosti a v neposlední °ad¥ p°isp¥l k tlaku na dodavatele, aby ve vlastním zájmu svou £innost vykazovali v£as, p°esn¥ a podle daných pravidel. Navrºený obsah v²ech modul· se osv¥d£il a umoºnil jednodu²e zp°ístup¬ovat £ásti IS r·zným skupinám uºivatel·. Optimalizace proces· a minimalizace chyb p°inesly zvý²enou d·v¥ru zákazník· v agenturu. Významný je rovn¥º p°ínos IS ke správnosti a p°ehlednosti dat pro ú£etní evidenci náklad· a výnos· dle typ· produkt·. Ukázalo se, ºe existuje mnoho kvalitních open source nástroj·, framework· a jejich dopl¬k· usnad¬ujících a urychlujích vývoj systém·. Zavedení informa£ního systému do praxe ale poukázalo i na n¥které nedostatky v jeho implementaci a pouºitých nástrojích. Jde p°edev²ím o málo strukturované p°ístupové práva k záznam·m v tabulkách, jejichº rozd¥lení je p°ímo za£len¥né v kódu, a spolupráci s externími aplikacemi. V p°ípad¥ pouºitého databázového systému MySQL se jedná o hor²í podporu fultextového vyhledávání a práci s aplika£ními vyjímkami. Na vývoji systému je nutné je²t¥ dále pracovat a p°izp·sobovat ho aktuálním trend·m v oblasti komunikace. Rovn¥º vývoj pouºitých framework· p°iná²í k men²í £i v¥t²í zm¥ny, které promítají do funkcionality, výkonu a bezpe£nosti aplikace. Dal²í rozvoj systému by m¥l sm¥°ovat k implementaci n¥kterého ze správc· webového obsahu a nástroje pro podporu výuky popsaných v p°edcházející kapitole. V oblasti bezpe£nosti je pot°eba se zam¥°it
51
Literatura [1] Sklar D., Trachtenberg A. (2003): PHP Cookbook, O'Reilly, ISBN: 156592681 [2] Hugh E. W, Lane D. (2004): Web Database Applications with PHP and
MySQL, 2nd. ed., O'Reilly, ISBN: 0596000413 [3] Welling L., Thomson L. (2005): MySQL: Pr·vodce základy databázového sys-
tému, Computer Press, Praha, ISBN: 8025106713 [4] http://www.informacny-system.sk 1 [5] Wikipedia: Informa£ní systém, http://cs.wikipedia.org/wiki/Informa£ní_systém 2.1 [6] Dana Soukupová: Algoritmy logického návrhu rela£ní databáze, 2004 3 [7] Wikipedia: WYSIWYG, ervenec 2009 http://cs.wikipedia.org/wiki/WYSIWYG [8] Petr Dan¥k: Velký test PHP framework·, ervenec 2008 http://www.root.cz/clanky/velky-test-php-frameworku-2008/ 4.1 [9] Speed/validity selectors test for frameworks, 2007 http://mootools.net/slickspeed/ 4.2 [10] Moodle: úvodní stránka http://moodle.cz/ 7.2 [11] Cake Software Foundation: The Cookbook
http://book.cakephp.org/ 4.1, 5, 5.1 [12] Cake Software Foundation: Porozum¥ní Model-Pohled-Controller http://book.cakephp.org/cz/view/10/Understanding-Model-ViewController [13] Wikipedia: Model-view-controller http://en.wikipedia.org/wiki/Model-view-controller 4.1, 4.1
52
[14] Berners-Lee,
Masinter
&
McCahill:
Uniform
Resource
Locators
(URL),
RFC1738, Prosinec 1994 http://www.ietf.org/rfc/rfc1738.txt 5 [15] Wikipedia: Object-relational mapping
http://en.wikipedia.org/wiki/O-RM 4.1 [16] I18n - Internacionalizace http://kore..muni.cz:5080/wiki/index.php/ I18n_-_Internacionalizace 6 [17] PV168/Lokalizace a internacionalizace http://kore..muni.cz:5080/wiki/index.php/PV168/ Lokalizace_a_internacionalizace 7 [18] Jason Chow: P28n, the top to bottom persistent internationalization tutorial http://bakery.cakephp.org/articles/view/ p28n-the-top-to-bottom-persistent-internationalization-tutorial 5.3 [19] Random password generator component for CakePHP, erven 2008 http://www.solitechgmbh.com/2008/06/11/ random-password-generator-component-for-cakephp/ 5.3 [20] Rafael Bandeira: Linkable Behavior. Taking it easy in your DB, Listopad 2008 http://blog.rafaelbandeira3.com/2008/11/16/ linkable-behavior-taking-it-easy-in-your-db/ 5.2 [21] Brandon Parise: HABTM Add & Delete Behavior, Kv¥ten 2007 http://bakery.cakephp.org/articles/view/add-delete-habtm-behavior 5.2 [22] Apache HTTP Server Version 2.0 Documentation http://httpd.apache.org/docs/2.0/ 6.1 [23] http://code.google.com/p/searchable-behaviour-for-cakephp/ 5.4 [24] http://www.mysql.com/ 4.1 [25] http://www.ecma-international.org/publications/standards/Ecma-262.htm 4.2
53
Dodatek A Obsah p°iloºeného CD Bakalá°ká práce
tisknutelný PDF soubor s textem této práce.
54
55
Dodatek B Databázové schéma
56