Inovace a rozšíření dotazníkového systému primární prevence



Podobné dokumenty
Návod na E-Shop. tel.: , fax: , helpdesk: ,

Rozdílová dokumentace k ovládání IS KARAT.net

WEBOVÁ APLIKACE GEOPORTÁL ŘSD ČR

Architektura aplikace

KAPITOLA 3. Architektura aplikací na frameworku Rails. V této kapitole: modely, pohledy, řadiče.

UŽIV ATELSKÁ PŘÍRUČKA

NÁSTROJE PRO TVORBU A ÚDRŽBU ÚZEMNĚ ANALYTICKÝCH PODKLADŮ (NÚAP)

Manuál k aplikaci SDO PILOT v.0.2

MapleCloud a jeho použ ití. Vladimír Žák

Ostatní portálové aplikace

Popis ovládání dokumentu s přiloženými obrázky

KIV/PIA Semestrální práce

Inovace firemnı webove aplikace SPEA-SYSTE M

Individuální projekt z předmětu webových stránek Anketa Jan Livora

Ostatní portálové aplikace

VAR-NET INTEGRAL Manuál správce VNI 5.1 VAR-NET INTEGRAL. verze 0.2. Manuál správce VNI 5.1

Redakční systém pro skautské weby Poptávka

MANUÁL K OBSLUZE REDAKČNÍHO SYSTÉMU / wordpress

Manuál administrátora FMS...2

Ostatní portálové aplikace

- 1 - Smlouva o dílo. uzavřená podle 536 a násl. obchodního zákoníku v účinném znění

IS pro podporu BOZP na FIT ČVUT

Metodická příručka pro učitele. InspIS SET modul školní testování

Obsah. Seznam možných testů. Termíny úkolů

TouchGuard Online pochůzkový systém

Minebot manuál (v 1.2)

Tabulkové processory MS Excel (OpenOffice Calc)

Digitální mapa veřejné správy (DMVS) Ústeckého kraje část Nástroje pro tvorbu a údržbu Územně analytických podkladů

Manuál aplikace Inkaso pohledávek

Interaktivní mapy ÚAP Uživatelská příručka

Metodika. Oznámení o vykonávání působností v agendě ve smyslu zákona č. 111/2009. Sb., o základních registrech. Verze 1.6

ČESKÝ STATISTICKÝ ÚŘAD Praha 10, Na padesátém 81. číslo TP 15/2010 TECHNICKÝ PROJEKT. sběru, zpracování a prezentace dat v resortu ČSÚ NÁZEV

Obrázek 1: Struktura programu z hlediska zapojení

Databázový systém ACCESS

Elektronická spisová služba

UNIVERZITA PARDUBICE. Fakulta elektrotechniky a informatiky. Informační systém realitní kanceláře Jan Šimůnek

ŠKODA AUTO VYSOKÁ ŠKOLA

MAWIS. Uživatelská dokumentace

Typeform.com. Blíže si popíšeme verzi BASIC, která je volně přístupná zdarma.

ZPRACOVÁNÍ NEURČITÝCH ÚDAJŮ V DATABÁZÍCH

PHP framework Nette. Kapitola Úvod. 1.2 Architektura Nette

Patenty. 1. Spuštění modulu Patenty. 2. Popis prostředí a ovládacích prvků modulu Patenty

Uživatelská příručka pro dodavatele

Profesionální software pro tvorbu a správu internetového obchodu verze 3.0

Věda a výzkum. Univerzitní informační systém. Svazek 4. Slovenská zemědělská univerzita v Nitře

Fotogalerie pro redakční systém Marwel Obscura v. 2.0

SMART GATE webové a aplikační ovládací rozhraní zařízení ESIM120

Technická specifikace předmětu veřejné zakázky Zhotovení interaktivního webového portálu a mobilních aplikací

ÚVOD 3 SEZNÁMENÍ SE SYSTÉMEM 4

Vývoj, výroba, prodej a montáž docházkových a identifikačních systémů. Docházka 3000 Personalistika

VYTVÁŘENÍ A MANAGEMENT TESTŮ A PROJEKTŮ

Stravenky Exit. 1. Spuštění modulu Stravenky Exit

Metodika Portálu pohledávek ve vztahu k uživateli

Modul EPNO. Téma: Elektronické odesílání evidenčních listů přepravy nebezpečných odpadů

Manuál k užívání aplikace Monitoringrejstriku.cz

PŘÍRODOVĚDECKÁ FAKULTA UNIVERZITY PALACKÉHO KATEDRA INFORMATIKY BAKALÁŘSKÁ PRÁCE. Vytváření a evidence smluv Petr Čulík

Uživatelský manuál Radekce-Online.cz

5.1 Vyhledávací portál uživatelské rozhraní

Helios RED a Internetový obchod

Centrální evidence závětí NK ČR

Příloha č. 18. Specifikace bloku PŘÍPRAVA. Příloha k zadávací dokumentaci veřejné zakázky Integrační nástroje, vstupní a výstupní subsystém

VYUŽITÍ REGIONÁLNÍCH FUNKCÍ A WWW ROZHRANÍ V INTEGROVANÉM KNIHOVNÍM SYSTÉMU KPWINSQL

DPH v Exact Globe Next 2013

E-ZAK, verze M-2 jednoduchý elektronický nástroj pro veřejné zakázky

1 of :27

OpusBenefit. Uživatelský manuál k verzi 1.0 verze / 24. K l i e n t s k á d a t a b á z e

Co je nového v SolidWorks Enterprise PDM 2009

Manuál pro administrátory. Manuál. Verze pro administrátory


Obsah. Základy práce s databází 13. Tabulky 43. Obsah. Úvod 9 Poděkování 12

PRAVIDLA PRO ŽADATELE A PŘÍJEMCE DOTACE Z OPERAČNÍHO PROGRAMU PODNIKÁNÍ A INOVACE PRO KONKURENCESCHOPNOST ZVLÁŠTNÍ ČÁST

Vzdělávání v egoncentru ORP Louny

Instalujeme a zakládáme databázi Oracle Database 11g

Redakční systém. SimpleAdmin Beta. Jan Shimi Šimonek

Provozní dokumentace. Seznam orgánů veřejné moci. Příručka pro administrátora krizového řízení

KAPITOLA 1 SOCIÁLNÍ SÍTĚ A PHP...17

SIMATIC WinCC Data Monitor. Siemens s.r.o.

UŽIVATELSKÁ DOKUMENTACE PRO DODAVATELE. Stav ke dni v. 2.0

Redakční systém Joomla. Prokop Zelený

Veřejné. Aplikace EP2W. Uživatelská příručka pro externího uživatele

Modul ročních zpráv o výsledcích finančních kontrol

M I S Y S - W E B. Intranet řešení systému MISYS. Verze Příručka uživatele

Uživatelská příručka IS KP14+: Pokyny pro vyplnění formuláře žádosti o podporu

MANUÁL MOBILNÍ APLIKACE GOLEM PRO OPERAČNÍ SYSTÉM ANDROID 4.X A VYŠŠÍ

WORKWATCH ON-LINE EVIDENCE PRÁCE A ZAKÁZEK

software Ruční měřicí přístroje Zobrazovače / Regulátory Loggery / EASYBus GDUSB FastView EASYControl net EASYBus Configurator GSOFT 3050 GSOFT 40k

MYBIZ - Řešení pro zpřístupnění dat ze stávajících aplikací na mobilních zařízeních (Mobilize your business!) Požadavky zákazníka.

Uživatelská příručka pro program

Novinky verze SPIRIT 2015

Sem vložte zadání Vaší práce.

MAPOVÉ APLIKACE A WEBOVÉ SLUŽBY MAWES NAŠE MAPY

TECHNICKÁ SPECIFIKACE

Elektronická Kniha jízd.

ISPOP 2016 MANUÁL K VYPLNĚNÍ FORMULÁŘŮ PRO OHLAŠOVÁNÍ ÚDAJŮ PRO VODNÍ BILANCI

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: Webové aplikace

Strategie ochrany před negativními dopady povodní a erozními jevy přírodě blízkými opatřeními v České republice

ESTATIX INFORMAČNÍ SYSTÉM REALITNÍCH KANCELÁŘÍ UŽIVATELSKÁ PŘÍRUČKA UŽIVATELSKÁ PŘÍRUČKA STRANA 1 / 23

PRAVIDLA PRO ŽADATELE A PŘÍJEMCE DOTACE Z OPERAČNÍHO PROGRAMU PODNIKÁNÍ A INOVACE PRO KONKURENCESCHOPNOST ZVLÁŠTNÍ ČÁST

Manuál pro modul Vypisování témat prací referentka

Transkript:

Mendelova univerzita v Brně Provozně ekonomická fakulta Inovace a rozšíření dotazníkového systému primární prevence Bakalářská práce Vedoucí práce: Ing. Ondřej Popelka, Ph.D. Oldřich Faldík Brno 2012

Děkuji vedoucímu bakalářské práce Ing. Ondřeji Popelkovi, Ph.D. za vedení mé práce, za cenné rady a připomínky a za trpělivost a čas, který mi věnoval při řešení dané problematiky. Dále děkuji Ing. Michaelu Štenclovi, Ph.D. za zprostředkování tématu a za podnětné připomínky a rady.

Prohlašuji, že svoji bakalářskou práci jsem vypracoval samostatně pouze s použitím pramenů uvedených v seznamu citované literatury. V Brně dne 14. května 2012

Abstract Faldík, O. Innovation and extension of a questionnaire system of primary prevention. Bachelor thesis. Brno: MENDELU, 2012. The bachelor thesis deals with upgrading and extension of a specialized questionnaire for the organization Prevence.net. The thesis analyses the current state of services offered by providers of web questionnaire systems. A solution to the issue according to specific requirements of the client is presented in the theoretical section. This solution includes two main parts: collecting the questionnaire data and generating charts based on the collected data. The practical section implements the solution proposed in the theoretical section. The questionnaire system is put into practice in the PHP language using Nette framework. Chart rendering is implemented in the Highcharts framework. The PostgreSQL database server has been selected as data storage. Keywords Questionnaire system, Nette, Highcharts, PHP, Javascript, PostgreSQL. Abstrakt Faldík, O. Inovace a rozšíření dotazníkového systému primární prevence. Bakalářská práce. Brno: MENDELU v Brně, 2012. Práce pojednává o inovaci a rozšíření specializovaného dotazníkového systému pro organizaci Prevence.net. Práce analyzuje současný stav nabízených služeb poskytovatelů webových dotazníkových systémů. V teoretické části předkládá vlastní řešení, založené na speciálních požadavcích zadavatele. Toto řešení zahrnuje dvě podstatné části, a to sběr dotazníkových dat a generování grafů na základě nashromážděných dat. Praktická část implementuje řešení navržené v teoretické části. Dotazníkový systém je realizován v jazyce PHP s využitím frameworku Nette. Vykreslování grafů je implementováno ve frameworku Highcharts. Jako úložiště dat byl zvolen databázový server PostgreSQL. Klíčová slova Dotazníkový systém, Nette, Highcharts, PHP, Javascript, PostgreSQL.

Obsah 6 Obsah 1 Úvod a cíl práce 9 1.1 Úvod... 9 1.2 Cíl práce... 9 1.3 Popis používání systému... 9 2 Současný stav 10 2.1.1 Funkční požadavky na dotazníkový systém... 12 2.1.2 Nefunkční požadavky na dotazníkový systém... 12 2.2 Existující dotazníkové systémy... 12 2.3 Online dotazníkové systémy... 12 2.3.1 Survey Monkey... 13 2.3.2 Survey Gizmo... 14 2.3.3 Easyresearch.biz... 16 2.3.4 Likeex... 17 2.4 Hodnocení stávajících online dotazníkových systémů... 18 3 Vlastní řešení 19 3.1 Návrh struktury databáze... 19 3.2 Návrh uživatelského rozhraní aplikace... 21 3.2.1 Administrativní rozhraní... 21 3.2.2 Uživatelské rozhraní... 23 3.3 Statistické charakteristiky... 24 4 Implementace 26 4.1 Informace o klientovi... 28 4.2 Autorizace a autentizace... 28 4.3 Postup pro přidání nové otázky... 29 4.4 Generování grafů... 29 4.5 Zobrazení dotazníku... 34 4.6 Statistické charakteristiky... 35

Obsah 7 5 Závěr 39 6 Literatura 40 A Původní dotazník 44 B Diagramy tříd 45

8

Úvod a cíl práce 9 1 Úvod a cíl práce 1.1 Úvod Myšlenka zapojení informačních technologií do prevence sociálních patologií vyvstala na konci 90. let dvacátého století. Cílem bylo zefektivnit, zpřesnit a zkrátit dobu vyhodnocování vyplněných dotazníků. Z toho důvodu byl v r. 2006 vyvinut dotazníkový systém pro organizaci Prevence.net, zabývající se primární prevencí sociálních patologií. Projekt Prevence.net nabízí služby, jako jsou analýzy a studie monitoringu na základních a středních školách pro evidenci a zpracování informací o těchto jevech. K tomu využívá dotazníkový systém pro sběr a vyhodnocování dotazníků, který tuto činnost automatizuje. Dotazníkový systém shromažďuje velké množství dat, z nichž potom na základě statistické analýzy generuje grafy. V systému pro elektronické zpracování dotazníkových dat nebyly od doby jeho vzniku prováděny žádné změny ani aktualizace, takže je zastaralý. V posledních letech se několik vývojových pracovníků pokoušelo přepracovat systém s ohledem na nejnovější postupy a technologie, avšak neúspěšně. 1.2 Cíl práce Stávající systém od svého vytvoření funguje bez jakékoliv údržby a vývoje, takže je zastaralý. Proto musí být přinejmenším z hlediska bezpečnosti a funkčnosti převeden na nové technologie (PHP verze 5.3). Zadavatel si také přeje větší možnosti nastavení v oblasti grafů, například více typů grafu (sloupcový, výsečový) a případnou úpravu jejich vzhledu, což nelze se stávající strukturou databáze realizovat. Proto cílem této práce je zjistit možnosti inovace stávajícího dotazníkového systému projektu Prevence.net. Dále je práce zaměřena na rozšíření tohoto dotazníkového systému o statistické a analytické funkce za použití nejnovějších webových technologií. Na to navazuje výběr vhodného způsobu inovace a implementace inovovaného systému. 1.3 Popis používání systému Sběr dat probíhá tak, že pověřená osoba navštíví nějakou třídu a požádá studenty o vyplnění dotazníku vytištěného na papíře. Tato osoba buď předá vyplněné dotazníky jiné osobě, která je zadá do systému, nebo je tam zadá sama dotazníky budou převedeny do elektronické formy. Systém umožňuje exportovat vložená data a generovat z nich sloupcové grafy pro každou otázku. Tyto výstupy pak slouží jako podklad pro odborného pracovníka, který sepíše zprávu a výsledky prezentuje klientovi škole. Z toho jasně vyplývá, že nejde o klasický dotazníkový systém. Do styku se systémem přichází jen omezený počet osob, které jsou pověřené organizací Prevence.net jeho užíváním a spravováním.

Současný stav 10 2 Současný stav Sběr dat probíhá tak, že osoba pověřená společností Prevence.net rozdá na žádost klienta školy v jejích třídách studentům vytištěný dotazník. Po vyplnění dotazníku zadá pověřená osoba tento dotazník do dotazníkového systému. Dotazníkový systém podporuje tři typy uživatelů: 1) nepřihlášený uživatel má pouze právo zobrazit přihlašovací stránku. 2) přihlášený uživatel systému nejčastěji osoba pověřená, která dotazník do systému zadává, má pouze právo vložit dotazník do systému, a to na základě identifikačního čísla klienta. 3) administrátor může nejenom dotazníky vkládat, ale i vytvářet nové klienty a třídy. Může i exportovat vyplněné dotazníky z databáze do formátu CSV nebo XLS. Může také generovat sloupcové grafy pro každou otázku zvlášť. Tento dotazníkový systém je ale v mnoha ohledech zastaralý, nepřehledný, má nevhodné zarovnání textu a objektů a rozlišení jednotlivých otázek vyplňovaného dotazníku je nedostatečné. Statistické vyhodnocení a grafické vyjádření také není dostačující je nutné rozšířit možnosti statistických analýz a grafického vyjádření. Celý systém je napsán v zastaralé verzi PHP 5.1.0. Ke generování grafů se využívá také zastaralá verze JPgraph 1.6.2. Rozvržení databáze (viz obr. 1) také není vyhovující. Názvy tabulek a atributů jsou psány s diakritikou, což může způsobit problémy s kódováním. Největším problémem je to, že odpovědi na dotazníky jsou uchovávány ve dvou tabulkách (part_a; part_b), ve kterých jednotlivé názvy atributů jsou stejné jako zadání jednotlivých odpovědí. V databázi nejsou také nikde uchovávána zadání otázek, ke kterým patří odpovědi z tabulek part_a a part_b. Tento přístup komplikuje generování grafů a má za následek vytváření duplicitních informací. Např. ve skriptu, který zajišťuje zobrazení dotazníku v dotazníkovém systému, jsou zadání otázek a odpovědí znovu napsána.

Současný stav 11 obr. 1 Původní schéma databáze

Současný stav 12 2.1.1 Funkční požadavky na dotazníkový systém Provozovatel projektu Prevence.net má na dotazníkový systém tyto funkční požadavky: zajištění základní kontroly odevzdaných dotazníků export nashromážděných dat možnost generování grafů zajištění základní statistické analýzy schopnost rozlišení uživatelů systému zda jde o běžného uživatele, který jen zadává informace do systému nebo administrátora, který může generovat grafy a upravovat informace o klientech možnost spravovat data o klientech přidání nových klientů do systému, zobrazení informací o klientech funkce administrátora možnost generovat grafy patří do kompetencí administrátora 2.1.2 Nefunkční požadavky na dotazníkový systém počet možných odpovědí na dotazníky (minimálně 200/měsíc) bezpečné uložení dat bez ukládání na cizích serverech bezpečnost přenášených dat podpora šifrování technická podpora 2.2 Existující dotazníkové systémy Existující dotazníkové systémy lze rozdělit do dvou kategorií offline a online. Offline (aplikační) dotazníkové systémy nebyly zkoumány z toho důvodu, že jsou obtížně přizpůsobitelné a jsou pochopeny funkčně jinak, než jaké jsou požadavky zadavatele. Jde například o přístup uživatelů k dotazníkovému systému, který je omezen tím, jaký typ operačního sytému příslušný uživatel má. Navíc by jejich integrace do stránek projektu byla velmi složitá, jsou závislé na platformě. Zadavatel vyžaduje takovou mobilitu aplikace, aby uživatel aplikace měl přístup odkudkoliv bez nutnosti instalovat další programové vybavení. To však tyto dotazníkové systémy nesplňují. 2.3 Online dotazníkové systémy V této kapitole bude posuzováno několik variant a rozšíření nebo nahrazení stávajícího dotazníkového systému online verzí, a to s ohledem na funkčnost, implementovatelnost a náklady. U každého řešení pak budou zhodnoceny jeho pozitivní a negativní stránky ve vztahu k projektu. Na závěr pak bude provedeno celkové zhodnocení a výběr nejlepšího řešení v závislosti na projektu Prevence.net.

Současný stav 13 2.3.1 Survey Monkey Tento dotazníkový systém je nabízen ve čtyřech verzích. První verze Basic je zdarma, disponuje však několika omezeními. Například do každého dotazníku lze dát jen deset otázek a na každý dotazník může odpovědět celkem sto respondentů. Mezi výhody této a dalších verzí (Select, Gold, Platinum) patří možnost poslání dotazníku pomocí odkazu, mailu, Twitteru a Facebooku. Dotazník ve formě Basic obsahuje také patnáct druhů odpovědí, třicet jedna dotazníkových šablon a full-time technickou podporu. Možná nevýhoda tohoto a dalších produktů je, že dotazníky se uchovávají na serveru poskytovatele. Vyšší verze Select, která stojí 25, obsahuje oproti verzi Basic neomezený počet otázek, na jeden dotazník může odpovědět tisíc respondentů za měsíc a každý další respondent navíc stojí 0,10. Dále obsahuje funkce Page logic umožňuje automaticky přecházet na zvolenou otázku dotazníku a Question logic možnost pokládat otázky na základě předchozích odpovědí, vytvářet si svoje vlastní vizuální podoby dotazníků, vytvářet značkové dotazníky s logem. Placené verze také obsahují šifrování. [[1], [5]]

Současný stav 14 Tab. 1 Technické parametry Survey Monkey Zdroj: [1] Vlastnost Basic Select Gold Platinum Počet otázek na průzkum 10 neomezeně neomezeně neomezeně Počet odpovědí na průzkum 100 1000/měsíc neomezeně neomezeně Jazyková podpora Přizpůsobení vzhledu dotazníku všechny jazyky žádné všechny jazyky témata vzhledu a vlastní logo všechny jazyky témata vzhledu a vlastní logo všechny jazyky témata vzhledu a vlastní logo Šifrování žádné SSL SSL SSL Přímý odkaz na dotazník ano ano ano ano Export do formátů ne PDF PDF PDF Integrace průzkumu do vlastních stránek ano ano ano ano Sdílení dotazníku na sociálních sítích Facebook, Twitter Facebook, Twitter Facebook, Twitter Kontrola správnosti dotazníků ano ano ano ano Facebook, Twitter 24x7, 24x7, 24x7, Podpora 24x7 odpověď na odpověď na odpověď na email do email do email do dvou hodin dvou hodin dvou hodin Cena zdarma 25 /měsíc 300 /rok 800 /rok 2.3.2 Survey Gizmo Je to částečně komerční dotazníkový systém, který je poskytován v několika verzích. První verze Free je zcela zdarma a obsahuje jen základní statistické a programové funkce. Například u verze Free je jen jeden účet, prostřednictvím kterého lze přistupovat k systému. Mezi výhody oproti jiným programovým alternativám, které jsou zdarma, patří: neomezený počet průzkumů a hlasování, upgrade a downgrade kdykoliv a z jakékoli verze podle přání zákazníka, dvě stě možných odpovědí na dotazníky za měsíc, velké množství šablon a přizpůsobitelných možností dotazníkového systému, záruka uchování dat až do zrušení účtu, možnost vytvářet přímé odkazy na dotazník jak s vlastní doménou, tak i tzv. zkrácené odkazy. Dotazník lze také exportovat do CSV formátu. Verze Personal, Pro, Enterprise, Dedicated umožňují u textových odpovědí kontrolu zadaného řetězce pomocí regulárních výrazů. [[2], [5]]

Současný stav 15 Tab. 2 Technické parametry Survey Gizmo Zdroj: [2] Vlastnost Free Personal Pro Enterprise Dedicated Počet neomeze neomezen neomezen neomezen neomezen otázek na průzkum n Počet 250 1000 5000 50000 1000000 odpovědí na průzkumy (všechny) Jazyková všechny všechny všechny všechny všechny podpora Přizpůsobe ní vzhledu dotazníku jazyky témata vzhledu a jejich úprava jazyky témata vzhledu a jejich úprava jazyky témata vzhledu a jejich úprava jazyky témata vzhledu a jejich úprava jazyky témata vzhledu a jejich úprava Šifrování žádné žádné SSL SSL SSL Přímý odkaz na dotazník ne ne ano ano ano Export do formátů Integrace průzkumu do vlastních stránek Sdílení dotazníku na sociálních sítích Kontrola správnosti dotazníků CSV CSV CSV, PDF CSV, PDF, CSV, PDF, SPSS SPSS ano ano ano ano ano Twitter, Facebook žádné Twitter, Facebook regulární výrazy Twitter, Facebook regulární výrazy Twitter, Facebook regulární výrazy Twitter, Facebook regulární výrazy Podpora online, email omezen, online, email online, email online, email, telefon online, email, telefon Cena zdarma 19$/měsíc 49$/měsíc 159$/měsíc 7888$/rok

Současný stav 16 2.3.3 Easyresearch.biz Je to plně komerční systém, lokalizovaný do českého jazyka. Systém disponuje intuitivním uživatelským rozhraním, jehož vzhled ale bohužel nepůsobí nejlépe. Kromě základních funkcí disponuje dotazníkový systém také funkcí pro generování grafů: sloupcových, výsečových, dvojrozměrných a trojrozměrných; výsledné grafy lze také upravovat. Za další příplatky lze využít služby vytvoření dotazníku použít už předem připravený dotazník, šíření dotazníku. Samotné zadání dotazníku lze pak vyexportovat do souboru PDF. Ve výsledcích lze pomocí grafického znázornění vidět u každé otázky četnost jednotlivých odpovědí. Výsledky lze třídit a filtrovat. Výsledky lze také exportovat do mnoha formátů, například XLS, DOC, PDF a CSV. Systém samotný nedisponuje žádnou další statistickou funkcí, ale tento problém se dá částečně vyřešit, například exportem do XLS. Systém je nabízen ve dvou verzích, jejichž funkčnost je téměř identická, a to demo a placené verze. Demo verze není funkčně omezena, slouží však pouze k seznámení se s placenou verzí, protože průzkumy a všechna nastavení, která zde byla vytvořena, jsou vždy následující den vymazány. Placená verze zahrnuje dvě podverze: Easy a One-shot. Verze Easy platí 12 měsíců a umožňuje spustit libovolný počet průzkumů. Konkrétní cena této verze je odstupňovaná podle celkového počtu odpovědí na všechny dotazníky za dobu platnosti licence na danou verzi. Další verze One-shot je zaměřena pouze na jednorázovou dotazníkovou akci. Licence na tuto verzi platí po dobu jednoho měsíce a umožňuje spustit pouze jeden průzkum. Počet možných odpovědí je odstupňovaný stejně jako u verze Easy. [[3], [5]]

Současný stav 17 Tab. 3 Technické parametry Easyresearch.biz Zdroj: [3] Vlastnost Demo Placená verze Počet otázek na průzkum neomezen neomezen Počet odpovědí na 1000000 neomezen průzkumy (všechny) Jazyková podpora čeština čeština Přizpůsobení vzhledu dotazníku ne témata dotazníků, vlastní logo, obraz i zvuk Šifrování SSL SSL Přímý odkaz na dotazník ano ano Export do formátů PDF, CSV, XLS, DOC PDF, CSV, XLS, DOC Integrace průzkumu do ne ne vlastních stránek Sdílení dotazníku na ne ne sociálních sítích Kontrola správnosti ano ano dotazníků Podpora online online, email, telefon Cena zdarma Od 9900 Kč/měsíc 2.3.4 Likeex Tento dotazníkový systém, který ve verzi Free je zcela zdarma, je plně lokalizován do českého jazyka. Software je vyvíjen českou firmou. Tato verze Free disponuje jen velice omezenými funkcemi. Například lze udělat pouze jeden výzkum za měsíc, výzkum může mít jen pět otázek za měsíc, počet respondentů za měsíc je deset a délka trvání dotazování je jeden měsíc. Mezi výhody této verze patří: výzkum je umístěn na veřejné adrese není potřeba se přihlásit do systému, když je třeba vyplnit dotazník, nasbíraná data lze exportovat do XML, je zabezpečený přístup do systému a zabezpečený přístup při vyplňování dotazníků. Placené verze umožňují i základní statistické zpracování dat, které je podpořeno grafickým zobrazením statistických ukazatelů. Bezpečnost je zajištěna u verzí BusinessTeam a Corporate pomocí uživatelských hesel a filtrování IP adres. [[4], [5]]

Současný stav 18 Tab. 4 Technické parametry Likeex Zdroj: [4] Vlastnost Demo Placená verze Počet otázek na průzkum neomezen neomezen Počet odpovědí na 1000000 neomezen průzkumy (všechny) Jazyková podpora čeština čeština Přizpůsobení vzhledu dotazníku ne témata dotazníků, vlastní logo, obraz i zvuk Šifrování SSL SSL Přímý odkaz na dotazník ano ano Export do formátů PDF, CSV, XLS, DOC PDF, CSV, XLS, DOC Integrace průzkumu do ne ne vlastních stránek Sdílení dotazníku na ne ne sociálních sítích Kontrola správnosti ano ano dotazníků Podpora online online, email, telefon Cena zdarma Od 9900 Kč/měsíc 2.4 Hodnocení stávajících online dotazníkových systémů Při srovnání všech online dotazníkových systémů v této práci bylo zjištěno, že v kategorii dotazníkových systémů zdarma by byla nejlepší volba dotazníkový systém Survey Gizmo, jehož vlastnosti se nejvíce přibližují požadavkům reálného nasazení, tj. hlavně tím, že počet průzkumů je neomezený a počet vyplněných dotazníků za měsíc je mezi konkurenčními produkty v nekomerční sféře největší. V kategorii komerčních online dotazníkových systémů zvítězil produkt Easyresearch.biz, jehož parametry umožňují nastavit licenci přesně podle potřeb zákazníka zvláště odstupňování ceny podle celkového množství odpovědí. Další výhoda je, že produkt je vyvíjen českou firmou, která zná český trh a jeho požadavky na průzkum. Také technická podpora je v češtině. Důkazem kvality produktu jsou také reference společností, jako např. Seznam.cz, UPC a Nestle. Bohužel u obou těchto dotazníkových systémů se všechny nasbírané dotazníky ukládají ať už přechodně nebo trvale na serveru poskytovatele dotazníkové služby. Shromažďovaná data projektu Prevence.net jsou natolik citlivá, že toto bezpečnostní riziko je zásadní překážkou ve využití uvedených online dotazníkových systémů.

Vlastní řešení 19 3 Vlastní řešení Na základě výsledků rešerše alternativních dotazníkových systémů bylo rozhodnuto, že požadavky klienta jsou natolik specifické, že nejlepší postup bude vytvořit aplikaci na míru, která bude ve všech ohledech vyhovovat požadavkům klienta na systém. 3.1 Návrh struktury databáze Navržená databáze pro projekt Prevence.net se skládá z relací Kraj, Okres a Mesto. Relace Klient uchovává informace o klientech-školách, které patří pod města. K jednotlivým klientům se vážou školní třídy. Informace o nich jsou uchovávány v relaci Trida. Každá třída pak může mít libovolný počet dotazníků, které jsou uchovávány v tabulce Dotaznik. K dotazníku je přiřazen vždy uživatel, který je momentálně přihlášen do systému a vkládá dotazník. Relace Uzivatel uchovává jméno, heslo a uživatelskou skupinu. Skupina je reprezentována číslicemi 0, 1 a 2 (nepřihlášený uživatel, běžný uživatel a administrátor). Zadání jednotlivých otázek dotazníku jsou uchovávána v relaci Otazka. Texty odpovědí pro každou otázku jsou uchovávány v relaci Odpovedi. V poslední relaci Hod_odpovedi se uchovává identifikační číslo odpovědi vybrané respondentem, identifikační číslo daného dotazníku a hodnota, kterou představuje buď číselná odpověď (věk, škála) nebo textová odpověď. Podrobné schéma databáze lze vidět na obrázku níže (viz obr. 2).

Vlastní řešení 20 obr. 2 Nové schéma databáze

Vlastní řešení 21 3.2 Návrh uživatelského rozhraní aplikace Aplikace vychází z velké části z původního návrhu, který se ukázal jako funkční. Tento návrh byl optimalizován pro specifický provoz aplikace. Hlavně je kladen důraz na to, aby v některých případech počet kroků k dosažení cíle byl co nejmenší. Např. u vyplňování dotazníků v uživatelském rozhraní je vyžadováno jen identifikační číslo klienta. Dotazníkový systém je navržen tak, že při otevření hlavní stránky bude vyžadováno přihlášení uživatele. (viz obr. 3) Podle toho, jaký uživatel se přihlásí (dva typy: uživatel a administrátor), provede se přesměrování do různých částí aplikace. Existují dva typy rozhraní administrativní rozhraní a uživatelské rozhraní. obr. 3 Přihlašovací obrazovka 3.2.1 Administrativní rozhraní Uživatel přihlášený do administrativního rozhraní (viz obr. 4) má možnost vkládat dotazníky, generovat grafy, exportovat vyplněné dotazníky, vypsat informace o krajích, okresech, městech, klientech, třídách, otázkách a odpovědích, upravovat tyto informace a odhlásit se. Při volbě vložení dotazníku se nejdříve musí vybrat kraj, okres a město, ve kterém se nachází klient a jeho třída. U zadávání dotazníků dochází často k tomu, že se osoba, která zadává dotazníky, potřebuje přepnout pod jinou třídu proto, že chce zadat dotazník pro jinou třídu stejného klienta. Tato volba je explicitně nabídnuta v levém hlavním menu administrativního rozhraní.

Vlastní řešení 22 Zadávaný dotazník je zobrazen celý najednou, aby se ušetřilo co nejvíce akcí ze strany uživatele (např. kliknutí). Také je pro zadavatele dotazníku lepší, když se zobrazený elektronický dotazník co nejvíce podobá dotazníku vytištěnému na papíře, ze kterého odpovědi opisuje. U volby Grafy je napřed uživatel požádán, aby si zvolil, zda chce grafy generovat pro jednotlivé třídy, podle okresu (grafy pro každé město tohoto okresu), podle kraje (grafy pro každý zvolený kraj) a podle jednotlivých krajů (grafy pro všechny kraje). Následná nabídka umožňuje zvolit otázky, které uživatel chce zobrazit jako graf a zvolit klienta, okres a kraj v závislosti na předchozí nabídce. U možnosti generování grafů pro jednotlivé kraje obsahuje následná nabídka jen výběr požadovaných otázek, protože graf je generován pro všechny kraje. Volba Export vyžaduje před exportováním vyplněných dotazníků výběr města, klienta a třídy. Tato volba umožňuje stáhnout export už vyplněných dotazníků pro vybranou třídu jako soubor ve formátu XLSX (Microsoft Excel). Volba Úpravy v administrativním rozhraní umožňuje zobrazovat a upravovat (měnit, přidávat, mazat) záznamy v tabulkách Kraj, Okres, Mesto, Klient, Trida a provádět změny (pouze úpravu zadání) v záznamech tabulky Otazka a Odpoved. Protože dotazník je komplikovaný (viz kapitola 3.1) a téměř se nemění, je editace dotazníku řešena tak, že při editaci znění otázky nebo odpovědi na stránkách projektu uživatel typu Administrátor pouze vstoupí do sekce Úpravy, a tam úpravu provede. V tomto rozhraní lze měnit pouze znění otázky, nikoliv její formát nebo jejich počet. V případě přidávání nebo mazání otázek se musí přidat do šablony aplikace zadání otázky (viz kap. 4.3).

Vlastní řešení 23 obr. 4 Administrativní rozhraní 3.2.2 Uživatelské rozhraní Po přihlášení má uživatel možnosti (viz obr. 5) zadávání dotazníku a odhlášení. Při volbě zadávání dotazníku je před zadáváním samotného dotazníku dotázán na identifikační číslo klienta. Tak jako v administrativním rozhraní má uživatel možnost změnit třídu, aniž by musel znovu vybírat identifikační číslo klienta.

Vlastní řešení 24 obr. 5 Uživatelské rozhraní 3.3 Statistické charakteristiky Zadavatel požaduje využití standardních statistických charakteristik pro hodnoty číselných odpovědí, jako je průměr, modus, medián, variační rozpětí a odchylka. Ze statistických charakteristik pro textové odpovědi byl požadován modus. Na základě jednotlivých druhů (viz obr. 9) odpovědí byly odpovědi rozděleny do tří kategorií, a to odpovědi zabývající se věkem, odpovědi, ve kterých je škála 1-5 a textové odpovědi. Podle požadavků zadavatele a po jejich zvážení na základě publikace [7] byly zvoleny příslušné charakteristiky. Pro otázky zabývající se věkem byly zvoleny tyto charakteristiky polohy (podávají představu o celém sledovaném statistickém souboru ve formě jedné nebo více statistických charakteristik): aritmetický průměr, geometrický průměr, medián, modus. Jako charakteristiky variability (charakterizují míru rozptýlení hodnot znaku okolo střední hodnoty) u otázek zabývajících se věkem byly použity tyto charakteristiky: minimální hodnota, maximální hodnota, variační rozpětí, rozptyl, výběrový rozptyl. U odpovědí, ve kterých je škála 1-5, byly použity tyto charakteristiky polohy: aritmetický průměr, geometrický průměr, medián, modus. Jako

Vlastní řešení 25 charakteristiky variability u otázek byly použity tyto charakteristiky: minimální hodnota, maximální hodnota, rozptyl, výběrový rozptyl. Pro odpovědi textového charakteru byla vybrána jen jedna charakteristika polohy, a to modus. U těchto odpovědí se dá vyhodnocovat pouze to, zda byly odpovězeny nebo ne. Pro všechny typy otázek pak byla zvolena ještě jedna statistická charakteristika, a to míra vyplnění, která udává v procentuálním vyjádření, kolikrát bylo z celkového počtu dotazníků odpovězeno na danou otázku. Statistické charakteristiky jsou vyhodnocovány obdobně jako u grafů, pro každou otázku zvlášť, a to za klienta školu, okres, kraj a jednotlivé kraje. U klienta, okresu nebo kraje jsou souhrnné charakteristiky pro klienta, okres nebo kraj. Dále jsou vyhodnocovány statistické charakteristiky v případě klienta pro jednotlivé třídy, v případě okresu pro jednotlivá města a v případě kraje pro jednotlivé okresy.

Implementace 26 4 Implementace K implementaci databázového návrhu byl vybrán MySQL community server ve verzi 5.5.20, a to z toho důvodu, že tato platforma je nejrozšířenější bývá ve standardní nabídce webhostingů. Později však bylo z důvodu optimalizace práce s databází (bude se pracovat s velkým objemem dat) a rozšíření databázových funkcí v oblasti statistických charakteristik (zvláště budoucího vývoje aplikace v oblasti využití regresivních funkcí) přistoupeno k přesunutí databáze na PostgreSQL server. Mezi rozšiřující statistické charakteristiky PostgreSQL serveru patří korelační koeficient, výběrový průměr, průměr závislý na proměnné, průměr nezávislý na proměnné a kvadratický korelační koeficient. K implementaci programové logiky byl vybrán programovací jazyk PHP (verze 5.4.0), protože je to jazyk používaný nejčastěji [19] pro vývoj webových aplikací a podporuje mnoho známých frameworků. Také původní verze projektu byla vyvíjena ve starší verzi tohoto jazyka. Navíc jeho masové rozšíření zajišťuje jeho velmi dobrou podporu na většině serverů. Jako framework 1 byl vybrán Nette [6]. Tento framework disponuje českou dokumentací a stránkami fóra [24], které jsou aktivní. Také tento framework je stále vyvíjen a v krátkých intervalech je pravidelně aktualizován, což je z hlediska bezpečnosti webu žádoucí. Tento framework implementuje model MVC model view controller, který zajišťuje větší přehlednost programového kódu, což je pro tento projekt velice důležité. K exportu vyplněných dotazníků do formátu XLSX byl zvolen framework PHPExcel [27], který usnadňuje vytváření XLSX dokumentů a umí vytvářet i starší dokumenty formátu XLS. Na základě [[9], [10]] byl pro implementaci grafů zvolen grafový framework Highcharts, jehož klientská část je naprogramovaná v jazyce JavaScript, serverová v jazyce PHP. Podporuje velké množství druhů grafů (např. sloupcový, výsečový, spojnicový atd.) a jejich přizpůsobování. Grafy jsou generovány vlastní webovou aplikací (viz kapitola 4.4) a vyžadují podporu JavaScriptu na straně klienta, což je v současné době standardní. Architektura aplikace vychází z modelu MVP. Kód je rozdělen na tři typy. První typ, který zajišťuje komunikaci s databází, se nazývá model. Soubory modelů jsou soustředěny do zvláštního adresáře models. Druhý typ kódu je View, což je vrstva aplikace, která zajišťuje zobrazení výsledku požadavku [28]. Tato vrstva využívá šablonovací systém. Soubory šablon udávají, jak bude výsledný vzhled stránky vypadat. Jejich obsah se skládá z HTML kódu a maker [25]. V šablonách dochází jen k vykreslení dat, která jsou předána do PHP proměnných. Tyto šablony jsou uloženy ve zvláštním adresáři templates. 1 Framework programová nadstavba umožňujících použití už hotových řešení, která přímo nesouvisejí s řešeným problémem, např. předpřipravených formulářů, zajištění bezpečnosti autorizace a autentizace.

Implementace 27 O předání dat do šablony se stará presenter, který hraje roli prostředníka mezi šablonou a modelem. Soubory presenterů jsou uloženy ve zvláštním adresáři presenters. Jednotlivé třídy modelů a presenterů jsou pro přehlednost rozděleny do samostatných souborů typu PHP. Všechny presentery dědí od třídy BasePresenter, který mimo jiné obsahuje společné metody pro vykreslování informací o vybraném klientovi a pro zobrazování a vyhodnocování dotazníku. Třída BaseModel obsahuje zase připojení k databázi a od této třídy dědí všechny modely. (viz obr. 11) Pro uživatele typu administrátor byly vytvořeny třídy AdmPresenter a model AdmModel implementující základní metody pro práci v jeho prostředí. Pouze některé metody (např. metody týkající se dotazníku, grafů a informací o klientovi), které zasahují do administrativního rozhraní nebo uživatelského rozhraní nebo jsou rozsáhlé, byly vyčleněny. (viz obr. 10obr. 11) Pro uživatele typu user byly vytvořeny třídy UsrPresenter a UsrModel. Třídy UsrPresenter a AdmPresenter dědí od stejného předka DotaznikPresenter. Pro nepřihlášeného uživatele je přístupný pouze SignPresenter, který zajišťuje přihlašování k systému. Tento presenter vykresluje jedinou šablonu, a to in, která zobrazuje přihlašovací formulář. (viz obr. 10, obr. 11) Pro snadnější upravování záznamů v tabulkách Kraj, Okres, Mesto, Otazka, Otazka a Odpoved je na webových stránkách dotazníkového systému implementována speciální stránka Úpravy, která umožňuje přehledné zobrazení a editaci dat z jednotlivých tabulek. K tomuto se využívá v Nette datagrid 2 Tabella [17]. Tato komponenta umožňuje editaci jednotlivých záznamů, a to včetně jejich přidávání a odebírání. Tyto operace se provádějí s využitím technologie AJAX, která umožňuje pomocí asynchronního Javascriptového požadavku, aby se při každé úpravě, která se provede, neaktualizovala celá webová stránka, a tím se nenačítaly prvky, které jsou v dané chvíli neměnné, ale aby se aktualizoval pouze ten obsah, který byl pozměněn. [23] K získání, odebrání a upravení dat z databáze slouží třída TabellaModel, která implementuje metody: getkrajsource() stará se o získání dat z databáze, savekraj() zajišťuje uložení nebo upravení konkrétního záznamu v databázi a deletekraj() zajišťuje odebrání záznamu z databáze. Tyto metody vyžadují použití databázové vrstvy Dibi [18], která umožňuje serializaci objektů. Tato vlastnost je vyžadována datagridem Tabella. Pro každou tabulku je pak v presenteru komponenta [20], která zajistí nastavení atributů vykreslované tabulky a její předání šabloně. V samotné šabloně Upravy je pak použit jquery UI [15], který umožňuje pomocí Widget tabs [16] snadnou orientaci na stránce pomocí záložek (viz obr. 6). 2 Datagrid prvek, který zobrazuje hodnoty v upravitelné mřížce

Implementace 28 obr. 6 jquery UI widget Tabs a Tabella 4.1 Informace o klientovi Informace o vybraném klientovi, které musí být vloženy do systému před zadáním vlastního dotazníku, jsou uloženy ve třídě KlientModel. Tato třída obsahuje atributy potřebné k identifikaci dotazníku, které jsou zobrazovány při práci s aplikací, aby měl uživatel přehled, kde se právě nachází. Tyto atributy jsou IDkraj, IDokres a IDtrida. Dále jsou v této třídě atributy, jako je kraj, okres, mesto, skola, trida, ve kterých jsou uchovávány názvy k daným atributům třídy KlientModel s prefixem ID, aby se minimalizovalo dotazování na databázi. 4.2 Autorizace a autentizace O autentizaci se stará vlastní autentizační třída, která implementuje rozhraní NS\IAuthenticator. Tato třída poskytuje metodu Authenticate, která v případě, že je uživatel úspěšně přihlášen, vrátí instanci třídy

Implementace 29 Nette\Security\IIdentity. Tato třída disponuje metodami getid() a getroles(). V případě neúspěšného přihlášení je vyvolána výjimka. O autorizaci se stará třída AclModel, která obsahuje tři klíčové části. První jsou role uživatelů (Administrátor, Uživatel, Nepřihlášený), zdroje (názvy presenterů) a operace, které lze se zdrojem dělat, např. vkládání dotazníků, generování grafů atd. 4.3 Postup pro přidání nové otázky V případě, že zadavatel bude požadovat přidání nebo odebrání otázky/odpovědi, bude použit tento postup: 1. Vytvořit další proměnné šablony v metodě rendersberdat(). Tato metoda se nachází ve třídě DotaznikPresenter. Do této nové proměnné předat zadání otázky pomocí metody getotazky(), která je ve třídě DotaznikModel. Jako jediný parametr se metodě getotazky() předá id_otazka. 2. Přidat jednotlivé odpovědi jako prvky formuláře metody createcomponentdotaznik() třídy DotaznikPresenter. K získání textu odpovědí slouží metoda gettextodpovedi(), kde první parametr je id_otazka a druhý poradi. 3. Umístit zadání otázky a prvků formuláře v šabloně SberDat. 4. Přidat vyhodnocení otázky do metody dotazniksubmitted() ve třídě DotaznikPresenter. Uložení odpovědi do databáze zajišťuje metoda addodpoved() třídy DotaznikModel. Tato metoda přebírá jako parametry id_otazka, poradi. Jako volitelný parametr může do metody addodpoved() vstupovat hodnota_odpovedi. 4.4 Generování grafů Generování grafů zajišťuje vlastní třída GrafModel, která získává data z databáze a převádí je do formátu pro grafy Highcharts (viz kap. 4.6). Tato třída obsahuje atributy, které představují atributy grafu HighCharts, to znamená, že jedna instance třídy GraphModel reprezentuje právě jeden konkrétní graf k jedné otázce. Tato třída obsahuje atribut nazevgrafu, který slouží pro zobrazení názvu otázky v grafu a atribut categories, který uchovává informace o ose x grafu. Atribut categories představuje pole, ve kterém jsou uloženy názvy jednotlivých tříd v případě klienta, jednotlivých měst v případě okresu, jednotlivých okresů v případě krajů a názvy krajů v případě jednotlivých krajů. Atribut series uchovává hodnoty, legendu (řetězce znaků) a samotné číselné hodnoty grafu. Protože atribut series uchovává informace složitější povahy, byla k jejich uchovávání zvolena třída Serie. Tato třída má atribut name, kde se uchovává

Implementace 30 odpověď na zvolenou otázku. Atribut data je pole číselných hodnot, které patří jednotlivým třídám daného klienta tak, jak následují po sobě v grafu. Ve třídě AdmPresenter, která slouží jako presenter pro administrativní část aplikace, jsou pak metody jako renderklient(), renderokres(), renderkraje(), renderjednotlivekraje(). Tyto metody zajišťují vytvoření jednotlivých instancí třídy GrafModel a předání parametrů jejím konstruktorům. Parametry jsou: 1) identifikační číslo záznamu v požadované tabulce (Klient, Okres, Kraj), 2) číslo otázky hodnota atributu id_otazka z tabulky Otazka, 3) řetězec znaků, který určuje, zda bude daný graf vykreslován pro klienta, okres, kraj nebo jednotlivé kraje, 4) název javascriptové proměnné, ve které bude uložen graf. Pro každý druh grafu (sloupcový, výsečový atd.) je vytvořena samostatná šablona v Latte [21], která obsahuje předem připravený graf, do kterého se pomocí maker [25] vloží hodnoty generovaného grafu. Vygenerovaný graf je pak umístěn do značky <script> hlavičky HTML dokumentu a je na něj odkazováno uvnitř těla HTML dokumentu značkou <div> s jedinečným ID. Renderování grafu zajišťuje knihovna highcharts.js [26]. Tento skript vyžaduje pro svou funkčnost zavedení knihovny jquery. Stažení vygenerovaného grafu zajišťuje přídavný exportní modul. Tento modul se skládá z klientské a serverové části. Klientská část je Javascriptový modul, na který se musí odkazovat v hlavičce HTML dokumentu, ve kterém se bude graf nacházet. Správné vložení tohoto modulu se projeví tak, že v každém grafu přibudou dvě tlačítka, a to na vytisknutí nebo stažení grafu v daném formátu. Tento modul zajišťuje, že v případě požadavku na stažení grafu v daném formátu se graf vygenerovaný v Javascriptu převede do formátu SVG. Jako odpověď ze strany serveru je pak obdržen soubor grafu ve výsledném formátu (jpg, pdf, png, svg). Další možnost, kterou exportní klientský modul umožňuje, je vytisknutí grafu. V tomto případě se graf nikam neposílá a je okamžitě vytisknut. Serverová část, která zajišťuje převedení grafu do požadovaného formátu, umožňuje dva druhy implementace, a to buď využití už funkčního serveru na export.highcharts.com nebo vytvoření vlastního serveru, který umožňuje rozšířené možnosti manipulace s daty. Jako nejlepší varianta bylo vyhodnoceno využití už existujícího serveru, a to export.highcharts.com. Využití vlastního serveru vyžaduje nainstalování a nastavení Java knihovny Batik [22], která provádí převod SVG grafu do požadovaného formátu. Na základě požadavků zadavatele bylo také implementováno tlačítko, které umožňuje stažení všech vygenerovaných grafů. S tímto požadavkem však vyvstal problém, protože aktuální exportní klientský modul dokázal zároveň exportovat pouze jeden graf. Proto bylo nutné odvodit vlastní klientský modul od modulu původního. Nový klientský modul se skládá ze dvou metod třídy Highcharts. Metoda getsvg() převezme jako argument všechny grafy, které si uživatel nechal vygenerovat. Toto pole se všemi grafy se projde cyklem a jeden graf po druhém

Implementace 31 se převede do formátu SVG a připojí se do proměnné celek, která uchovává jednotlivé grafy ve formátu SVG za sebou v řetězcové podobě. Highcharts.getSVG = function(charts) { var celek=""; $.each(charts, function(i, chart) { var svg = chart.getsvg(); celek+=svg; celek+=' '; }); }; return celek; Metoda exportchart() pak přebere takto upravené grafy do proměnné svg, vytvoří formulář a přidá grafy do formuláře jako prvek hidden. Takto upravený formulář je poslán do PHP skriptu k dalšímu zpracování. Highcharts.exportCharts = function(charts, options) { var form, svg = Highcharts.getSVG(charts); options = Highcharts.merge( Highcharts.getOptions().exporting, options); form = Highcharts.createElement('form', { method: 'post', action: '/ostmig2p/www/expserver/' }, { display: 'none' }, document.body); Highcharts.each(['filename', 'type', 'width', 'svg'], function(name) { Highcharts.createElement('input', { type: 'hidden', name: name, value: {

Implementace 32 }); filename: otazka 'chart', type: options.type, width: options.width, svg: svg }[name] }, null, form); }; form.submit(); form.parentnode.removechild(form); Odeslaný formulář s grafy pak přebere PHP skript, který rozdělí řetězec znaků do jednotlivých položek pole po jednotlivých grafech. Stejný postup se provede i s názvy těchto grafů, které představují číslo otázky. Potom se pomocí cyklu pole projde a pro každý graf se pomocí funkce Curl() vyšle požadavek na adresu export.highcharts.com na převedení do patřičného formátu. Odpověď představuje graf převedený do požadovaného formátu. Takto přijatý soubor se pomocí funkce file_put_contents() uloží do dočasného adresáře. Pro převedení všech grafů se zavolá funkce, která zkomprimuje soubory do formátu ZIP a smaže už nepotřebné soubory s grafy. Následně nabídne zazipovanou složku s jednotlivými grafy ke stažení. Vygenerovaný graf typu HighCharts, který se nachází v šabloně, má několik vlastností. Vlastnost Charts obsahuje informace o názvu daného grafu a jednoznačně ho identifikuje v HTML dokumentu tato vlastnost má zejména své využití, když se vykresluje více grafů na jednu stránku. Další vlastnost title obsahuje název grafu, vlastnost subtitle může obsahovat podnadpis grafu. Vlastnost xaxis obsahuje informace o ose X. V případě vykreslování grafů pro klienta obsahuje názvy jednotlivých tříd, pro okresy obsahuje názvy jednotlivých měst, pro kraje obsahuje názvy jednotlivých okresů a pro jednotlivé kraje představuje názvy krajů. Tyto názvy jsou uchovávány v poli.[26] Vlastnost yaxis uchovává název osy Y, který je ve všech případech Lidé, protože na dotazník odpovídají lidé. Vlastnost legend umožňuje vykreslení legendy a nastavení barvy na pozadí legendy. Vlastnost tooltip umožňuje u vykresleného grafu po najetí kurzoru na libovolný sloupec grafu zobrazit, co tento sloupec znamená. Vlastnost plotoption umožňuje nastavení grafických vlastností sloupců, jako je šířka a tloušťka ohraničení sloupců. [26] Ve vlastnosti series jsou uloženy jednotlivé odpovědi na otázku a k těmto odpovědím jsou přiřazeny hodnoty. Počet těchto hodnot musí odpovídat počtu položek, které jsou uloženy ve vlastnosti xaxis. Položky, ke kterým není přidělena žádná hodnota, bylo nutno doplnit nulou. Tento fakt musel být při tvorbě a optimalizaci SQL dotazů brán v potaz.[26]

Implementace 33 Ukázka vygenerovaného grafu: chart["otazka1"]= new Highcharts.Chart({ chart: { renderto: "container1",defaultseriestype: 'column'}, title: { text: "Trval\u00e9 bydli\u0161t\u011b"}, subtitle: { text: ''}, xaxis: { categories: ["9.A","9.B","9B","9.C","9.D","9.E","9Z","6N"]}, yaxis: { min: 0, title: { text: 'Lidé'}}, legend: { backgroundcolor: '#FFFFFF', shadow: true }, tooltip: { formatter: function() { return ''+this.x +': '+ this.y +' lidé'; } }, plotoptions: { column: { pointpadding: 0.2, borderwidth: 0}}, series: [ { name: "venkov",data: [0,0,0,0,0,1,0,0] }, { name: "m\u011bsto do 5000 obyvatel", data: [0,9,0,5,1,0,0,0]}, { name: "m\u011bsto od 5000 do 10000 obyva tel",data: [7,0,0,0,0,0,0,0]}, { name: "m\u011bsto od 10000 do 50000 obyvatel",data: [0,10,0,3,14,0,2,0]}, { name: "m\u011bsto od 50000 do 100000 obyvatel",data: [0,15,0,0,9,0,0,2]}, { name: "m\u011bsto nad 100000 obyvatel ", data: [12,0,0,0,0,3,0,0]}, ] }); Na základě vygenerovaného grafu uvedeného výše je renderován graf (viz obr. 7).

Implementace 34 obr. 7 Ukázka vykresleného grafu 4.5 Zobrazení dotazníku Vykreslení dotazníku zajišťuje v presenteru komponenta Dotaznik(), která předává do šablony jednotlivé prvky formuláře dotazníku. Vzhledem k tomu, že komponenta Dotaznik() je využívána v obou částech aplikace (administrativní a uživatelské), nachází se ve třídě BasePresenter. Šablona explicitně určuje, kde budou jednotlivé prvky umístěny. O předání dat z databáze do komponenty Dotaznik() se stará třída DotaznikModel. Tato třída implementuje metody nactiotazky() a nactiodpovedi(), které načtou všechny otázky a odpovědi z databáze do lokálního asociativního pole dané metody. Metoda nactiotazky() do tohoto asociativního pole uloží jako klíč id_otazka jednoznačný identifikátor otázky v tabulce Otazka a jako hodnotu použije zadání otázky. Metoda nactiodpovedi() uloží do tohoto pole odpovědi, a to ve formě dvojrozměrného asociativního pole. První klíč tohoto pole je id_otazka, ke které daná odpověď patří, a poradi atribut

Implementace 35 tabulky Odpovedi, který určuje pořadí odpovědí v dotazníku. Znění odpovědi je pak uloženo jako hodnota asociativního pole. Obě metody vracejí takto vytvořené asociativní pole. Tyto dvě metody jsou volány už v konstruktoru třídy DotaznikModel, kde se vrácená hodnota metody nactiotazky() uloží do atributu otázky třídy DotaznikModel. V případě metody nactiodpovědi() je vrácená hodnota uložena do atributu odpovědi třídy DotaznikModel. Toto řešení bylo zvoleno, aby se minimalizovalo dotazování na databázi. Využívání asociativních polí umožňuje zvláště u hodnot odpovědí efektivní přístup k hodnotám odpovědí a otázkám. V komponentě Dotaznik() je pak využívána metoda gettextodpovedi(), jejímž vstupním parametrem je id_otazka a poradi. Pak je vrácena hodnota, která se nachází na žádané pozici v dvojrozměrném asociativním poli. V presenteru, který vykresluje stránku s dotazníkem, se pak využívá metoda getotazky(), která předává zadání otázky do šablony. Jejím vstupním parametrem je id_otazka. 4.6 Statistické charakteristiky Protože v databázi bude uloženo velké množství vyplněných dotazníků, se kterými bude aplikace pracovat, a také z důvodu optimalizace práce aplikace, jsou všechny statistické charakteristiky vyhodnocovány na úrovni databázového serveru. Proto samotná programová část aplikace se pouze dotazuje databázového serveru a dostává přímo hodnoty jednotlivých charakteristik. Pro získávání dat z databáze za tímto účelem slouží třída StatModel, která implementuje metody, které zjišťují charakteristiky pro otázky zabývající se věkem. Tyto metody jsou PodleKlientaVek(), PodleKlientaTridyVek(), PodleOkresuVek(), PodleOkresuTridyVek(), PodleKrajeVek(), PodleKrajeTridyVek(), PodleJednotliveKrajeTridyVek(). Dotazování na odpovědi, ve kterých je škála 1-5, zajišťují tyto metody: PodleKlientaSkaly(), PodleKlientaTridySkaly(), PodleOkresuSkaly(), PodleOkresuTridySkaly(), PodleKrajeSkaly(), PodleKrajeTridySkaly(), PodleJednotliveKrajeTridySkaly(). V dalších krocích se potom pro všechny otázky volají metody v závislosti na předchozí volbě rozsahu (klient, okres, kraj, okres nebo jednotlivé kraje), které vrátí procentuální vyjádření zodpovězených otázek a odevzdaných dotazníků. Pro každou volbu rozsahu (klient, okres, kraj, okres nebo jednotlivé kraje) jsou vytvořeny zvlášť presentery, kde jsou volány metody třídy StatModel a vrácené hodnoty jsou předávány do jednotlivých proměnných šablon. Šablony pro klienta, okres a kraj obsahují pro každou otázku jednu souhrnnou tabulku pro daného klienta, okres, kraj a další tabulku pro jednotlivé třídy, města, okresy. V šabloně pro jednotlivé kraje je jedna tabulka, ve které jsou vypsány názvy jednotlivých krajů a k nim jednotlivé charakteristiky. (viz obr. 8)

Implementace 36 obr. 8 Statistické charakteristiky pro klienta Databázový server PostgreSQL má integrovanou většinu požadovaných funkcí [8]. Mezi ně patří funkce určující charakteristiku polohy, jako je aritmetický průměr (funkce avg). Mezi funkce určující míru variability patří: rozptyl (funkce variance), odchylka (funkce stddev), výběrový rozptyl (funkce var_samp), nejmenší hodnota (funkce min), největší hodnota (funkce max). Funkce, které nebyly přímo definované, byly vytvořeny spojením jiných definovaných funkcí. Je to variační rozpětí, které je rozdílem mezi funkcí max a min a geometrický průměr exp(avg(ln(hodnota::integer))). Funkce modus a medián, které nebylo možno vypočítat pouhým složením několika funkcí, musely být implementovány v jazyku PL/SQL. Po důkladné analýze byla použita už hotová řešení. Pro výpočet mediánu a modu byla použita funkce ze stránek PostgreSQL [[11], [12]], jejichž autorem je Scott Bailey. Protože databáze obsahuje velké množství dat, je kladen důraz na to, aby programová část webové aplikace dostávala už zpracovaná data. Framework HightCharts vyžaduje data ve speciální podobě (viz kap. 4.4). Například u grafů klienta, ve kterých jsou zachyceny jednotlivé třídy a odpovědi na danou otázku, bylo v počtech odpovědí nutné zařídit, aby byla vypsána každá třída klienta, tedy i ta, která nemá žádný odevzdaný dotazník. Po analýze druhu odpovědí byly zjištěny tři typy odpovědí, a to odpovědi zabývající

Implementace 37 se věkem, odpovědi, ve kterých je škála 1-5 a textové odpovědi. Některé odpovědi jsou smíšené (viz obr. 9). Aby bylo možné odpovědi rozlišit v rámci jedné otázky, a to nejen z hlediska grafů, ale i z hlediska exportování dotazníků z databáze, byl do tabulky Odpoved přidán další atribut zobrazit_hodnotu, který může nabývat hodnoty nula nebo jedna. Nula je to v případě, jde-li o odpověď, kde není potřeba brát v potaz hodnotu odpovědi pouze textové odpovědi; jedna je to v případě, že má být brána v potaz hodnota odpovědi věk nebo škála. U textových odpovědí pak bylo nutné přiřadit ke každé třídě všechny odpovědi na danou otázku. To bylo zařízeno přes kartézský součin [14]. Do podmínkové části where bylo tedy vloženo omezení na id_klient a id_otazka, aby se vybral jen požadovaný klient a požadovaná otázka. K tomuto poddotazu byla pomocí Left join [13] postupně přiřazována tabulka Dotaznik a Hod_odpovedi. Na závěr byla použita funkce count s klausulí group by, která spočítala počet přiřazených odpovědí ke každé třídě. Tímto způsobem byly řešeny textové odpovědi. SELECT tp.id_trida, tp.id_odpoved, text_odpoved, tp.poradi, tp.nazev_tridy, Count(hodnota) AS kolikrat FROM (SELECT * FROM Trida, Odpoved WHERE zobrazit_hodnotu = 0 AND id_otazka = 2 AND id_klient = 8) AS tp LEFT JOIN Dotaznik ON tp.id_trida = Dotaznik.id_trida LEFT JOIN Hod_odpovedi ON Dotaz - nik.id_dotaznik = Hod_odpovedi.id_dotaznik AND tp.id_odpoved = Hod_odpovedi.id_odpoved GROUP BY tp.id_trida, tp.id_odpoved, tp.nazev_tridy, text_odpoved, tp.poradi ORDER BY tp.id_trida, tp.poradi; Podobným způsobem byly řešeny SQL dotazy pro okres, kraj a jednotlivé kraje s tím rozdílem, že ve vnořeném SQL dotazu byla tabulka Trida nahrazena patřičnou tabulkou, tj. v případě okresu tabulkou Mesto, kraje tabulkou Okres a

Implementace 38 pro jednotlivé kraje tabulkou Kraj. U grafu pro kraj a jednotlivé kraje musely být k vnořenému SQL dotazu ještě připojeny tabulky nesoucí spojovací atribut, tj. tabulky Mesto a Okres. V případě číselných odpovědí vyjádřených věkem nebo škálou, bylo bráno v úvahu to, že rozmezí věku nebo škály, které je stanoveno zadavatelem, se může v budoucnosti měnit, takže by bylo nepraktické přiřazovat ke každé třídě každou hodnotu věku nebo škály, i tu, kterou odevzdaný dotazník neobsahuje. Došlo by k znepřehlednění grafů. V případě číselných odpovědí se vycházelo z textových odpovědí s tím rozdílem, že odpovědi, které byly v případě textových odpovědí u klienta spojeny kartézským součinem, byly nahrazeny dalším vnořeným dotazem, který zjišťuje výskyt jednotlivých číselných odpovědí ve všech vyplněných dotaznících. Touto úpravou odpadá práce s hodnotami, které zjištěny nebyly. SELECT tp.nazev_tridy, tp.hodnota AS hod, Count(Hod_odpovedi.hodnota) AS kolikrat FROM (SELECT * FROM Trida, Odpoved, (SELECT hodnota FROM (SELECT * FROM Trida, Odpoved WHERE zobrazit_hodnotu = 1 AND id_otazka = 4 AND id_klient = 8) AS tp LEFT JOIN Dotaznik ON tp.id_trida = Dotaznik.id_trida LEFT JOIN Hod_odpovedi ON Dotaznik.id_dotaznik = Hod_odpovedi.id_dotaznik AND tp.id_odpoved = Hod_odpovedi.id_odpoved WHERE hodnota IS NOT NULL GROUP BY hodnota) AS tab WHERE zobrazit_hodnotu = 1 AND id_otazka = 4 AND id_klient = 8) AS tp LEFT JOIN Dotaznik ON tp.id_trida = Dotaznik.id_trida LEFT JOIN Hod_odpovedi ON Dotaznik.id_dotaznik = Hod_odpovedi.id_dotaznik AND tp.id_odpoved = Hod_odpovedi.id_odpoved AND Hod_odpovedi.hodnota = tp.hodnota GROUP BY tp.id_trida, tp.hodnota, tp.nazev_tridy