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 rm¥ Primalingua s.r.o. za poskytnutí prost°edk· na vývoj 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
2 Analýza úlohy
9
2.1
Denice a up°esn¥ní pojm· . . . . . . . . . . . . . . . . .
9
2.2
Poºadavky klienta . . . . . . . . . . . . . . . . . . . . . .
10
3 Návrh °e²ení
14
3.1
Konceptuální návrh . . . . . . . . . . . . . . . . . . . . .
15
3.2
Logický návrh . . . . . . . . . . . . . . . . . . . . . . . .
18
3.3
Fyzický návrh . . . . . . . . . . . . . . . . . . . . . . . .
20
4 Pouºité technologie a frameworky
21
4.1
Server
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
4.2
Klient
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
5 Programátorská dokumentace 5.1
Adresá°ová struktura . . . . . . . . . . . . . . . . . . . .
5.2
Modely (Models )
5.3
adi£e (Controllers )
5.4
Dopl¬ky (Pluginy)
. . . . . . . . . . . . . . . . . . . . . .
27 27 28
. . . . . . . . . . . . . . . . . . . .
31
. . . . . . . . . . . . . . . . . . . . .
35
6 Uºivatelská dokumentace
36
6.1
Instalace serveru
. . . . . . . . . . . . . . . . . . . . . .
36
6.2
Umíst¥ní aplikace . . . . . . . . . . . . . . . . . . . . . .
37
6.3
Inicializace databáze
. . . . . . . . . . . . . . . . . . . .
37
6.4
Up°es¬ující informace . . . . . . . . . . . . . . . . . . . .
38
6.5
Správce (hlavní manaºer) . . . . . . . . . . . . . . . . . .
38
6.6
Dodavatel
42
. . . . . . . . . . . . . . . . . . . . . . . . . .
7 Existující implementace
43
7.1
CMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
44
7.2
E-Learning . . . . . . . . . . . . . . . . . . . . . . . . . .
45
3
8 Záv¥r
51
9 Obsah p°iloºeného CD
54
A Obsah CD
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 Abstrakt: 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)
5
- a module for News (sending bulk mail), the schedule of teaching, class books, study material - 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ím prost°edí svou nepostradatelou roli. Internet, který se stal 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í úmoº¬ují tyto systémy rychlé a snadné zpracování, vyhledávání a publikovaní informací, které se tak stávají dostupné pro ²ir²í spektrum zákazník·, dodavatel· i samotných zam¥stanc·. S vyuºíváním Internetu zárove¬ rostou nároky na bezpe£nost a dostupnost uloºených informací. Ty jsou ºivotn¥ d·leºité pro chod rem a bývají jejich nejcen¥j²ím majetkem. Zvy²ují se poºadavky kladou tlak na 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 rma s jeho vyuºitím v daném £ase dosáhnout. Tomu by m¥la pomoci d·kladná analýza remních proces· a jejich optimalizace.
Kdo nepozná vlastní remní procesy, nem·ºe je zlep²ovat. [1] Zm¥na zavedených proces· bývá náro£ná, jak z nan£ního hlediska, tak z hledika její vlastní realizace. D·leºitou roli zde hraje plánování £asového hramonogramu a jeho dodrºování. Zlep²ení výsledk· £innosti rmy 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 remní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
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, urº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, výpo£et výplat 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 úmoºnící tvorbu podklad· pro ú£etní evidenci, které mohou být v budoucnu zavedeny do n¥kterého jiº existujícího ú£etního programu.
Obsah práce Ve druhé kapitole této práce je provedena analýza úlohy a jsou mimo jiné stanoveny poºadavky na °e²ení. Ve t°etí kapitole jsou stru£n¥ popsány technologie dále pouºívané v této práci a je ukázáno jejich pouºití. tvrtá 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í. 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é bylo 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. 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 remních proces·. Cílem je p°iblíºit £tená°i problematiku návrhu 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 rem zabývající se jazykovou p°ípravou, p°eklady a tlumo£ením.
Agentura Pojem agentura se m·ºeme setkat 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 útvar 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
9
seznam· a dal²í remní evidence, které se velice obtíºn¥ sdílely s více sub¥kty, 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í[2], 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í, 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·.
2.2 Poºadavky klienta Základním úkolem popisované 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 remních i 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· . Ve°ejnost posílá zápisové listy s ohledem na nabídku kurz· 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 rovn¥º stála ºádost 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.
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.
10
•
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 a nov¥ zahájené kurzy.
•
U produktu vloºí poskytovatele, p°i°adí zákazníka, studenty, lektora nebo p°ekladatele a dále cenu za jednotku.
•
U lektora £i p°ekladatele vloºí jeho 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.
•
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· 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árov¥n 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á nejen od po£tu odu£ených hodin £i p°eloºených stran, ale i od po£tu ú£astník·.
•
P°ed fakturací pro klienta si administrátor m·ºe sestavit seznam poloºek k fakturaci.
•
P°íloha za p°eklady a výuku se li²í. U p°eklad· není uvedeno jméno p°ekladatele.
Správa lektor· a p°ekladatel· Práce agentury spo£ívá mimo jiné i ve shromaº¤ování kontakt· na osoby zabývající se výukou, p°eklady a tlumo£ením. Musí být úmoº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.
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.
12
Vícejazyková podpora 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.
•
Uºivatelé by m¥li mít moºnost si jednodu²e vybrat mezi n¥kolika jazykovými variantami.
Úzká provázanost s webem Na webových stránkách se zobrazuje aktuální rozvh ve°ejných kurz·, jenº je i jinak dostupný na dve°ích u£eben. Ostatní rozvh individuální výuky bude dostupný po p°ihlá²ení do systému.
13
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í data ve rm¥. Ukládání dat bude realizováno v rela£ní databázi. Ta poskytuje funkce pro vytvo°ení, £tení, zm¥nu a smazání
1
uloºených informací
a v tomto p°ípad¥ se jeví jako nejlep²í ze zp·sob·
ukládání dat. V rámci vývoje a testování vybrané technologie byl rovn¥º vytvo°en návrh zjednodu²ené verze XML
2
databáze uchovávané v souboru a zpra-
covávanho 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 k dat·m. 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·. Alernativu 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í. Protoºe a£koliv jsou XML databáze v komer£ních produktech na velmi dobré úrovni, jejich implementace ve voln¥ dostupných aplikacích mírn¥ zaostává. Návrh dob°e strukturované rela£ní databáze vyºaduje p°edev²ích pochopení vztah· a proces· fungování rmy, 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¬ úmoº¬ovala rychlé zpracování uºivatelských poºadavk·. Celý proces návrhu m·ºeme rozd¥lit na £ty°i základní fáze[3]: analýza poºadavk· a specikace, konceptuální návrh, logický návrh a fyzický návrh. Analýza
CRUD z anglických slov create, read, update, delete. Extensible Markup Language - standardní formát pro vým¥nu informací a popis
1 N¥kdy je pouºívaní zkratka 2 stuktury dokumentu
14
poºadavk· a specikace byla denována v p°edcházející kapitole.
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 specické informace o daných produktech je pot°eba udrºovat jako speciální atributy. Zvít¥zila proto varianta jedné tabulky s minimem poloºek pro produkt. V budoucí roz²i°ovaní by 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ý popisek.
•
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 subjekt (uºivatel), který se stará o jeho realizaci. Hledá dodavatele i odb¥ratele a jsou na n¥j vystaveny faktury.
•
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í, zapo£ítat po£et ú£astník· na p°ihlá²ce).
•
Jednotka a jednotková cena
Smlouvy V návrhu se po£ítá s kontrolou maximálního po£tu odpracovaných jednotek. N¥které moºnosti nastavení jsou pevn¥ zakomponované a p·jde je zm¥nit pouze zásahem do zdrojových kód· nebo databáze.
15
•
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 úmoº¬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 jejich kontrola provád¥na i 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.
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.
16
P°ihlá²ky (objednávky) Tabulka slouºí k evidenci zákazník· 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.
Ú£astníci Ú£astníci jsou p°i°azeni k danému produktu, p°es p°ihlá²ku, kde je denován plátce.
•
P°ihlá²ka
•
Ú£astník vybraný z tabulky uºivatel·.
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í
17
3.2 Logický návrh Celý návrh byl rozd¥len do n¥kolika men²ích schémat, ke které byly d·kladn¥ji propracovány. 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á. 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 relalizovan tabulkou participators_events, kde existence záznamu s víceatributovým klí£em sloºeného s id ú£astníka a id události implikuje p°ítomnost osoby ve výuce. Evidence plateb je svázána s p°ihlá²kami, aby bylo moºné snadno 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. @todo clanky a testy
18
Obrázek 3.2: Schéma produkt· a vazeb na uºivatele
Obrázek 3.3: Evidence plateb
19
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ést 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, pokud vkládaný 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¥ma indentickými záznami, coº poru²í omezení na jedine£nost záznamu ve sloupci a vyvolaná vyjímka zabrání potvrzení transakce. 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.@todo
20
Kapitola 4 Pouºité technologie a frameworky Pouºité technologie byly £áste£n¥ determinovány poºadavy klienta. Systém vyuºívá výhradn¥ open source technologie tak, aby nebyly zvy²ovány náklady na nákup licencí.
4.1 Server Tento webový informa£ní systém vyuºívá technologi PHP (jazyk, interpret a knihovny), která vychází se skriptovacího víceú£elového jazyka, jenº byl p·vodn¥ vyvinut pro tvorbu dynamických webových stránek. Z tohoto vyuºití vznikla i zkatka z anglických slov Personal Home Page, které byly nahrazeny slovy PHP: Hypertext Preprocessor dající vznik
1
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.
2
Jazyk je tak de facto standardizovaný interpretem a mnoºstvím 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
3
velké projekty, 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.
1 http://cs.wikipedia.org/wiki/Rekurzivní_zkratka
2 dle statistiky na http://www.php.net/usage.php 3 Facebook, YouTube, Wikipedia (MediaWiki) a dal²í
21
Vývoj jazyka sebou nese i stinné stránky. Po létech vývoje dochází
4
k úpravavám API
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á jednodu²²ím vývoji aplikací 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 kontroly 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, které spl¬ují vet²inu poºadavk· jsou Zend, Prado, Symfony a CakePHP, který navíc ve výkonnostních testech podle [5] dopadl velmi dob°e a právem byl vybrán pro vývoj informa£ního systému.
CakePHP CakePHP je open source framework[8], 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.
MVC
Model-View-Controller (Model-Pohled-adi£) - softwarová archi-
tektura odd¥lující data, uºivatelské rozhraní a logiku aplikace[10]. Výsledný kód aplikace se stává p°ehledn¥j²ím a úmoº¬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 zobrazuje základní schéma procesu zpracování poºa-
5
davku klienta. 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£
4 anglická zkratka
Application Programming Interface, ozna£uje sadu funkcí, pro-
cedur £i t°íd programu £i knihovny, jenº mohou být vyuºívány programátorem
5
Uniform Resource Locator [11](jednotný lokátor zdroj·) popisuje sémantiku a syn-
taxi °et¥zce znak· slouºící k p°esné specikaci zdroje informací v prost°edí Internetu.
22
Obrázek 4.1: Diagram MVC dotazu[10]
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í) - pro-
gramá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[12]. 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 m·ºou 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 moºné ²et°it lidské zdroje na vlastní vývoj aplika£ní logiky. CakePHP zastává programátorskou losoi DRY - Don't Repeat Your-
self. 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í
6 P°íprava aplikace na podporu r·zných kulturních zvyklostí. [13]
7 Jedná se o dopln¥ní aplikace o data specická pro konkrétní národní/regionální prost°edí [14]
23
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 ), kte°í daný kód generují. 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 povaºuji pekárnu kódu (baker ) a podporu le²ení (scaolding ), které úmoº¬uje 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· tabulkek a jejich atribut·. Proto je doporu£eno p°i práci s CakePHP dodrºovat tyto konvence, které nejsou nijak závazné a jdou zm¥nit ve specikaci 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/cong/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 zdrojové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
je ve výsledku staºen v¥t²í
objem dat. Tento problém úsp¥²n¥ °e²í projekty jsMin
10
a CSSTidy
11
.
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/
24
MySQL MySQL je multiplatformní systém pro °ízení báze dat (DBMS, zkácen¥ databázový systém), který poskytuje v²echny pot°ebné vlastnosti nutné pro b¥h tohoto informa£ního systému:
•
cizí klí£e (foreign-keys)
•
poddotazy (subselect)
•
pohledy (views)
•
transakce
•
triggery
•
indexy, fultextové vyhledávání
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 [19]. T¥²í 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£· dodºujících standardy (doporu£ení) konsorcia W3C. Mezi podprované prohlíºe£e pat°í Mozilla Firefox 3.5, Opera 9, Google Chrome, Safari a ostatní prohlíºe£e zaloºené na vykreslovacím jád°e Webkit. Základními poºadavky kladené na prohlíºe£ jsou:
25
12
•
XHTML 1.0
•
CSS 2.1
•
JavaScript je dialektem ECMASriptu. Minimálním implementova-
13
ným standardem by m¥l být ECMA-262, revize 3[20]. 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 a javascriptového frameworku
14
Prototype
a jeho roz²í°ení Script.aculo.us
15
, 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 GUI
16
. Mezi hojn¥ vyuºívané pat°í JQuery, Moo-
Tools, Yahoo User Interface Library 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 [6]. Jak uº bylo zmín¥no vý²e, Prototype je skv¥le provázán s CakePHP, který tak programátorovi úmoº¬uje psát kód pouze v jednom programovacím jazyce - PHP. Krom¥ Scipt.aculo.us, je v systému pouºita i knihovna Livepipe
17
, 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í.
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 16 z anglických slov
Graphical User Interface, uºivatelské prost°edí, jenº úmoºnuje
uºivateli ovládat aplikaci pomocí grackých ovládacích prvk·
17 Dokumentace a staºení knihovny na http://livepipe.net
26
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 plné pochopení fungování frameworku CakePHP a kompletní dokumentaci v²ech metod je vhodné se nejprve nastudovat [8]. Dále jsou vysv¥tleny jen nejd·leºit¥j²í £ásti a zm¥ny v jáderných metodách.
5.1 Adresá°ová struktura Kód aplikace je logicky roz£len¥n podle p·vodu do 3 hlavních sloºek.
•
app - vlastní kód systému
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 - dopl¬ky 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 pouºité p°i prezentaci dat
•
cake - zdrojové kódy frameworku, do kterých by se nem¥lo zasahovat
27
•
vendors - knihovny t°etích stran pouºité v systému (TCPDF, CssTidy, JsMin)
Pro pojmenování soubor· ve sloºkách je dobré se °ídit zavedenými konvencemi uvedenými v manuálu [8].
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 (belon-
gsTo ) 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 (associationFore-
ignKey ). P°i pouºití pekárny kódu jsou relace vyhledány automaticky podle pravidel popsaných v 4.1 na stran¥ 24. 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
vrátí po£et vyhovujících záznam·
28
list
vygeneruje pole s hodnotami ze sloupce tabulky denované v prom¥nné $displayField daného modelu indexované standardn¥ primárním klí£em
threaded neighbors
vygeneruje vno°ené pole podle zadaného intervalu (ltf - rght )
1
vrátí poloºku p°ed (prev ) a za (next ) poloºkou, která by byla
nalezena pomocí nd('rst', $podminky) 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 ( ' c o n d i t i o n s ' => a r r a y ( ' Model . f i e l d ' => $ t h i s V a l u e ) , // v y g e n e r u j e k l a u z u l i WHERE Model . f i e l d = $ t h i s V a l u e ' r e c u r s i v e ' => 1 , // i n t ' f i e l d s ' => a r r a y ( ' Model . f i e l d 1 ' ) , // s l o u p e £ k y v dotazu SELECT ' o r d e r ' => a r r a y ( ' Model . c r e a t e d ' , ' Model . f i e l d 3 DESC' ) , // d e f i n i c e k l a u z u l e ORDER BY ' group ' => a r r a y ( ' Model . f i e l d ' ) , // s l o u p e £ k y p o u º i t é v k l a u z u l i GROUP BY ' l i m i t ' => n , // p o £ e t záznam· na s t r á n k u ' page ' => i , // n a j d i i −tou s t r a n u ' c a l l b a c k s ' => t r u e // moºné hodnoty j s o u : f a l s e , ' b e f o r e ' , ' a f t e r ' ) 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í (Behaviors ) V základní výbav¥ CakePHP je obsaºeno roz²í°ení Containable, které úmoºnuje dynamicky p°idávat asociované modely bez omezení hloubky
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.
29
2
rekurze . Je to ale pouze syntaktický cukr k metodám bindModel() a unbindModel(), které úmoºnují 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 [17], které má obdobnou syntaxi nastavení, ale vytvá°í jeden SQL dotaz za pomocí klauzují JOIN. Pro usnadn¥ní práce s relacemi typu M:N p°es tabulku s klí£i je pouºito roz²í°ení Extend Associations [18] . To úmoº¬uje jednoduché p°idání nebo smazání asociací, bez ovlivn¥ní ostatních jiº existujících. 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· ta-
bulky.
Versionable Logable
Ukládá aktuální verzi záznamu p°ed zm¥nou £i smazáním.
Zaznamenává akce uºivatel·.
2 Je ov²em pot°eba vzít na v¥domí, ºe CakePHP tak vygeneruje zna£né mnoºství dotaz·, které mohou mít vliv na výkon dané aplikace.
30
Ú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 DboSouce::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 invali-
date($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í.
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 Auth/Authmd5
Standardní knihovna p°idává k heslu °et¥zec deno-
vaný 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 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 konstan¥ DEFAULT_LANGUAGE v souboru ap-
p/cong/core.php [15].
Password Helper
Vygeneruje hezké a bezpe£né heslo zadané délky
bez opakujících se znak·. Jednotlivé znaky jsou vybírány z atributu
possible dané komponenty [16].
31
Autocomplete
P°idává metodu autocomplete(), která zpracuje získaná
data z formulá°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 úmoº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í )); } } }
Ajaxupdate
Slouºí pro usnadn¥ní editace záznam· p°es AJAX za pod-
pory javascriptové knihovny control.js, která je sou£ástí balíku scripta-
culous.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, html zprávy a
p°idávat p°ílohy.
32
Request Handler
Detekuje typ poºadavku podle odeslané hlavi£ky nebo
p°ípony.
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 ) .
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 projdou 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ºi-
vateli 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.
33
admin_invoiceattachment()
Jakmile jsou vypln¥ny informace o po-
skytovateli, 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.
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é vygeneruje 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 vy-
generuje p°ehled pro sestavení výplat 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 výplatu na 50 halé°· endif else if plátce dan¥ then if výplata > 5000 then zálohová da¬ := 15% z výplaty else 34
sráºková da¬ := 15% z výplaty 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
admin_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.
Události v kalendá°i Pro p°ehledné zobrazení údá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 CalendarHelper::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:0024:00 a 9.7-2009 00:00-14:00). Rozd¥lené záznamy jsou pak vykresleny pomocí metody CalendarHelper::week().
5.4 Dopl¬ky (Pluginy) 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 úmoº¬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.
35
Kapitola 6 Uºivatelská dokumentace Uºivatelská dokumentace si klade za cíl stru£n¥ p°iblíºit £tená°i výhody informa£ního systému a jeho základními zp·soby 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ý úmoºnuje zpracování zdrojových kód· a prezentaci výstupu protokolem HTTP pop°ípad¥ HTTPS. Nejznám¥j²ím voln¥ dostupným programem je Apache
[http://httpd.apache.org/], který úmoºnuje pomocí modul· [http://httpd.apache.org/modules/ p°idat podporu pro jazyk PHP nutný k b¥hu IS.
Staºení a instalace Apache Pokud pouºíváte n¥kterou z moderních linuxových distribucí, zkuste nejd°íve projít repozitá°e [@todo vysv¥tlit], zda se zde nenachází jiº hotový balík upravený pro snadn¥j²í instalaci a konguraci. # Debian
a
jeho
derivace
( Ubuntu ,
36
Kubuntu ,
...):
a p t −g e t
install
apache2
# Gentoo emerge
apache2
Pokud jste poºadovaný balík nena²li £i pouºíváte jiný opera£ní systém, m·ºete ze stránek projektu
1
vybrat odkaz vedoucí na poºadovaný
balík zdrojových kód· nebo p°edkompilovanou aplikaci pro Vá² opera£ní systém.
Kongurace Apache Pro správnou funkci aplikace je pot°eba doinstalovat, pop°ípad¥ pouze povolit následující moduly: mod_php5, mod_rewrite a mod_ssl. Pro správnou funkci zabezpe£eného p°ipojení [@todo denovat zabezpe£ené p°ipojení] je nutné vygenerovat certikáty a upravit konguraci stránek.
Staºení a instalace MySQL serveru uºivatelské jméno: isadb heslo: isapass
6.2 Umíst¥ní aplikace Pokud máme server správn¥ nakongurovaný, zkopírujeme sloºku s aplikací do adresá°e ur£eného kongurací Apache (obvykle /var/www £i C:\\Program Files\apache2\www - budeme ozna£ovat ROOT ). Pro v¥t²í bezpe£nost je doporu£eno zm¥nit webroot v konguraci apache na sloºku
ROOT /app/webroot. Dále je pot°eba nastavit p°ihla²ovací údaje k databázi podle 6.1p°edchozí £ásti v souboru ROOT /app/cong/database.php .
6.3 Inicializace databáze V souboru ROOT /app/cong/sql/isa_init.sql se nachází MySQL 5.0+ kompatibilní skript, který vytvo°í tabulky a naplní je daty nutnými k prvnímu p°ihlá²ení administrátora.
1 http://httpd.apache.org/download.cgi
37
6.4 Up°es¬ující informace Pro dal²í £tení manuálu je pot°eba up°esnit n¥kolik d·leºitých pojm·, které se budou dále vyskytovat.
Systémová skupina
je nutná pro správné fungování IS.
Tato sekce je rozd¥lena podle rolí denovaných v IS.
Správce: Editor:
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í zada-
nou 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 kurzu.
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:
Text u odkazu na zobrazení, editaci nebo smazání záznamu
mohou být nahrazeny po °ad¥ obrázky:
,
a
.
6.5 Správce (hlavní manaºer) Má standardn¥ nastavena ve²kerá p°ístupová práva ke v²em modul·m systému.
Správa IS Tento modul obsahuje moduly pro nastavení jednotlivých £ástí systému, správu uºivatel·, skupin, práv a ostatních £íselník· (dan¥, místnosti, kategorie produkt·).
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 na-
chází odkazy na akce související s uºivately. 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 a jejich zm
P°idání uºivatele [/admin/Users/add]:
Odkaz na formulá° je hlav-
ním menu a v £ástech, které na uºivatelích závisí. Jedinnou povinnou poloºkou je zobrazované jméno, která slouºí jako popisek ve v²ech výb¥rových 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 aktivní.
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á
39
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
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
hierarchické 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.
40
Obrázek 6.1: Na²eptáva£
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
•
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
41
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.
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·.
6.6 Dodavatel Dodavatel má p°ístup, ke v²em produkt·m, kde m¥l p°i°azen alespo¬ jeden výkaz. zadávání výkazu, evidence docházky do kurz·
42
Kapitola 7 Existující implementace Existujicí aplikace lze rozd¥lit na n¥kolik skupin. ádná v²ak nepokrývá ve²keré poºadavky v plném rozsahu. První skupina se více zam¥°uje na správu obsahu. Jsou ozna£ované anglickou zkratkou CMS
1
nebo WCMS,
které ozna£ující systémy pro správu webové obsahy. Tyto systémy lze 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 nepo°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 úmoº¬ují i úpravy základních ²ablon, bez zásahu do zdrojových kódu
2
pomocí nástroj· WYSIWYG .
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
2 Akronym vzniklý z anglické v¥ty What You See Is What You Get, ozna£uje zp·sob editace, p°i kterém je dokument na obrazovce totoºný s výslednou verzí[4].
43
7.1 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, bude 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 ko-
3
mer£ní 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.
Obrázek 7.1: Joomla! - administrátorské rozhraní
3 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°idaný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 ale 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.
Wordpress Wordpress je propracovaným publika£ním nástrojem, jehoº rozhraní je velice intuitivní a p°ehledné. Funkcionalitu lze roz²í°it pomocí plugin· a
4
na postranní panel lze p°idávat widgety , které lze v administrátorském prost°edí nastavit drag-and-drop
5
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 plugin· 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 malými nároky na studium administrátorského prost°edí.
7.2 E-Learning Samotnou kategorii p°edstavují r·zné specializované systémy pro e-learning, evidenci kurz· a prodej produkt·. Pro tyto systémy se nej£asteji uºívají tyto názvy:
4 prvek na stránce zobrazující dopl¬kové informace
5 zp·sob práce s elementy, které lze p°esouvat mezi jednotlivými aplikacemi £i jejich £ástmi
45
Obrázek 7.2: Drupal - nastavení rolí v systému
Obrázek 7.3: Wordpress - správa widget·
46
6
•
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émi 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
7
systému. Mezi tyto standardy 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. P°i vývoji informa£ního systému byla této £ásti v¥novaná nejmen²í pozornost z d·vod· existence kvalitních open source °e²ení. Implementace jednoduchého testování slovní zásoby se nem·ºe s následujícími produkty rovnat.
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 na²ich univerzitách, nap°íklad: UK , VUT a ZU. Podle ociálních stránek[7] 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.
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.
6 Zkratka je v tomto p°ípad¥ shodná se systémy pro správu obsahu, která bude dále v textu up°ednot¬ována.
7
Shareable Content Object Reference Model @todo 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: Claroline - rozhraní pro vedoucího kurzu
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. 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.
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. Vý£et v²ech funkcí by byl velmi obsáhlý, proto jsou zde uvedeny pouze nejzajímav¥j²í:
•
správa uºivatel·, lekcí, kurz· a kategorií
•
správce soubor· a digitální knihovny
•
tvorba test·
•
fóra, chat, kalendá°
49
•
pokrokové stopování (informace o pokroku uºivatele v lekcích), historie akcí
•
tvorba vlastních certikát·
•
platební nástroj - Paypal
Obrázek 7.7: eFront - úvodní administrátorská obrazovka . Velkou
50
Kapitola 8 Záv¥r Implementovaný systém po n¥kolika m¥sících ostrého provozu mnohonásobn¥ zkrátil dobu pot°ebnou k p°íprav¥ výplat 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 svou £innost vykazovali v£as a p°esn¥. 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 uvedených v p°edcházející kapitole. Zavedení informa£ního systému do praxe poukázalo rovn¥º i na n¥které nedostatky v jeho implementaci i pouºitých nástrojích. Na vývoj 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.
51
Literatura [1] http://www.informacny-system.sk 1 [2] Wikipedia: Informa£ní systém, http://cs.wikipedia.org/wiki/Informa£ní_systém 2.1 [3] Dana Soukupová: Algoritmy logického návrhu rela£ní databáze, 2004 3 [4] Wikipedia: WYSIWYG, ervenec 2009 http://cs.wikipedia.org/wiki/WYSIWYG 2 [5] Petr Dan¥k: Velký test PHP framework·, ervenec 2008 http://www.root.cz/clanky/velky-test-php-frameworku-2008/ 4.1 [6] Speed/validity selectors test for frameworks, 2007 http://mootools.net/slickspeed/ 4.2 [7] Moodle: úvodní stránka http://moodle.cz/ 7.2 [8] Cake Software Foundation: The Cookbook
http://book.cakephp.org/ 4.1, 5, 5.1 [9] Cake Software Foundation: Porozum¥ní Model-Pohled-Controller http://book.cakephp.org/cz/view/10/Understanding-Model-ViewController [10] Wikipedia: Model-view-controller http://en.wikipedia.org/wiki/Model-view-controller 4.1, 4.1 [11] Berners-Lee, Masinter & McCahill: Uniform Resource Locators (URL), RFC1738, Prosinec 1994 http://www.ietf.org/rfc/rfc1738.txt 5
52
[12] Wikipedia: Object-relational mapping
http://en.wikipedia.org/wiki/O-RM 4.1 [13] I18n - Internacionalizace http://kore..muni.cz:5080/wiki/index.php/I18n__Internacionalizace 6 [14] PV168/Lokalizace a internacionalizace http://kore..muni.cz:5080/wiki/index.php/PV168/Lokalizace_a_internacionalizace 7 [15] 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 [16] Random password generator component for CakePHP, erven 2008 http://www.solitechgmbh.com/2008/06/11/ random-password-generator-component-for-cakephp/ 5.3 [17] 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 [18] Brandon Parise: HABTM Add & Delete Behavior, Kv¥ten 2007 http://bakery.cakephp.org/articles/view/add-delete-habtmbehavior 5.2 [19] http://www.mysql.com/ 4.1 [20] http://www.ecma-international.org/publications/standards/Ecma262.htm 4.2
53
Kapitola 9 Obsah p°iloºeného CD Bakalá°ká práce
tisknutelný PDF soubor s textem této práce.
54
Dodatek A Obsah CD
55