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
6
1.1
Cíle práce
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
1.2
Obsah práce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
2 Analýza úlohy
8
2.1
Denice a up°esn¥ní pojm· . . . . . . . . . . . . . . . . . . . . . . .
8
2.2
Analýza poºadavk· klienta . . . . . . . . . . . . . . . . . . . . . . .
9
3 Návrh °e²ení
12
3.1
Konceptuální návrh . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
3.2
Logický návrh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
3.3
Fyzický návrh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
4 Pouºité technologie a frameworky
19
4.1
Server
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
4.2
Klient
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
5 Programátorská dokumentace
25
5.1
Adresá°ová struktura . . . . . . . . . . . . . . . . . . . . . . . . . .
25
5.2
Modely (Models )
26
5.3
adi£e (Controllers )
. . . . . . . . . . . . . . . . . . . . . . . . . .
29
5.4
Zásuvné moduly (Plugins ) . . . . . . . . . . . . . . . . . . . . . . .
33
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
6 Uºivatelská dokumentace
35
6.1
Instalace serveru
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
6.2
Správce
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
6.3
Dodavatel
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42
6.4
Student
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
6.5
Zákazník . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
3
7 Existující systémy
44
7.1
Správci obsahu (CMS )
. . . . . . . . . . . . . . . . . . . . . . . . .
44
7.2
E-Learning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48
7.3
Moºnosti integrace systém·
51
. . . . . . . . . . . . . . . . . . . . . .
8 Záv¥r
52
A Obsah p°iloºeného CD
56
B Databázové schéma
57
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 podnik zabývající se zejména výukou jazyk·, tlumo£ením a p°eklady. Práce obsahuje analýzu podnikových proces· a °e²ení problém· p°i návrhu databázového schématu. Hlavní sou£ásti vytvo°eného systému zahrnují moduly pro evidenci kurz·, správu uºivatel· a tvorbu ú£etních podklad·. Systém je realizován za pomoci technologie PHP a frameworku CakePHP s vyuºitím MySQL databáze pro ukládání strukturovaných dat. V práci jsou rozebrány výhody pouºívání frameworku p°i vývoji webových aplikací a moºné vyuºití existujících systému pro správu obsahu. Klí£ová slova: informa£ní systém, PHP, MySQL, CakePHP
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 The goal of the thesis is to design and implement a modular information system for a company particularly involved in teaching of foreign languages, interpreting and translating. The work includes analysis of business processes and solves problems in the design of the database scheme. The main parts of the system include modules for course records, users administration and the creation of accounting documents. The system is implemented with the help of technology PHP and framework CakePHP using the MySQL database to store structured data. The thesis analysed the benets of frameworks in the development of web applications and the potential usage of existing content management systems. Keywords: information system, PHP, MySQL, CakePHP
5
Kapitola 1 Úvod Informa£ní systémy hrají v rychle se rozvíjející spole£nosti svou nepostradatelnou roli. Internet, který se stal v posledních letech 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¥stnanc·. 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.
6
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 podnik·. Implementace bude provedena pomocí vhodných open source technologií a framework· pro vývoj webových aplikací. 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º¬ují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 modul· a ukazuje jejich pouºití na konkrétních p°íkladech. P°edposlední kapitola se zabývá popisem existujících systém· pro správu obsahu a podporu výuky. Následn¥ jsou probrány moºnostmi jejich integrace do vytvo°eného systému. 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í.
7
Kapitola 2 Analýza úlohy V kapitole jsou denovány základní pojmy pouºívané p°i popisu poºadavk· klienta. Dále obsahuje seznam specických poºadavk· 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ící se ve zdánliv¥ jednoduchých úkolech. Analýza úlohy vychází z informací získaných z materiál· dodaných klientem a 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.
Informa£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²í
8
remní evidence, které se velice obtíºn¥ sdílely s více subjekty, se vyvinuly systémy poskytující 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ává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.
9
Zavedení jednotných identikátor· Kv·li vý²e uvedený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°ijímá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ý rozvrh, kde je uvedena u£ebna, lektor, den a £as. 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 zkontrolovány 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 vytisknout 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.
10
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 v 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 na po£tu odu£ených hodin £i p°eloºených stran, tak na 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 zvyklostem v agentu°e bylo pot°eba odd¥lit evidenci zakázek vy°izovaných manaºerem pro r·zné podniky (tj. poskytovatele), které s agenturou ú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.
11
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, která poskytuje prost°edky pro vytvo°ení, £tení, zm¥nu a smazání uloºených in-
1
formací . V tomto p°ípad¥ se jeví jako nejlep²í volba z r·zných variant ukládání dat v souborech. P°edpokládá se nutnost p°ístupu k °ádov¥ stovkám aº tisíc·m produkt· a p°ibliºn¥ stejnému mnoºství uºivatel·. Zárove¬ je nutné evidovat aº n¥kolik tisíc 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 (nap°. MonetDB, Sedna, BaseX, Xindice, eXist-db) nebo rela£ní databáze s podporou XML (Oracle, MS-SQL). 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²ím 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 navrº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 struktury
1 N¥kdy je pouºívaná zkratka 2 dokumentu
12
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 specickými informacemi nebo pomocí strukturovaných poznámek.
•
Identikátor obsahuje informace 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.
•
Jednotka a jednotková cena slouºí zákazníkovi pro informace o ú£tování produktu.
•
Nastavení zp·sobu ú£tování slouºí pro správné stanovení zp·sobu výpo£tu výsledné ceny produktu. Moºné je zapo£ítat mnoºství odpracovaných jednotek nebo po£et ú£astník· na p°ihlá²ce.
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 je zaji²t¥na samostatným schématem sdruºujícím jednotlivé platební poloºky na ú£etním dokladu.
13
Ú£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, jeº 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.
14
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
Testování slovní zásoby Tvorba test· je závislá na vytvo°ených slovnících se slovní zásobou. Jednotlivé slovníky pomohou odd¥lit tématické celky ve výuce cizích jazyk· a mají denován zdrojový a cílový jazyk.
•
Po£et pokus·, který m·ºe student vykonat. V¥t²í po£et pokus· je vhodný pro tréninkové ú£ely.
•
asový limit na odeslání odpov¥dí od vytvo°ení nového pokusu.
íselníky Byly navrhnuty pro zjednodu²ení práce s vypl¬ováním formulá°· a odstran¥ní duplicit v tabulkách. Pat°í zde Místa, Kategorie, Jednotky, Dan¥, Skupiny, Oprávn¥ní a Jazyky.
15
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.
16
Obrázek 3.2: Schéma produkt· a vazeb na uºivatele
Obrázek 3.3: Evidence plateb
17
3.3 Fyzický návrh V uvedeném návrhu (B) 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 na p°iloºeném CD v souboru /app/cong/sql_init.sql. P°i vytvá°ení trigger· pro MySQL verze 5.2 nastal problém s vyvoláním výjimky 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 identickými záznamy, coº poru²í omezení na jedine£nost záznamu ve sloupci a vyvolaná výjimka 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 výjimka.
-- 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$$ P°i návrhu databáze byly pouºity sloupce typu ENUM, které by se musely pro pouºití v jiném databázovém systému p°epsat pomocí integritních omezení. 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.
18
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á technologii 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, které daly 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í ov²em výjimky , 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 ak-
tualizaci 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
19
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 mírného 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ýkonnostní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
odd¥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).
Obrázek 4.1: Diagram MVC dotazu [13]
20
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 odeslána (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[16]. 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, MS-SQL) nebo dokonce vlastní denované zdroje dat. Mezi ty mohou pat°it formátované soubory (CSV, XML, JSON) nebo sí´ové sluºby poskytující informace skrze ve°ejné
6
API (LDAP , Twitter, IMAP a dal²í). Mezi dal²í výhody, které CakePHP nabízí, pat°í SEO optimalizace stránek, pod-
7
8
pora i18n i l10n 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 zd·raz¬ující, ºe jednotlivé £ásti kódu by se v programu nem¥ly opakovat, jelikoº se sniºuje srozumitelnost kódu. Navíc se p°i modikaci 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.
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 [15].
6
Lightweight Directory Access Protocol, odleh£ený protokol pro ukládání a p°ístup k dat·m
na adresá°ovém serveru odvozený od X.500
7 P°íprava aplikace na podporu r·zných kulturních zvyklostí. [17]
8 Dopln¥ní aplikace o data specická pro konkrétní národní prost°edí [18]
21
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.
•
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 bohuºel limitována výkonností pouºitého skriptovacího jazyka. Tato omezení lze minimalizovat tzv. ke²ováním
9
£á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
10
staºen v¥t²í objem dat. Tento problém úsp¥²n¥ °e²í projekty JSMin
je ve výsledku
11
a CSSTidy
12
.
JSMin JSMin je optimalizátor JavaScriptového kódu pouºívaný pro zmen²ení velikosti. Odstra¬uje v²echny komentá°e a nepot°ebné bílé znaky, tj. mezery, tabulátory a konce °ádek. Výsledný soubor pouºitý v této práci obvykle dosahuje 60-70% p·vodní velikosti. Jiné optimalizátory (nap°. JSMinPlus) pouºívající ke své práci parser JavaScriptu mohou dosahovat lep²ích výsledk· zkracováním jmen lokálních prom¥nných a funkcí (metod).
CSSTidy CSSTidy je parser a optimalizátor kaskádových styl·. Umoº¬uje formátování a komprimaci CSS aº do verze 2.1. Výhodou je, ºe na rozdíl od jiných optimalizátor· neodstra¬uje pouze nadbyte£né bílé znaky a komentá°e, ale umí rovn¥º
9 10
cache [ke²], ozna£uje vyrovnávací pam¥´ HyperText Transfer Protocol, internetový protokol ur£ený pro vým¥nu dokument·
11 http://code.google.com/p/jsmin-php/ 12 http://csstidy.sourceforge.net/
22
spojovat jednotlivé denice styl· (nap°. spojuje denované atributy pozadí do jednoho záznamu).
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
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. 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 PostgreSQL) 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¥ do-
stupných prohlíºe£· dodrºujících standardy (doporu£ení) konsorcia W3C. Mezi podporované 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.
23
Základními poºadavky kladené na prohlíºe£ jsou:
13
•
XHTML 1.0
•
CSS 2.1
•
JavaScript je dialektem ECMAScriptu. Minimálním implementovaným stan-
14
dardem by m¥l být ECMA-262, revize 3 [27]. 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 provázanosti CakePHP s JavaScriptovým frameworkem Prototype ním Scriptaculous
16
15
a jeho roz²í°e-
. Dohromady snaºí zakrýt rozdíly mezi prohlíºe£i a zp°íjemnit
uºivateli pracovní prost°edí pomocí vizuálních efekt·.
Prototype Prototype není jediným £i nejlep²ím frameworkem. Existují i jiné, které mají roz17
sáhlej²í schopnosti v oblasti tvorby GUI
nebo pouºívaní dotazovacího jazyka
XPath. 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 sám o£ekává. Pomoci s výb¥rem m·ºe n¥kolik výkonnostních test·, jenº lze nalézt 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 - PHP. Krom¥ roz²í°ení Scriptaculous, je v systému pouºita i knihovna Livepipe
18
, která
se zam¥°uje hlavn¥ na tvorbu uºivatelského rozhraní - záloºky, okna a dal²í prvky známé z klasických aplikací.
13 http://www.w3.org/TR/xhtml1/ 14 http://www.w3.org/TR/CSS2/
15 Aktuální verzi naleznete na http://www.prototypejs.org/ 16 Knihovna se nachází na http://script.aculo.us 17
Graphical User Interface, uºivatelské prost°edí umoº¬ující uºivateli ovládání aplikace pomocí
grackých prvk·.
18 Dokumentace a staºení knihovny je moºné z http://livepipe.net.
24
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. Vygenerovaná dokumentace k 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 t°í hlavních adresá°·. P°i pojmenovávání soubor· v adresá°ích je dobré se °ídit konvencemi uvedenými v [11]. Zm¥nu názvu nebo umíst¥ní adresá°· je moºné provést úpravou konstant popsaných v souboru app/webroot/index.php.
•
app - vlastní kód aplikace
cong - kongura£ní soubory 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
25
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 denovat 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ících:
all
najde v²echna 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ézt na http://dev.mysql.com/tech-resources/articles/hierarchical-data.html.
26
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·, které 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 [21], které má obdobnou syntaxi nastavení, ale vytvá°í pouze jeden SQL dotaz za pomocí klauzulí 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.
27
Pro usnadn¥ní práce s relacemi typu M:N p°es tabulku s klí£i je pouºito roz²í°ení Extend Associations [22]. 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 vytvo°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 uvedeny 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í.
28
5.3 adi£e (Controllers ) adi£e jsou pouºívané 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í autentizaci, 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. Zárove¬ je ale Security.salt pouºíván pro ²ifrování cookies
3
a sessi-
ons, takºe by nem¥l z·stat prázdný. Proto byla vytvo°ena komponenta Au-
thmd5, která nep°idává zabezpe£ovací °et¥zec k heslu. Dal²í drobnou zm¥nou oproti p·vodní komponent¥ je automatické ha²ovaní 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
vybral jazyk, který byl uloºen do cookie 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 konstant¥ DE-
FAULT_LANGUAGE v souboru app/cong/core.php [19].
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 [20].
Autocomplete
P°idává metodu autocomplete(), která zpracuje získaná data
z formulá°ového prvku s atributem name obsahujícím 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¥ beforeFil-
ter() 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
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.
29
zákazník·m umoºn¥no vyhledávat pouze v produktech, které se jich p°ímo týkají.
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í )); } } }
Filter
Komponenta pro validaci vyhledávacích formulá°· a vygenerování podmí-
nek pro vyhledávání. Do p·vodního skriptu Nika Chankova byla p°idána podpora pro vyhledávání podle více hodnot najednou a uchovávání hledaného výrazu v URL.
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.
Email
Slouºí k odesílání email·. Lze pouºívat ²ablony a p°idávat p°ílohy.
RequestHandler
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, jejíº vygenerovaný kód byl posléze upraven.
30
Uºivatelé (UsersController ) 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 ) .
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 poslaná data z formulá°e 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 metodu o moºnost obnovy hesla po zadání odpov¥di na 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.
31
Produkty (ProductsController ) Krom¥ b¥ºných akcí pro ltrová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.
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 (ContractsController ) 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(), employees_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 (InvoicesController ) 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¥
32
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.
Události v kalendá°i (EventsController ) 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 fulltextové vyhledává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ºena 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 [24].
Komprimace skript· a kaskádových styl· (Asset ) Modul Asset [25] 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 JavascriptHelper::link() a HtmlHelper::css(). Soubory jsou optimalizovány a komprimovány metodami JSMin::minify() a
33
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 zpomalení generování výstupu. Slabé 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.
34
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º¬uje 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º¬uje 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 nejd°í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í repositá°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
35
# 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 [23].
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 repositá°í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 pro pot°eby informa£ního systému. Po p°ipojení k databázi jako správce (obvykle se jménem root nebo mysql a heslem zadaným p°i instalaci) m·ºete pouºít 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 je server správn¥ nakongurovaný, zkopírujte sloºku s aplikací do adresá°e zvoleného v konguraci Apache (obvykle /var/www nebo C:\\Program Fi-
2 http://httpd.apache.org/download.cgi
36
les\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. Dále je pot°eba se ujistit, ºe sloºka app/tmp/ má nastavena taková práva, aby do n¥j mohly PHP skripty zapisovat.
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. Import skriptu lze provést pomocí p°íkazové °ádky následujícím p°íkazem z adresá°e s uvedeným skriptem.
shell > mysql -- user = isa_admin -- password = isa_password \ isa_database < isa_init . sql
6.2 Správce 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 denici p°ístupových práv k jednotlivým modul·m. M·ºe delegovat £ást oprávn¥ní na dal²í skupiny nap°. administrativních pracovník· nebo lektor· s p°ístupem ke tvorb¥ test·.
Up°es¬ující informace Pro dal²í £tení manuálu je pot°eba up°esnit n¥kolik d·leºitých pojm· pot°ebných pro správné pochopení.
Systémová skupina Správce:
je nutná pro správné fungování IS.
pov¥°ený uºivatel s plnými právy ke v²em modul·m systému.
Poskytovatelé:
podniky, které jsou vedeny pod jednou st°echou a sdílí £ást
informací.
Dodavatelé:
zam¥stnanec, brigádník nebo podnik vykonávající zadanou práci.
Odb¥ratelé:
uºivatelé, kte°í si objednali libovolný produkt.
Ú£astníci:
studenti jednotlivých kurz·.
Texty u odkazu na zobrazení, editaci nebo smazání záznamu mohou být nahrazeny po °ad¥ obrázky:
,
a
.
37
První p°ihlá²ení Pro první p°ihlá²ení pouºijte p°ihla²ovací jméno admin a heslo isa2009. Následn¥ je doporu£eno zm¥nit si heslo kliknutím na odkaz Zm¥nit heslo nacházející se v pravém horním rohu.
Uºivatelé 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 související s uºivateli.
Seznam uºivatel· V horní £ásti se nachází odkazy na akce související s uºivateli. Filtry pro práci se seznamem uºivatel· jsou umíst¥ny nad hlavní tabulkou a dále v hlavi£ce tabulky s funkcí na²eptáva£e.
P°idání uºivatele Odkaz na formulá° je hlavním menu a v £ástech, které na uºivatelích závisí. Povinnou poloºkou je zobrazované 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 a zadal správnou kombinaci uºivatelského jména a hesla.
Editace uºivatele Uºivatele vyhledejte p°es ltr seznam· uºivatel· a klikn¥te na odkaz editovat. Jednotlivé údaje jsou rozd¥leny do skupin se souvisejícími údaji. 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·.
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. M¥l by je o této zm¥n¥ informovat. P°ípadn¥ m·ºe pouºít automatické generování hesla s odeslaním na uºivatel·v email.
38
Skupiny a oprávn¥ní V podmodulu
Skupiny a oprávn¥ní m·ºete p°idávat a mazat uºivatelské sku-
piny a jejich oprávn¥ní. Kaºdá skupina m·ºe m·ºe mít p°i°azeno více denovaných 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ím nastavení má kaºdá ze systémových skupin denované a p°i°azené oprávn¥ní k prexovaným akcím v²ech modul·. Tato oprávn¥ní jsou denována následujícím zp·sobem: *:customers_*, *:employees_*, *:providers_*,
*:students_*, *:admin_* a umoº¬ují dané skupin¥ v libovolném modulu spou²t¥t akce za£ínající jménem skupiny. V p°íkladu byl pouºit expanzní znak *, který je moºné pouºívat k nahrazení libovolného po£tu libovolných znak· a : ur£uje hranici mezi modulem a akcí (nap°. oprávn¥ní Users:*_view umoºní zobrazit v²echny prexované akce view v modulu
Uºivatelé).
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· a ú£tovacích jednotek.
Vytvo°ení nového produktu Vyberte kategorii a poskytovatele. Dále vypl¬te název produktu a informaci o datu zahájení a p°edpokládaném £i ºádaném datu ukon£ení prací. Výsledná cena pro zákazníka se bude odvíjet od dal²ího nastavení ve formulá°i. 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²krtn¥te moºnost
Po£ítat ú£astníky. Pokud nevíte dop°edu, kolik hodin bude odu£eno nebo 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·, byla-li odpovídající volba za²krtnuta.
•
Mezisou£et je vynásoben sou£tem odpracovaných jednotek v událostech ve výkazech p°i°azených k 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.
39
Obrázek 6.1: Na²eptáva£
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í (viz. 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²né 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.
Smlouvy Modul Smlouvy slouºí k evidenci dodavatel· a výpo£tu mezd. V p°ehledu smluv se zobrazují upozorn¥ní na p°ekro£ený limit odpracovaných jednotek na smlouvu. Je moºné rovn¥º ltrovat smlouvy podle uºivatele, poskytovatele, typu smlouvy, typu platby a stavu limitu.
Vytvo°ení nové smlouvy P°i vytvá°ení smluv vypl¬te následující údaje, aby bylo moºné správn¥ generovat podklady pro mzdy.
40
•
Typ smlouvy ur£uje zp·sob výpo£tu mezd. Typ sluºba ur£uje smlouvy, které její ú£astník fakturuje agentu°e. U ostatních typ· se generují zálohové a sráºkové dan¥, pokud je u smlouvy za²krtnuto, ºe je uºivatel plátcem dan¥.
•
Zp·sob platby nastavený na hotov¥ zp·sobí zaokrouhlování na 50 halé°·.
•
Uºivatel a poskytovatel ur£ují smluvní strany.
•
Maximání po£et jednotek nastavený na kladné £íslo upozorní ve výpisu na smlouvy s p°ekro£eným limitem odpracovaných jednotek.
Výkazy V modulu
Výkazy se evidují dodavatelé produkt· a jimi vykázané jednotky.
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 kategorie produkt·, ke kterým byly výkazy p°idány. Výkazy je rovn¥º moºné ltrovat podle jednotlivých produkt·, poskytovatel·, dodavatel· nebo aktuálního stavu. Pokud chcete zobrazit pouze výkazy za ur£ité období vypl¬te ve ltru datum za£átku a konce.
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, 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álostí k výkazu Vyhledejte, zobrazte poºadovaný výkaz a klikn¥te na Hromadn¥ p°idat události. Vypl¬te povinné poloºky m¥síc a rok. Pokud je známé místo a £as je moºné ho rovn¥º nastavit.
41
íselníky V této £ásti jsou stru£n¥ popsány pouºité £íselníky, jejich funkce v systému a moºnosti editace. V²echny 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°i°azeny 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 nebo je celý uvedený záznam odstran¥n.
Kategorie
obsahuje název, zkratku, jednoduchý slovní popis a za²krtávací polí£ko
ur£ující, zda se produkty v této kategorii povaºují za ve°ejné a má se zobrazovat jejich rozvrh na webových stránkách. Ú£el £íselníku spo£ívá v roz£len¥ní mnoºství produkt· do skupin, podle kterých lze vytvá°et tiskové sestavy, tj. 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.
Jednotky Jazyky títky
up°es¬ují zp·sob ú£tování produkt· a vykázaných jednotek.
slouºí pro nastavení slovník· pouºitých p°i testování slovní zásoby. obsahují název a odkaz na nad°azený ²títek, pro moºnost tvorby hierar-
chické struktury £lánk·.
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.3 Dodavatel Dodavatel má p°ístup ke svým výkaz·m, smlouvám a dokument·m ke staºení p°es poloºku v menu.
Výkazy Pro zobrazení seznamu výkazu klikn¥te v menu na Moje výkazy. Nalezená data lze ltrovat podle kategorie p°i°azeného produktu, jeho stavu, poskytovatele a typu smlouvy. Systém rovn¥º po£ítá sou£ty odpracovaných jednotek podle zadaného období. Kliknutím na daný výkaz zobrazíte jeho detaily, kde se nachází kalendá° vykázaných jednotek a seznam student·.
42
P°idání odpracovaných jednotek
provedete kliknutím na odkaz Hromadn¥
p°idat událost. Poté se zobrazí formulá°, kde vypl¬te místo, m¥síc, rok a £as výuky. V tabulce se dny v m¥síci dopl¬te po£ty odpracovaných jednotek v jednotlivých dnech.
Evidence docházky
studenta, který byl p°ítomen ve výuce, se provede kliknutím
na - v °ádku s datem výuky a ve sloupci se jménem studenta. Znak X zna£í p°ítomnost studenta ve výuce a zárove¬ je moºné ú£ast zru²it obdobným zp·sobem.
6.4 Student Pro zobrazení produkt·, kterých se ú£astníte, klikn¥te na poloºku v hlavním menu s popisem Ú£astním se. V detailu daného produktu je moºné zkontrolovat zaznamenanou docházku a p°e£íst si hodnocení vypracované lektorem.
Testování slovní zásoby V menu vyberte poloºku Moje testy. Pokud nebyly vy£erpány v²echny pokusy u testu, m·ºete vytvo°it nový pokus kliknutím na stejnojmenný odkaz. V dal²ím kroku se zobrazí formulá° s názvem testu a £asovým limitem. Od potvrzení stiskem tla£ítka Pokra£ovat se za£íná m¥°it £as. Na stránce vypl¬ujte odpov¥di na otázky. Odpov¥di m·ºete ukládat kdykoliv, ov²em pokud odzna£íte odpov¥di jako nální, test bude vyhodnocen a odpov¥di jiº nep·jdou m¥nit.
6.5 Zákazník Kliknutím v menu na Moje p°ihlá²ky, zobrazíte seznam v²ech p°i°azených produkt·. Jednotlivé produkty m·ºete ltrovat podle jména, kategorie, poskytovatele a aktuálního stavu. Po vybrání produktu se zobrazí p°ehled lektor· a student· p°i°azených k p°ihlá²ce. U kaºdé události je moºné také zkontrolovat ú£ast student·.
43
Kapitola 7 Existující systémy Existující implementace systém· podobného zam¥°ení jako vytvo°ený systém lze rozd¥lit na n¥kolik skupin. ádná v²ak nepokrývá ve²keré poºadavky v plném rozsahu vzhledem ke specickým zp·sob·m vedení evidence a ú£tování sluºeb. Byla proto zvolena varianta informa£ního systému na míru s moºností budoucího napojení na n¥který z existujících systému pro správu webového obsahu a podporu on-line vzd¥lávání. Cílem kapitoly je stru£ný popis nejpouºívan¥j²ích systém· vhodných pro budoucí propojení s IS.
7.1 Správci obsahu (CMS ) 1
Skupina systém· pro správu obsahu je ozna£ována anglickou zkratkou CMS
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í také úpravy základních ²ablon, bez zásahu do zdrojových kódu.
1
Content Management System - systém pro správu obsahu 44
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. 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 uºivatel·, kte°í se starají o vývoj a roz²í°ení.
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, r·zná témata, blogy, fóra, hlasování, kalendá°, indexaci stránek, RSS kanály a podporu pro LDAP.
Obrázek 7.1: Joomla! - administrátorské rozhraní 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. Nevýhodou m·ºe být málo strukturované rozd¥lení práv uºivatel· k jednotlivým £lánk·m a obsahu, coº se ale má s verzí 1.7 zm¥nit. Velikost základní instalace dosahuje 13,8 MB. Budoucí napojení by mohlo z výhodou pouºívat vý²e zmín¥nou kompatibilní architekturu MVC.
2 http://www.joomlalms.com/
45
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°ídavný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º¬uje 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£ítáno, º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°ijímána velikost základní instalace, která se pohybuje kolem 4,8 MB.
Obrázek 7.2: Drupal - nastavení rolí v systému
46
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é podotknout, ºe samotné JavaScriptové knihovny zabírají t°etinu místa.
Obrázek 7.3: Wordpress - správa widget·
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
47
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 Environment (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 se 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°ednost¬ována.
6
Shareable Content Object Reference Model - referen£ní model sdílitelných obsahových objekt· 48
Obrázek 7.4: Moodle - rozhraní pro u£itele
Obrázek 7.5: ATutor - instalátor aktualizací a oprav
49
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í uº je podpora SCORM a vícejazykového uºivatelského rozhraní. 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º¬uje import kurz· ve formátu SCORM 1.2 a nastavení p°ístupu k jednotlivým stránkách podle p°íslu²nosti ke skupinám. Administrátor si m·ºe zobrazit statistiky aktivit jednotlivých uºivatel· a jednodu²e spravovat jimi vytvo°ena data.
50
Obrázek 7.7: Claroline - rozhraní pro vedoucího kurzu
7.3 Moºnosti integrace systém· P°i integraci libovolného CMS a LMS bude pot°eba °e²it sdílení uºivatelských ú£t·. Vhodným °e²ením je vyuºití LDAP, které bylo pro tyto ú£ely navrºeno. Pouºité technologie a framework CakePHP jsou k takovému zp·sobu napojení p°izp·sobeny. Pro CakePHP jiº existuje hotový modul [14] pro komunikaci s LDAP serverem. Popisované systémy m¥ly podporu pro LDAP bu¤ p°ímo v jád°e nebo ji bylo moºné p°idat pomocí zásuvných modul·. Dal²ím z moºných problém· je p°edávání informací o p°ístupových právech k modul·m v r·zných systémech. Nap°íklad zaji²t¥ní uºivatelského p°ístupu k výukovým materiál·m uloºených v LMS studen·m zapsaným do produktu v IS. V²echny záznamy pouºívané nap°í£ databázemi by m¥ly mít jednozna£né identikátory tzv. UUID, aby bylo moºné efektivn¥ provád¥t pot°ebné databázové operace.
51
Kapitola 8 Záv¥r Implementovaný systém se po n¥kolika m¥sících ostrého provozu v jazykové agentu°e ukázal jako provozuschopný a spl¬uje v²echny stanovené cíle. 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, coº se projevilo prokazatelným nár·stem jejich po£tu. 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·. 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¥ databázového systému MySQL se jedná o hor²í podporu fulltextového vyhledávání a práci s aplika£ními výjimkami. Ukázalo se, ºe existují kvalitní open source nástroje usnad¬ující a urychlující návrh i samotnou implementaci podnikových informa£ních systém·. Dal²í rozvoj systému by m¥l sm¥°ovat k integraci n¥kterého ze správc· webového obsahu a nástroje pro podporu výuky, popsaných v p°edcházející kapitole. Mohla by být p°idána podpora on-line komunikace a p°ihla²ování pomocí jednotné sdílené univerzální identity (nap°. Open ID). V oblasti bezpe£nosti je pot°eba se zam¥°it na moºnost denování p°ístupu uºivatel· k dat·m na úrovni tabulek, °ádk· nebo jednotlivých poloºek. Nejlep²í moºnou variantou by bylo °ízení p°ístupu na úrovni databáze. Oproti provád¥ní stejného úkonu na aplika£ní úrovni odpadá nutnost opakované implementace pro jinou aplikaci, která by mohla p°istupovat k uloºeným dat·m.
52
Literatura [1] Sklar D., Trachtenberg A.: PHP Cookbook, O'Reilly, 2003, ISBN: 156592681 [2] Hugh E. W, Lane D.: Web Database Applications with PHP and MySQL, 2nd. ed., O'Reilly, 2004, ISBN: 0596000413 [3] Welling L., Thomson L.: MySQL: Pr·vodce základy databázového systému, Computer Press, Praha, 2005, ISBN: 8025106713 [4] o predchádza výberu informa£ného systému? http://www.informacny-system.sk 1 [5] Wikipedia: Informa£ní systém, 2009 http://cs.wikipedia.org/wiki/Informa£ní_systém 2.1 [6] Dana Soukupová: Algoritmy logického návrhu rela£ní databáze, 2004 bakalá°ská práce MFF UK 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, erven 2009 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
53
[13] Wikipedia: Model-view-controller http://en.wikipedia.org/wiki/Model-view-controller 4.1, 4.1 [14] LDAP datasource for cakePHP, ervenec 2007 http://bakery.cakephp.org/articles/view/ldap-datasource-for-cakephp 7.3 [15] Berners-Lee,
Masinter
&
McCahill:
Uniform
Resource
Locators
(URL),
RFC1738, Prosinec 1994 http://www.ietf.org/rfc/rfc1738.txt 5 [16] Wikipedia: Object-relational mapping
http://en.wikipedia.org/wiki/O-RM 4.1 [17] I18n - Internacionalizace http://kore..muni.cz:5080/wiki/index.php/ I18n_-_Internacionalizace 7 [18] PV168/Lokalizace a internacionalizace http://kore..muni.cz:5080/wiki/index.php/PV168/ Lokalizace_a_internacionalizace 8 [19] 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 [20] Random password generator component for CakePHP, erven 2008 http://www.solitechgmbh.com/2008/06/11/ random-password-generator-component-for-cakephp/ 5.3 [21] 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 [22] Brandon Parise: HABTM Add & Delete Behavior, Kv¥ten 2007 http://bakery.cakephp.org/articles/view/add-delete-habtm-behavior 5.2 [23] Apache HTTP Server Version 2.0 Documentation http://httpd.apache.org/docs/2.0/ 6.1 [24] Searchable behaviour for CakePHP 1.2 http://code.google.com/p/searchable-behaviour-for-cakephp/ 5.4 [25] Matt Curry: Asset Packer CakePHP Plugin, 2009 http://github.com/mcurry/asset 5.4
54
[26] Matt Curry: Asset Packer CakePHP Plugin, 2009 http://github.com/mcurry/url_cache [27] ECMAScript Language Specication http://www.ecma-international.org/publications/standards/Ecma-262.htm 4.2
55
Dodatek A Obsah p°iloºeného CD doc
Automaticky generovaná dokumentace API.
sources
Informa£ní systém jazykové agentury
app Zdrojové kódy informa£ního systému. cake Framework CakePHP 1.2.3.8166. docs Licence ke CakePHP. vendors Knihovny JSMin 1.1.1, CSSTidy 1.3 a TCPDF 4.0.016. thesis
PDF soubor s textem této práce.
56
Dodatek B Databázové schéma Databázové schéma bylo vygenerováno pomocí nástroje MySQL Workbench 5.2.1 a je zobrazeno na dal²í stran¥.
57
58