VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY

FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY

FACULTY OF ELECTRICAL ENGINEERING AND COMMUNICATION DEPARTMENT OF CONTROL AND INSTRUMENTATION

SROVNÁNÍ FRAMEWORKŮ PRO VÝVOJ DATABÁZOVÝCH APLIKACÍ

DIPLOMOVÁ PRÁCE MASTER'S THESIS

AUTOR PRÁCE Bc. MARTIN DUFEK AUTHOR

BRNO 2013 VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY

FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY

FACULTY OF ELECTRICAL ENGINEERING AND COMMUNICATION DEPARTMENT OF CONTROL AND INSTRUMENTATION

SROVNÁNÍ FRAMEWORKŮ PRO VÝVOJ DATABÁZOVÝCH APLIKACÍ

THE COMPARATION OF THE FRAMEWORK TOOLS

DIPLOMOVÁ PRÁCE MASTER'S THESIS

AUTOR PRÁCE Bc. MARTIN DUFEK AUTHOR

VEDOUCÍ PRÁCE Ing. RADOVAN HOLEK, CSc. SUPERVISOR

BRNO 2013

ABSTRAKT Tato diplomov´a pr´ace se zab´yv´a sezn´amen´ım se s dostupn´ymi frameworky v jazyce , pracuj´ıc´ım v prostˇred´ı tenk´eho klienta. Zamˇeˇruje se na porovn´an´ı dvou framework˚u Co- deIgniter a Zend Framework. V dalˇs´ı ˇc´asti nab´ız´ı podrobn´y popis knihoven framework˚u. Pro porovn´an´ı jsem navrhl obˇema frameworky vzorovou aplikaci, obsahuj´ıc´ı z´akladn´ı prvky, kter´e se vyuˇz´ıvaj´ıc´ı pˇri tvorbˇe vˇetˇsiny webov´ych aplikac´ı. V z´avˇeru jsou porovn´any v´yhody a nev´yhody v´yvojov´ych prostˇred´ı.

KL´ICOVˇ A´ SLOVA Framework, n´astroje pro tenk´eho klienta, model, pohled, kontroler, PHP, SQL, Zend framework, CodeIgniter

ABSTRACT This diploma thesis deals with familiarization with available frameworks in the PHP language working in a thin client environment. It focuses on the comparison of two frameworks CodeIgniter and Zend Framework. The next section provides a detailed de- scription of framework libraries. I suggested sample application made by two frameworks for a comparison, which contains the basic elements, that are used in creating majority of web applications. In the conclusion there are compared pros and cons of development environments.

KEYWORDS Framework, tools for thin client, model, view, controller, PHP, SQL, Zend framework, CodeIgniter

DUFEK, Martin Srovn´an´ı framework˚u pro v´yvoj datab´azov´ych aplikac´ı: diplomov´a pr´ace. Brno: Vysok´e uˇcen´ı technick´e v Brnˇe, Fakulta elektrotechniky a komunikaˇcn´ıch techno- logi´ı, Ustav´ automatizace a mˇeˇric´ı techniky, 2013. 85 s. Vedouc´ı pr´ace byl Ing. Radovan Holek, CSc. PROHLA´SENˇ ´I

Prohlaˇsuji, ˇze svou diplomovou pr´aci na t´ema Srovn´an´ı framework˚u pro v´yvoj da- ” tab´azov´ych aplikac´ı“ jsem vypracoval samostatnˇe pod veden´ım vedouc´ıho diplomov´e pr´ace a s pouˇzit´ım odborn´e literatury a dalˇs´ıch informaˇcn´ıch zdroj˚u, kter´e jsou vˇsechny citov´any v pr´aci a uvedeny v seznamu literatury na konci pr´ace. Jako autor uveden´e diplomov´e pr´ace ´ale prohlaˇsuji, ˇze v souvislosti s vytvoˇren´ım t´eto diplomov´e pr´ace jsem neporuˇsil autorsk´a pr´ava tˇret´ıch osob, zejm´ena jsem nezas´ahl nedovolen´ym zp˚usobem do ciz´ıch autorsk´ych pr´av osobnostn´ıch a jsem si plnˇe vˇedom n´asledk˚u poruˇsen´ı ustanoven´ı S 11 a n´asleduj´ıc´ıch autorsk´eho z´akona ˇc. 121/2000 Sb., vˇcetnˇe moˇzn´ych trestnˇepr´avn´ıch d˚usledk˚u vypl´yvaj´ıc´ıch z ustanoven´ı S 152 trestn´ıho z´akona ˇc. 140/1961 Sb.

Brno ...... (podpis autora) Podˇekov´an´ı Dˇekujivedouc´ımu diplomov´epr´aceIng. Radovan Holek, CSc. za ´uˇcinnoumeto- dickou, pedagogickou a odbornou pomoc a dalˇs´ı cenn´erady pˇri zpracov´an´ı m´e semestr´aln´ıpr´ace.Dˇekujirodiˇc˚umza podporu.

V Brnˇedne ...... Podpis autora ...... OBSAH

1 V´yvojov´en´astroje 13 1.1 PHP ...... 13 1.2 SQL ...... 13 1.3 Framework ...... 13 1.3.1 Zend framework ...... 13 1.3.2 CakePHP ...... 14 1.3.3 ...... 14 1.3.4 ...... 14 1.3.5 Nette ...... 15 1.3.6 CodeIgniter ...... 15 1.3.7 Prado ...... 15 1.3.8 Jelix ...... 16 1.3.9 Lamplighter ...... 16 1.4 N´avrhov´yvzor MVC ...... 16 1.4.1 Princip MVC ...... 16 1.4.2 Model ...... 17 1.4.3 View ...... 17 1.4.4 Controller ...... 18

2 Knihovny 19 2.1 Vlastn´ıknihovny ...... 19 2.1.1 CodeIgniter ...... 19 2.1.2 Zend Framework ...... 25 2.2 Volnˇedostupn´eknihovny ...... 32 2.2.1 CodeIgniter ...... 32 2.2.2 Zend framework ...... 33 2.3 Vyuˇzit´ıknihoven pˇrin´avrhu aplikac´ı ...... 34

3 Porovn´an´ıframework˚uZend a CodeIgniter 35 3.1 Vlastnosti ...... 35 3.2 Dokumentace ...... 37 3.3 Adres´aˇrov´astruktura ...... 38 3.4 V´yvoj ...... 39 3.5 Srovn´avac´ıtabulka ...... 40 3.6 Zhodnocen´ıvlastnost´ı...... 40 4 Vzorov´eaplikace 42 4.1 Vyuˇzit´eprogramy ...... 42 4.2 Datab´aze ...... 42 4.3 Zend ...... 44 4.3.1 Konfigurace ...... 44 4.3.2 Filtrov´an´ıa oˇsetˇren´ıvstupn´ıch dat ...... 45 4.3.3 Str´ankov´an´ı ...... 46 4.3.4 Vyhled´av´an´ı ...... 46 4.3.5 Spr´ava uˇzivatel˚u ...... 48 4.3.6 Pˇridˇelov´an´ırol´ı ...... 49 4.3.7 Odes´ıl´an´ıEmail˚u...... 51 4.4 CodeIgniter ...... 52 4.4.1 Konfigurace ...... 52 4.4.2 Filtrov´an´ıa oˇsetˇren´ıvstupn´ıch dat ...... 52 4.4.3 Str´ankov´an´ı ...... 53 4.4.4 Vyhled´av´an´ı ...... 54 4.4.5 Spr´ava uˇzivatel˚u ...... 54 4.4.6 Pˇridˇelov´an´ırol´ı ...... 55 4.4.7 Odes´ıl´an´ıEmail˚u...... 56

5 Uspoˇr´ad´an´ıvzorov´ych aplikac´ı 57

6 Zivotn´ıcyklyˇ 60 6.1 Popis ˇzivotn´ıhocyklu ...... 61 6.2 Tabulka stav˚ua pˇrechod˚uStr´anky ...... 62

7 Porovn´an´ıVzorov´ych aplikac´ı 63 7.1 Filtrov´an´ıa oˇsetˇren´ıvstupn´ıch dat ...... 63 7.2 Str´ankov´an´ı ...... 64 7.3 Spr´ava uˇzivatel˚u...... 64 7.4 Odes´ıl´an´ıEmail˚u ...... 65 7.5 Rychlost ...... 65 7.6 Velikost ...... 67 7.7 Zhodnocen´ı ...... 67

8 Srovn´an´ısloˇzitostin´avrhu aplikac´ı 69

9 Z´avˇer 70

Literatura 71 Seznam symbol˚u,veliˇcina zkratek 73

Seznam pˇr´ıloh 74

A Datab´aze- uˇzivatele 75

B Datab´aze- autentizace CI 76

C Zivotn´ıcyklusˇ - akce 77

D Zivotn´ıcyklusˇ - Rubrika 79

E Mˇeˇren´ırychlosti - vyhled´av´an´ı 81

F Mˇeˇren´ırychlosti - naˇcten´ı´uvodn´ıstr´anky 82

G Mˇeˇren´ırychlosti - pˇrihl´aˇsen´ı 83

H Mˇeˇren´ırychlosti - publikov´an´ı 84

I Mˇeˇren´ırychlosti - otevˇren´ırubriky v menu 85 SEZNAM OBRAZK´ U˚

1.1 Pr˚ubˇehpoˇzadavku MVC[2] ...... 17 1.2 Pr˚ubˇehpoˇzadavku v controlleru[2] ...... 18 3.1 Logo CodeIgniter a Zend framework[5][14] ...... 35 3.2 Adres´aˇrov´astruktura - Zend Framework ...... 38 3.3 Adres´aˇrov´astruktura - CodeIgniter ...... 39 4.1 ER digram obsahu aplikac´ı...... 43 4.2 Zend konfigurace ...... 45 4.3 Zend Validace dat uˇzivatele ...... 46 4.4 Zend controller - zobrazen´ıstr´ankovan´ych dat ...... 47 4.5 Zend model - vyhled´an´ıuˇzivatel˚u ...... 47 4.6 Zend model - registrace uˇzivatele ...... 48 4.7 Zend controller - pˇrihl´aˇsen´ıuˇzivatele ...... 49 4.8 Zend controller - odhl´aˇsen´ıuˇzivatele ...... 49 4.9 Zend model - pr´ava uˇzivatel˚u ...... 50 4.10 Zend view - povolen´ızobrazen´ı...... 51 4.11 Zend controller - odes´ıl´an´ıemailu ...... 51 4.12 CodeIgniter konfigurace datab´aze ...... 52 4.13 CodeIgniter validace user ...... 53 4.14 CodeIgniter controller str´ankov´an´ı...... 54 4.15 CodeIgniter model - vyhled´an´ıuˇzivatel˚u ...... 55 4.16 CodeIgniter view - povolen´ızobrazen´ıodkazu ...... 55 4.17 CodeIgniter helper - pr´ava a opr´avnˇen´ı ...... 56 4.18 CodeIgniter funkce infomail ...... 56 5.1 Navigace mezi obrazovkami ...... 57 5.2 Uvodn´ıstr´ankav´ Zend(horn´ı)a CodeIgniter(doln´ı) ...... 58 5.3 Formul´aˇrk vytvoˇren´ınov´estr´anky ...... 59 6.1 Zivotn´ıcyklusˇ str´anky ...... 60 A.1 ER diagram uˇzivatel˚u...... 75 B.1 ER diagram autentizace CI ...... 76 C.1 Zivotn´ıcyklusˇ Akce ...... 77 D.1 Zivotn´ıcyklusˇ Rubrika ...... 79 SEZNAM TABULEK

2.1 Vyuˇzit´ıknihoven pˇrin´avrhu vzorov´ych aplikac´ı ...... 34 3.1 Porovn´an´ıZend framework a CodeIgniter ...... 40 4.1 Vyuˇzit´ıdatab´azov´ych tabulek ...... 44 6.1 Tabulka stav˚uStr´anky ...... 62 6.2 Tabulka pˇrechod˚uStr´anky...... 62 7.1 Porovn´an´ırychlosti - ´uvodn´ıstr´anka ...... 66 7.2 Porovn´an´ırychlosti - pˇrihl´aˇsen´ı ...... 66 7.3 Porovn´an´ırychlosti - vyhled´an´ıuˇzivatele ...... 66 7.4 Porovn´an´ırychlosti - publikov´an´ıstr´anky...... 66 7.5 Porovn´an´ırychlosti - otevˇren´ırubriky ...... 66 7.6 Velikost aplikac´ı...... 67 7.7 Vyhodnocen´ıframework˚u...... 68 7.8 V´yhody a Nev´yhody framework˚u ...... 68 C.1 Tabulka stav˚uAkce ...... 78 C.2 Tabulka pˇrechod˚uAkce ...... 78 D.1 Tabulka stav˚uRubrika ...... 80 D.2 Tabulka pˇrechod˚uRubrika ...... 80 E.1 Mˇeˇren´ırychlosti - vyhled´av´an´ı ...... 81 F.1 Mˇeˇren´ırychlosti - naˇcten´ı´uvodn´ıstr´anky...... 82 G.1 Mˇeˇren´ırychlosti - pˇrihl´aˇsen´ıuˇzivatele ...... 83 H.1 Mˇeˇren´ırychlosti - publikov´an´ıstr´anky ...... 84 I.1 Mˇeˇren´ırychlosti - otevˇren´ırubriky v menu ...... 85 UVOD´

Je plno volnˇedostupn´ych framework˚u,pro tvorbu webov´ych str´anekv jazyce PHP. V t´etopr´acise budu zab´yvat jejich zmapov´an´ım.V dalˇs´ıˇc´astise zamˇeˇr´ımna po- drobn´eprostudov´an´ıa zdokumentov´an´ınab´ızen´ych knihoven od dvou zvolen´ych fra- mework˚u.D´aleporovn´amvlastnosti vybran´ych framework˚uZend framework a Code- Igniter, porovn´amnab´ıdkuknihoven, v´yhody, nedostatky, dostupnost a pˇrehlednost dokumentace. V dalˇs´ıˇc´astit´etopr´acenavrhnu shodn´eaplikace pomoc´ıvybran´ych n´astroj˚u. Aplikace navrhnu tak, aby splˇnovaly z´akladn´ıpoˇzadavky webov´ych apli- kac´ı.Ze zkuˇsenost´ıpˇrin´avrhu porovn´amv´yhody a nev´yhody vytvoˇren´ych aplikac´ı. V z´avˇeruzhodnot´ımvlastnosti obou framework˚ua urˇc´ım,kter´yje lepˇs´ı.Zhodnot´ım n´aroˇcnostna nauˇcen´ıa pr´acis frameworky.

12 1 VYVOJOV´ EN´ ASTROJE´

1.1 PHP

PHP[1] je skriptovac´ıjazyk vykon´avan´yna stranˇeserveru, kter´yse vkl´ad´ado bˇeˇzn´eho HTML k´odu.Oproti HTML se liˇs´ıv tom, ˇzeserver nejprve vezme skript PHP a vy- kon´avˇsechny pˇr´ıkazyv PHP, kter´ejsou na str´anceuvedeny, n´aslednˇepoˇsleklientovi ˇcist´yHTML k´od.V souˇcasn´edobˇese jazyk PHP nach´az´ıve verzi 5. Pomoc´ıPHP lze ukl´adatdata od klient˚udo textov´ych soubor˚u,nebo do datab´aze(napˇr´ıkladmySQL). Je to volnˇeˇsiˇriteln´yprogramovac´ıjazyk poskytovan´yzadarmo.

1.2 SQL

(strukturovan´ydotazovac´ıjazyk)[3] je standardn´ımjazykem pro komunikaci s relaˇcn´ımi datab´azemi.Tento jazyk, coby n´astroj pro vytv´aˇren´ıdatab´az´ı,jejich spr´avu,za- bezpeˇcen´ıa dotazov´an´ıpodporuj´ıt´emˇeˇrvˇsechny relaˇcn´ıdatab´azov´esyst´emy. Je to plnohodnotn´yjazyk pro veˇsker´epr´ace v datab´az´ıch.

1.3 Framework

Framework[4] je softwarov´astruktura, kter´aslouˇz´ıjako podpora pˇriprogramov´an´ı, v´yvoji a organizaci jin´ych softwarov´ych projekt˚u.M˚uˇzeobsahovat podp˚urn´epro- gramy, knihovny API, n´avrhov´evzory nebo doporuˇcen´epostupy pˇriv´yvoji. PHP framewory se skl´adaj´ıze sad skript˚uv PHP, kter´epracuj´ıa funguj´ıjako ty naˇse. Nejedn´ase o ˇz´adn´ekompilovan´eknihovny, kter´ebychom museli do PHP pˇrid´avat.

1.3.1 Zend framework

Zend framework[5] je objektovˇeorientovan´ywebov´yframework prazuj´ıc´ıv jazyce PHP, zkr´acenˇeoznaˇcovan´yjako ZF. ZF je vyv´ıjens ohledem na jednoduch´yv´yvoj webov´ych aplikac´ı.Uˇz´ıv´amodul´arn´ıarchitekturu, kter´aumoˇzˇnujev´yvoj´aˇr˚umpouˇz´ıt jen ty komponenty, kter´epotˇrebuj´ı.ZF nab´ız´ıdvˇemoˇznostiinicializace, bud’ po- moc´ı souboru INI nebo XML. Zahrnuje v sobˇekomponenty pro MVC aplikace. Umoˇzˇnujespolupr´acis datab´azov´ymisyst´emy MySQL, MSSQL, Oracle, Postgre- SQL a IBM DB2. Projekty ZF jsou tvoˇreny kombinac´ıjazyk˚uPHP a HTML maj´ıc´ı pˇr´ıponu phtml. Nab´ız´ıvalidaˇcn´ımetody pro kontrolu spr´avn´ehoform´atu datumu, mailu, IP adres, ˇc´ısela dalˇs´ıch. Obsahuje helpery pro usnadnˇen´ıst´alese opakuj´ıc´ıch k´od˚u.Pro ZF jsou dostupn´eAPI od v´yrobc˚ujako je Google, Amazon, Yahoo!

13 a Flickr. Nab´ız´ıtvorbu a zpracov´an´ıRSS nebo spr´avuuˇzivatel˚upˇresOpenID. M´a knihovny pro pr´acis maily, pro komunikaci s jin´ymiwebov´ymiservery a pro tvorbu pdf soubor˚u.ZF m´ana sv´ych str´ank´ach zpracovanou a pˇrehlednou dokumentaci vˇsech sv´ych knihoven, str´ankus tutori´alya forum s ˇreˇsen´ymiprobl´emy. Licence je bezplatn´anebo za dobrovoln´ypoplatek.

1.3.2 CakePHP

CakePHP[6] je zdarma ˇsiˇriteln´yopen-source pro PHP. Aktu´aln´ı verze je Cake- PHP2.3.2. Je postaven na z´akladˇeRuby on Rails. Je kompatibiln´ıs PHP ve verzi 4 i 5. Nab´ız´ıautomatick´egenerov´an´ık´odu,rychl´ea flexibiln´ıˇsablony. CakePHP je navrˇzenpro maxim´aln´ıefektivitu pr´ace.Ve skuteˇcnostistaˇc´ınapsat urˇcit´yk´od pouze jednou, a pak ho pouˇz´ıvat podle potˇreby. D´alepak ˇsablony pro AJAX, Ja- vaScript, HTML formul´aˇrea dalˇs´ı.Funkce pro pr´acis Emaily, Cookies, zabezpeˇcen´ım a sekcemi. Podporuje datab´azov´ysyst´emy DB2, Firebird, MSSQL, MySQL, ODBC, Oracle, PostgreSQL, SQLite. Funguje na jak´emkoliv hostingu s minim´aln´ı nebo ˇz´adnoukonfigurac´ı.

1.3.3 Symfony

Symfony[7] je aplikaˇcn´ıframework psan´yv jazyce PHP,minim´aln´ıverze PHP pro Symfony je PHP5.2.4. Aktu´aln´ıverze je Symfony2.2.1. Je zaloˇzenana architektuˇre MVC. Obsahuje ˇradun´astroj˚ua tˇr´ıdzamˇeˇren´ych na zkr´acen´ıdoby v´yvoje webov´ych aplikac´ı.Symfony nab´ız´ıknihovny pro podporu: • AJAX • spr´avucache • informace o toku dat • ˇsablony a helpery • moˇznostplugin˚u Symfony staˇc´ına server nahr´atpouze jednou do adres´aˇre,kter´ynen´ıpˇr´ıstupn´ypˇres HTTP. Mnoho funkc´ılze volat pˇrespˇr´ıkazov´yˇr´adek.Nastaven´ıaplikace vyuˇz´ıv´a kask´adov´ypˇr´ıstup,nejvyˇsˇs´ınastaven´ım˚uˇzeb´ytpˇrekrytopodle nastaven´ıprojektu. Symfony lze nainstalovat na vˇsechny hlavn´ı operaˇcn´ı syst´emy a je kompatibiln´ı s vˇetˇsinoudatab´az´ı.

1.3.4 Ruby On Rails

Ruby On Rails[8] je framework pro v´yvoj webov´ych aplikac´ıch v jazyce Ruby, zkr´acenˇe oznaˇcov´anjako Rails. Jeho z´aklademje MVC. Umoˇzˇnujeps´atm´enˇek´odua z´aroveˇn dos´ahnoutv´ıceneˇzv mnoha jin´ych jazyc´ıch. Rails nab´ız´ıˇraduknihoven:

14 • Action Mailer - pro pr´acis e-maily, umoˇzˇnujeodes´ılate-maily i s pˇr´ılohami, na z´akladˇemnoha ˇsablon.Tak´eum´ıemaily pˇrij´ımata zpracov´avat. • Action Dispatch - zpracov´av´apˇr´ıchoz´ıpoˇzadavky a pos´ıl´aje, kam chcete. • Action View - m´ana starosti zobrazov´an´ıve form´atuHTML a XML.

1.3.5 Nette

Nette framework[9] je v´ykonn´yframework pro pohodln´ea rychl´evytv´aˇren´ı kva- litn´ıch webov´ych aplikac´ıch v PHP. Nette vyˇzadujeminim´alnˇePHP ˇrady5.2.0. Podporuje AJAX, SEO, DRY, KISS, MVC a znovupouˇzitelnostk´odu. Nab´ız´ıvel- kou ˇradurozˇsiˇruj´ıc´ıch doplˇnk˚upro snadnˇejˇs´ıpouˇz´ıv´an´ı.Nette jako jedin´yz tˇechto framework˚unab´ız´ıˇcesk´estr´ankys podrobnou dokumentac´ıa pˇr´ıruˇckou pro pro- gram´atoras postupy a n´avody. Na ofici´aln´ıch str´ank´ach je tak´ef´orum.

1.3.6 CodeIgniter

CodeIgniter[10] je framework zaloˇzen´yna principu MVC pro v´yvoj webov´ych apli- kac´ıv PHP. Aktu´aln´ıverz´ıje CodeIgniter 2.1.3. Rad´ıseˇ mezi menˇs´ıframeworky, samotn´avelikost je v ˇr´adunˇekolika MB. Jednoduch´yna instalaci a pouˇz´ıv´an´ı. Snaˇz´ıse co nejjednoduˇsejiˇreˇsitprobl´emy s co nejmenˇs´ımin´arokyna program´atora a syst´em.CodeIgniter bˇeˇz´ına z´akladˇenˇekolika mal´ych knihoven, ostatn´ıknihovny jsou nahr´av´any dle potˇreby. CodeIgniter je vybaven knihovnami pro nahr´av´an´ısou- bor˚u,pro pr´acis maily, d´aleobsahuje knihovnu pro zpracov´an´ıobr´azku,jako je napˇr´ıkladzmenˇsov´an´ı,vkl´ad´an´ıvodoznaku a oˇrez.Nab´ız´ıˇraduhelper˚u,kter´eslouˇz´ı k zpˇrehlednˇen´ıa nahrazen´ıst´alese opakuj´ıc´ıch ˇc´ast´ık´odu.U CodeIgniter je struk- tura programu rozdˇelenado dvou ˇc´ast´ı: • Syst´em- v t´etosloˇzce jsou uloˇzeny vˇsechny knihovny a helpery. • Application - je ˇc´astpro samotnou aplikaci a vˇsechny souˇc´astitvoˇren´euˇzivatelem. Zde je moˇznovkl´adatvlastn´ınebo upraven´yk´odze syst´emov´ych knihoven ˇci helper˚us pˇr´ıponou ”my ”. CodeIgniter s´amzjist´ı,zda chcete pouˇz´ıvat upra- venou syst´emovou knihovnu a pˇrednostnˇeji pouˇzije. CodeIgniter m´azpracovanou podrobnou dokumentaci, na ofici´aln´ıch str´ank´ach nab´ız´ı z´akladn´ıinformace, n´avody, tutori´aly, popisy helper˚ua knihoven s uk´azkamik´odu.

1.3.7 Prado

Prado[11] je sada komponent pro PHP 5 pˇripom´ınaj´ıc´ıkoncept, kter´ym˚uˇzemenal´ezt v Borland Delphi. Pro svoji funkˇcnostpotˇrebujePHP 5 s XML, veˇsker´akonfigurace aplikace se realizuje pˇresXML soubory. Je pamˇet’ovˇea procesnˇen´aroˇcn´y.

15 1.3.8 Jelix

Framework[12] je urˇcenpro PHP5.2 a vyˇsˇs´ı.Jedn´ase o framework, u kter´ehoje tˇreba pouˇz´ıvat pˇr´ıkazov´yˇradekk vytvoˇren´ıaplikace, modul˚ua objekt˚u.Podporuje v´ıce v´ystupn´ıch form´at˚u,kromˇeXHTML tak´enab´ız´ıXUL, RSS, ATOM, XML, PDF a dalˇs´ı.Do v´ybavy Jelixu patˇr´ıtak´ejAcl. Jelix neobsahuje Helpery. Formul´aˇrese ukl´adaj´ıjako XML soubory.

1.3.9 Lamplighter

Je[12] urˇcenpro PHP5 a vyˇsˇs´ı.Podporuje datab´aziMySQL. Kromˇestandardn´ıch plugin˚uobsahuje tak´eplugin Photo/Image Management, kter´yumoˇzˇnujer˚uzn´eope- race s obr´azky. Obsahuje Helpery. Samotn´akonfigurace a instalace se prov´ad´ı v pˇr´ıkazov´eˇr´adce.

1.4 N´avrhov´yvzor MVC

Model view Controller[2] je architektura vyuˇz´ıvan´au vˇetˇsiny v´yvojov´ych prostˇred´ı pro tvorbu webov´ych aplikac´ı.MVC rozdˇelujecelou aplikaci do tˇr´ız´akladn´ıch soubo- rov´ych typ˚u,na Model slouˇz´ıc´ıke zpracov´an´ıdat, View prezentace dat a Controller (ˇradiˇc)ˇr´ızen´ı.MVC vz´ajemnoukomunikac´ıa v´ymˇenoudat tvoˇr´ıcelou aplikaci.

1.4.1 Princip MVC

Na obr´azku1.1je zobrazen HTTP poˇzadavek(HTTP Request) na server. Zpracov´an´ı poˇzadavku pomoc´ıMVC a zpˇetn´aHTTP odpovˇed’(HTTP Response).

1. Vˇsezaˇc´ın´aposl´an´ımHTTP poˇzadavku na server. Tento poˇzadavek je pˇrijat ˇradiˇcema d´alezpracov´av´an. 2. Pˇrijat´ypoˇzadavek ˇradiˇczpracuje, zvol´ıvhodn´ymodel a podle potˇreby pˇrepoˇsle ˇz´adosto zpracov´an´ıdat na model. 3. Model zpracuje poˇzadavek ke zpracov´an´ıdat v datab´azi.V´ysledeksv´epr´ace vrac´ıˇradiˇci. 4. Radiˇcuprav´ıdataˇ do spr´avn´ehoform´atu,vybere vhodn´ezobrazen´ıa odeˇsleje na View. 5. V nˇekter´ych pˇr´ıpadech se m˚uˇzest´at, ˇzesi view vyˇz´ad´adata pˇr´ımood modelu. 6. Na z´avˇerˇradiˇcvytvoˇr´ıview a odeˇsleview zpˇetdo prohl´ıˇzeˇceve formˇeHTTP odpovˇedi. Vˇetˇsinaprogram´ator˚ubodu ˇc.5nevyuˇz´ıv´a.Nˇekteˇr´ıprogram´atoˇrijsou toho n´azoru, ˇzeview by nemˇelom´ıtv˚ubec pˇr´ımopˇr´ıstupdo datab´aze.Ve vˇetˇsinˇepˇr´ıpadech si

16 v aplikac´ıch vˇsechna data vyˇz´adaj´ıˇradiˇcemod modelu a n´aslednˇevˇsepˇredaj´ıview, view d´alenem´apotˇrebudo modelu zasahovat.

Obr. 1.1: Pr˚ubˇehpoˇzadavku MVC[2]

MVC si lze tak´epˇredstavit jako tˇrivrstvy. Vrstva prezenˇcn´ı,ve kter´ese view star´a o zobrazen´ıdat uˇzivateli. Vrstva ˇr´ıd´ıc´ı,kterou pˇredstavuje ˇradiˇca star´ase o chod cel´eaplikace. Vrstva datov´a,kter´apˇristupujek dat˚um.Kaˇzd´avrstva se star´ao to sv´e,dohromady tvoˇr´ıpˇrehledn´ycelek.

1.4.2 Model

Model[2] se star´ao datovou vrstvu v MVC. Umoˇzˇnujeˇcten´ı,zapisov´an´ı,upravov´an´ı a maz´an´ıdat. O tom, kam data zap´ıˇseto v´ıjenom model. Model umoˇzˇnujepr´acis daty pro r˚uzn´adatov´a´uloˇziˇstˇe: • Datab´aze • Textov´ysoubor • RSS • Webov´asluˇzba Pˇritvorbˇemodelu je d˚uleˇzit´evˇedˇet,jak k dat˚umv urˇcit´ych ´uloˇziˇst´ıch pˇristupovat. U textov´ych dokument˚uje potˇrebavˇedˇet,jak data form´atovat, aby byly srozumi- teln´epro dalˇs´ıpouˇzit´ı.

1.4.3 View

Pohled[2] se star´ao prezentaci pˇredan´ych dat uˇzivateli. View se nestar´a,odkud data jsou, nebo zda jsou spr´avn´a.View se star´apouze o vloˇzen´ıpˇrijat´ych dat do zvolen´e

17 ˇsablony, spr´avnˇeje naform´atovat a publikovat ve srozumiteln´ema pˇrehledn´emzob- razen´ıuˇzivateli. Zobrazen´ımus´ıvˇedˇet,v jak´emform´atudata dostane, zda se jedn´a o pole, ve kter´embudou vˇsechny data, nebo zda budou data pˇred´anapo prvc´ıch. Zpˇetnˇese taky view star´ao pˇrijet´ıdat skrze formul´aˇre.V´ypispohledu se vˇetˇsinou realizuje ve form´atuHTML str´anky, kter´aje odesl´anado prohl´ıˇzeˇceuˇzivatele. View umoˇzˇnujevytvoˇritform´aty CSV nebo XML, kter´esi uˇzivatel m˚uˇzest´ahnout.D´ale m˚uˇzeview vytv´aˇretgrafiku nebo PDF, kter´ese zobraz´ıv prohl´ıˇzeˇci.Vˇsechny form´aty jsou do prohl´ıˇzeˇceodesl´any jako odpovˇed’ HTTP.

1.4.4 Controller

Controller[2] pˇredstavuje ˇr´ıd´ıc´ıvrstvu. Zavol´an´ıcontrolleru se vyvol´aHTTP ˇz´adost´ı z prohl´ıˇzeˇceuˇzivatele. Z pˇrijat´eˇz´adosticontroller zjist´ı,kter´ymodel m´ab´ytpouˇzit a v jak´emview maj´ıb´ytdata n´aslednˇevykreslena. Controller se skl´ad´az v´ıceˇcast´ı, kter´evkl´adaj´ır˚uzn´en´avrhov´evzory. Jsou to a action controller. Na obr´azku1.2je zobrazen pr˚ubˇehpoˇzadavku v controlleru. Hlavn´ıˇc´ast´ıcontrolleru je front controller.

Obr. 1.2: Pr˚ubˇehpoˇzadavku v controlleru[2]

1. Pˇrijet´ıpoˇzadavku uˇzivatele zaˇrizujefront controller. 2. V dalˇs´ım kroku front controller pˇred´adata Router(smˇerovaˇci),kter´yzjist´ı, jak´aakce nebo jak´eakce maj´ıb´ytvykon´any. 3. N´aslednˇeje front controller povˇeˇren dispeˇcerem,aby vykonal dalˇs´ızpracov´an´ı poˇzadavku. 4. V cyklu vol´adispeˇcerpostupnˇeaction controllery, aby byly vykon´any vˇsechny akce. V urˇcit´ych akc´ıch m˚uˇzecontroller pˇristupovat k modelu. 5. V´ysledekje pˇred´anresponze objektu. 6. V z´avˇerufront controller odeˇsleodpovˇed’ do prohl´ıˇzeˇceuˇzivatele ve formˇe HTTP odpovˇedi.

18 2 KNIHOVNY

2.1 Vlastn´ıknihovny

Jsou knihovny, kter´ejsou souˇc´ast´ıframeworku.

2.1.1 CodeIgniter

Calendar[14] - je knihovna s funkcemi pro tvorbu kalend´aˇr˚u.Knihovna nab´ız´ı form´atov´an´ıkalend´aˇr˚upomoc´ıˇsablon,kter´ezaruˇcuj´ıkontrolu nad form´atemjeho vzhledu. U vytvoˇren´ehokalend´aˇreje moˇznopˇristupovat k dat˚umv buˇnk´ach ka- lend´aˇre. Funkce: generate - vstupem je rok, mˇes´ıcnebo pole, ve kter´ymjsou oba ´udaje. Zpracuje vstupn´ıdata. Podle poˇc´ateˇcn´ıhonastaven´ıse nastav´ıden, kter´ymzaˇc´ın´at´yden.Vy- tvoˇr´ıhlaviˇckukalend´aˇres rokem, n´azvem aktu´aln´ıhomˇes´ıcea odkazy na pˇredchoz´ı a n´asleduj´ıc´ımˇes´ıc.V´ystupem vrac´ıpole obsahuj´ıc´ı´udaje k zobrazen´ıkalend´aˇre. get month name - vstupem je ˇc´ıslomˇes´ıcea n´avratovou hodnotou je bud’ cel´yn´azev mˇes´ıcenebo zkr´acen´yn´azev. get day names - vstupn´ıhodnotou je typ zobrazen´ın´azvudn˚u.V´ystupem je pole n´azv˚udn˚u.Na v´ybˇerje ze tˇr´ımoˇznost´ılong, short, default (monday, mon, mo). adjust date - vstupem je mˇes´ıca rok. V pˇr´ıpadˇeˇspatnˇezadan´ehoˇc´ıslamˇes´ıcefunkce pˇrepoˇctemˇes´ıcna re´alnouhodnotu a uprav´ırok. N´avratovou hodnotou je pole ob- sahuj´ıc´ırok a mˇes´ıc. get total days - vstupem je rok a mˇes´ıc.Funkce vrac´ıpoˇcetdn´ıv mˇes´ıci,poˇc´ıt´ai s pˇrestupn´ymrokem. default template - nastav´ız´akladn´ıparametry ˇsablony. parse template - slouˇz´ık sestaven´ıˇsablony.

Cart[14] - je knihovna staraj´ıc´ıse o uchov´an´ıinformac´ıuˇzivatel po dobu otevˇren´ı str´anky. Vyuˇz´ıv´ase pro spr´avutypu n´akupn´ıkoˇs´ık.Pro pr´aci s touto knihovnou je potˇreba vyuˇz´ıtknihovny session a nastavit v datab´azitabulky pro pr˚ubˇeˇzn´eukl´ad´an´ı dat. Funkce: insert - je metoda, kter´azjist´ı,zda se jedn´ao pˇrid´an´ıjednoho produktu nebo v´ıce. Vˇsechny produkty uloˇz´ı.Pokud vˇseprobˇehnebez chyby, vrac´ıTRUE, jinak FALSE. insert - konstruktor zkontroluje vstupn´ıdata a vytvoˇr´ıpole dat s jedineˇcn´ymid, kter´yvr´at´ı. update - metoda slouˇz´ı pro ´upravu jednoho nebo v´ıce produkt˚u.Pokud se data

19 uprav´ı,uloˇz´ıse cel´ykoˇs´ık.Pokud vˇseprobˇehnebez chyby, vrac´ıTRUE, jinak FALSE. update - konstruktor zkontroluje data. Zmˇeny v datech uprav´ı,v pˇr´ıpadˇenastaven´ı poˇctuna 0 odebere produkt. Pokud vˇseprobˇehnebez chyby, vrac´ıTRUE, jinak FALSE. save cart - konstruktor pˇrepoˇctecelkovou cenu a poˇcetprodukt˚u.Uloˇz´ıdata do datab´aze.Pokud vˇseprobˇehnebez chyby vrac´ıTRUE jinak FALSE. total - metoda vrac´ıcelkovou cenu. total items - metoda vrac´ıpoˇcetprodukt˚u. contents - metoda vrac´ıcel´yobsah koˇs´ıku. destroy - metoda nastav´ıcelkov´ypoˇceta cenu na nulu. Vymaˇzedata z datab´aze.

Email[14] - je robustn´ıknihovna pro pr´acis e-maily. Funkce: initialize - funkce inicializace slouˇz´ık nastaven´ıvlastnost´ıe-mailu. Nastaven´ıe-mail protokolu, povolen´ızalamov´an´ıˇr´adk˚u,rozdˇelen´ıe-mailu na ˇc´astia dalˇs´ıparametry. clear - funkce slouˇz´ık vymaz´an´ıvˇsech ´udaj˚ue-mailov´ezpr´avyi pˇr´ıloh,vyuˇz´ıv´ase pˇricyklick´emodes´ıl´an´ıpodobn´ych zpr´av. from - funkce nastav´ıadresu a jm´enoodes´ılatele. reply to - funkce nastav´ıadresu a jm´eno,pro odpovˇed’. to - funkce nastav´ıadresu nebo adresy pˇr´ıjemc˚uoddˇelen´eˇc´arkaminebo jako pole. cc - funkce nastav´ıadresu a jm´enopˇr´ıjemcekopie. bcc - funkce nastav´ıadresu a jm´enopˇr´ıjemceskryt´ekopie. subject - funkce nastav´ıpˇredmˇete-mailu. message - funkce nastav´ıobsah e-mailu. attach - funkce umoˇzˇnujepˇripojit k e-mailu pˇr´ılohu. Funkce pˇripoj´ıvˇzdyjen jednu pˇr´ılohu. Vstupn´ımparametrem je cesta k pˇr´ıloze. send - funkce slouˇz´ık odesl´an´ıe-mailu.

Encrypt[14] - je knihovna urˇcen´ak ˇsifrov´an´ıdat. Data je moˇznozaˇsifrovat po- moc´ıkl´ıˇcea n´aslednˇedeˇsifrovat. Vyuˇz´ıv´ase funkce XOR. Dalˇs´ımoˇznost´ıje heˇsov´an´ı hesel pomoc´ıfunkce sha1 nebo md5, tyto metody jsou nevratn´e. Funkce: get key - metoda uprav´ıkl´ıˇcna spr´avnouvelikost a vrac´ıho zaˇsifrovan´ypˇresmd5. set key - metoda uloˇz´ıkl´ıˇc. encode a decode - metody k zak´odov´an´ıa dek´odov´an´ıpomoc´ıXOR. mcrypt encode a mcrypt decode - metoda zaˇsifrujedata a pˇrid´aˇsum. hash - funkce zaˇsifrujevstupn´ıdata bud’ sha1 nebo md5. sha1 - funkce zjist´ı,zda je vytvoˇrenavlastn´ıfunkce sha1, pokud ne, tak zaˇsifruje klasickou funkc´ısha1.

20 Form validation[14] - je knihovna oˇsetˇruj´ıc´ıvstupn´ıdata proti vloˇzen´ıchybn´ych form´at˚u,spatn´ych tvar˚unebo velikosti. Zabr´an´ıuˇzivateli vloˇzitnesmysln´e´udaje. Funkce: set rules funkce zkontroluje, zda vstupuj´ıdata. D´alenastav´ıvalidaˇcn´ıpravidla. set message funkce nastav´ıtext chybov´ehohl´aˇsen´ı,umoˇzˇnujevloˇzen´ıvlastn´ıhochy- bov´ehohl´aˇsen´ık dan´ymdat˚um. set error delimiters - funkce nastav´ıform´atchybov´ehohl´aˇsen´ı. error - funkce vloˇz´ıchybov´ehl´aˇsen´ıdo zvolen´ehoform´atu. run - tato funkce zkontroluje data podle zadan´ych pravidel, pokud jsou spr´avn´e, vrac´ıTRUE, jinak FALSE. Dalˇs´ıfunkce jsou funkce pro vˇsechny validaˇcn´ıpravidla.

FTP[14] - je knihovna umoˇzˇnuj´ıc´ıpˇrenossoubor˚una vzd´alen´yserver. Vzd´alen´e soubory je moˇznopˇresouvat, pˇrejmenov´avat a mazat. Nepodporuje SFTP. Funkce: connect - funkce pˇripojuje a pˇrihlaˇsujek FTP serveru. Vstupn´ımparametrem je pole s pˇrihlaˇsovac´ımi´udaji (hostname, uˇzivatelsk´ejm´eno,heslo, port). N´avratovou hodnotou je TRUE nebo FALSE. mkdir - funkce slouˇz´ıc´ık vytvoˇren´ıadres´aˇre. upload - funkce m´aˇctyˇrivstupn´ıparametry, a to adresu odkud soubor kop´ırovat, kam soubor kop´ırovat, form´atkop´ırov´an´ıa opr´avnˇen´ısouboru. Funkce zkontroluje pˇripojen´ı,zjist´ızda soubor existuje, uloˇz´ısoubor a nastav´ıopr´avnˇen´ı.N´avratovou hodnotou je TRUE nebo FALSE. download - vstupem funkce je adresa souboru, adresa kam se m´auloˇzita form´at kop´ırov´an´ı.N´avratovou hodnotou je TRUE nebo FALSE. rename - funkce slouˇz´ık pˇrejmenov´av´an´ısoubor˚u. move - funkce prov´ad´ıpˇresunsoubor˚u. delete file a delete dir - funkce slouˇz´ık maz´an´ısoubor˚ua adres´aˇr˚u. list files - vstupem do funkce je cesta zvolen´ehoadres´aˇre,n´avratovou hodnotou je seznam soubor˚u. chmod - funkce slouˇz´ık nastaven´ıopr´avnˇen´ı. mirror - funkce vytvoˇr´ıobraz sloˇzky. close - funkce ukonˇc´ıpˇripojen´ık serveru.

Image lib[14] - je knihovna urˇcen´apro pr´acis obr´azky. Umoˇzˇnujefunkce na zmˇenu velikosti, oˇr´ıznut´ıobr´azkua dalˇs´ıfunkce. Funkce: clear - metoda nastav´ıpoˇc´ateˇcn´ıhodnoty tˇr´ıdy.

21 initialize - je metoda, do kter´evstupuje pole poˇzadavk˚u,s jak´ymobr´azkem se bude pracovat, a co vˇsechno se na nˇembude mˇenit. resize - funkce nastav´ıparametry pro zmˇenu velikosti. crop - funkce nastav´ıparametry pro oˇr´ıznut´ıobr´azku. rotate - funkce nastav´ıparametry pro rotaci. image process netpbm - funkce provede zmˇenu velikosti, oˇr´ıznenebo otoˇc´ıobr´azek. image rotate gd - funkce prov´ad´ırotaci. image mirror gd - funkce prov´ad´ıpˇrevr´acen´ıhorizont´aln´ınebo vertik´aln´ı. watermark - metoda vrac´ıbud’ obr´azkov´yvodoznak nebo textov´y. overlay watermark - metoda vytvoˇr´ı vodoznak z obr´azku,u kter´eholze nastavit kryt´ıvodoznaku, barvu vodoznaku. text watermark - metoda vytv´aˇr´ıtextov´yvodoznak. U vodoznaku lze nastavit barvu, velikost textu, posunut´ıst´ınu a barvu st´ınu. image create gd - funkce vytvoˇr´ıobr´azekpo ´uprav´ach. image save gd - funkce uloˇz´ıobr´azek. image display gd - funkce vykresl´ıobr´azek na obrazovku. image reproportion - funkce z´ısk´apoˇc´ateˇcn´ırozmˇeryobr´azku. size calculator - funkce vypoˇctechybˇej´ıc´ırozmˇernov´ehoobr´azkutak, aby z˚ustal zachov´anstejn´ypomˇer. N´avratovou hodnotou je pole vˇsech rozmˇer˚u. explode name - funkce oddˇel´ıod sebe n´azeva pˇr´ıponu obr´azku.

Javascript[14] - CodeIgniter obsahuje knihovnu, kter´apom˚uˇzese spoleˇcn´ymi funkcemi, kter´ebudete cht´ıtpouˇz´ıts Javascript. CodeIgniter nab´ız´ısnadn´enasta- vov´an´ıakc´ı,kter´ese prov´ad´ıza urˇcit´ych ud´alost´ı. Funkce: change, click, dblclick, error, mousedown, mouseout, keydown a keyup - jsou funkce, kter´ymlze pˇriˇraditud´alosti,kter´ese n´aslednˇevykonaj´ı. hide a show - funkce nastavuj´ıc´ı zp˚usobskryt´ı a zobrazen´ı s moˇznost´ı nastaven´ı rychlosti. animate - funkce slouˇz´ık nastaven´ıparametr˚uanimac´ı.

Pagination[14] - knihovna slouˇz´ık usnadnˇen´ıpr´acese str´ankov´an´ım.Je moˇzn´e nastavit dynamick´enebo pevn´estr´ankov´an´ı. Funkce: initialize - funkce nastav´ıparametry a form´atstr´ankov´an´ı. create links - metoda podle nastaven´ıvytvoˇr´ıpˇr´ısluˇsn´eodkazy pro listov´an´ımezi str´ankami.

Parser[14] - je knihovna pro usnadnˇen´ıpr´aces pseudopromˇenn´ymi,coˇzje napˇr´ıklad

22 titulek, hlaviˇckastr´ankynebo tˇelostr´anky. Funkce: parse - metoda vytvoˇr´ıpole, kde kaˇzd´epromˇenn´epˇriˇrad´ıurˇcit´ytext. Ve wiew staˇc´ı vloˇzitn´azev promˇenn´emezi sloˇzen´ez´avorky. parse string - metoda um´ınav´ıcpraco- vat s promˇenn´ymi,kter´ejsou zastoupeny polem. Pokud m´apromˇenn´ap´arov´yznak, zobraz´ıse data v poli postupnˇeza sebou.

Session[14] - je knihovna pracuj´ıc´ıs relacemi. V relac´ıch se ukl´adaj´ıinformace o pˇrihl´aˇsen´emuˇzivateli, jeho identifikace, kdy se pˇrihl´asil,odkud se pˇrihl´asil.Relace mohou b´ytuloˇzeny v cookie nebo v datab´azi,v podobˇetextu nebo zaˇsifrovan´e. Funkce: sess create - vytvoˇr´ınovou relaci. sess destroy - odstran´ıexistuj´ıc´ırelaci. userdata - funkce umoˇzˇnujenaˇc´ıtatinformace ze session. setuserdata - funkce uloˇz´ıinformace do session. all userdata - funkce vyˇctevˇsechny data ze session. unset userdata - funkce odstran´ıˇc´astuloˇzen´ych dat. set flashdata - funkce pro uloˇzen´ıdat,data budou k dispozici pouze pro n´asleduj´ıc´ı poˇzadavek. flashdata - funkce umoˇzˇnujenaˇc´ıstdata. keep flashdata - funkce umoˇzn´ıdata uschovat na delˇs´ıdobu.

Typography[14] - je mal´aknihovna poskytuj´ıc´ıfunkce pro form´atov´an´ıtextu. Funkce: auto typography - funkce form´atujetext napˇr.dvˇepomlˇckynahrazuje jednou dlou- hou. Konce ˇr´adkupˇrevede na
. format characters - funkce je podobn´afunkci auto typography slouˇz´ıpouze k nahra- zov´an´ıznak˚u.

Unit test[14] - je knihovna urˇcen´ak testov´an´ı.Knihovna zkontroluje form´aty datov´ych typ˚ua v´ysledkydan´ych promˇenn´ych. Nab´ız´ıfunkce pro zobrazen´ıv´ysledk˚u. Funkce: set test items - funkce se vyuˇz´ıv´ak nastaven´ıparametr˚utestu (n´azevtestu, datov´y typ, pˇredpokl´adan´ytyp, v´ysledek,n´azevsouboru, ˇc´ısloˇr´adku,pozn´amka) run - funkce porovn´abud’ dva doslovn´en´azvy, nebo urˇc´ı, zda zvolen´adata od- pov´ıdaj´ıpoˇzadovan´emu datov´emu typu. report - funkce vygeneruje zpr´avuze vˇsech test˚u. use strict - funkce slouˇz´ık nastaven´ıpˇr´ısnostikontroly. Pˇriporovn´an´ıhodnoty bool 1 a TRUE bude v´ysledekpravdiv´y.V pˇr´ısn´emreˇzimu hodnota 1 nebude povaˇzov´ana

23 stejnˇejako TRUE. active - funkce spouˇst´ıa vyp´ın´atestov´an´ı. result - funkce vrac´ıneform´atovan´yv´ysledektestu. set template - funkce nastavuje form´atzobrazen´ıv´ysledku.

User Agent[14] - je knihovna obsahuj´ıc´ıfunkce, kter´epom´ahaj´ızjistit infor- mace o prohl´ıˇzeˇci,mobiln´ım zaˇr´ızen´ı, nebo kdyˇzautomat navˇst´ıv´ı vaˇsestr´anky. Nav´ıcm˚uˇzetez´ıskatnˇekter´einformace, jakoˇzi jazyk a podporovan´eznakov´esady. Funkce: is browser - funkce vr´at´ıTRUE pokud se jedn´ao webov´yprohl´ıˇzeˇc. is robot - funkce vr´at´ıTRUE, pokud se jedn´ao mobiln´ızaˇr´ızen´ı. is mobile - funkce vr´at´ıTRUE, pokud se jedn´ao robota. is referral - funkce vr´at´ıTRUE, pokud jde o user agent z jin´ych str´anek. agent string - funkce vrac´ıˇretˇezecobsahuj´ıc´ıvˇsechny informace o uˇzivateli. platform - funkce vrac´ıplatformu prohl´ıˇzeˇcewebu. browser, robot, mobile - funkce vrac´ın´azev webov´ehoprohl´ıˇzeˇce. languages - funkce vrac´ıpouˇz´ıvan´yjazyk.

Xml[14] - knihovna slouˇz´ıc´ıke komunikaci mezi dvˇemapoˇc´ıtaˇci.Xml-rpc je ˇc´ast knihovny, kter´afunguje jako klient. Xml-rpcs je ˇc´astknihovny, kter´afunguje jako server. Funkce: Xml-rpc initialize - funkce slouˇz´ıke konfiguraci parametr˚uklienta. server - funkce slouˇz´ık nastaven´ıadresy a portu serveru. timeout - funkce nastav´ıˇcasprodlevy, po kter´ebude ˇz´adostzruˇsena. method - funkce nastav´ımetodu, jakou chceme volat. request - funkce vytvoˇr´ıˇz´adostze zadan´ych ´udaj˚u. send request - funkce odeˇsleˇz´adostna dan´yserver se zadan´ymipoˇzadavky. N´avratovou hodnotou je TRUE nebo FALSE. display error - funkce vrac´ıchybov´ehl´aˇsen´ıv pˇr´ıpadˇeselh´an´ı,zpr´ava je ve form´atu ˇretˇezce. send error message - funkce slouˇz´ık zasl´an´ızpr´avyze serveru na klienta. Prvn´ım vr´acen´ymparametrem je ˇc´ıslochyby a druh´ymje text chybov´ezpr´avy. send response - funkce umoˇzˇnujeodeslat odpovˇed’ od serveru ke klientovi. Xml-rpcs initialize - funkce slouˇz´ıke konfiguraci parametr˚userveru. serve - metoda slouˇz´ıke spuˇstˇen´ıserveru umoˇzˇnuj´ıc´ıpˇr´ıstupk urˇcit´ymmetod´am a funkc´ım.

24 Zip[14] - je knihovna urˇcen´apro pr´acise Zip soubory, umoˇzˇnujepˇrid´avat do Zip soubor˚u,vytv´aˇreta stahovat Zip soubory. Funkce: add dir - funkce pro pˇrid´an´ıadres´aˇre. add data - funkce pˇrid´adata do souboru. read file - funkce si naˇctesoubor a pˇrid´aho do souboru Zip. read dir -funkce si naˇcteadres´aˇra pˇrid´aho do souboru Zip. Adres´aˇrov´astruktura z˚ustanestejn´a. get zip - funkce slouˇz´ık z´ısk´an´ıdat ze Zip souboru. archive - funkce uloˇz´ıZip soubor na zadan´em´ısto. download - funkce st´ahnesoubor Zip. clear data - metoda vymaˇzedata tˇr´ıdy.

2.1.2 Zend Framework

Alc[5] - poskytuje lehk´ya flexibiln´ıseznam ˇr´ızen´ıpˇr´ıstupuACL, pro realizaci opr´avnˇen´ıˇr´ızen´ı.Obecnˇeplat´ı,ˇzeaplikace vyuˇz´ıv´aseznamy ACL pro ˇr´ızen´ıpˇr´ıstupu k nˇekter´ymchr´anˇen´ymobjekt˚um. Funkce: addRole - metoda slouˇz´ık pˇrid´av´an´ınov´ych rol´ı,jedn´ımz parametr˚um˚uˇzeb´ytod- kaz na roli od, kter´ase bude dˇedit.Role m˚uˇzedˇeditod v´ıcerodiˇcovsk´ych rol´ı.Pokud se opr´avnˇen´ıpˇrekr´yvaj´ı,role z´ısk´apr´avo posledn´ıhopˇridan´ehorodiˇce. getRole - metoda vrac´ı,o jakou roli se jedn´a. hasRole - metoda zjist´ı, zda je role uloˇzenav registru. N´avratovou hodnotou je TRUE nebo FALSE. inheritsRole - vstupn´ımparametrem t´etometody je role a moˇzn´ydˇedic.Metoda zjist´ızda role dˇed´ıod dˇedice.V pˇr´ıpadˇedˇedˇen´ıvrac´ıTRUE. removeRole - metoda slouˇz´ık odstranˇen´ırole z registru. removeRoleAll - metoda vymaˇzevˇsechny role z registru. addResource - metoda pˇrid´anov´yzdroj. Jako druh´yparametr m˚uˇzeb´ytzdroj, od kter´ehobude dˇedit. add - metoda pˇrid´anov´yzdroj, vstupem je n´azevnov´ehozdroje a druhou vstupn´ı hodnotou je n´azevzdroje, od kter´ehodˇed´ı. get - metoda vrac´ıbud’ identifikaˇcn´ıˇc´ıslozdroje, nebo jeho n´azev. has - metoda vr´at´ıTRUE, pokud zdroj existuje. Vstupem m˚uˇzeb´ytidentifikaˇcn´ı ˇc´ıslozdroje nebo jeho n´azev. inherist - metoda slouˇz´ıke zjiˇstˇen´ı,zda urˇcit´yzdroj dˇed´ıod sv´ych pˇredk˚u.Metoda

25 zkontroluje cel´ystrom dˇedˇen´ı. remove - metoda odstran´ızdroj a vˇsechny jeho potomky. removeAll - metoda odstran´ıvˇsechny zdroje. allow - metoda pˇridˇel´ıroli opr´avnˇen´ıpˇr´ıstupudo urˇcit´eho zdroje. Zdrojem je cont- roller, u kter´eholze povolit pouze urˇcit´eakce. deny - metoda slouˇz´ık zak´az´an´ıpravidel, m´aopaˇcnoufunkci jako allow. removeAllow - metoda odstran´ıpravidlo povoluj´ıc´ıpˇr´ıstupdan´eroli k dan´emu zdroji. removeDeny - metoda odstran´ıpravidlo zakazuj´ıc´ıpˇr´ıstupdan´eroli k dan´emu zdroji. setRule - metoda prov´an´ıoperace poˇzadovan´eod allow, deny, removeAllow, remo- veDeny. isAllowed - metoda vrac´ıTRUE v pˇr´ıpadˇe,kdy zadan´arole m´apˇr´ıstupk dan´emu zdroji. getRegisteredRole - metoda vrac´ıvˇsechny role. getRole - metoda vrac´ıvˇsechny n´azvyparametr˚urol´ı. getResources - metoda vrac´ıvˇsechny n´azvyparametr˚uzdroj˚u.

Auth[5] - je autentizaˇcn´ıknihovna urˇcen´ak identifikaci, o jak´ehouˇzivatele se jedn´a.Vyuˇz´ıv´ase pˇriregistraci, pˇrihl´aˇsen´ıa odhl´aˇsen´ıuˇzivatele. Funkce: getInstance - metoda se vyuˇz´ıv´ak naˇcten´ınov´ehovzoru. getStorage - metoda nastav´ıtyp ´uloˇziˇstˇe,jako z´akladn´ıje nastaveno session. setStorage - metoda slouˇz´ık uloˇzen´ıinformac´ıo uˇzivateli. authenticate - metoda se vyuˇz´ıv´ak ovˇeˇren´ıidentity. Pokud je nˇejak´aidentita uloˇzena, dojde ke smaz´an´ıa uloˇz´ıse nov´a. hasIdentity - metoda vrac´ıTRUE, pokud zadan´aidentita odpov´ıd´aidentitˇeuloˇzen´e v database. getIdentity - metoda vrac´ıidentitu nebo null. clearIdentity - metoda smaˇzeuloˇzenouidentitu.

Application[5] - knihovna slouˇz´ıpro naˇcten´ıa spr´avuz´akladn´ıch prvk˚uapli- kace bootstraping, zaˇr´ızen´ıpro opakov´an´ızdroj˚u.Star´ase o nastaven´ıPHP prostˇred´ı a zav´ad´ıautomatick´enaˇc´ıt´an´ıv z´akladn´ıhonastaven´ı. Funkce: getEnvironment - metoda vrac´ıprostˇred´ıaplikace. getAutoloader - metoda naˇctepoˇc´ateˇcn´ınastaven´ı. setOptions - metoda naˇctekonfiguraˇcn´ınastaven´ı.Nastav´ıphp, patch, jmenn´ypro- stor pro autoloader a bootstrap. getOptions - metoda naˇctenastaven´ıaplikace. hasOption - metoda zkontroluje, zda je z´akladn´ınastaven´ınaˇcteno. getOption - metoda vrac´ıjedin´enastaven´ı.

26 mergeOptions - metoda slouˇc´ıdvoje nastaven´ı. setPhpSettings - metoda provede nastaven´ıphp. setAutoloaderNamespaces - metoda nastav´ıjmenn´eprostory. setBootstrap - metoda nastav´ısoubor bootstrapt podle zadan´ecesty. getBootstrap - metoda naˇctesoubor bootstrapt. bootstrap - metoda naˇcteprvky ze souboru bootstrapt. run - metoda spust´ısoubor bootstrapt.

Barcode[5] - knihovna slouˇz´ıke generov´an´ıˇc´arkov´ych k´od˚u.Skl´ad´ase ze dvou ˇc´ast´ı,z objekt˚uˇc´arov´ych k´od˚ua z vykreslovaˇc˚u. Funkce: factory - metoda slouˇz´ık vytvoˇren´ızdroje pro vytvoˇren´ıˇc´arkov´ehok´odu.Vstupem m˚uˇzeb´ytpole nebo ˇctyˇrivstupn´ıparametry. V nab´ıdceje mnoho variant ˇc´arov´ych k´od˚u.Jedn´ımvstupn´ımparametrem je text zobrazovan´ypod ˇc´arkov´ymk´odem. makeBarcode - metoda vytvoˇr´ıinstanci ˇc´arov´ehok´odu. render - metoda vyrendruje obr´azekˇc´arov´ehok´odu. draw - metoda vykresl´ıˇc´arov´yk´od.

Config[5] - je navrˇzentak, aby usnadnil pˇr´ıstupa pouˇz´ıv´an´ıkonfiguraˇcn´ıch dat v r´amciaplikace. Poskytuje vnoˇren´evlastnosti objektu uˇzivatelsk´ehorozhran´ıpro pˇr´ıstupk tˇemto konfiguraˇcn´ımdat˚umv k´oduaplikace. Konfiguraˇcn´ıdata mohou poch´azet z r˚uzn´ych sdˇelovac´ıch prostˇredk˚una podporu hierarchick´ehoukl´ad´an´ıdat. V souˇcasn´edobˇeZend Config nab´ız´ıadapt´erypro konfiguraˇcn´ı ´udaje, kter´ejsou uloˇzeny v textov´ych souborech s Zend Config Ini a Zend Config Xml. Funkce: get - funkce naˇctezvolenou hodnotu. Pokud hodnota nen´ınastavena vrac´ız´akladn´ı nastaven´ı. toArray - metoda vrac´ıpole s parametry nastaven´ı. getSectionName - metoda vrac´ın´azvypˇripojen´ych section. merge - funkce slouˇz´ıke slouˇcen´ıdvou konfiguraˇcn´ıch soubor˚u.Stejn´epoloˇzkyna- hrad´ı´udaji z nov´ehosouboru. setReadOnly - metoda slouˇz´ık nastaven´ıkonfiguraˇcn´ıhosouboru do stavu jen pro ˇcten´ı,bude zamezeno nov´emu zapisov´an´ıa sluˇcov´an´ı.

Date[5] - nab´ız´ıpodrobn´y,ale jednoduch´yAPI pro pr´acis daty a ˇcasy. Jeho me- tody pˇrij´ımaj´ıˇsirokou ˇsk´alutyp˚u,vˇcetnˇed´ılˇc´ıch ˇc´ast´ı,v mnoha kombinac´ıch nab´ız´ı mnoho funkc´ıa moˇznost´ınad r´amecst´avaj´ıc´ıch PHP funkc´ı.Zend date podporuje zkr´acen´en´azvymˇes´ıc˚uv mnoha jazyc´ıch. Funkce:

27 get - funkce vrac´ıdatum a ˇcasv mnoha r˚uzn´ych form´ach. Mˇes´ıceˇc´ıslem,zkr´acen´ym nebo cel´ymn´azvem v mnoha jazyc´ıch. set - funkce nastav´ınov´edatum jako nov´edatum nebo pouze jako ˇc´astdata. add - funkce pˇriˇctek dan´emu datu urˇcitouˇcasovou hodnotu(den, hodinu, rok). sub - funkce odeˇcteod dan´ehodata zadan´yˇcas,funkce je inverzn´ık funkci add. copyPart - funkce vytvoˇr´ıkopii zadan´ehodata. compare - funkce porovn´adatum se st´avaj´ıc´ım datem. Vr´at´ı -1 pokud datum je dˇr´ıvˇejˇs´ı,0 pokud jsou data stejn´aa 1 pokud datum teprve bude. equals - je funkce, kter´aumoˇzˇnujeporovnat ˇc´astidvou dat. Pˇriporovn´an´ıdn˚uv mˇes´ıcijsou ˇc´ıslastejn´a,funkce vrac´ıTRUE, ale pˇriporovn´an´ıstejn´ych dat na shodu rok˚use liˇs´ı,a funkce vrac´ıFALSE. isEarlier a isLater - funkce vracej´ıTRUE nebo FALSE podle splnˇen´ıpodm´ınky porovn´an´ıstarˇs´ınebo novˇejˇs´ı.U t´etofunkce lze tak´eporovn´avat d´ılˇc´ıˇc´astidat. isToday, isTomorrow a isYesterday - funkce zkontroluje, zda je dan´edatum dneˇsn´ı, z´ıtˇrejˇs´ınebo vˇcerejˇs´ı.

Filter[5] - poskytuje sadu bˇeˇzn´ych datov´ych filtr˚u.Poskytuje jednoduch´yfil- traˇcn´ımechanizmus, zˇretˇezen´ı,kter´em˚uˇzepouˇz´ıtv´ıcefiltr˚uv definovan´empoˇrad´ı. Funkce: addFilter - metoda pˇrid´afiltr do ˇretˇezce. appendFilter - metoda pˇrid´anov´yfiltr na konec ˇretˇezce. prependFilter - metoda pˇrid´anov´yfiltr na zaˇc´atekˇretˇezce. getFilters - metoda naˇctevˇsechny filtry. filter - metoda vr´at´ı filtrovanou hodnotu pˇres vˇsechny filtry v ˇretˇezci.Filtry se spouˇst´ıv poˇrad´ı,v jak´embyly pˇrid´any. getDefaultNamespaces - metoda vrac´ınastaven´ıjmenn´ehoprostoru. setDefaultNamespaces - metoda nastav´ıjmenn´yprostor. addDefaultNamespaces - metoda pˇrid´anov´yjmenn´yprostor. hasDefaultNamespaces - metoda vrac´ıTRUE, pokud je nastaven jmenn´yprostor. filterStatic - metoda odfiltruje data. Na data m˚uˇzeb´ytaplikov´anˇretˇezecfiltr˚u.

Form[5] - je rozs´ahl´aknihovna, kter´azjednoduˇsujevytv´aˇren´ıformul´aˇr˚ua mani- pulaci s nimi ve webov´eaplikaci. Pln´ı´ukoly, vstupn´ıfiltraci, ovˇeˇrov´an´ı,uspoˇr´ad´an´ı a vykreslen´ıformul´aˇre. Funkce: setConfig - funkce nastav´ıformul´aˇrpodle parametr˚uv konfiguraˇcn´ımsouboru. addAttribs a setAttrib - funkce pˇrid´aa nastav´ız´akladn´ıdata. setAction a getAction - funkce nastav´ıakci a vrac´ıˇretˇezecakc´ı. addSubForm, setSubForms a getSubForm - funkce pracuj´ıs ˇc´ast´ıformul´aˇre.

28 addErrorMessage a setErrorMessage - funkce vytv´aˇr´ıa pˇrid´av´achybov´ehl´aˇsen´ı. addDecorator, setDecorator, getDecorator, removeDecorator a clearDecorators - funkce slouˇz´ıpro pr´acis nastaven´ımform´atov´an´ıv´ysledn´ehozobrazen´ı. render - metoda vezme vˇsechny dekor´atorya vygeneruje z nich v´ysledn´ezobrazen´ı. valid - metoda zjiˇst’uje, zda prvek nebo ˇc´astformul´aˇreje spr´avn´a.

Layout[5] - umoˇzˇnujeobalit cel´yobsah aplikace do layoutu, kter´yobvykle pˇredstavuje zobrazovac´ıˇsablona.Implementace layoutu ve frameworku se skl´ad´a z nˇekolika tˇr´ıd,kter´ejsou souˇc´ast´ıbal´ıˇckuZend Layout. Jedn´ase zejm´enao sa- motnou tˇr´ıdu Zend Layout a tˇr´ıdy, kter´enapom´ahaj´ı integraci layoutu do MVC implementace, kter´aje v Zend Frameworku. Funkce: startMvc - metoda slouˇz´ıc´ık inicializov´an´ıs vyuˇzit´ımMVC. setOptions a setConfig - knihovny vyuˇz´ıvaj´ıc´ıse k nastaven´ılayoutu. setLayout a getLayout - funkce nastavuj´ıc´ıa vracej´ıc´ın´azevlayoutu. setLayoutPath a getLayoutPath - metoda nastav´ıcestu k ˇsablonˇes rozloˇzen´ımzob- razen´ı. disableLayout a enableLayout - setView - metoda nastav´ı,kter´eview se bude zobra- zovat. render - metoda nastav´ıcestu k ˇsablonˇea pˇred´adata do view k vykreslen´ı.

Log[5] - je knihovna, a slouˇz´ık zaznamen´av´an´ıud´alost´ı.Knihovna nab´ız´ıukl´ad´an´ı do soubor˚ui do datab´aze.Knihovna odes´ıl´azpr´avya umoˇzˇnujejejich filtrov´an´ı. Ud´alost,kterou chceme zaznamenat, dostane pˇridˇelen´ystupeˇnpriority. Funkce: factory - funkce nastav´ızaznamen´av´an´ıv z´avislostina nastaven´ı,do nˇehoˇzm˚uˇze zapisovat jeden nebo v´ıcezapisovatel˚u. log - funkce pˇred´av´azpr´avuse zadanou prioritou. addPriority - funkce slouˇz´ık pˇrid´av´an´ınov´ych priorit. Zad´av´ase n´azeva hodnota priority. V z´akladuje 8 priorit pˇreddefinov´ano.St´avaj´ıc´ıpriority nelze pˇrepisovat. addFilter - funkce slouˇz´ık filtrov´an´ızpr´avpodle zadan´epriority. addWriter - funkce slouˇz´ık pˇrid´an´ınov´ehozapisovatele. Zapisovatel se star´ao pˇrijet´ı zpr´avya samotn´ezaps´an´ıdo souboru nebo do datab´aze. setEventItem - funkce slouˇz´ık nastaven´ınov´ehodnoty, kter´ase pˇrid´ake kaˇzd´enovˇe zaznamenan´ezpr´avˇe.Zad´av´ase n´azevpoloˇzkya hodnota.

Gdata[5] - je knihovna spolupracuj´ıc´ıs knihovnami Google a poskytuje zobra- zen´ıˇradyaplikac´ınab´ızen´ych googlem. Knihovna umoˇzˇnujenaˇc´ıtat,pos´ılat,aktuali- zovat a mazat data pomoc´ıstandardn´ıhoprotokolu http. Knihovna Gdata obsahuje

29 ˇradud´ılˇc´ıch knihoven: • Zend Gdata Calendar - google kalend´aˇr • Zend Gdata Spreadsheets - spr´ava tabulky sd´ılen´es v´ıceuˇzivateli • Zend Gdata Docs - spr´ava prezentac´ı,tabulek nebo textov´ych dokument˚u • Zend Gdata YouTube - knihovna pro pˇr´ıstupna YouTube s moˇznost´ıpˇrehr´av´an´ı • Zend Gdata Photos - knihovna pracuj´ıc´ıs daty programu Picasa • a dalˇs´ı Funkce: Kalend´aˇr getCalendarEventFeed - funkce naˇcteud´alostiz kalend´aˇre. getCalendarEventEntry - funkce po zad´an´ıID naˇctejednu ud´alostz kalend´aˇre. getCalendarListFeed - funkce vr´at´ıseznam kalend´aˇr˚u. insertEvent - funkce slouˇz´ık vloˇzen´ıud´alostido kalend´aˇre. Docs getDocumentListFeed - funkce vr´at´ıseznam dokument˚u.Podle adresy vrac´ıtabulku nebo jin´edokumenty. uploadFile - funkce slouˇz´ık nahr´an´ıdokument˚ua pˇreveden´ıdo dokumentu google. Jako n´azev se pouˇzijen´azevdokumentu. Picasa getUserFeed - funkce naˇctealbumy, fotky a popis˚uspojen´ych s dan´ymuˇzivatelem. getAlbumFeed - funkce naˇc´ıt´aalba od zadan´ehouˇzivatele. getPhotoFeed - funkce naˇctefotografie a popisky ze zvolen´ehoalba. getAlbumEntry - funkce naˇctealbum podle zadan´eho ID. getPhotoEntry - funkce naˇctefotografii podle zadan´ehoID. getCommentEntry - funkce naˇctekoment´aˇr. insertAlbumEntry - funkce slouˇz´ık vytvoˇren´ınov´ehoalba. insertPhotoEntry - funkce slouˇz´ık vloˇzen´ınov´ehofotografie. insertCommentEntry - funkce vloˇz´ınov´ykoment´aˇrk fotografii. deleteAlbumEntry, deletePhotoEntry a deleteCommentEntry - funkce k odstranˇen´ı alba, fotografie a koment´aˇre.

Memory[5] - je mal´aknihovna urˇcenapro spr´avudat v prostˇred´ıs omezenou pamˇet´ı.Pamˇet’ov´eobjekty jsou generov´any spr´avcem pamˇeti,na vyˇz´ad´an´ıje m˚uˇzeme vymˇenitnebo naˇc´ıst,kdyˇzje to nutn´e. Funkce: factory - funkce vytvoˇr´ıodkaz na soubor, do kter´ehose budou data ukl´adat.

Mail[5] - poskytuje zobecnˇen´efunkce vytvoˇren´ıa odesl´an´ıtextov´ei MIME vy- hovuj´ıc´ıv´ıced´ıln´ee-mailov´ezpr´avy. Pomoc´ıt´etoknihovny lze maily i pˇrij´ımat.

30 Funkce: setBodyText a getBodyText - metody umoˇzˇnuj´ınastavit a zpˇetnˇez´ıskattext e-mailu ve form´atutextu. setBodyHtml a getBodyHtml - metody umoˇzˇnuj´ı nastavit a zpˇetnˇez´ıskat text e- mailu, kter´yje v html form´atu. addAttachment - metoda pˇripoj´ıpˇr´ılohu k e-mailu. addTo - metoda pˇrid´av´ak e-mailu pˇr´ıjemcejako pole nebo ˇretˇezec. addCc - metoda pˇrid´av´aadresu adres´atapro pˇrijet´ıkopie e-mailu. addBcc - metoda umoˇzˇnujeodeslat skrytou kopii. getRecipients - metoda vrac´ıseznam vˇsech pˇridan´ych pˇr´ıjemc˚u. setFrom - metoda nastav´ıadresu odesilatele. getFrom - metoda vrac´ınastaven´ehoodesilatele. clearFrom - metoda vymaˇzeodesilatele. setSubject - metoda nastav´ıpˇredmˇetemailu. clearSubject - metoda vymaˇzepˇredmˇetemailu. addHeader - metoda umoˇzˇnujepˇridathlaviˇckue-mailu. send - metoda slouˇz´ık samotn´emu odesl´an´ıe-mailu.

Pdf[5] - pomoc´ıt´etoknihovny je moˇzn´enaˇc´ıst,vytv´aˇret,upravovat a ukl´adat dokumenty. Takto m˚uˇzepomoci, kaˇzd´yPHP aplikace dynamicky vytv´aˇretPDF do- kumenty ´upravou st´avaj´ıc´ıch dokument˚unebo vytv´aˇren´ı. Funkce: parse - vytvoˇr´ısoubor pdf podle vloˇzen´ehoˇretˇezceparametr˚u. load - funkce naˇctejiˇzexistuj´ıc´ıpdf k dalˇs´ımu zpracov´an´ı. save - funkce slouˇz´ık uloˇzen´ınov´ehosouboru pdf, nebo je moˇzno k jiˇzexistuj´ıc´ımu souboru pˇridatdata na konec. rollback - funkce vr´at´ıpoˇcetreviz´ıproveden´yv pdf souboru. DrawLine - funkce slouˇz´ık nakreslen´ıˇc´ary, zad´avaj´ıse krajn´ıbody. drawRectangle - funkce slouˇz´ık vykreslen´ıobd´eln´ıku. drawRoundedRectangle - funkce slouˇz´ık vykreslen´ıobd´eln´ıkuse zaoblen´ymirohy. DrawText - funkce vykresl´ıtext do ˇr´adkuze zadan´ych poˇc´ateˇcn´ıch souˇradnic. drawImage - funkce vykresl´ıdo souboru obr´azek.

Paginator[5] - je knihovna slouˇz´ıc´ıke str´ankov´an´ıdat, umoˇzˇnujenaˇc´ıtatpouze ˇc´astdat. Zpˇrehledˇnujea zrychluje zobrazen´ı. Funkce: factory - funkce vytvoˇr´ıobjekt str´ankov´an´ı. count - funkce vrac´ıcelkov´ypoˇcetstr´anek. getpages - metoda vrac´ıstr´ankuze zvolen´ehorozsahu.

31 setCurrentPageNumber - metoda nastav´ıˇc´ısloaktu´aln´ıstr´anky, v z´akladuje nasta- vena prvn´ıstr´anka. setItemCountPerPage - metoda nastav´ıpoˇcetprvk˚una str´anku. setView - metoda nastav´ıhodnoty pro vykreslen´ı.

Validate[5] - je knihovna staraj´ıc´ıse o kontrolu vloˇzen´ıspr´avn´ych dat. V pˇr´ıpadˇe vloˇzen´ıˇspatn´ych dat vrac´ıvalid´atoryFALSE a zpr´avuvysvˇetluj´ıc´ıco bylo zad´ano ˇspatnˇe. Funkce: addValidator - funkce pˇrid´ado ˇretˇezcenov´yvalid´ators nastaven´ymiparametry. isValid -funkce zkontroluje data podle zadan´ych valid´ator˚u.V´ysledkem je TRUE nebo FALSE. getMessages - funkce vrac´ızpr´avy komentuj´ıc´ıˇspatn´ezad´an´ıdat. setMessage - funkce nab´ız´ımoˇznostvlastn´ıhonastaven´ıcel´echybov´ezpr´avy. is - metoda, kter´ase vyuˇz´ıv´ak snadn´emu a jednoduch´emu ovˇeˇren´ı.Zad´av´ase pouze data pro zkontrolov´an´ıa valid´ator,pomoc´ıkter´ehose provede kontrola. setMessageLength a getMessageLength - metoda nastav´ıa vrac´ıomezen´ıd´elkychy- bov´ezpr´avy. V pˇr´ıpadˇezkr´acen´ızpr´avyje konec nahrazen ...“. ”

Session[5] - je knihovna nab´ızej´ıc´ı pr´acis ´udaji relac´ı. Tyto relace doplˇnuj´ı cookie, liˇs´ıse vˇsakt´ım,ˇzedata jsou uloˇzeny na stranˇeserveru a ne u klienta. Sesion se vyuˇz´ıv´apˇriuchov´an´ıinformac´ıo pˇrihl´aˇsen´ych uˇzivatel´ıch. Funkce: setOptions - sessionExists - funkce zjist´ı,zda zadan´arelace existuje. start - metoda spust´ırelaci. isStarted - funkce zjisti zda je zvolen´arelace spuˇstˇena. stop - metoda zak´aˇzez´apisdo relace. setId a getId - funkce nastav´ıa vrac´ıID relace. writeClose - funkce vypne relaci. destroy - funkce slouˇz´ıke zruˇsen´ıdat relace. getIterato - metoda vrac´ıpole n´azv˚urelac´ı.

2.2 Volnˇedostupn´eknihovny

2.2.1 CodeIgniter

Tank auth library[19] Jedn´ase o autentizaˇcn´ı knihovnu, k zak´odov´an´ı hesel vyuˇz´ıv´aknihovnu phpass, umoˇzˇnujejednor´azovou registraci, nebo bezpeˇcnˇejˇs´ıaktivaci s ovˇeˇren´ıme-mailem.

32 Pˇriopakovan´emˇspatn´empˇrihl´aˇsen´ınab´ız´ıCAPCHA. Moˇznostnastaven´ızapama- tov´an´ıpˇrihl´aˇsen´eho.M´afunkce pro zmˇenu hesla, zmˇenu ,mailu, udˇelen´ıBAN uˇzivateli. konyukhov.com/soft/tank auth

Ajax pagination library Knihovna slouˇz´ık vytvoˇren´ıstr´ankov´an´ıAjax s pouˇzit´ımJQuery. .com/neotohin/CodeIgniter-Ajax-pagination-Library

Captcha library Knihovna slouˇz´ık vytvoˇren´ıcapcha c´odu,u kter´ehoumoˇzˇnujenastavi p´ısmo,hus- totu zaˇsumˇen´ı. github.com/neotohin/Captcha-library-for-CodeIgniter

Bonfire library Tato knihovna je rozs´ahl´aˇsablonas mnoha z´akladn´ımifunkcemi, jako je emailov´y syst´em,v´yvojov´eprostˇred´ı,obsah, statistiku a autentizaci. github.com/neotohin/Bonfire

Facebook Ignited library Knihovna umoˇzˇnujepropojen´ıs Facebook. github.com/DarkProspectGames/Facebook-Ignited

Generic Table editor Je knihovna umoˇzˇnuj´ıc´ısnadn´yzp˚usobpro editaci a ´upravu datab´azov´ych tabulek. www.bird.li/TableEditor

2.2.2 Zend framework

Zend framework Facebook library 1.0.0 Je knihovna slouˇz´ıc´ık pˇripojen´ıa prov´az´an´ıaplikace s Facebook. www.phpkode.com/scripts/item/zend-framework-facebook-library/

GDataGmailer 1.0 Tato knihovna slouˇz´ıke staˇzen´ıkontakt˚uz Gmail. www.phpkode.com/scripts/item/gdatagmailer

OAuth Twitter 0.3 Tato knihovna nab´ız´ıˇradufunkc´ık propojen´ıa pr´acis Twitter.

33 www.phpkode.com/scripts/item/oauth-twitter

2.3 Vyuˇzit´ıknihoven pˇrin´avrhu aplikac´ı

Tab. 2.1: Vyuˇzit´ıknihoven pˇrin´avrhu vzorov´ych aplikac´ı

N´aleˇzitosti Knihovny CodeIgniter Zend Spr´ava uˇzivatel˚u Tank auth* Auth Session Acl Database Registry Template Db Layout Pˇridˇelov´an´ırol´ı Database Db Template Layout Form Vyhled´av´an´ı Database Db Template Layout Form Filtrov´an´ı Validation Filter Oˇsetˇren´ıvstupn´ıch dat Validation Validate Filter Str´ankov´an´ı Pagination Paginator Database Db Email Email Mail Database Db * Tank auth - nen´ız´akladn´ıknihovna CodeIgniter.

34 3 POROVNAN´ ´I FRAMEWORKU˚ ZEND A CO- DEIGNITER

Pro porovn´aniframeworku jsem si vybral dva frameworky, a to Zend framework 1.12 a CodeIgniter 2.1.3.

Obr. 3.1: Logo CodeIgniter a Zend framework[5][14]

3.1 Vlastnosti

Automatick´egenerov´an´ık´odu

Generov´an´ık´oduby byla velmi uˇziteˇcn´avˇeca usnadnilo by to spoustu pr´ace,protoˇze mnoho k´oduse v programech opakuje a liˇs´ı se jen mal´ymizmˇenami.Automa- tick´egenerov´an´ık´oduby uˇsetˇrilodost ˇcasua zamezilo mnoha chyb´am.CodeIgniter ˇz´adnoutakovou funkci bohuˇzelnenab´ız´ı. Zend framework nab´ız´ı knihovnu Tool, kter´apomoc´ıpˇr´ıkazov´eˇr´adkyvygeneruje z´akladn´ıadres´aˇrov´auspoˇr´ad´an´ı.Pomoc´ı t´etoknihovny do vytvoˇren´ehoadres´aˇrelze vygenerovat pr´azdn´esoubory controleru, akci, formul´aˇr,view a model. Tyto funkce jsou zaj´ımav´e,ale ne ˇcastovyuˇz´ıvan´e.

PHP

Jak se postupnˇevyv´ıjej´ınov´everze framework˚u,mˇen´ıse i poˇzadavky na novˇejˇs´ı verze PHP. U CodeIdniteru se vyˇzadujeverzi PHP 5.1.6 a novˇejˇs´ı.Zend vyˇzaduje verzi PHP 5.2.4 a novˇejˇs´ı.

Uˇzivatelsk´eopr´avnˇen´ı

U tohoto poˇzadavku jsem narazil na nedostatek CodeIgniter. Nenab´ız´ıˇz´adnoukni- hovnu pro pr´acis uˇzivateli a jejich opr´avnˇen´ımi.Zend framework nab´ız´ıknihovnu

35 Zend Acl, kter´aumoˇzˇnujespr´avurol´ı.Knihovna nab´ız´ımoˇznostdˇediˇcnostivlast- nost´ıod jedn´enebo v´ıcerol´ı.Knihovna takt´eˇznab´ız´ımoˇznostnastaven´ıopr´avnˇen´ı vytvoˇrit,ˇc´ıst,aktualizovat a smazat. Dle potˇreby je moˇznozvolen´ymuˇzivatel˚um udˇelovat v´yjimkyv opr´avnˇen´ıpro urˇcit´efunkce.

Validace

Je funkce slouˇz´ıc´ık urˇcen´ı,zda vloˇzen´adata jsou ve form´atu,jak´yjsme poˇzadovali. Validace obou framework˚uumoˇzˇnuj´ıkontrolu, zda se jedn´ao ˇc´ıslo,datum, ˇretˇezec sloˇzen´ypouze z p´ısmen,e-mail nebo IP adresu. Validace kontroluje d´elkuˇretˇezce. Zamez´ıvloˇzen´ınekorektn´ıch znak˚u.Umoˇzn´ıkontrolu pˇriregistraci, zda zadan´ehesla jsou schodn´a.CodeIgniter nab´ız´ıvˇsechny z´akladn´ıpravidla pro validaci. U kontroly prku lze pouˇz´ıtv´ıcepravidel. Zend m´ave sv´eknihovnˇeˇradupravidel, kter´eCo- deIgniter nenab´ız´ı,jako je kontrola, zda se jedn´ao ˇc´ıslokreditn´ıkarty, poˇstovn´ı smˇerovac´ıˇc´ıslonebo o ˇc´ıslourˇcit´ehoˇc´arov´ehok´odu.

Email

Oba porovn´avan´eframeworky maj´ıknihovnu pro odes´ıl´an´ıemail˚u.Umoˇzˇnuj´ıpos´ılat maily s pˇr´ılohami.Zend nav´ıcnab´ız´ımoˇznostˇcten´ımail˚uz m´ıstn´ıch nebo vzd´alen´ych poˇstovn´ıch schr´aneka umoˇzˇnujen´asledn´ezpracov´an´ı.

Datum a ˇcas

Porovn´avan´eframeworky umoˇzˇnuj´ıpr´acis ˇcasya nab´ız´ır˚uzn´eform´aty pro samotn´e zobrazen´ı.CodeIgniter pro pr´acis ˇcasov´ymi´udaji nab´ız´ıhelper. CodeIgniter nav´ıc oproti Zend nab´ız´ıknihovnu pro tvorbu kalend´aˇre.

Jazyk

Vybran´eframeworky nab´ız´ımoˇznostnastaven´ıa zobrazov´an´ıv r˚uzn´ych jazyc´ıch. CodeIgniter umoˇzˇnujeukl´adatjazykov´eform´aty v souboru (.php). Zend umoˇzˇnuje pracovat s v´ıcejazykov´ymiform´aty(.csv .ini .Tbx .Xml).

PDF

Zend m´aknihovnu pro pr´acise soubory PDF. M˚uˇzesoubory ˇc´ıst,upravovat i tvoˇrit od zaˇc´atku.Knihovna umoˇzˇnujemˇenitpoˇrad´ıstr´anek.M´afunkce pro kreslen´ıjedno- duch´ych tvar˚ua vkl´ad´an´ıobr´azk˚u.CodeIgniter knihovnu pro pr´acis PDF nenab´ız´ı.

36 Fotky

CodeIgniter m´aknihovnu pro pr´acis obr´azky. Funkce umoˇzˇnuj´ı mˇenitvelikost obr´azku,vytvoˇritn´ahledov´yobr´azek,oˇr´ıznout, otoˇcitobr´azeka vloˇzitvodoznak do obr´azku.Zend framework takovou funkci nenab´ız´ı.

Str´ankov´an´ı

Je knihovna, kterou maj´ıoba frameworky. Str´ankov´an´ıslouˇz´ık zpˇrehlednˇen´ıa zrych- len´ınaˇc´ıt´an´ıstr´anek.Z poˇzadavku na zobrazen´ına str´ancese zobraz´ıjen ˇc´asta na dalˇs´ıprvky se dostaneme pomoc´ıˇc´ıslan´asleduj´ıc´ıstr´ankynebo pomoc´ıtlaˇc´ıtkadalˇs´ı.

Nahr´av´an´ısoubor˚u

Oba frameworky nab´ız´ıknihovny pro vkl´ad´an´ısoubor˚upomoc´ıprotokolu HTTP a FTP. Pˇrinahr´av´an´ısouboru doch´az´ıke kontrole, zda soubor odpov´ıd´apˇredpoklad˚um toho, co je povoleno. Vkl´ad´an´ılze omezit u obr´azk˚urozmˇeryfotky, d´alepodle ve- likosti a typu souboru. Podle nastaven´ı se uloˇz´ı s p˚uvodn´ım n´azvem, nebo bude pˇrejmenov´an.

ZIP

CodeIgniter nab´ız´ıknihovnu pro pr´acis archivy ZIP. Umoˇzˇnujevytv´aˇren´ıa pˇrid´av´an´ı dat do ZIP soubor˚u.Zend knihovnu pro pr´acis archivy nenab´ız´ı.

Mˇena

Zend nab´ız´ıknihovnu pro pr´acis mˇenou,kter´aslouˇz´ık poˇcetn´ımoperac´ım.Umoˇzˇnuje pˇrepoˇcty mˇen.Nab´ız´ıˇraduˇsablonpro form´atov´an´ımˇen.

3.2 Dokumentace

Oba frameworky nab´ız´ıdostateˇcnoudokumentaci a n´avody k tvorbˇevlastn´ıapli- kace. Zend m´ana sv´ych ofici´aln´ıch str´ank´ach framework.zend.com pˇr´ıruˇckupro zaˇc´ınaj´ıc´ıprogram´atory, kde ve struˇcnostivysvˇetlujeMVC, jak vytvoˇritprvn´ıpro- jekt, formul´aˇra n´avod na datab´azovou tabulku. Zend m´apˇrehlednoudokumen- taci vˇsech knihoven a jejich funkc´ı,knihovny jsou pops´any pro v´ıceverz´ıpro ZF1 a pro novˇejˇs´ı ZF2. D´alenab´ız´ı uˇzivatelskou pˇr´ıruˇckus ˇradouˇreˇsen´ych pˇr´ıklad˚u. Zend nab´ız´ına sv´ych str´ank´ach moˇznostˇskolen´ı,kter´eovˇsemnen´ıv Cesk´erepub-ˇ lice. Na internetu je moˇznonaj´ıtmnoho f´or,kde je vyˇreˇsenaspousta probl´em˚u,a

37 kter´eumoˇzˇnuj´ıvzn´estdotaz k probl´emu. CodeIgniter uˇzivateli na sv´ych str´ank´ach .com/codeigniter nab´ıdne takt´eˇzuˇzivatelskou pˇr´ıruˇckus pˇrehledn´ymzob- razen´ım knihoven. Souˇc´ast´ı uˇzivatelsk´epˇr´ıruˇckyje n´avod na instalaci a n´avod, jak aktualizovat svoji pˇredchoz´ıverzi na nejnovˇejˇs´ı.Jako vhodn´ypovaˇzuji´uvodn´ı sezn´amen´ıse samotn´ymprogramem a MVC. Kr´atk´yvideo tutori´als poˇc´ateˇcn´ımi kroky a z´akladn´ımsezn´amen´ıms aplikac´ı.M´apˇr´ımona sv´ych str´ank´ach f´orum.

3.3 Adres´aˇrov´astruktura

Struktury ukl´ad´an´ısoubor˚uaplikace jsou odliˇsn´e.U Zend se hlavn´ıˇc´astaplikace ukl´ad´ado sloˇzky application, vlastn´ı knihovny se vkl´adaj´ı mezi knihovny Zend. Do sloˇzky public se ukl´adaj´ıvˇsechny obr´azky, css a soubory.

Obr. 3.2: Adres´aˇrov´astruktura - Zend Framework

38 CodeIgniter m´acelou aplikaci ve sloˇzce application, do kter´evkl´ad´amevˇse,co se t´yk´anaˇs´ıaplikace, a do sloˇzky system nen´ınutn´ezasahovat. Vlastn´ıvytvoˇren´e knihovny a helpery se ukl´adaj´ıdo sloˇzekv application a nem´ıchaj´ıse s knihovnami CodeIgniter, pˇrizmˇenˇejsou nadˇrazeny knihovn´amp˚uvodn´ım.Obr´azkya css soubory ukl´ad´amedo sloˇzky assets.

Obr. 3.3: Adres´aˇrov´astruktura - CodeIgniter

3.4 V´yvoj

Na v´yvoji obou framework˚use st´alepracuje, vytv´aˇr´ıse aktualizace, frameworky se rozˇsiˇruj´ıo novˇepotˇrebn´efunkce a odstraˇnuj´ı se chyby. Zend m´aaktu´alnˇeverzi Zend 1.12.3 a verzi Zend 2.1.5 . CodeIgniter pˇriˇsels novou verz´ıCodeIgniter 2.1.0 v listopadu 2011, aktu´aln´ıverz´ıje CodeIgniter 2.1.3.

39 3.5 Srovn´avac´ıtabulka

Tab. 3.1: Porovn´an´ıZend framework a CodeIgniter

FrameWork Zend CodeIgniter PHP (min) 5.24 5.16 MVC ANO ANO Verze 1.12.3 2.1.3. RSS ANO ANO Velikost (pˇribliˇznˇe) 55MB 4MB Knihy ANO (CZ) ANO (EN) Mail ANO ANO PDF ANO NE Uˇzivatelsk´eopr´avnˇen´ı ANO NE Datab´aze MySQL, MSSQL, Oracle, MySQL, MySQLi, MS SQL, PostgreSQL, IMB DB2 PostgreSQL, Oracle, SQ- Lite, ODBC Licence zdarma zdarma

3.6 Zhodnocen´ıvlastnost´ı

Vybran´eframeworky obsahuj´ı z´akladn´ı knihovny pro pr´acis funkcemi, kter´ese vyuˇzij´ı na kaˇzd´ych str´ank´ach. Velmi uˇziteˇcn´ejsou knihovny pro pr´acis emaily, jako dalˇs´ıse mi l´ıb´ıknihovny pro pr´acis jazyky, protoˇzejiˇzvˇetˇsinastr´anekvyuˇz´ıv´a pˇrep´ın´an´ımezi zobrazen´ımjendnotliv´ych jazykov´ych mutac´ıstr´anek.Jako v´yhodu CodeIgniter povaˇzujiknihovnu pro pr´acis fotkami, dle m´ehon´azorutato knihovna nem´amoc velk´euplatnˇen´ı u vˇetˇsiny str´anek.Oproti Zend nab´ız´ı knihovnu pro pr´acise soubory ZIP. Zend framework nab´ız´ı ve srovn´an´ı s CodeIgiter mnohem v´ıc uˇziteˇcn´ych knihoven. Nejuˇziteˇcnˇejˇs´ı knihovnou, kterou nab´ız´ı Zend nav´ıc, je knihovna pro pr´acis uˇzivatelsk´ymi opr´avnˇen´ımi,kter´ase vyuˇzijeve vˇsech str´ank´ach. Jako ˇcastopouˇz´ıvanou bych zaˇradilknihovnu pro pr´acia ´upravu PDF soubor˚u.Zend m´aknihovnu s funkcemi pro pr´acis mˇenami,kter´alze vyuˇz´ıtu internetov´ych ob- chod˚u.Porovn´avan´eframeworky maj´ıv´ybornou a pˇrehlednoudokumentaci a struˇcn´y n´avod jak zaˇc´ıt.U Zend jako velmi uˇziteˇcnoupovaˇzujiknihu Zend Framework, kter´a

40 je dostupn´ana ˇcesk´emtrhu. Pˇriseznamov´an´ıs CodeIgniter mi pomohl slovensk´y video tutori´al.U CodeIgniter povaˇzujiza v´yhodn´ejeho uloˇzen´ıvlastn´ıaplikace do samostatn´ehoadres´aˇremimo syst´emov´esoubory. Oba frameworky jsou neust´ale vylepˇsov´any a aktualizov´any, jejich rozd´ıln´avelikost dle m´ehon´azorunehraje pˇr´ıliˇs velkou roli. Pro pr´acibych si vybral Zend framework pro jeho vˇetˇs´ıpoˇcetnab´ızen´ych knihoven, kter´ejsou dle m´ehon´azoruuˇziteˇcnˇejˇs´ı.

41 4 VZOROVE´ APLIKACE

4.1 Vyuˇzit´eprogramy

XAMPP[17] - Je volnˇeˇsiˇriteln´yprogram obsahuj´ıˇradufunkc´ı pro zprovoznˇen´ı dom´ac´ıhoserveru. Instalace a pr´acev tomto programu je jednoduch´a.Vytvoˇren´ı vlastn´ıdatab´azev phpMyAdmin je snadn´ea rychl´e,prostˇred´ıje moˇznonastavit do ˇcesk´ehojazyka. XAMPP obsahuje: • Apache • Mysql • phpMyAdmin • ProFTPD • Mercury • OpenSSl

PSPad[18] - Je volnˇeˇsiˇriteln´yuniverz´aln´ıeditor. Umoˇzˇnujeukl´adatsoubory v ˇsirok´e ˇsk´aleform´at˚ua k´odov´an´ı.PSPad barevnˇezv´yrazˇnujesyntaxe. Nab´ız´ıvyhled´av´an´ı s moˇznost´ınahrazen´ı.Obsahuje editor TopStyle Lite pro editaci CSS. Umoˇzˇnuje souˇcasnˇepr´acive v´ıcedokumentech. PSPad nab´ız´ıˇradubal´ıˇck˚una rozˇs´ıˇren´ısv´ych moˇznost´ı.

4.2 Datab´aze

V prostˇred´ıphpMyAdmin jsem vytvoˇriljednu datab´azipracuj´ıc´ıs obˇemaframeworky. Vˇetˇsinu tabulek v datab´azivyuˇz´ıvaj´ıoba frameworky. CodeIgniter m´av datab´azi pˇrid´any vlastn´ıtabulky, kter´evyuˇz´ıv´ak pˇrihlaˇsov´an´ıuˇzivatel˚u.Ci sessions, user autologin jsou tabulky, kter´ejsou souˇc´ast´ıautentizaˇcn´ıknihovny pro CodeIgniter. D´ale ta- bulku pr´ava a zdroje vyuˇz´ıv´apro sv´aopr´avnˇen´ı tak´eCodeIgniter, u Zend jsou opr´avnˇen´ıˇreˇsenaskrz Acl.php, orpr´avnˇen´ıpˇr´ıstupuje vysvˇetlenov kapitole 4.3.6. Soupis a vyuˇzit´ıdatab´azov´ych tabulek je vidˇetv tabulce4.1. Na obr´azku4.1je ER diagram zobrazuj´ıc´ıentity t´ykaj´ıc´ıse obsahu aplikace. Dalˇs´ıdiagramy jsem zaˇradil do pˇr´ıloh.

42 Obr. 4.1: ER digram obsahu aplikac´ı

43 Tab. 4.1: Vyuˇzit´ıdatab´azov´ych tabulek

Tabulka Zend CodeIgniter akce ANO ANO ci sessions NE ANO menu ANO ANO menu-obsah ANO ANO prava NE ANO role ANO ANO rubriky ANO ANO stav ANO ANO stranky ANO ANO users ANO ANO user autologin NE ANO user profiles ANO ANO zdroj NE ANO

4.3 Zend

Po instalaci frameworku Zend a vytvoˇren´ıadres´aˇrov´estruktury pro pˇrehledn´eukl´ad´an´ı ˇc´ast´ık´odusamotn´eaplikace, m˚uˇzeme zaˇc´ıtse samotnou prac´ına aplikaci. Vlastn´ı program se nach´az´ıve sloˇzce application adres´aˇrov´astruktura viz. obr´azek3.2.V t´eto struktuˇrejsou soubory roztˇr´ıdˇeny podle typu na models, controllers a views.

4.3.1 Konfigurace

Konfiguraci jsem provedl pomoc´ı souboru application.ini nach´azej´ıc´ı se ve sloˇzce configs. K´odkonfiguraˇcn´ıhosouboru je vidˇetnaobr´azku4.2. V tomto souboru jsem nastavil pˇr´ıstupdo datab´azov´etabulky. Pˇridaljsem odkazy, odkud se budou naˇc´ıtat formul´aˇrea z´akladn´ıˇsablonalayout.

44 Obr. 4.2: Zend konfigurace

4.3.2 Filtrov´an´ıa oˇsetˇren´ıvstupn´ıch dat

K oˇsetˇren´ıvstupn´ıch dat se u Zend nab´ıdlydvˇeknihovny, a to Filter a Validate. Tyto knihovny se nemuseli nijak incializovat. Oˇsetˇren´ıvstupn´ıch dat se nastavuje pˇr´ımove formul´aˇri pro kaˇzdoupromˇenou zvl´aˇst’. K promˇenn´ese pˇripojuj´ıpravidla validace a zvolen´efiltry. Samotn´akontrola se prov´ad´ı v controlleru. Pˇreps´an´ı chybov´eho hl´aˇsen´ılze pˇr´ımopˇrizad´av´an´ıvalid´atorupro kaˇzd´ypol´ıˇcko zvl´aˇst’, nebo pˇr´ımodo knihovny s valid´atory. Na obr´azku4.3 je uk´az´anopˇrid´an´ı valid´ator˚ua filtr˚udo souboru Register ve sloˇzce forms. • required - Vyˇzadujenaplnˇen´ıpromˇenn´edaty. • Digits - Hodnota mus´ıb´ytˇc´ıslo. • EmailAddress - Valid´atorkontroluje spr´avnostvloˇzen´ıemailov´eadresy. • StringLength - Urˇcujepoˇcetp´ısmen.Prvn´ıparametr urˇcuje,zda se m´azobra- zovat chybov´ahl´aˇska.Druh´yparametr urˇcujerozsah nebo pˇresn´yrozmˇer. • filtr Alpha - Odfiltruje vˇsekromˇep´ısmen.

45 • filtr StripTrim - Odstran´ıb´ıl´eznaky na zaˇc´atkua na konci. • filtr StripTags - Odstran´ıhtml a xml tagy.

Obr. 4.3: Zend Validace dat uˇzivatele

4.3.3 Str´ankov´an´ı

Zend nab´ız´ı knihovnu Paginator pro tvorbu str´ankov´an´ı. K samotn´emu pˇrid´an´ı str´ankov´an´ıbylo nutn´eupravit controller a view. Dalˇs´ımkrokem bylo vytvoˇritsi view, obsahuj´ıc´ınavigaˇcn´ıliˇstuumoˇzˇnuj´ıc´ılistov´an´ımezi str´ankami.V ˇc´astik´odu z controlleru IndexController, kter´yje na obr´azku4.4, je nutn´enaˇc´ıstvˇsechny publiko- van´estr´anky, vytvoˇritobjekt str´ankov´an´ı,nastavit poˇc´ateˇcn´ızobrazovanou str´anku a poˇcetzobrazovan´ych prvk˚una str´ance.V zobrazen´ı,ve kter´em str´ankov´an´ıbu- deme prov´adˇetjsem nakonec vloˇzilview s navidac´ı.V samotn´emview strankovani jsou vytvoˇreny odkazy ˇsipek a ˇc´ıseln´eodkazy na str´anky. Podle aktu´aln´ıpozice je zak´az´anoodkazov´an´ına aktu´aln´ıstr´ankua v pˇr´ıpadˇeprvn´ınebo posledn´ıstr´anky nefunguj´ıpˇr´ısluˇsn´eodkazy ˇsipek.

4.3.4 Vyhled´av´an´ı

Vyhled´av´an´ı je vyuˇzitok vyhled´av´an´ı uˇzivatel˚u.Pˇr´ıstup do vyhled´av´an´ı je po- moc´ıodkazu v horn´ımmenu, opr´avnˇen´ık vyhled´av´an´ıuˇzivatel˚umaj´ırole vedouc´ı, hl.vedouc´ı a admin. Str´ankavyhled´av´an´ıse skl´ad´aze dvou ˇc´ast´ı,v horn´ıˇc´astije formul´aˇrpro zad´an´ıpoˇzadavku, v doln´ıpolovinˇeobrazovky je tabulka s v´ysledky.

46 Obr. 4.4: Zend controller - zobrazen´ıstr´ankovan´ych dat

Po vloˇzen´ıdat do tabulky jsou dvˇemoˇznosti,bud’ pomoc´ıtlaˇc´ıtka Hledat d´atvyhle- dat poˇzadavek nebo tlaˇc´ıtkem Smazat smazat formul´aˇr.U kaˇzd´ebuˇnkyformul´aˇre je oˇsetˇren´ıpomoc´ıvalid´ator˚ua filtr˚u.Pˇrizad´an´ıˇc´ıslado kolonky jm´ena,dojde k jej´ımu odfiltrov´an´ı.Po stisknut´ıtlaˇc´ıtka Hledat se zkontroluj´ıvstupn´ıdata a za- vol´ase funkce hledatClen na obr´azku4.5 v modelu Clen. V t´etofunkci se provede SELECT v tabulce user profiles. Podm´ınkyvyhled´av´an´ıjsou zad´any pomoc´ıfunkc´ı WHERE a LIKE, pˇriporovn´av´an´ımus´ıb´ytza kaˇzdoupromˇennouprocento, kter´e nahrad´ılibovoln´eznaky. V´ysledkyse zobraz´ıv p˚uvodn´ımoknˇepod formul´aˇrem. Kaˇzd´yuˇzivatel m´ave sv´emˇr´adkuodkaz na str´anku,kde je moˇzn´eupravit profil. Stisknut´ımtlaˇc´ıtka Smazat se pˇredpˇred´an´ımdo modelu data z formul´aˇrevymaˇzou a model vr´at´ıvˇsechny uˇzivatele.

Obr. 4.5: Zend model - vyhled´an´ıuˇzivatel˚u

47 4.3.5 Spr´ava uˇzivatel˚u

Spr´ava uˇzivatel˚uje ˇc´astk´odu,kter´ese star´ao to aby do str´aneknevstoupil ne- opr´avnˇenˇeuˇzivatel. D´alese star´ao registraci, pˇrihlaˇsov´an´ıa odhlaˇsov´an´ıuˇzivatel˚u. Nejprve se mus´ıuˇzivatel zaregistrovat, po registraci se jiˇzm˚uˇzepˇrihl´asit.Zaregistro- van´yuˇzivatel z´ısk´av´av z´akladupˇridˇelen´apr´ava guest, kter´ym´astejn´apr´ava jako uˇzivatel nepˇrihl´aˇsen´y.Pˇriukonˇcen´ıinternetov´ehoprohl´ıˇzeˇcese mus´ıuˇzivatel znovu pˇrihl´asit. Registrace - Vytvoˇr´ıse nov´yformul´aˇr,kter´yse naˇctedo okna registrace. Po pˇrijet´ı validovan´ych a filtrovan´ych dat z registrace se odeˇsloudo modelu Clen akce regis- terClen na obr´azku4.6, kde se data uloˇz´ıdo datab´aze.Promˇenn´a heslo1 se zaˇsifruje pomoc´ıfunkce SHA1. Data v modelu jsou uloˇzenado dvou datab´azov´ych tabulek. Tabulka users slouˇz´ıpro pˇrihlaˇsovac´ı´udaje a spr´avuuˇzivatele. Tabulka user profiles slouˇz´ıpro uloˇzen´ıosobn´ıch ´udaj˚uuˇzivatele.

Obr. 4.6: Zend model - registrace uˇzivatele

Login - Logov´an´ıdo str´anekse prov´ad´ıpomoc´ıemailu a hesla. Pokud je jiˇz uˇzivatel pˇrihl´aˇsen,tak mu nen´ıumoˇznˇenose pˇrihl´asitznova, mus´ıse nejprve odhl´asit. Pokud jsou pˇrijatadata od uˇzivatele, vytvoˇr´ı se pomoc´ı pomocn´efunkce getAu- thAdapter objekt z knihovny pro autentizaci Auth, kter´yse odkazuje na tabulku users, sloupce email a password, email mus´ıb´ytjedineˇcn´yproto se pouˇz´ıv´ak urˇcen´ı uˇzivatele a heslo k samotn´emu ovˇeˇren´ı uˇzivatele. Pomoc´ı metody getInstance se ovˇeˇr´ızda zadan´e´udaje odpov´ıdaj´ıuˇzivateli. Pˇr´ıstupov´aidentita uˇzivatele bez hesla se uloˇz´ıdo registru. N´asleduje pˇresmˇerov´an´ına ´uvodn´ıstr´anku. Logout - Odhl´aˇsen´ıse prov´ad´ıpomoc´ıodkazu v prav´emhorn´ımrohu. V con- trolleru AuthController akci logout na obr´azku4.8.Odhl´aˇsen´ıspoˇc´ıv´av tom, ˇzese vymaˇzouv registru ´udaje uˇzivatele a pˇrejdese na obrazovku s pˇrihl´aˇsen´ım.

48 Obr. 4.7: Zend controller - pˇrihl´aˇsen´ıuˇzivatele

Obr. 4.8: Zend controller - odhl´aˇsen´ıuˇzivatele

4.3.6 Pˇridˇelov´an´ırol´ı

Role urˇcuj´ıkam m´auˇzivatel pˇr´ıstuppovolen a co m˚uˇzedˇelat.Pokud uˇzivatel nen´ı pˇrihl´aˇsenm´apˇridˇelenouroli guest, kter´am˚uˇzestr´ankypouze prohl´ıˇzet. Po zaregis- trov´an´ımu role guest z˚ustane, admin m´apr´avo roli ˇclen˚ummˇenit.K nastaven´ıpr´av uˇzivatel˚ujsem vyuˇzilknihovnu Acl. K nastaven´ıopr´avnˇen´ıjsem pouˇzilnastaven´ı pr´avuˇzivatel˚uskrz model, uk´azkazad´an´ıpr´avviz. obr´azek4.9.Touto metodou je nastaven´ırol´ıa jejich pr´avsnadn´ea rychl´e.Do modelu je potˇrebavloˇzit vˇsechny role a zdroje. Pˇrivytv´aˇren´ırol´ıjde pˇridatjako dalˇs´ıparametr roli od kter´ebude dˇedit

49 pr´ava. Samotn´epˇridˇelen´ıpr´avse prov´ad´ıpomoc´ı allow a deny, kter´emohou roli po- volit nebo zak´azatpˇr´ıstupdo kontroleru. Opr´avnˇen´ılze rozˇs´ıˇrito povolen´ıpˇr´ıstupu k samotn´ymakc´ım. Nastaven´ı pr´avt´ımto zp˚usobem je vhodn´epouze pro menˇs´ı poˇcet rol´ıa opr´avnˇen´ı.Nev´yhodou je, ˇzezmˇenapr´avje moˇzn´apouze v souboru. Nelze dynamicky pˇrid´avat pomoc´ıaplikace nov´erole a jejich opr´avnˇen´ı.

Obr. 4.9: Zend model - pr´ava uˇzivatel˚u

Do souboru Bootstrap jsem vloˇzilfunkci, kter´akontroluje pˇrihl´aˇsen´ehouˇzivatele a jeho roli. Funkce si naˇcte pravidla pˇr´ıstupu s modelu Acl, a pokud je uˇzivatel pˇrihl´aˇsenzjist´ıjeho roli. V z´avˇeru naˇcte plugin AccessCheck, tento plugin probˇehne pˇredkaˇzd´ymvol´an´ımkontroleru a v pˇr´ıpadˇeneopr´avnˇen´ehovstupu, pˇresmˇeruje na funkci pˇrihl´aˇsen´ı.Oˇsetˇren´ızobrazen´ıodkaz˚upˇr´ıstupuZend funkce isAllowed, kde se zad´apoˇzadavek, jak´arole a co za funkci chce pouˇz´ıt,zadan´e´udaje se porovnaj´ıpodle pravidel. Uk´azkaoˇsetˇren´ıview na obr. 4.10 je ze souboru strankyseznam, do kter´eho maj´ıpˇr´ıstup vedouc´ı, Hl.vedouci a admin.

50 Obr. 4.10: Zend view - povolen´ızobrazen´ı

4.3.7 Odes´ıl´an´ıEmail˚u

Uk´azkaodes´ıl´an´ıemail˚uje pouˇzitapˇrivkl´ad´an´ınov´ych str´anek. Vˇsichni uˇzivatel´e, kteˇr´ızaˇskrtnou Zas´ılataktuality, budou pˇrivloˇzen´ınov´estr´ankydost´avat obsah t´eto str´ankyna email. Pomoc´ıfunkce Mercury jsem si v programu XAMPP vytvoˇrildva emaily na localhostu, kter´epouˇz´ıv´amke zkouˇsen´ıodes´ıl´an´ıemail˚u.V controlleru Index, kter´yslouˇz´ı pro pr´acise str´ankami,jsem do akce pridat, jak je vidˇetna obr´azku4.11,pˇridalk´odpro odes´ıl´an´ıemail˚u.Nejdˇr´ıve zavol´ammodel Mail, kter´y vr´at´ıemailov´eadresy vˇsech uˇzivatel˚upoˇzaduj´ıc´ıch zas´ılat aktuality. Vytvoˇr´ımnov´y email k´odovan´yve form´atuUTF-8, pro spr´avn´ezobrazov´an´ıh´aˇck˚ua ˇc´arek.Do ob- sahu emailu vloˇz´ımtext a do pˇredmˇetunadpis str´anky. Odes´ıl´an´ıprov´ad´ımv cyklu, kdy do odes´ılatelepˇrid´amvˇzdyjednoho pˇr´ıjemce,pˇredodesl´an´ımdalˇs´ıhoemailu vˇzdypˇr´ıjemcevymaˇzu.Je neˇz´adouc´ıaby pˇr´ıjemcividˇeliadresy jin´ych pˇr´ıjemc˚u.

Obr. 4.11: Zend controller - odes´ıl´an´ıemailu

51 4.4 CodeIgniter

4.4.1 Konfigurace

Konfigurace u CodeIgniter se prov´ad´ıve sloˇzceconfig jak je zobrazeno v adres´aˇrov´e struktuˇreviz. obr´azek3.3.Konfigurace je rozdˇelenado v´ıcesoubor˚u.Nastavil v sou- boru autoload.php naˇc´ıt´an´ıpouˇz´ıvan´ych knihoven a helper˚u.V souboru config.php URL adresu, vstupn´ıobrazovku, kter´ase m´aotevˇr´ıtpˇriprvn´ımspuˇstˇen´ıa k´odov´an´ı str´anek.V souboru email.php z´akladn´ınastaven´ıpro odes´ıl´an´ıemail˚u.V souboru database.php nastaven´ıpˇr´ıstupudo datab´azea k´odov´an´ıdatab´aze,nastaven´ıviz. obr´azek4.12.

Obr. 4.12: CodeIgniter konfigurace datab´aze

4.4.2 Filtrov´an´ıa oˇsetˇren´ıvstupn´ıch dat

Tyto funkce jsou d˚uleˇzit´epˇrivkl´ad´an´ı vstupn´ıch dat od uˇzivatel˚u.Vyuˇz´ıvaj´ı se hlavnˇek zamezen´ıvloˇzen´ıˇspatn´ych dat. K zamezen´ıpoˇskozen´ıcel´ehosyst´emu pro- gramu. Kontroluj´ızda uˇzivatel vloˇzil data spr´avnˇe.Do pravidel validace se zad´av´a jm´enopromˇenn´e,n´azev kter´yse bude vypisovat pˇriˇspatn´emzad´an´ıv chybov´ych hl´aˇsen´ı.Vˇsechny pravidla zaps´any za sebou oddˇeleny |. Na obr´azku4.13je uk´az´ana vstupn´ı validace pˇriregistraci uˇzivatele. Validace se nastavuje a prov´ad´ı v cont- rolleru. V z´akladuneum´ıvalidace pracovat s h´aˇckya ˇc´arkami.Musel jsem si vytvoˇrit vlastn´ıvalid´ator.Tento valid´atorse nach´az´ı v application∖libraries∖MY Form validation. • required - Vyˇzadujenaplnˇen´ıpromˇenn´edaty.

52 • is unique [푢푠푒푟푠.푒푚푎푖푙] - Zkontroluje zda parametr je v tabulce jedin´y.Povinn´e parametry tabulka a sloupec. • min length[4] a max length[12] - Ud´avaj´ı poˇcetvstupn´ıch znak˚uminim´aln´ı a maxim´aln´ıpoˇcet,tyto valid´atorylze pouˇz´ıvat samostatnˇe. • is natural - Data mus´ıb´ytpouze pˇrirozen´aˇc´ısla. • valid emails - Vloˇzen´adata mus´ıb´ytemailov´aadresa. • trim - Provede oˇrez´an´ı,kter´eodfiltruje b´ıl´eznaky na konci a nazaˇc´atku. • xss clean - Odstran´ıˇskodliv´e´udaje. Tento filtr lze nastavit pˇr´ımov konfigu- raci, vˇsechny data pˇred´avan´ypomoc´ı GET, POST nebo COOKIES budou kontrolov´any a filtrov´any.

Obr. 4.13: CodeIgniter validace user

4.4.3 Str´ankov´an´ı

Str´ankov´an´ıvyuˇz´ıv´ampˇrizobrazov´an´ıstr´anek.CodeIgniter nab´ız´ıknihovnu Pagi- nation,pro usnadnˇen´ıpr´acepˇritvorbˇestr´ankov´an´ı.Pˇrinastaven´ıstr´ankov´an´ıv cont- rolleru je nejdˇr´ıve nutn´enaˇc´ıstpouˇz´ıvanou knihovnu, n´aslednˇenastavit str´ankov´an´ı. Je potˇrebanastavit adresu na tu, ze kter´ese str´ankov´an´ıbude prov´adˇet,protoˇzena konci adresy si CodeIgniter ukl´ad´aukazatelna prvn´ıprvek na str´ance.Dalˇs´ı,co je potˇreba nastavit, je celkov´ypoˇcetprvk˚u,poˇcetzobrazen´ych prvk˚una jedn´estr´ance, poˇcet odkaz˚upˇreda po aktu´aln´ıstr´ancea povolit nebo zak´azat zobrazen´ıodkaz˚u na prvn´ıa posledn´ıstr´ance.Z controlleru vol´ammodel, do kter´ehopˇred´av´ampoˇcet prvku na str´ancea poˇc´ateˇcn´ıprvek z aktu´aln´ıobrazovky(표푓푓푠푒푡). V modelu naˇctu vˇsechny str´ankypostupnˇepodle id a vr´at´ımpouze potˇrebn´ypoˇcetposunut´yo offset. Data vr´acen´az modelu poˇsludo view, kde pod vloˇzen´adata pˇrid´amodkazy slouˇz´ıc´ı pro listov´an´ımezi str´ankami.Na obr´azku4.14je zobrazeno nastaven´ıstr´ankov´an´ı v controlleru stranky v akci strankyseznam.

53 Obr. 4.14: CodeIgniter controller str´ankov´an´ı

4.4.4 Vyhled´av´an´ı

Vyhled´av´an´ıje vyuˇzitou vyhled´av´an´ıuˇzivatel˚u.Do vyhled´av´an´ıuˇzivatel˚use d´ado- stat pomoc´ıodkazu v horn´ıliˇstˇena str´ancese seznamem str´anek.Na t´atostr´ance jsou spojeny dva bloky, a to formul´aˇrpro zad´av´an´ıpoˇzadavku hled´an´ıa pod n´ım n´asledujetabulka s v´ysledky. Vˇsichni uˇzivatel´ese zobraz´ıpˇriprvotn´ımzobrazen´ı, nebo pokud nen´ıˇz´adn´aomezuj´ıc´ıpodm´ınka.Na buˇnkyformul´aˇreje nastavena va- lidace, k vyps´an´ıchyby dojde napˇr´ıkladpˇrivloˇzen´ıˇc´ıslado jm´ena,z´aroveˇnnedojde k vyhled´an´ıa ve v´ysledkujsou vˇsichni uˇzivatel´e.Samotn´ehovyhled´av´an´ı,po zad´an´ı dat do formul´aˇrea odesl´an´ıformul´aˇrepomoc´ıtlaˇc´ıtka Hledat, se provede validace a data se odeˇsloudo modelu user model, kter´yje zobrazen na obr´azku4.15.V modelu pomoc´ıfunkce SELECT vyhled´amvˇsechna potˇrebn´adata z tabulky user profiles, odeberu data, kter´anejsou stejn´es formul´aˇrempomoc´ıWHERE a data neobsahuj´ıc´ı data z formul´aˇrepomoc´ıfunkce LIKE. Vˇsechny vyhledan´euˇzivatele seˇrad´ımpodle id. Z modelu vrac´ımpole obsahuj´ıc´ıv´ysledeka poˇcetv´ysledk˚u.V´ysledkyse zobraz´ı v p˚uvodn´ımoknˇe,za kaˇzd´ymuˇzivatelem je tlaˇc´ıtko pro ´upravu profilu. Stisknut´ım tlaˇc´ıtka Vymazat se pˇred´avan´adata smaˇzoua vr´at´ıse pr´azdn´yformul´aˇr.

4.4.5 Spr´ava uˇzivatel˚u

Spr´ava uˇzivatel˚ufunguje stejnˇejako u Zend, do soubor˚uCodeIgniter jsem nahr´al jiˇzvytvoˇrenouknihovnu [19]. Tato knihovna je vybavena vlastn´ımˇsifrov´an´ımhesel, kter´ejsem nepouˇzilz d˚uvodu shody s hesly Zend. U knihovny jsem vypnul akti- vaci pomoc´ı emailu. D´alejsem vypnul zad´av´an´ıcaptcha pˇripˇrihlaˇsov´an´ı,kterou tato knihovna nab´ız´ı.Knihovna nab´ız´ıautomatick´epˇrihlaˇsov´an´ı,doba pˇrihl´aˇsen´ı je nastavena v konfiguraˇcn´ımsouboru tank auth. V knihovnˇejsou pˇredpˇripraveny obrazovky pro pˇrihl´aˇsen´ı,registraci a zmˇenu ´udaj˚u.St´avaj´ıc´ıdatab´azibylo nutn´e rozˇs´ıˇrito dalˇs´ı tabulky, kter´eknihovna vyuˇz´ıv´a users, ci sessions, login attempts a user autologin. Tabulku users vyuˇz´ıvaj´ıoba frameworky pro spr´avuuˇzivatel˚u.

54 Obr. 4.15: CodeIgniter model - vyhled´an´ıuˇzivatel˚u

4.4.6 Pˇridˇelov´an´ırol´ı

Pokud nen´ıuˇzivatel pˇrihl´aˇsen,m´apˇridˇelenouroli guest. Pˇriregistraci je kaˇzd´emu uˇzivateli ponech´anarole guest. Jinou roli pˇridˇel´ı admin. Pr´ava rol´ımjsou pˇridˇelenav datab´azi,v tabulce zdroje jsou vˇsechny pˇr´ıstupy a v tabulce prava jsou pravidla. Pomoc´ıhelperu auth helper funkce prava, kter´aje na obr´azku4.17, se urˇcuje,zda m´auˇzivatel povolen´ypˇr´ıstup.Pomoc´ıselectu zjist´ım, zda-li je pro uˇzivatele povolen pˇristup.Pokud m´auˇzivatel pˇr´ıstup,zobraz´ıse mu tlaˇc´ıtko ke stisknut´ı. Dalˇs´ı funkc´ı je opravneni, tato funkce vol´a prava, pokud je pˇr´ıstupzam´ıtnut, funkce pˇresmˇerujepoˇzadavek na ´uvodn´ıstr´anku,t´ımto je oˇsetˇreno zavol´an´ıpˇresadresu controlleru.

Obr. 4.16: CodeIgniter view - povolen´ızobrazen´ıodkazu

55 Obr. 4.17: CodeIgniter helper - pr´ava a opr´avnˇen´ı

4.4.7 Odes´ıl´an´ıEmail˚u

Odes´ıl´an´ıemail˚ufunguje stejnˇejako u str´anekv Zend. V controlleru Stranky jsem do funkce add vloˇzilvol´an´ına funkci infomail, kter´aje vidˇetna obr´azku4.18.Nejdˇr´ıve z modelu infomail naˇctuvˇsechny uˇzivatele, kter´ym m´ab´ytemail odesl´an.Nastav´ım jm´enoa adresu odes´ılatele. Cyklicky vkl´ad´amjm´enauˇzivatel˚ua jejich emailov´e adresy a rozes´ıl´amaktualitu. Adresa a jm´enoodes´ılatelelze nastavit v konfiguraci.

Obr. 4.18: CodeIgniter funkce infomail

56 5 USPORˇ AD´ AN´ ´I VZOROVYCH´ APLIKAC´I

Obr. 5.1: Navigace mezi obrazovkami

57 Obr. 5.2: Uvodn´ıstr´ankav´ Zend(horn´ı)a CodeIgniter(doln´ı) 58 Navigace mezi obrazovkami Samotn´anavigace je zobrazena na obr´azku5.1.Kaˇzd´aobrazovka je pops´anan´azvem a typem obrazovky. Obrazovky, kter´ejsou podbarven´e,jsou dostupn´ez horn´ıhonebo z lev´ehomenu. V navigaci jsou zobrazeny vˇsechny obrazovky. Do vˇsech obrazovek m´apˇr´ıstuppouze administr´ator. Grafick´yvzhled Na obr´azku5.2je zobrazena ´uvodn´ıobrazovka Zend a CodeIgniter. Formul´aˇrk vy- tvoˇren´ınov´estr´ankyje na obr´azku5.3.Dalˇs´ıobr´azkyvzorov´eaplikace jsou v pˇr´ıloze.

Obr. 5.3: Formul´aˇrk vytvoˇren´ınov´estr´anky

59 6 ZIVOTNˇ ´I CYKLY

Kaˇzd´aentita, kter´am´avyuˇz´ıvat ˇzivotn´ıcykly, m´aod sam´ehovytvoˇren´ıpˇridˇelen urˇcit´ystav. Ke kaˇzd´emu stavu lze pˇridˇelitvlastnosti t´ykaj´ıc´ıse stav˚un´asleduj´ıc´ıch, opr´avnˇen´e role maj´ıv dan´emstavu prvek vidˇeta moci s n´ımpracovat. Dle zvolen´erole m˚uˇze uˇzivatel mˇenitstav prvk˚u. Zivotn´ıcyklyˇ se staraj´ıo entity Akce, Str´anka,Rubrika a User. Entita User m´ajednoduch´yˇzivotn´ıcyklus, kter´ym´apouze dva stavy.

Obr. 6.1: Zivotn´ıcyklusˇ str´anky

60 6.1 Popis ˇzivotn´ıhocyklu stav 101 - Str´ankaskryt´anezaˇrazen´a Pˇrivytvoˇren´ınov´estr´anky, je str´ancepˇriˇrazentento stav, odpov´ıd´anezaˇrazen´ea ne- publikovan´estr´ance.Str´ankaje vidˇetpouze v z´aloˇzce Str´anky“, do kter´ym´apˇr´ıstup ” Vedouci“, Hl.vedouci“ a admin“. Zde je str´ankamoˇznomˇenit.Ze stavu 101 jsou ” ” ” dvˇemoˇznosti,co se str´ankou udˇelat,vˇsechny tˇrirole m˚uˇzoustr´anku zaˇraditdo menu nebo do rubriky, coˇzje stav 102. Dalˇs´ımoˇznostmaj´ı Hl.vedouci“ a admin“, kteˇr´ı ” ” mohou d´atstr´ankupublikovat, str´ankaby byla publikov´ana,ale nezaˇrazena. stav 102 - Str´ankaskryt´azaˇrazen´a Str´ankaje zaˇrazenado rubriky nebo do menu, je ji moˇznozpˇetnˇevyˇradita dostat se opˇet do stavu 101. Hl.vedouci“ a admin“ mohou z tohoto stavu str´ankupubli- ” ” kovat, ˇc´ımˇzse dostane do stavu 104. stav 103 - Str´ankapublikovan´anezaˇrazen´a Str´ankaje publikov´ana,nen´ıvˇsakjeˇstˇezaˇrazenado rubriky nebo menu. Z toho stavu mohou vˇsechny pˇredemzmiˇnovan´erole str´ankuskr´yt,nebo pˇriˇraditdo rubriky ˇci menu. stav 104 - Str´ankapublikovan´azaˇrazen´a Str´ankaje publikov´anaa zaˇrazenado rubriky nebo menu. V tomto stavu je str´anka pˇr´ıstupn´apro nepˇrihl´aˇsen´euˇzivatele, mohou se k n´ıdostat skrze postrann´ımenu a pˇr´ısluˇsn´erubriky. Opr´avnˇen´erole mohou str´ankuskr´yt,vyˇraditz menu nebo z rubriky a archivovat. Archivov´an´ımse str´ankaodebere z rubriky nebo z menu a skryje se. stav 105 - Str´ankaarchivovan´a Archivovan´estr´anky je moˇznoznovu obnovit, ˇc´ımˇzse nastav´ıdo poˇc´ateˇcn´ıhostavu, do stavu 101.

Ze vˇsech zvolen´ych stav˚ulze u str´ankyupravovat obsah. Role Hl.vedouci“ a ad- ” ” min“ mohou str´ankyvymazat nez´avislena tom, v jak´emstavu se nach´az´ı.

61 6.2 Tabulka stav˚ua pˇrechod˚uStr´anky

Tab. 6.1: Tabulka stav˚uStr´anky

Id stav N´azev Zobrazen´a 101 Str´ankaskryt´anezaˇrazen´a NE 102 Str´ankaskryt´azaˇrazen´a NE 103 Str´ankapublikovan´anezaˇrazen´a NE 104 Str´ankapublikovan´azaˇrazen´a ANO 105 Str´ankaarchivovan´a NE

Zobrazen´a“ - Ano znamen´a,zda je str´ankapˇr´ıstupn´av lev´emmenu, jenˇzvid´ı ” vˇsichni uˇzivatel´ebez ohledu na pˇrihl´aˇsen´ı.

Tab. 6.2: Tabulka pˇrechod˚uStr´anky

ID stav Popis pˇrechodu Role Z DO Vedouci Hl.vedouci Admin 101 Vytvoˇren´ı ANO ANO ANO 101 102 Zaˇrazen´ıdo rubriky/menu ANO ANO ANO 101 103 Publikov´an´ı NE ANO ANO 102 101 Vyˇrazen´ız rubriky/menu ANO ANO ANO 102 103 Publikov´an´ı NE ANO ANO 103 104 Zaˇrazen´ıdo rubriky/menu ANO ANO ANO 103 101 Skryt´ı ANO ANO ANO 104 102 Skryt´ı ANO ANO ANO 104 103 Vyˇrazen´ız rubriky/menu ANO ANO ANO 104 105 Archivov´an´ı ANO ANO ANO 105 101 Obnovit ANO ANO ANO 101 Smazat NE ANO ANO 102 Smazat NE ANO ANO 103 Smazat NE ANO ANO 104 Smazat NE ANO ANO 105 Smazat NE ANO ANO

62 7 POROVNAN´ ´I VZOROVYCH´ APLIKAC´I

K vytvoˇren´ı srovn´avac´ıch aplikac´ı byly vyuˇzity tyto dva frameworky, a to Zend framework 1.12.3 a CodeIgniter 2.1.3. Pro porovn´an´ıaplikac´ıvyuˇzijistejn´ekategorie jako pˇri popisu ˇc´ast´ıaplikac´ıv kapitole 4.3.

7.1 Filtrov´an´ıa oˇsetˇren´ıvstupn´ıch dat

Filtrov´an´ıa validace vstupn´ıch dat je d˚uleˇzit´ymprvkem str´aneka vyuˇz´ıv´ase ve vˇsech str´ank´ach, kde m´auˇzivatel umoˇznˇenovkl´adatdata. Oba zvolen´eframeworky validaci a filtraci maj´ıa disponuj´ıˇsirokou ˇsk´aluvalid´ator˚ua filtr˚u.Zat´ımco CodeIg- niter nab´ız´ıpouze z´akladn´ıvalid´atory, Zend nab´ıdlv´ıcevalid´ator˚u,kter´enejsou ˇcasto pouˇz´ıvan´e.U vzorov´eaplikace jsem si vystaˇcils valid´atoryod obou framework˚u,ne- musel jsem vytv´aˇretvlastn´ıvalid´atory. U Zend se vyuˇz´ıv´aformul´aˇr˚u,ve kter´ych se nastav´ıpro jednotliv´eelementy vlast- nosti zvl´aˇst’. V´ysledn´yformul´aˇrse pˇred´av´ado view, kde se vytiskne jedn´ımpˇr´ıkazem. Vˇsechny zobrazen´ıformul´aˇr˚umaj´ıskoro stejn´eview. V kontroleru se provede kon- trola vˇsech valid´ator˚ua filtr˚u.Valid´atoryfungovali i s h´aˇckyaˇc´arkami.Chybov´a hl´aˇsen´ısi Zend vol´apˇr´ımoz knihoven. Pˇrepisdo ˇcesk´ehojazyka byl z´asahemdo knihovny. Kaˇzd´yvalid´atormˇelchybovou hl´aˇskuve sv´em souboru. Pro zobrazen´ı o jak´yprvek se jedn´a,jsem si do valid´ator˚upˇridalvlastn´ıtexty. Data jsem pˇred´aval jednotlivˇemodelu, ˇc´ımˇzjsem si zkomplikoval pr´aci,musel jsem pro rozd´ıln´avstupn´ı data tvoˇritvˇzdynovou funkci v modelu. U CodeIgniter se ˇz´adn´eformul´aˇrenevyuˇz´ıvaj´ı,zobrazen´ısamotn´ehoformul´aˇrese vytv´aˇr´ıpˇr´ımove view, tam jsem nastavil parametry vstupn´ıch element˚u.Valid´atory se nastavuj´ıpˇr´ımov kontroleru a narozd´ılod Zend mi pˇriˇslozad´av´an´ıjednoduˇs´ı a pˇrehlednˇejˇs´ı.Valid´atoryse zad´avaly do jednoho ˇr´adkua staˇcilozadat pouze n´azev valid´atorua dodateˇcn´yparametr, pokud byl nˇejak´ypotˇreba.U valid´ator˚ujsem pˇrid´aval n´azevpromˇenn´e,kter´ybyl souˇc´ast´ıchybov´ehohl´aˇsen´ı.Chybov´ehl´aˇsen´ıse stala pˇrehledn´aa na prvn´ıpohled bylo vidˇet,kde chyba nastala. Zaujala mˇeva- lidace is unique, kter´azad´an´ımn´azvutabulky a sloupce oˇsetˇrujeunik´atnostdat. Texty chybov´ych hl´aˇsen´ıjsou um´ıstˇeny v jednom souboru, bylo nutn´eje pˇrepsatdo ˇcesk´ehojazyka. Pˇrivalidaci, pokud se jednalo pouze o text, jsem narazil na probl´em, CodeIgniter nepodporoval h´aˇckya ˇc´arky. Musel jsem si rozˇs´ıˇritp˚uvodn´ıvalid´atoro zvolen´ap´ısmena.Data jsem do modelu pˇred´aval jako pole, ˇc´ımˇzjsem si uˇsetˇrilpsan´ı samostatn´ych funkc´ıv modelu. Pro vytvoˇren´ıjednoho elementu s valid´atoryjsem u Zend potˇreboval napsat 9 ˇr´adk˚u k´odua CodeIgniter 11 ˇr´adk˚u,formul´aˇru CodeIgniter byl jiˇzuspoˇr´ad´anpodle m´ych

63 pˇredstav, u Zend byly elementy pod sebou, uspoˇr´adaljsem je pomoc´ıCSS stylu.

7.2 Str´ankov´an´ı

S touto funkcionalitou nab´ız´ıpomoc oba n´astroje. U Zend se v kontroleru vytvoˇr´ı objekt str´ankov´an´ı a nastav´ı se d´ılˇc´ı parametry str´ankov´an´ı.Objekt str´ankov´an´ıs daty se pˇredaj´ıdo view. Pˇrijat´adata se zobraz´ı, v m´empˇr´ıpadˇevol´amdalˇs´ıview, ve kter´emm´amvykreslen´ınavigace str´ankov´an´ı. Zde je moˇznonastavit vlastn´ıform´atprvk˚unavigace. U CodeIgniter se konfigurace str´ankov´an´ıprov´ad´ıpodobnˇejako u Zend. Parame- try str´ankov´an´ıse nastav´ıv kontroleru a s daty se pˇredaj´ıdo view. Ve view se zobraz´ı data a k vytvoˇren´ıposlouˇz´ıjeden pˇr´ıkaz,kter´ynavigaci mezi str´ankamicel´yvytvoˇr´ı. Str´ankov´an´ıje jednoduch´ymprvkem u Zend jsem str´ankov´an´ıvytvoˇrilpomoc´ı25 ˇr´adk˚u k vytvoˇren´ıstr´ankov´an´ıu CodeIgniter jsem si vystaˇcils 11 ˇr´adkyk´odu.Zend nab´ıdl vlastn´ıform´atov´an´ınavigace str´ankov´an´ı.

7.3 Spr´ava uˇzivatel˚u

O spr´avuuˇzivatel˚use v Zend staraj´ıautentizaˇcn´ıknihovna auth a knihovna acl, ta se star´ao pr´ava uˇzivatel˚u.CodeIgniter v z´akladunenab´ız´ıˇz´adnouknihovnu, co by se o spr´avuuˇzivatel˚ustarala. CodeIgniter jsem si rozˇs´ıˇrilo volnˇedostupnou knihovnu Tank auth, jejiˇzstruˇcn´ypopis je v kapitole2.2.1. U Zend pˇripr´acis uˇzivateli vyuˇz´ıv´amBootstrap.php soubor, kter´yprobˇehnepˇred spuˇstˇen´ımkaˇzd´eakce. Z nˇehovol´amplugin AccesCheck, kter´ykontroluje, zda ke zvo- len´eakci m´auˇzivatel pˇr´ıstup.Model Acl slouˇz´ık nastaven´ıuˇzivatelsk´ych opr´avnˇen´ı, vˇsechna pr´ava jsou nastavena v tomto souboru, tato metoda nastaven´ıpr´avje jed- noduch´a,avˇsak nevhodn´apro velk´ea sloˇzit´eaplikace. Pro pˇrihl´aˇsen´ıa komunikaci s uˇzivatelem pouˇz´ıv´amkontroler AuthControler. Po pˇrihl´aˇsen´ıjsou data uˇzivatele uloˇzenav registru. U CodeIgniter jsem si nahr´alknihovnu Tank auth do sv´eaplikace a upravil pro sv´e potˇreby. Auth knihovna se star´ao pˇrihlaˇsov´an´ı,registraci a odhlaˇsov´an´ı.Knihovna vyuˇz´ıv´atabulky, kter´ejsem pˇridaldo sv´edatab´aze.Informaci o pˇrihl´aˇsen´emuˇzivateli si ukl´ad´ado session. K pr´acis rolemi jsem vytvoˇrilauth helper, kter´yse star´ao opr´avnˇen´ıpˇr´ıstupuuˇzivatele. V kaˇzd´aakci je vloˇzenovol´an´ıfunkce, kter´azkontro- luje opr´avnˇen´ıpˇr´ıstupu.Ve view je u kaˇzd´ehoodkazu podm´ınkapodm´ınˇenapr´avy pˇr´ıstupu. Na rozd´ılod CodeIgniter mi Zend nab´ıdlknihovny pro spr´avuuˇzivatel˚u,v tomto porovn´an´ıdle m´ehon´azoruje Zend jasnˇelepˇs´ı.Budu-li srovn´avat knihovny Zend

64 a vloˇzenouknihovnu, kter´amˇelajiˇzkontrolery a view vytvoˇreny a se sv´ymivlast- nostmi jiˇzhotov´ehoprostˇred´ıurˇcitˇevyhr´av´aknihovna pro CodeIgniter. Velk´ymplu- sem je u Zend kontrola pˇr´ıstupurol´ı,akce v kontroleru jsou automaticky oˇsetˇreny proti neopr´avnˇen´emu pouˇzit´ı,aniˇzby byl pˇrid´ank´odk zamezen´ıpˇr´ıstupu.

7.4 Odes´ıl´an´ıEmail˚u

Odes´ıl´an´ı hromadn´ych email˚ua hlavnˇeautomatiky, je velk´ymulehˇcen´ım pr´ace. Odes´ıl´an´ıemailu je uk´az´anopˇrivkl´ad´an´ıstr´anky. U Zend je nastaven´ıjednoduch´ea rychl´e.Nastav´ıse ´udaje od koho email je, komu m´ab´ytdoruˇcen,pˇredmˇetua samotn´yobsah. U CodeIgniter bylo potˇrebanastavit nˇekolik parametr˚uv config. Odes´ıl´an´ımailu je stejnˇesloˇzit´ejako u Zend. U Zend bylo k odesl´an´ımailu zapotˇreb´ınapsat 14 ˇr´adk˚uk´oduu CodeIgniter 9 ˇr´adk˚u k´odu,odesl´an´ımailu je v obou prostˇred´ıch stejnˇejednoduch´e.

7.5 Rychlost

Rychlost odezvy str´anekje velmi d˚uleˇzit´astejnˇejako vzhled str´anek,kter´yjsem u vzorov´ych aplikac´ıneˇreˇsil.Rychlost odezvy str´anekjsem mˇeˇrilpomoc´ıaplikace Developer Tools, kter´aje souˇc´astiprohl´ıˇzeˇcGoogle Chrome. Vzorov´eaplikace jsem testoval na osobn´ımpoˇc´ıtaˇcis parametry: • procesor: Intel Core2 Duo T7100 1,80 GHz • pamˇet’: 2 GB • HDD: 160 GB 5400 rpm

Protˇred´ı: • Apache 2.4.3 • MySQL 5.5.27 • PHP 5.4.7

Mˇeˇren´ırychlosti bylo pro kaˇzd´emˇeˇren´ıprovedeno desetkr´atvˇzdypro jednu apli- kaci, n´aslednˇebyl prohl´ıˇzeˇcvypnut a zmˇeˇriljsem odezvu druh´eaplikace. Pro po- rovn´an´ıodezvy jsem si zvolil mˇeˇren´ıdoby odezvy pˇrinaˇcten´ı´uvodn´ıstr´anky, kdy nebyl ˇz´adn´yuˇzivatel pˇrihl´aˇsen.Dalˇs´ımˇeˇren´ıbylo pro pˇrihl´aˇsen´ıuˇzivatele, vyhled´an´ı uˇzivatele, publikov´an´ıstr´ankya otevˇren´ırubriky v postrann´ımmenu.

65 Tab. 7.1: Porovn´an´ırychlosti - ´uvodn´ıstr´anka

vzork˚u pr˚umˇer[s] MIN [s] MAX [s] Zend 10 1,415 1,320 1,520 CodeIgniter 10 0,182 0,167 0,198 Procentu´aln´ırozd´ıl 10 12,86 % 12,65 % 13,03 %

Tab. 7.2: Porovn´an´ırychlosti - pˇrihl´aˇsen´ı

vzork˚u pr˚umˇer[s] MIN [s] MAX [s] Zend 10 1,415 1,320 1,520 CodeIgniter 10 0,141 0,116 0,169 Procentu´aln´ırozd´ıl 10 10,66 % 8,92 % 12,52 %

Tab. 7.3: Porovn´an´ırychlosti - vyhled´an´ıuˇzivatele

vzork˚u pr˚umˇer[s] MIN [s] MAX [s] Zend 10 1,447 1,420 1,480 CodeIgniter 10 0,169 0,152 0,182 Procentu´aln´ırozd´ıl 10 11,66 % 10,70 % 12,30 %

Tab. 7.4: Porovn´an´ırychlosti - publikov´an´ıstr´anky

vzork˚u pr˚umˇer[s] MIN [s] MAX [s] Zend 10 1,296 1,250 1,350 CodeIgniter 10 0,121 0,112 0,136 Procentu´aln´ırozd´ıl 10 9,35 % 8,96 % 10,07 %

Tab. 7.5: Porovn´an´ırychlosti - otevˇren´ırubriky

vzork˚u pr˚umˇer[s] MIN [s] MAX [s] Zend 10 1,330 1,290 1,360 CodeIgniter 10 0,161 0,144 0,174 Procentu´aln´ırozd´ıl 10 12,11 % 11,16 % 12,79 %

66 7.6 Velikost

Pro porovn´an´ıjsem vzal i velikost samotn´eaplikace. Poˇcetˇr´adk˚uk´odu,kter´ybyl potˇreba napsat.

Tab. 7.6: Velikost aplikac´ı

framework velikost [kB] poˇcetˇr´adk˚uk´odu[-] Zend 126 3000 CodeIgniter 293 2600

U CodeIgniter nen´ı zapoˇctenk´od,kter´yn´aleˇz´ı knihovnˇeTakn auth(pˇribliˇznˇe 1000 ˇr´adk˚u).Rozsah napsan´ehok´oduse znatelnˇeneliˇs´ı.

7.7 Zhodnocen´ı

Vytv´aˇren´ıvalidace vstupn´ıch dat u CodeIgniter byla jednoduˇsˇs´ıa pˇrehlednˇejˇs´ı.Ke zvolen´emu elementu se pˇrid´avaj´ıvalid´atoryjako parametr. Pozitivn´ıvˇec´ıu Zend je validace pracuj´ıc´ıs h´aˇckya ˇc´arkami.U pˇrekladuchybov´ych hl´aˇsen´ıje vhodn´e um´ıstˇen´ıvˇsech hl´aˇsen´ıdo jednoho souboru, jak to mˇelnastaveno CodeIgniter. Souˇc´ast´ı valid´atoruu CodeIgniter byl n´azevpromˇenn´y,kter´yse vypisoval s chybou. Nastaven´ıodes´ıl´an´ıemail˚ubylo u obou n´astroj˚ustejnˇesloˇzit´e.U CodeIgniter mi sch´az´ımoˇznostpˇrij´ım´an´ıemail˚u. K vytvoˇren´ı str´ankov´an´ı u CodeIgniter potˇrebujev´yvoj´aˇrnapsat polovinu k´odu oproti Zend. K´od,o kter´yje str´ankov´an´ıv Zend vˇetˇs´ı,slouˇz´ık vytvoˇren´ınavigace mezi str´ankami.CodeIgniter navigaci vygeneruje. Pomoc pˇripr´acis uˇzivateli poskytuje pouze Zend. Knihovny Zend jsou prov´azan´e s cel´ym programem, nebylo nutnˇenastavovat kontrolu, zda-li m´auˇzivatel pr´avo vy- konat akci. Knihovny u CodeIgniter bylo nutn´erozˇs´ıˇrito pˇr´ıdavnou knihovnu, kter´a se starala pouze o autentizaci. Spr´avupˇr´ıstupurol´ıpodle pr´avpˇr´ıdavn´aknihovna nenab´ıdla. Pro porovn´an´ıjsem porovnal poˇcetnapsan´ych ˇr´adk˚uk´oduu obou aplikac´ı,hodnoty jsou zobrazeny v tabulce7.6. V´yvojov´aprostˇred´ımi byli n´apomocn´astejnˇe.Rychlost odezvy aplikac´ıje zobrazena v tabulk´ach 7.1 aˇz7.5. Vˇsechny zmˇeˇren´ehodnoty jsou v pˇr´ılozeE.1.Z namˇeˇren´ych hodnot je vidˇet,ˇzeodezva aplikace napsan´ev programu CodeIgniter se vykon´adesetkr´atrychleji neˇzaplikace v programu Zend. Pˇribˇeˇzn´em pouˇz´ıv´an´ıZend se pro zrychlen´ıpouˇz´ıv´aukl´ad´an´ıdo dat do mezipamˇeticoˇzaplikaci urychl´ı.

67 Zend oproti CodeIgniter nab´ız´ısouborov´ytyp form, kter´eslouˇz´ık vytvoˇren´ıcel´eho tˇelaformul´aˇre,tento formul´aˇrse vkl´ad´ado view, usnadn´ıpr´acipokud vyuˇz´ıv´ame stejn´yformul´aˇrve vice odliˇsn´ych zobrazen´ıch. Pro porovn´an´ı jsem vlastnostem aplikace pˇridˇelilbodov´eohodnocen´ı od 0 bod˚u do 5 bod˚u.K de hodnota 5 bod˚uje nejlepˇs´ıa hodnota 0 je nehorˇs´ı.

Tab. 7.7: Vyhodnocen´ıframework˚u

Vlastnosti aplikac´ı Zend CodeIgniter Validace 3 4 Email 4 2 Spr´ava uˇzivatel˚u 5 0 Str´ankov´an´ı 3 3 Struktura aplikace 5 4 Rychlost odezvy 0 5 Souˇcet 20 18

Z porovn´an´ıvzorov´ych aplikac´ıvyˇsell´epe Zend. Velk´emnoˇzstv´ıbod˚uztratil d´ıky sv´erychlosti, pokud by byly ukl´ad´anadata do mezipamˇetia vyuˇzilse akceler´ator dos´ahloby se pˇrijateln´erychlosti. Oproti CodeIgniter nab´ız´ıdvakr´atv´ıceknihoven.

Tab. 7.8: V´yhody a Nev´yhody framework˚u

Zend V´yhody Nev´yhody Spr´ava uˇzivatel˚u Rychlost Pˇrij´ım´an´ıa odes´ıl´an´ımail˚u Sloˇzitˇejˇs´ız´apisvalidace Robustn´ıknihovny Dostupn´aliteratura v ˇceˇstinˇe Kvalitn´ıdokumentace Velk´akomunita CodeIgniter V´yhody Nev´yhody Rychlost Z´adn´aliteraturaˇ v ˇceˇstin Kvalitn´ıdokumentace od v´yrobce Z´adn´aautentizaceˇ Z´adn´aautorizaceˇ

68 8 SROVNAN´ ´I SLOZITOSTIˇ NAVRHU´ APLIKAC´I

Uˇzivatel, kter´yse rozhodne pracovat se Zend nebo s CodeIgniter, by mˇelm´ıt aspoˇnz´akladn´ıznalosti psan´ıphp. D´aleby mˇelumˇetpracovat s datab´az´ı,kterou zvolen´yframework podporuje. Pokud si tyto dvˇeznalosti uˇzivatel osvojil, m˚uˇzese zaˇc´ıtuˇcitzvolen´yframework. Moˇznost´ıpro nauˇcen´ıframework˚uje v´ıce.

Pˇriuˇcen´ıCodeIgniter jsem vyuˇzil video tutori´alu,kter´ybyl ve slovenˇstinˇe.Do- dateˇcnˇejsem si doplnil potˇrebn´eznalosti z uˇzivatelsk´epˇr´ıruˇckyCodeIgniter, ve kter´a jsou dan´at´ematadobˇrepops´ana.Po sezn´amen´ıse z´akladn´ımivlastnostmi m˚uˇzepro- gram´atorzaˇc´ıttvoˇritsvoji aplikaci.

Zend jsem se uˇcilz kn´ıˇzky Zend Framework - programujeme webov´eaplikace v PHP[2]. Pˇripouˇzit´ıkn´ıˇzkydoporuˇcujisi vypracovat vzorovou aplikaci dle n´avodu. Kn´ıˇzkaje ps´anapro m´ırnˇepokroˇcil´ea nˇekter´epopisy nejsou br´any do ´upln´ych detail˚u.Pˇrinepochopen´ıvysvˇetlen´ız kn´ıˇzkyje moˇzn´enahl´ednoutdo uˇzivatelsk´e pˇr´ıruˇckyZend, nebo vyhledat n´apovˇeduve f´orech. Pro Zend existuj´ıˇcesk´af´orum. U obou aplikac´ıpro plynul´eprogramov´an´ıje potˇrebasi zvolen´yn´astroj zaˇz´ıt.

Vytvoˇren´ıvzorov´eaplikace u CodeIgniter mi trvalo tˇrit´ydny, kdy jsem kaˇzd´yden vˇenoval pr´acipˇribliˇznˇe4 hodiny. Dost ˇcasupˇriv´yvoji mi zabrala samotn´apˇredstava jak by mˇelavzorov´aaplikace vypadat. N´avrhaplikace v Zend mi zabrala poloviˇcn´ı dobu. Struktura obou aplikac´ı je shodn´a,pˇriv´yvoji druh´aaplikace jsem mˇeljiˇz vˇsenapl´anovan´e.Nˇejak´yˇcassi vzalo upraven´ıaplikac´ıaby pracovali se spoleˇcnou datab´az´ı.Pˇriv´yvoji doch´azeloke zmˇen´am, kter´ejsem musel implementovat i u Co- deIgniter. Chybou bylo, ˇzejsem nemˇelnapl´anovan´epˇresn´epoˇzadavky, co budou aplikace umˇet.U obou aplikac´ıbylo nejsloˇzitˇejˇs´ıprov´azatuˇzivatelsk´aopr´avnˇen´ıse vˇsemistr´ankami. K pr´acise zvolen´ymframeworkem je potˇrebanastudovat jak vytvoˇritz´akladn´ı struktury aplikace. Sezn´amitse s dostupn´ymaknihovnami, dle potˇreby je implemen- tovat. Pr´aces frameworky je dle m´ehon´azoru snadn´e.Pokud k zadan´emu probl´emu framework nab´ıdneknihovnu, usnadn´ıt´ımspoustu pr´ace.Pr´acev obou prostˇred´ıje stejnˇen´aroˇcn´a,z´akladn´ıstruktura obou framework˚uje podobn´a.

69 9 ZAV´ ERˇ

V t´etodiplomov´epr´acijsem se zab´yval porovn´an´ımdvou framework˚u.Porovn´aval jsem rozsah nab´ıdnut´ych knihoven a porovn´an´ıvlastnost´ızjiˇstˇen´ych pˇriv´yvoji vzo- rov´eaplikace. Sezn´amitse s dostupn´ymiframeworky, navrhnout vzorov´eaplikace a porovnat. V prvn´ıˇc´astijsem se soustˇredilna vyhled´an´ıdostupn´ych framework˚uv jazyce PHP, na struˇcn´ypopis vlastnost´ıa na popis n´avrhov´ehovzoru MVC. Ve druh´eˇc´astijsem se zamˇeˇrilna podrobn´epops´an´ı knihoven zvolen´ych fra- mework˚ua jejich funkc´ı.Knihovny v samotn´ych zdrojov´ych k´odech byly struˇcnˇe okomentov´any pouze v hlaviˇck´ach funkc´ı.Popisy funkc´ıknihoven byly dostateˇcnˇe provedeny v uˇzivatelsk´ych manu´alech od obou framework˚u.Vyhledal jsem volnˇedo- stupn´eknihovny. Vypsal jsem knihovny pouˇzit´eke zprovoznˇen´ızadan´ych poˇzadavk˚u na vzorovou aplikaci. Ve tˇret´ıˇc´astijsem se zamˇeˇrilna nab´ıdkumoˇznost´ıod zvolen´ych framework˚u,pˇri ˇreˇsen´ıvybran´ych probl´em˚u.Porovnal jsem dostupnost dokumentace, popis˚ukniho- ven, zda nab´ız´ıpr˚uvodce pro zaˇc´ınaj´ıc´ıv dan´emprostˇred´ı. Ve ˇctvrt´embodˇet´etopr´acejsem popsal navrˇzen´evzorov´eaplikace v prostˇred´ı Zend a CodeIgniter. Zvolen´eaplikace jsou pops´any po ˇc´astech dle zad´an´ı.Pokud to zvolen´yn´astroj nab´ızel,vyuˇziljsem funkc´ıpˇredpˇripraven´ych v knihovn´ach fra- meworku. U CodeIgniter jsem implementoval knihovnu pro spr´avuuˇzivatel˚u,protoˇze z´akladn´ıbal´ıˇceknenab´ız´ıˇz´adnouknihovnu pro spr´avuuˇzivatel˚ua rol´ı.Vzorov´epro- gramy obsahuj´ıvˇsechny poˇzadovan´en´aleˇzitosti. V p´at´embodˇet´etopr´aceukazuji navigaci mezi obrazovkami vzorov´ych aplikac´ı. Ukazuji uk´azkynˇekter´ych obrazovek aplikace. V ˇsest´embodˇepopisuji uˇzit´ıˇzivotn´ıch cykl˚uu zvolen´ych entit. V samotn´epr´aci v kapitole 6 je zobrazen diagram ˇzivotn´ıch cykl˚u,popis stav˚ua moˇznostipˇrechod˚u. V sedm´embodˇeporovn´av´amvzorov´eaplikace. Srovn´an´ımvzorov´ych aplikac´ı jsem dospˇelk v´ysledku,ˇzeZend nab´ıdneuˇzivateli v´ıceulehˇcen´ıpr´aceneˇzCodeIg- niter. Pˇrestoˇzeje jeho rychlost nˇekolikan´asobnˇemenˇs´ıneˇzCodeIgniter, dos´ahldle m´ehosubjektivn´ıhoporovn´an´ılepˇs´ıhch v´ysledku. V posledn´ıˇc´asti t´etopr´acejsem zhodnotil ˇcasovou n´aroˇcnostpˇriv´yvoji aplikac´ı a sloˇzitostna nauˇcen´ı.

70 LITERATURA

[1] LAHVICKA,ˇ Jiˇr´ı PHP - z´akladn´ı informace INTERVAL.CZ [online]. 2000. [cit. 10. 5. 2013]. Dostupn´eWWW:

[2]B 푂¨HMER, Marian Zend Framework - programujeme webov´eaplikace v PHP Brno: Computer Press, 2010. 416 s. ISBN 978-80-251-2965-4.

[3] WILLIAMS, Hugh E. a David LANE. Programujeme webov´eaplikace pomoc´ı PHP a MySQL.Vyd. 1. Praha: Computer Press, 2002. 530 s. ISBN 80-7226-760- 4.

[4] SKRˇ A´SEK,ˇ Jan PHP frameworky PROGRAMUJEME.COM [online]. 2008. [cit. 10. 5. 2013]. Dostupn´e WWW:

[5] ZEND FRAMEWORK Zend framewor [online]. 2013. [cit. 10. 5. 2013]. Do- stupn´eWWW:

[6] SKRˇ A´SEK,ˇ Jan CakePHP - zaˇc´ın´ame s frameworkem PRO- GRAMUJEME.COM [online]. 2007. [cit. 10. 5. 2013]. Dostupn´e WWW:

[7] SYMBIO Digital Symfony SYMBIO Digital, s.r.o. [online]. 1999. [cit. 10. 5. 2013]. Dostupn´ez WWW:

[8] RUBY ON RAILS.CZ Zaˇc´ın´ames Rails Ruby On Rails.cz [online]. 1999. [cit. 10. 5. 2013]. Dostupn´ez WWW:

[9] nette framework [online]. 2008. [cit. 10. 5. 2013]. Do- stupn´ez WWW:

[10] HOTOVEC, Michal CodeIgniter — jednoduch´y, efektivn´ı fra- mework Hotovec [online]. 2008. [cit. 10. 5. 2013]. Dostupn´e WWW:

[11] HULAN,´ Radek Zend’s PHP 5 Coding Contest - PRADO framework INTERVAL.CZ [online]. 2004. [cit. 10. 5. 2013]. Dostupn´e WWW:

71 [12] DANEK,ˇ Petr Velk´y test PHP framework˚u ROOT.CZ [online]. 2008. [cit. 10. 5. 2013]. Dostupn´e WWW:

[13] CAKE PHP Cake PHP [online]. 2012. [cit. 10. 5. 2013]. Dostupn´ez WWW:

[14] CODEIGNITER CodeIgniter [online]. 2001. [cit. 10. 5. 2013]]. Dostupn´e z WWW:

[15] PRADO Prado Group. [online]. 2004. [cit. 10. 5. 2013]. Dostupn´ez WWW:

[16] JELIX Jelix [online]. 2006. [cit. 10. 5. 2013]. Dostupn´e z WWW:

[17] BARTA´CEK,ˇ Jiˇr´ı Str´anky o elektronice a poˇc´ıtaˇc´ıch [online]. 2012. [cit. 30.12. 2012]. Dostupn´e WWW:

[18] FIALA, Jan Textov´yeditor PSPad [online]. 2012. [cit. 30.12. 2012]. Dostupn´e WWW:

[19] KONYUKHOV, Ilya Tank Auth [online]. 2011. [cit. 30.12. 2012]. Dostupn´e WWW:

72 SEZNAM SYMBOLU,˚ VELICINˇ A ZKRATEK

PHP Personal Home Page - Hypertextov´ypreprocesor

SQL Structured Query Language - Strukturovan´ydotazovac´ıjazyk

ZF Zend Framework

MSSQL Microsoft SQL Server - Relaˇcn´ıdatab´azov´ysyst´em

MVC Model View Controller - Softwarov´aarchitektura

ACL Access Control List - Seznam ˇr´ızen´ıpˇr´ıstupu

API Application Programming Interface - Programovac´ırozhran´ı

HTTP Hypertext Transfer Protocol - Hypertextov´yinternetov´yprotokol

MIME Multipurpose Internet Mail Extensions - V´ıce´uˇcelov´erozˇs´ıˇren´ıinternetov´e poˇsty

SMTP Simple Mail Transfer Protocol - Internetov´yprotokol

PDF Portable Document Format - Pˇrenosov´yform´atdokument˚u

XML Extensible Markup Language - Rozˇsiˇriteln´yznaˇckovac´ıjazyk

URL Uniform Resource Locator - Jednotn´ylok´atorzdroj˚u

FTP File Transfer Protocol - Protokol pro pˇrenossoubor˚u

SFTP SSH File Transfer Protocol - Protokol pro bezpeˇcn´ypˇrenossoubor˚u

LDAP Lightweight Directory Access Protocol - Protokol pro ukl´ad´an´ıa pˇr´ıstup k dat˚um

AJAX Asynchronous JavaScript and XML - Technologie v´yvoje interaktivn´ıch webov´ych aplikac´ı

XUL User Interface Language - Form´atpro tvorbu multiplatformn´ıhografick´eho rozhran´ı

URL Uniform Resource Locator - Jednotn´yform´atadres

ZIP Form´atpro kompresi a archivaci dat

73 SEZNAM PRˇ´ILOH

A Datab´aze- uˇzivatele 75

B Datab´aze- autentizace CI 76

C Zivotn´ıcyklusˇ - akce 77

D Zivotn´ıcyklusˇ - Rubrika 79

E Mˇeˇren´ırychlosti - vyhled´av´an´ı 81

F Mˇeˇren´ırychlosti - naˇcten´ı´uvodn´ıstr´anky 82

G Mˇeˇren´ırychlosti - pˇrihl´aˇsen´ı 83

H Mˇeˇren´ırychlosti - publikov´an´ı 84

I Mˇeˇren´ırychlosti - otevˇren´ırubriky v menu 85

Pˇr´ılohy na CD:

• Diplomov´apr´aceve form´atupdf • Sloˇzkase vzorov´ymk´odemv programu Zend • Sloˇzkase vzorov´ymk´odemv programu CodeIgniter • Sloˇzkas Datab´az´ıve form´atusql • Sloˇzkas Obrazovkami vzorov´eaplikace

74 A DATABAZE´ - UZIVATELEˇ

Obr. A.1: ER diagram uˇzivatel˚u

75 B DATABAZE´ - AUTENTIZACE CI

Obr. B.1: ER diagram autentizace CI

76 C ZIVOTNˇ ´I CYKLUS - AKCE

Obr. C.1: Zivotn´ıcyklusˇ Akce

77 Tab. C.1: Tabulka stav˚uAkce

Id stav N´azev Zobrazen´a 301 Akce skryt´anezaˇrazen´a NE 302 Akce skryt´azaˇrazen´a NE 303 Akce publikovan´anezaˇrazen´a NE 304 Akce publikovan´azaˇrazen´a ANO 305 Akce archivovan´a NE

Zobrazen´a“ - Ano znamen´a,zda je str´ankapˇr´ıstupn´av lev´emmenu, kter´evid´ı ” vˇsichni uˇzivatel´ei ti nepˇrihl´aˇsen´ı.

Tab. C.2: Tabulka pˇrechod˚uAkce

ID stav Popis pˇrechodu Role Z DO Vedouci Hl.vedouci Admin 301 Vytvoˇren´ı ANO ANO ANO 301 302 Zaˇrazen´ıdo rubriky ANO ANO ANO 301 303 Publikov´an´ı NE ANO ANO 302 301 Vyˇrazen´ız rubriky ANO ANO ANO 302 303 Publikov´an´ı NE ANO ANO 303 304 Zaˇrazen´ıdo rubriky ANO ANO ANO 303 301 Skryt´ı ANO ANO ANO 304 302 Skryt´ı ANO ANO ANO 304 303 Vyˇrazen´ız rubriky ANO ANO ANO 304 305 Archivov´an´ı ANO ANO ANO 305 301 Obnovit ANO ANO ANO 301 Smazat NE ANO ANO 302 Smazat NE ANO ANO 303 Smazat NE ANO ANO 304 Smazat NE ANO ANO 305 Smazat NE ANO ANO

78 D ZIVOTNˇ ´I CYKLUS - RUBRIKA

Obr. D.1: Zivotn´ıcyklusˇ Rubrika

79 Tab. D.1: Tabulka stav˚uRubrika

Id stav N´azev Zobrazen´a 401 Rubrika skryt´anezaˇrazen´a NE 402 Rubrika skryt´azaˇrazen´a NE 403 Rubrika publikovan´anezaˇrazen´a NE 404 Rubrika publikovan´azaˇrazen´a ANO

Zobrazen´a“ - Ano znamen´a,zda je str´ankapˇr´ıstupn´av lev´emmenu, kter´evid´ı ” vˇsichni uˇzivatel´ei ti nepˇrihl´aˇsen´ı.

Tab. D.2: Tabulka pˇrechod˚uRubrika

ID stav Popis pˇrechodu Role Z DO Vedouci Hl.vedouci Admin 401 Vytvoˇren´ı ANO ANO ANO 401 402 Zaˇrazen´ıdo menu ANO ANO ANO 401 403 Publikov´an´ı NE ANO ANO 402 401 Vyˇrazen´ız menu ANO ANO ANO 402 403 Publikov´an´ı NE ANO ANO 403 404 Zaˇrazen´ıdo menu ANO ANO ANO 403 401 Skryt´ı ANO ANO ANO 404 402 Skryt´ı ANO ANO ANO 404 403 Vyˇrazen´ız menu ANO ANO ANO 401 Smazat NE ANO ANO 402 Smazat NE ANO ANO 403 Smazat NE ANO ANO 404 Smazat NE ANO ANO

80 EMEˇRENˇ ´I RYCHLOSTI - VYHLEDAV´ AN´ ´I

Tab. E.1: Mˇeˇren´ırychlosti - vyhled´av´an´ı

C´ısloˇ mˇeˇren´ı Zend [s] CodeIgniter [s] 1 1,450 0,176 2 1,430 0,182 3 1,430 0,171 4 1,420 0,177 5 1,480 0,161 6 1,460 0,162 7 1,460 0,152 8 1,450 0,169 9 1,460 0,169 10 1,430 0,143 MIN 1,420 0,152 MAX 1,480 0,182 Pr˚umˇer 1,447 0,169 Procentu´aln´ırozd´ıl - MIN 100 % 10,70 % - MAX 100 % 12,30 % - Pr˚umˇer 100 % 11,66 %

81 FMEˇRENˇ ´I RYCHLOSTI - NACTENˇ ´I UVODN´ ´I STRANKY´

Tab. F.1: Mˇeˇren´ırychlosti - naˇcten´ı´uvodn´ıstr´anky

C´ısloˇ mˇeˇren´ı Zend [s] CodeIgniter [s] 1 1,380 0,181 2 1,460 0,178 3 1,410 0,170 4 1,420 0,184 5 1,380 0,188 6 1,510 0,198 7 1,350 0,189 8 1,400 0,167 9 1,320 0,188 10 1,520 0,177 MIN 1,320 0,167 MAX 1,520 0,198 Pr˚umˇer 1,415 0,182 Procentu´aln´ırozd´ıl - MIN 100 % 12,65 % - MAX 100 % 13,03 % - Pr˚umˇer 100 % 12,86 %

82 GMEˇRENˇ ´I RYCHLOSTI - PRIHLˇ A´ SENˇ ´I

Tab. G.1: Mˇeˇren´ırychlosti - pˇrihl´aˇsen´ıuˇzivatele

C´ısloˇ mˇeˇren´ı Zend [s] CodeIgniter [s] 1 1,310 0,152 2 1,320 0,169 3 1,310 0,151 4 1,300 0,133 5 1,320 0,116 6 1,350 0,147 7 1,330 0,122 8 1,300 0,140 9 1,340 0,134 10 1,320 0,143 MIN 1,300 0,116 MAX 1,350 0,169 Pr˚umˇer 1,320 0,141 Procentu´aln´ırozd´ıl - MIN 100 % 8,92 % - MAX 100 % 12,52 % - Pr˚umˇer 100 % 10,66 %

83 HMEˇRENˇ ´I RYCHLOSTI - PUBLIKOVAN´ ´I

Tab. H.1: Mˇeˇren´ırychlosti - publikov´an´ıstr´anky

C´ısloˇ mˇeˇren´ı Zend [s] CodeIgniter [s] 1 1,350 0,118 2 1,300 0,112 3 1,250 0,124 4 1,290 0,136 5 1,290 0,116 6 1,280 0,127 7 1,280 0,130 8 1,320 0,112 9 1,280 0,113 10 1,320 0,124 MIN 1,250 0,112 MAX 1,350 0,136 Pr˚umˇer 1,296 0,121 Procentu´aln´ırozd´ıl - MIN 100 % 8,96 % - MAX 100 % 10,07 % - Pr˚umˇer 100 % 9,35 %

84 IMEˇRENˇ ´I RYCHLOSTI - OTEVRENˇ ´I RUBRIKY V MENU

Tab. I.1: Mˇeˇren´ırychlosti - otevˇren´ırubriky v menu

C´ısloˇ mˇeˇren´ı Zend [s] CodeIgniter [s] 1 1,350 0,171 2 1,340 0,170 3 1,320 0,161 4 1,360 0,174 5 1,330 0,161 6 1,290 0,156 7 1,330 0,173 8 1,330 0,148 9 1,310 0,152 10 1,340 0,144 MIN 1,290 0,144 MAX 1,360 0,174 Pr˚umˇer 1,330 0,161 Procentu´aln´ırozd´ıl - MIN 100 % 11,16 % - MAX 100 % 12,79 % - Pr˚umˇer 100 % 12,11 %

85