VYSOKÁ ŠKOLA POLYTECHNICKÁ JIHLAVA Katedra elektrotechniky a informatiky Obor Počítačové systémy. Generátor textů z LMS Moodle

Podobné dokumenty
Maturitní otázka webové stránky (technologie tvorby webu) Co znamená pojem Web? Web, www stránky, celým názvem World Wide Web,

INSTALACE DATABÁZE ORACLE A SYSTÉMU ABRA NA OS WINDOWS

Instalace a konfigurace web serveru. WA1 Martin Klíma

MATURITNÍ PRÁCE dokumentace

Úvod do PHP s přihlédnutím k MySQL

Minebot manuál (v 1.2)

Seminární práce z předmětu UPI

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

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

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

Zakázka Vnitřní integrace úřadu v rámci PROJEKTU Rozvoj služeb egovernmentu ve správním obvodu ORP Rosice

MS WINDOWS UŽIVATELÉ

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

Implementace LMS MOODLE. na Windows 2003 Server a IIS 6.0

O nás. To vše a mnohem více Vám je schopna nabídnout již základní verze publikačního systému bravaweb.

Mediální komunikace. Vysoká škola mezinárodních a veřejných vztahů PhDr. Peter Jan Kosmály, Ph.D

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

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

Filr 2.0 Uživatelská příručka k aplikaci Filr Web. Únor 2016

Správa linuxového serveru: Webová rozhraní k poště (Squirrelmail a Roundcube)

Technologie počítačových sítí 5. cvičení

Helios RED a Internetový obchod

Univerzita Palackého v Olomouci. Služby spojené s Active Directory

Instalace a konfigurace OpenAdmin tool na M$ a Linuxu

BankKlient. FAQs. verze 9.50

VYSOKÁ ŠKOLA POLYTECHNICKÁ JIHLAVA. Katedra elektrotechniky a informatiky Obor: Aplikovaná informatika

DIGITÁLNÍ POVODŇOVÉ PLÁNY. M. Banseth

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

rychlý vývoj webových aplikací nezávislých na platformě Jiří Kosek

Obsah. 1.1 Úvod do práce s autorským nástrojem ProAuthor 4

DATA ARTICLE. AiP Beroun s.r.o.

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


Uživatelský manuál. A3600 DL ( Data Download)

instaluj Naučte se víc...


Obsah. Položkování 1: Prefix dřívějších osamocených dílů se zachovává...23 Položkování 2: Editace předběžných čísel...23

Restaurator. Semestrání projekt předmětu PDA

Co je nového v SolidWorks Enterprise PDM 2009

Příručka pro rychlou instalaci

Doplněk Parametry Plus pro Altus Vario

NOVÁ VERZE OBD A JEJÍ VYUŽÍVÁNÍ Ing. Martina Valášková

Nginx v roli web serveru

Free & Open Source software. Liberix. prezentací. Open Source. software. Free Software. projektů pro studenty. Rekapitulace. Liberix o.p.s.

Odůvodnění veřejné zakázky dle 156 zákona

1. Dříve než začneme Trocha historie nikoho nezabije Co budete potřebovat Microsoft versus zbytek světa...

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

10. Editor databází dotazy a relace

Instalace systému Docházka 3000 na operační systém ReactOS Zdarma dostupné kompatibilní alternativě k systému Windows

UZ modul VVISION poslední změna

ELEARNING NA UJEP PŘEDSTAVY A SKUTEČNOST

Lekce 11 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ

Workmonitor. Servisní návod. 24. června 2014 w w w. p a p o u c h. c o m

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

Vysoká škola ekonomická v Praze

2. blok část B Základní syntaxe příkazů SELECT, INSERT, UPDATE, DELETE

PHP PHP je skriptovací programovací jazyk dynamických internetových stránek PHP je nezávislý na platformě

ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE

Ovladač Fiery Driver pro systém Mac OS

Obsah. Rozdíly mezi systémy Joomla 1.0 a Systém Joomla coby jednička online komunity...16 Shrnutí...16

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

DODATEČNÉ INFORMACE Č. 1 K ZADÁVACÍM PODMÍNKÁM PŘESHRANIČNÍ INFORMAČNÍ SYSTÉM PRO PŘEDCHÁZENÍ A ŘEŠENÍ POVODNÍ A DALŠÍCH KRIZOVÝCH SITUACÍ

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

Statistica, kdo je kdo?

MONITORING A ANALÝZA KVALITY ELEKTŘINY

Ostatní portálové aplikace

Olga Rudikova 2. ročník APIN

TaskPool 2.9 administrátorský manuál

Manuál administrátora FMS...2

TECHNICKÁ UNIVERZITA V LIBERCI FAKULTA UMĚNÍ A ARCHITEKTURY. Studijní program: B8206 Výtvarná umění. Obor: Vizuální komunikace BAKALÁŘSKÁ PRÁCE

Práce s velkými sestavami

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

ODBORNÝ VÝCVIK VE 3. TISÍCILETÍ

Stručný manuál k ovládání programu STATISTICA. Mgr. Petra Beranová Ing. Miloš Uldrich

Na vybraném serveru vytvoříme MySQL databázi. Soubory scratch.jpa, kickstart.php a en-gb.kickstart.ini nahrajeme na vybraný server.

Program Technické podpory SODATSW spol. s r.o.

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

QuarkXPress soubor ReadMe

Současný svět Projekt č. CZ.2.17/3.1.00/32038, podpořený Evropským sociálním fondem v rámci Operačního programu Praha adaptabilita

Projekt Vzdělávání dotykem CZ.1.07/1.3.00/ WORD 2013 práce s textovými soubory. Autoři: Jan Heller a David Peterka

Microsoft Office 2003 Souhrnný technický dokument white paper

Software pro personalizaci karet

Abstrakt. Klíčová slova. Abstract. Key words

Projekt 7006/2014 SDAT - Sběr dat pro potřeby ČNB. Návrh realizace řešení

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

Správa linuxového serveru: Zprovoznění Ruby aplikací s RVM, Thin a Nginx

Uživatelská příručka

Software. Mgr. Renáta Rellová. Výukový materiál zpracován v rámci projektu EU peníze školám

Návrh aplikace. Project Westpon. Inteligentní simulátor budov. Martin Mudra, Jan Smejkal, Onřej Macoszek, Marek Žehra, Jiří Slivárich

Instalace aplikace Profibanka

Co je nového v aplikaci QuarkXPress 10.1

Import a export dat EU peníze středním školám Didaktický učební materiál

Úvod Používané konvence Seznámení s Outlookem...17

Střední odborná škola a Střední odborné učiliště, Hořovice

Pokročilé techniky tvorby sestav v Caché. ZENové Reporty

1 Hodnocení Creditcheck v BYZNYS ERP návod k nastavení

Program pro flexibilní tvorbu evidencí. VIKLAN - Evidence. Uživatelská příručka. pro seznámení se základními možnostmi programu

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

Ostatní portálové aplikace

IBM TRIRIGA Application Platform Verze 3 Vydání 4.2. Příručka instalace a implementace

Transkript:

VYSOKÁ ŠKOLA POLYTECHNICKÁ JIHLAVA Katedra elektrotechniky a informatiky Obor Počítačové systémy Generátor textů z LMS Moodle bakalářská práce Autor: Michal Paukert Vedoucí práce: PaedDr. František Smrčka, Ph.D. Jihlava 2014

Abstrakt Tato bakalářská práce se zabývá problematikou získávání obsahu z určitých částí systému LMS Moodle. Tato funkcionalita je zakomponována jako rozšiřující modul pro tento systém. Umožňuje tedy získat data z vybraných částí a následně je vypsat ve formátu PDF nebo HTML. Po nainstalování umožnuje správci daného kurzu jednoduché nastavení, které materiály z kurzu mohou být exportovány a které nikoliv. Uživatel, který bude požadovat generovaný obsah, bude moci díky uživatelskému rozhraní zvolit, jaké části se mají generovat, kromě části s kvízy. Ty mohou exportovat pouze učitelé a administrátoři. Klíčová slova PHP, MySQL, Moodle, export, PDF Abstract This bachelor thesis deals with the problem of obtaining content from certain parts of the LMS Moodle. This functionality is incorporated as an extension module for the system. This extension allows obtain data from selected parts and then export to PDF or HTML. After finish installation, administrator is able to setup course, which of course materials can be exported and which not. The user who will request generate content, be able to select which parts are to be generated via the user interface, except for the part with quizzes. This can export only teachers and administrators. PHP, MySQL, Moodle, export, PDF

Prohlašuji, že předložená bakalářská práce je původní a zpracoval/a jsem ji samostatně. Prohlašuji, že citace použitých pramenů je úplná, že jsem v práci neporušil/a autorská práva (ve smyslu zákona č. 121/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o změně některých zákonů, v platném znění, dále též AZ ). Souhlasím s umístěním bakalářské práce v knihovně VŠPJ a s jejím užitím k výuce nebo k vlastní vnitřní potřebě VŠPJ. Byl/a jsem seznámen s tím, že na mou bakalářskou práci se plně vztahuje AZ, zejména 60 (školní dílo). Beru na vědomí, že VŠPJ má právo na uzavření licenční smlouvy o užití mé bakalářské práce a prohlašuji, že s o u h l a s í m s případným užitím mé bakalářské práce (prodej, zapůjčení apod.). Jsem si vědom/a toho, že užít své bakalářské práce či poskytnout licenci k jejímu využití mohu jen se souhlasem VŠPJ, která má právo ode mne požadovat přiměřený příspěvek na úhradu nákladů, vynaložených vysokou školou na vytvoření díla (až do jejich skutečné výše), z výdělku dosaženého v souvislosti s užitím díla či poskytnutí licence. V Jihlavě dne... Podpis

Poděkování Na tomto místě bych rád poděkoval svému vedoucímu práce PaedDr. Františku Smrčkovi, Ph.D. za poskytnutí tématu a možnost vytvářet ho pod jeho vedením. Dále bych chtěl poděkovat Mgr. Antonínu Přibylovi za poskytnutí zázemí, díky kterému mohla tato bakalářská práce vzniknout na poskytnutém školním serveru.

Obsah 1 Úvod... 8 1.1 Rešerše... 9 1.2 Co je to Moodle?... 9 1.3 Motivace... 10 2 Úvodní analýza... 11 2.1 Požadavky... 11 3 Použité technologie... 12 3.1 CentOS Linux... 12 3.2 Apache... 12 3.3 PHP... 12 3.3.1 PHP moduly... 13 3.4 MySQL... 15 4 Datová analýza... 16 4.1 E-R diagram... 16 4.2 Obsahové složení... 18 4.3 Aktivity... 18 4.3.1 Přednášky... 19 4.3.2 Kvíz... 19 4.3.3 Slovník... 19 4.3.4 Cvičení / Úkol... 19 4.4 Zdroje... 20 4.4.1 Knihy... 20 4.4.2 Stránka... 20 5 Modul... 21 5.1 Šablona nového modulu... 21 5.2 Základní struktura modulu... 22 5.3 Vývoj... 25 5.3.1 Vlastní Třída... 25 5.3.2 Vytváření uživatelského formuláře... 26 5.3.3 Získávání dat... 27 5.3.4 Průběh generování... 28 5.3.5 Jazykové mutace... 31 5.4 Stažení a Instalace Moodle... 31 5.5 Používání modulu... 34 5.6 Pohled uživatele... 37

6 Testování... 37 6.1 Omezení a Nedostatky... 38 7 Závěr... 39 7.1 Hlavní cíle... 39 Seznam citací... 40 Seznam obrázků... 42 Seznam použitých zkratek... 43 Přílohy... 44 1 Obsah přiloženého CD... 44

1 Úvod Při studiu na Vysoké škole polytechnické v Jihlavě jsem si koncem roku 2012 vybíral téma Generátor textů z LMS Moodle pro zpracování semestrálního projektu. Ze strany studentů se často ozývaly dotazy, zda je možné stáhnout veškeré studijní materiály na jednom místě v nějakém formátu, který by mohl být dostupný i offline. Jelikož vývoj webových aplikací mi byl blízký a již delší dobu jsem se zabýval tímto oborem, rozhodl jsem se zpracovat tento problém. Při konzultaci s vedoucím práce panem PaedDr. Smrčkou, Ph.D. jsme stanovili základní body pro postup a zpracování mé bakalářské práce Hlavním požadavkem je načíst obsah tak, aby bylo možné jej později převést do formátu PDF. Dalším cílem je navrhnout takové řešení, které by umožňovalo zakomponovat do jakéhokoliv již vytvořeného systému LMS Moodle jako zásuvný modul. Vzhledem k neustálému vývoji nových technologií jsem uznal za vhodné využít momentálně nejmodernějších informací a výzkumů a oddálit tak zaostání tohoto modulu, ke kterému dřív nebo později by stejně došlo. Výstupem mé práce je modulový balíček, který po implementaci do systému zajistí, že bude možné generovat obsah ze všech základních používaných aktivit do formátu PDF, který je možné stáhnout. Tento balíček bude mít svá nastavení, zejména nastavení činností exportovatelnými a nastavení pro konkrétní instanci exportu, co vše se má exportovat. V první části bych tedy chtěl čtenáře seznámit se systémem samotným, kde bude popsáno, co je vlastně Moodle a co by od tohoto systému mohl čekat, a také proč mě motivovalo řešit tuto problematiku a vyvíjet tento modul. Druhá část bude analyzovat systém jako takový a zjišťuje, jak modul napojit na systém a samostatné programování a použití nejrůznějších funkcí. Třetí část popisuje, jak jsem postupoval při výběru technologií a proč jsem vybral právě ty a ne jiné. 8

1.1 Rešerše Před tím, než jsem zahájil samostatný vývoj modulu, snažil jsem se zjistit, zda již přede mnou se tímto problémem někdo nezabýval a nevytvořil podobný modul nebo projekt, který by po určité úpravě tuto funkci umožnil. Na internetu jsem našel plno diskuzních fór, která pojednávají o této problematice, ale zatím žádné nepřineslo řešení, které by uspokojilo vznesené požadavky, což mě ještě více motivovalo při vývoji modulu. Protože jsem nenašel žádný program nebo skript, který by řešil tuto problematiku pro LMS Moodle, začal jsem s přípravami k tomuto projektu. Našel jsem modul, který umožňuje export známek žáků do formátu PDF, z čehož jsem usoudil, že systém již umí export určeného obsahu do PDF. Bádal jsem, jak aplikaci co nejlépe navrhnout a jak co nejefektivněji vytvořit, což uvádím v následující kapitole. 1.2 Co je to Moodle? Obecně můžeme E-learning chápat jako moderní způsob výuky s podporou počítačových technologií. Moodle je právě takovým e-learningovým systémem, který by se dalo nazvat virtuální školou, tedy multimediálním interaktivním vzděláváním realizovaným prostřednictvím počítačových kurzů, které jsou distribuovány pomocí CD-ROMu, Internetu, Intranetu nebo kombinovaným způsobem. Je vyvíjen jako nástroj podporující přístup ke vzdělávání. Moodle je poskytován zdarma jako Open Source software spadající pod obecnou veřejnou licenci GNU. Jeho domovskou stránkou je https://moodle.org/. Původně byl programován v jazyce Python a do PHP byl přeprogramován až v roce 2002. [1] Obrázek 1 Logo Moodle Zdroj: https://moodle.org/logo/moodle-logo.png 9

1.3 Motivace Mnoho škol využívá softwarového výukového systému Moodle jako studijní oporu, momentálně však neobsahuje možnost exportu obsahu kurzu do souborového formátu typu PDF. Systém Moodle již teď umožňuje zadávání obsahu do systému a jeho změny, učitelé tak tam mohou zadávat své přednášky a skripta. Často se může stát, že skripta nebo jiné studijní materiály vydávané samotnými pedagogy mohou být již neaktuální a studenti tak nepracují s aktuálními informacemi. Obrovskou výhodou tohoto systému je jeho jednoduchá aktualizovatelnost obsahu, tato přednost systému může tak zamezit neaktuálnosti materiálů a studenti získají přístup k nejaktuálnějším materiálům či informacím. Dalším velkým plusem tohoto systému je, že o aktualizaci obsahu se může starat více učitelů a udržovat jej tak aktuální. Bohužel momentální velkou nevýhodou je, že student, který bude chtít získat materiály z kurzu, musí být stále online nebo kopírovat jednu stránku za druhou a ukládat do lokálního souboru. Tuto takříkajíc nedokonalou vlastnost systému však bude řešit nový zásuvný modul, který bude nabízet právě požadované materiály ve formátu PDF. 10

2 Úvodní analýza Pro vznik tohoto projektu a vytvoření zásuvného modulu je potřeba analýza celého systému, zejména ze strany databázového systému. Aby tuto analýzu bylo možné provést, musel jsem nejprve nainstalovat software na webový server, což však nebylo možné bez poskytnutého serveru a podpůrných aplikací. Nejprve jsem hledal mezi českými freehostingy, kde jsem však narazil na mnohá úskalí - omezení určitých potřebných hodnot a nainstalovaných knihoven, které tento software vyžaduje. A zřejmě by ani poskytovaný výkon od freehostingu nestačil pro samostatné generování nebo by probíhalo příliš dlouho. 2.1 Požadavky Moodle je vyvinut primárně pro systém Linux s webovým serverem Apache rozšířením PHP a databázovým serverem MySQL. Bez těchto podpůrných aplikací nelze software nainstalovat ani nijak spustit. [2] Pro tyto účely jsem si vybral linuxovou distribuci CentOS, se kterou jsem se již setkal během studia a byla pro mne nejvíce přijatelná a také proto, že se nejvíce hodí pro serverová řešení a je velmi oblíbená. Samostatný CentOS však po nainstalování v základní net-instalaci neobsahuje žádný webový server, proto bylo nutné doinstalovat balíček httpd, jehož součástí je právě webový server Apache. Ten samozřejmě neumí spouštět PHP skripty, proto bylo potřeba přidat rozšíření PHP a pomocí instalačního balíčku nainstalovat a nakonfigurovat. Moodle má mnoho možností, jakou databázi bude využívat nejčastěji je to však PostgreSQL nebo MySQL. Na přiděleném virtuálním serveru jsem již mohl instalovat chybějící knihovny a rozšíření zejména knihovnu pro generování PDF souborů. 11

3 Použité technologie 3.1 CentOS Linux CentOS je linuxovou distribucí vycházející z distribuce řady Red Hat Enterprise Linux, která je s ní 100% binárně kompatibilní. Jeho předností je hlavně stabilita a vhodnost pro serverové záležitosti. Další výhodou CentOS je rychlost, protože pracuje jen v základní verzi softwaru. Vynikající je například pro 64bitové Oracle servery. [3] 3.2 Apache Apache HTTP Server je softwarový webový server s otevřeným kódem pro Linux, BSD, Microsoft Windows a další platformy, který běží na hardwarovém stroji. Zajištuje obsluhu požadavků webových klientů, jejich zpracování a předání výsledného obsahu tedy stránky zpět klientovi. V současné době je to nejrozšířenější webový server, který obsluhuje na celém světě většinu internetových stránek. Mezi výhody Apache patří zejména dostupnost pro všechny hlavní platformy Windows, Linux. Server Apache vznikl v roce 1993 na Illinoiské univerzitě tehdy ještě pod jménem NCSA HTTPd. Později byl přejmenován podle anglického a patchy server, tedy záplatovaný server. Název se odvozuje z historie programu, kdy byl Apache mezi správci serverů používán s mnoha různými záplatami a úpravami. [4][5] 3.3 PHP PHP je programovací jazyk určený především pro programování dynamických internetových stránek. PHP je jazyk interpretovaný, jeho skripty se začleňují přímo do struktury jazyka HTML a jsou prováděny na straně serveru. Syntaxe se podobá jazyku Perl. PHP je nezávislý na platformě. Obsahuje rozsáhlé knihovny funkcí pro zpracování textu, grafiky, práci se soubory, přístup k několika databázovým serverům, podporu internetových protokolů (HTTP, SMTP, FTP, IMAP, POP3, LDAP, ) PHP se stalo velmi oblíbeným především díky jednoduchosti použití a tomu, že kombinuje vlastnosti více programovacích jazyků a nechává tak vývojáři částečnou svobodu v syntaxi. V kombinaci s databázovým serverem MySQL a webovým serverem Apache je často využíván k tvorbě webových aplikací. [6] 12

3.3.1 PHP moduly 3.3.1.1 mod_php Používání modulu mod_php ke spouštění PHP skriptů je nejvíce používaná metoda. Při používání mod_php je výstup z PHP interpreteru vložen do každého Apache procesu vytvořeném na serveru. Takto je Apache schopen spouštět PHP skripty sám a vypořádat se s jakýmikoliv externími procesy. Díky tomu je výhodné používat tento modul pro náročné stránky, kde je hodně požadavků, které obsahují PHP kód, (jako je například WordPress, Drupal, Joomla.) protože všechny dotazy jsou zpracovávány Apachem. [7] Výhody PHP kód spouští Apache Žádné další externí procesy nejsou vyžadovány Velmi dobré výsledky pro náročné stránky PHP konfigurace může být měněna pomocí souboru.htaccess Nevýhody Proces Apache využívá více pamětí Obsah je načítán pomocí PHP interpretem Soubory vytvořené pomocí PHP skripty jsou většinou ve vlastnictví webového serveru, takže není možné upravovat přes FTP později. 3.3.1.2 FastCGI FastCGI je střední cesta mezi mod_php Apache modulem a aplikací CGI. Toto rozšířeníumožňuje spouštět skripty, které mají být provedeny interpretem mimo webový server a zahrnuje bezpečnostní výhody CGI, ale nezahrnuje některé z neefektivností CGI. 13

Při spouštění PHP skriptu je každý požadavek proveden z webového serveru a je předán FastCGI pomocí komunikačního socketu. To umožňuje mnohem větší škálovatelnost webového serveru a interpretu PHP, může pak být rozdělen do svých jednotlivých serverů prostředí v případě potřeby. Nevýhodou spouštění PHP s podporou FastCGI je, že žádné direktivy definované v.htaccess nebudou použity a budou ignorovány. Je však možné nastavit je pro každou doménu zvlášť v souboru php.ini. [7] Výhody Vylepšené zabezpečení jako je spuštění kódu izolovaně od webového serveru Statický obsah nebude zpracován PHP interpret. Umožňuje soubory, které mají být spravovány uživateli přes FTP bez změny oprávnění. Nevýhody Nelze použít změny atributů PHP v.htaccess. Vyžaduje, aby požadavky na PHP byly volány z webového serveru 3.3.1.3 FPM PHP-FPM - nejnovější způsob, jak používat PHP s webovým serverem, je alternativní implementací PHP a FastCGI s některými dalšími funkcemi, které mohou být užitečné pro webové stránky, které běží na malých VPS nebo více serverech. Lze jej použít s jakýmkoliv webovým serverem, který je kompatibilní s FastCGI. PHP-FPM dává administrátorům schopnost elegantně zastavit a spustit PHP procesy, aniž by došlo ke ztrátě dotazů. To umožňuje postupně aktualizovat konfiguraci a to bez ztráty jakýchkoli dotazů. Je možné také spustit nouzový restart na všech procesech a v případě jakéhokoli náhodného zničení sdílené paměti opcode cache, pokud používáte akcelerátor. [8] 14

Výhody: Kompatibilní s mnoha webovými servery Menší nároky na paměť než mod_php Další konfigurační možnosti oproti FastCGI Nevýhody: Vyžaduje více nastavení oproti mod_php Není příliš známý Projekt je stále poměrně mladý 3.3.1.4 Jaký tedy použít? Obecně neexistuje žádné pravidlo, které by nám říkalo, jaká metoda je správná pro zrychlení PHP. Na menších stránkách záleží obvykle na osobní preferenci, který ze zmíněných chcete používat, ale nejčastěji je nasazen mod_php kvůli právě snadné konfiguraci. Velice často je na webech nasazen právě nějaký druh CMS aplikace (jako je WordPress, Drupal, Joomla atd.), což vede k preferenci použití FastCGI, který umožňuje přístup FTP a PHP stejný přístup ke skriptům, což znamená nahrávání souborů a editace funkcionality v rámci CMS bez jakýchkoliv speciálních úprav. konfigurace. [8] 3.4 MySQL MySQL, je open source relační databázový systém založený, jak již z názvu vyplývá, na využití jazyka SQL, který je využit pro přidávání, odebírání a upravování informací v databázi. MySQL může být využit pro celou řadu aplikací, ale mezi nejčastěji běžně používané jsou webové servery. Webová stránka, která využívá MySQL a získává tak přístup k informacím z databáze, je často označována jako dynamická. To znamená, že obsah z databáze každé načítané stránky je generován při opakovaném načtení stránky. [9] 15

4 Datová analýza Databáze Moodle má okolo 200 databázových tabulek, což může na první pohled vypadat příliš složitě. Dobrou zprávou je, že nemusíme rozumět všemu. Například máme osm tabulek nazývající se forum_něco. Pokud se zrovna nezajímáme o modul fórum, můžeme je vynechat. Toto platí stejně tak i pro každý další modul z aktivit. Podobně jsou na tom i tabulky patřící k zápisovým modulům, modul otázky a tak dále. Tímto nám zbývá okolo padesáti core tabulek. I padesát tabulek se může zdát poměrně hodně, naštěstí i zde je můžeme rozdělit do skupin a ty většinou pochopit nebo je zcela vynechat. [10] Výukový systém Moodle má, alespoň dle mého názoru, jednu velkou nevýhodu, a to, že databázová relační závislost je řešená aplikačně, místo aby to za ni řešil databázový server. Tedy je řešena na vyšší síťové vrstvě, místo toho, aby tyto závislosti za ni řešila nižší vrstva, na které je tato aplikace postavena. Abych to trochu objasnil, jak to vlastně funguje, představme si každou tabulku jako objekt se svými atributy. Tento objekt může být svázán s jinými objekty, čímž nahrazujeme databázovou závislost, jako je svázání primárního klíče s cizím klíčem v databázích. 4.1 E-R diagram Abych mohl začít s vývojem jako takovým, potřeboval jsem mít alespoň částečnou představu, jak vypadá databázové napojení tabulek a podle nich získávat data. Předchozí věta může být trochu matoucí, když jsem v odstavci výše zmiňoval, že tento systém nemá databázovou závislost, což je sice pravda, ale jen částečně. Moodle využívá totiž databázi jako úložiště dat, kde jedna tabulka je propojena s druhou, ale ne pomocí primárního a cizího klíče, ale pomocí složitějších dotazů a ty jsou pak transformovány na objekty, se kterými Moodle pak dále pracuje. 16

Obrázek 2 Zjednodušený datový model LMS Moodle Uvedený diagram je zobrazen ve velmi zjednodušené formě tak, aby zobrazoval pouze námi používané tabulky a zobrazil nám představu, jak asi vypadá databázové napojení. Ve skutečnosti je tento diagram mnohem složitější a jeho kompletní diagram můžeme nalézt na stránkách dokumentace. http://docs.moodle.org/dev/database_schema_introduction Protože Moodle disponuje mnoha funkcemi pro získávání dat, nebudeme se zabývat diagramem detailně, ale uvedu nějaké praktické příklady pro získávání dat. Například abychom mohli sestavit dotaz pro získání dat z materiálů typu přednáška, musíme znát nejprve kurz, ve kterém se daná přednáška nalézá. $lessons = $DB->get_records('lesson', array( 'course' => $course->id )); //Get all lessons Tímto tedy získáme všechny přednášky, ale ne jejich obsah, protože z výše uvedeného diagramu je vidět, že se přednášky skládají z přednáškových stránek. Abychom mohli tedy získat obsahové informace, musíme pro každou naši přednášku vytvořit další dotaz, který bude získávat právě obsahová data a bude vypadat asi takto: 17

$lesson_pages = $DB->get_records('lesson_pages', array( 'lessonid' => $lesson->id )); //Get all lesson pages from lesson Obdobně získáme i další materiály, které potřebujeme vypsat. Vysvětlení zmíněného kódu bude uvedeno v praktické části, která se zabývá vývojem modulu. 4.2 Obsahové složení Tato část práce se zabývá analýzou vývoje modulu v LMS Moodle tedy tím, jak jsou moduly vytvářeny a implementovány. Na úvod je nutné pochopit rozdíl mezi jednotlivými typy modulu. Používání interaktivního obsahu kurzu v LMS Moodle slouží ke dvěma účelům: Umožňuje učiteli sbírat informace a žákům nabízí spolupráci. Některé aktivity, jako jsou kvízy, se zaměřují na sběr informací. Podívejme se na ty nejzákladnější. Kvízy sbírají známky, které mohou být automaticky přidány do tzv. GradeBook, tedy takové online žákovské knížky, zatímco Choices sbírají jen odpovědi. Úkoly umožňují zasílání souboru nebo testů, ostatní aktivity, jako je fórum a chat, ulehčují spolupráci mezi studenty. Tento druh obsahu kurzu je základem celého Moodle softwaru. Pokud nepoužíváte žádný interaktivní obsah, nevyužíváte všechny možnosti tohoto softwaru, který nabízí. Abychom mohli poskytnout uživatelům požadované materiály, musíme je nejdříve přidat do kurzu. Materiály jsou rozděleny do dvou kategorií a to aktivity a zdroje. [11] 4.3 Aktivity Aktivity (nebo také činnosti) je souhrnný název pro skupinu funkcí v systému LMS Moodle. Tento systém obsahuje celou řadu modulů činností, které mohou být použity k vytvoření kurzu. Obvykle činnost je takový typ materiálu, kde je vyžadována nějaká 18

interakce od studenta. Takovýmto typickým modulem je kvíz, kde jsou zadány otázky a student na ně odpovídá podle zadání. 4.3.1 Přednášky Přednáškový modul představuje pro studenty soubor HTML stránek, které jsou vyžadovány. Obvykle přednášky obsahují nějakou obecnou otázku podobnou dotazníkům a nabízí volby pro zodpovězení. Potvrzením volby je odpověď odeslána ke zpracování. Na stránce v přednášce student může kliknout na tlačítko (obvykle ve spodní části stránky) pro pokračování, které mu umožní načíst další stránku v přednášce. Tlačítko představuje odkaz na další stránku, protože je přednáška rozdělena do více částí. [12] 4.3.2 Kvíz Kvízový modul umožňuje učiteli navrhovat a vytvářet kvízy skládající se z variací otázkových typů, včetně výběru z více možností, pravda-lež a krátká odpověď. Tyto otázky zůstávají v bance otázek a mohou být znovu použity v dalších kvízech. [12] 4.3.3 Slovník Slovník umožňuje účastníkům kurzu vytvářet a průběžně spravovat seznam definic. Pojmů může být použito mnoha způsoby. Položky lze vyhledávat nebo procházet v různých formátech. Slovník může být spravován na základě spolupráce, nebo může být omezen pouze na zápisy učitelem. Záznamy mohou být kategorizovány a funkce automatické spojení bude zvýrazňovat každé slovo, které bude nalezeno ve slovníku. [12] 4.3.4 Cvičení / Úkol Úkolový modul umožňuje učitelům shromažďovat práce studentů, které po odevzdání mohou zrevidovat a poskytnout studentům zpětnou vazbu včetně známek. Studenti mohou připojovat ke svým úkolům soubory různých typů, například: textový dokument, tabulkový dokument, obrázek, zvukový soubor a video klip. 19

Úkol nemusí být nutně podložen digitálními soubory, učitel může požadovat od studentů, aby psali přímo do Moodle. K dispozici je také offline úkol, který může být použit jako upomínka pro studenty, že mají úkol dokončit, aby za něj mohli dostat známku. Tento typ úkolu nemá online komponentu v Moodle a je odevzdáván mimo Moodle, například na cvičení. [12] 4.4 Zdroje 4.4.1 Knihy Modul knihy jednoduše vytváří vícestránkové zdroje s knižním formátem. Mohou být vytištěny na obrazovce celé nebo po kapitolách, případně další podkapitoly. Dílčí podkapitoly již nemohou mít své vlastní podkapitoly, protože modul má představovat jednoduchý zdroj pro studenty a učitele. Tento modul není nijak interaktivní na rozdíl od činností, to znamená, že pro studenty může sloužit jen jako literatura bez jakýchkoliv úkolů. [16] [17] 4.4.2 Stránka Stránka je typ modulu zdroj. Při vytváření stránky se zobrazí v kurzu a nevyžaduje stažení stránky. Stránku může vytvářet pouze učitel a studentovi se výsledný materiál zobrazí jako HTML stránka. Při vytváření stránku využívá Moodle vestavěný WYSIWYG (co vidíte, je to, co dostanete) editor, který vám pomůže vytvořit stránku. Ta může využívat různé fonty a formátování, jako vkládání fotografií, videí a hypertextové odkazy. Stránky se zobrazí jako odkaz ve struktuře téma Moodle. [12] 20

5 Modul Tato část je věnována praktické části, kde popíšu vývoj modulu. Ze začátku vývoj vypadal velmi složitě, než jsem pochopil základní struktury a funkčnosti modulu. Velké díky patří komunitě, kde jsem našel mnoho odpovědí na své otázky a rozvoji tohoto systému. Také mnoho informací jsem našel na dokumentaci pro vývojáře, a tak nebylo těžké začít s vývojem tohoto modulu. 5.1 Šablona nového modulu Pro vývoj nového modulu je vhodné vycházet ze šablony, která udává strukturu modulu. V zásadě máme dvě možnosti, jak šablonu získat. Stažení šablony Moodle poskytuje ke stažení šablonu pro tvorbu nového modulu. Ovšem, jak stránky dokumentace uvádějí, tento balíček je poskytován pro verzi Moodle 1.9 většina postupů by měla být aplikovatelná i na verzi 2.x (v době psaní této práce, je aktuální verze 2.6) Pokud se rozhodneme pro možnost stáhnout si šablonu, měli bychom přece jen využít novější balíček, který je určen pro verzi 2.x a je ke stažení na adrese https://github.com/moodlehq/moodle-mod_newmodule Zkopírování existujícího modulu druhou možností je, že si v adresářové struktuře systému Moodle vyhledáme nejdříve typ modulu, který chceme realizovat a následně si zvolíme konkrétního zástupce daného modulu. Jeho složku si nakopírujeme a přejmenujeme tak, aby odpovídala názvu našeho modulu. Tím opět získáme šablonu modulu ve smyslu struktury adresáře a souborů. Je pouze na našem rozhodnutí, kterou z výše uvedených variant si zvolíme. Stažená šablona může obsahovat soubory, které nevyužijeme. Oproti tomu nevhodně zkopírovaný modul nemusí obsahovat všechny soubory, které potřebujeme pro svůj modul využít. [18] 21

5.2 Základní struktura modulu Než se pustíme do programování vlastního modulu, je dobré znát strukturu některého z již existujících modulů a význam jeho souborů. Vycházíme ze šablony modulu pro Moodle verze 2.x. Nezapomínejme také na fakt, že soubory jsou již naplněny vzorovým zdrojovým kódem s komentáři to nám ulehčí práci s nimi a umožní lépe se orientovat v použitých funkcích. Obrázek níže nám udává hierarchii souborů a složek obecného modulu. Obrázek 3 Struktura šablony modulu Popíšeme si tedy význam a funkce souborů umístěných ve složce našeho budoucího modulu a také jaký pro nás mají význam. [18] 22

db/ jak název napovídá, jedná se o adresář obsahující skripty, které manipulují s daty při inicializaci či aktualizaci modulu. access.php jedná se o soubor, který nám nastavuje oprávnění pro uživatele a řídí přístupy k jednotlivým funkcím. Tedy říká našemu modulu, která skupina uživatelů má přístup k daným funkcím a která nikoliv. Toto nastavení lze libovolně upravovat později v administraci našeho modulu a přiřazovat nebo odebírat další uživatelské role. install.php tento soubor je spuštěn při každé instalaci našeho modulu po vytvoření souboru install.xml a je dostupný od verze Moodle 2.x. install.xml jedná se o XML soubor, který definuje strukturu databáze pro daný modul. Definuje název tabulky, datový typ a název pro buňky. uninstall.php opět z názvu je již celkem jasné, že se jedná o odinstalační skript dostupný od verze Moodle 2.0 a vyšší. Jeho spuštění se provádí při odinstalaci. Předtím, než je tento soubor spuštěn, jsou z databáze vymazány naše tabulky. upgrade.php jedná se o aktualizační skript, který je volán v případě potřeby aktualizace na novější verzi. K aktualizaci slouží definovaná funkce xmldb_newmodule_upgrade(), kde newmodule je název modulu. lang/ je adresář, který obsahuje složky s lokalizačními balíky. Například pro angličtinu to je adresář en, pro češtinu cs atd. Pozor! Při každé úpravě jazykového balíku je nutné aktualizovat soubor version.php a navýšit tak jeho verzi o jedničku, aby se mohla provést aktualizace našich lokalizačních balíčků. en/ jde právě o již výše zmíněný podadresář s anglickým lokalizačním balíčkem. Pro další jazyky musíme vytvořit další adresáře. Tento adresář má právě dva znaky podle mezinárodního standardizovaného kódu názvu jazyka dle normy ISO 639-1. newmodule.php tento soubor je vnořen do podadresáře s lokalizačním balíčkem a jmenuje se vždy podle názvu našeho modulu. Obsahuje přeložené lokalizované řetězce v proměnné $string[]. 23

Pro vypsání proměnné z řetězce použijeme metodu get_string() a ta nám na základě zvoleného jazyka vypíše přeložený string. /* volání řetězce nazevmodulu v modulu newmodule vypíše Nový modul */ get_string (" nazevmodulu ", " newmodule "); // řetězec v lokalizačním souboru $string ["nazevmodulu"] = "Nový modul"; Příklad 1: Lokalizace řetězce pomocí metody get_string() pix/ v tomto adresáři nalezneme ikonu, která reprezentuje náš modul. icon.gif je zmíněná ikona našeho modulu a standardně má rozměry 16 x 16 pixelů. README.txt jedná se o jakýsi informační soubor, který si uživatel může přečíst, aby se dozvěděl, co náš modul dělá a k čemu slouží. Dále můžeme uvést potřebné instrukce pro provedení instalace a jeho správné používání. index.php tento soubor obsahuje seznam instancí aktivit v našem kurzu. lib.php obykle se jedná o knihovnu, která by měla obsahovat základní funkce v našem modulu, které budeme chtít využívat. Zpravidla všechny tyto funkce začínají názvem našeho modulu, tedy v tomto případě newmodule. locallib.php oproti výše zmíněné knihovně lib.php se jedná o lokální knihovnu, jak je z názvu zřejmé. Lib.php obsahuje základní funkce, naopak tato knihovna je jakýmsi doplňkem a jen ji rozšiřuje. Šetříme tak systém na využité zdroje. Mají-li být propojeny, připojujeme do locallib.php pomocí funkce require_once lib.php. Pokud tedy není nutné načítat doplňkové funkce, načítáme jen základní funkce a šetříme tak systém na paměť. mod_form.php tento soubor definuje, jak má vypadat formulář, který potřebujeme vytvořit. Formulář se vytváří pomocí třídy moodleform, případně moodleform_mod. Tyto třídy využívají knihovnu formslib.php a díky ní můžeme jednoduše přidávat HTML elementy do formuláře a nastavovat jejich typy a různé chování. Třída umožňuje také do formuláře přidávat vstupy pro nastavení formuláře. Bližší informace jak pracovat s formuláři můžeme najít na stránkách Moodle Form API http://docs.moodle.org/dev/form_api 24

version.php tento soubor má v sobě uloženou verzi našeho modulu. Je velice důležitý, definuje minimální verzi Moodle, na kterou může být nainstalován. Závisí na něm mnoho dalších funkcí, zejména při instalaci a aktualizaci. Při každém zvýšení jeho verze je vyvolána aktualizace. Po potvrzení administrátorem je modul aktualizován a všechny provedené změny se aktualizují. view.php jedná se o skript, který je při inicializaci modulu vykonán jako první. Zajišťuje zobrazení aktivit modulu a jejich rozhraní. [18] 5.3 Vývoj Mým cílem bylo, aby případné úpravy byly pokud možno na jednom místě a daly se co nejvíce upravovat dle vlastních potřeb. Proto jsem zvolil vytvoření vlastní třídy, která obsluhuje získávání dat z databáze a následnou konverzi do formátu PDF. 5.3.1 Vlastní Třída Mnou navrhnutá třída zprostředkovává právě získávání dat a následné generování do požadovaného formátu. Abych ale mohl vygenerovat samotný PDF soubor, potřeboval jsem již některou z dávno navržených PHP knihoven, jako je TCPDF a jí podobným. Nejprve jsem zkoušel již zavedenou v systému s názvem PDF, která je pouhým rozšířením knihovny TCPDF. Zprvu se zdála být dobrá, ale později se objevily problémy s diakritikou, a tak jsem ji zavrhl a hledal mezi jinými. Jako další jsem vyzkoušel mpdf, která mě vcelku potěšila svými funkcemi a zejména kompatibilitou se znakovou sadou UTF-8 a dobrou podporou diakritiky. Po konečném výběru knihovny nastala část implementace do mé třídy, která byla až příliš jednoduchá. Stačilo jen vytvořit instanci třídy mpdf. Předaná data ve formátu HTML si třída sama zpracovala, vykonala proces generování, jehož výstupem bylo samotné PDF 25

$this->pdf = new PDF( '', // mode - default '' 'A4', // format - A4, for example, default '' 0, // font size - default 0 '', // default font family '15', // 15 margin_left '15', // 15 margin right 25, // 16 margin top 55, // margin bottom '9', // 9 margin header '9', // 9 margin footer 'L'); // L - landscape, P portrait 5.3.2 Vytváření uživatelského formuláře Jak již jsem zmiňoval v základní struktuře tohoto modulu, díky mod_form.php jsem vytvořil formulář, který umožňuje učitelům a administrátorům nastavit, které části materiálů mohou být exportovány. //Vytvoříme si textbox do kterého budeme psát název našeho modulu jak se zobrazí v kurzu $mform- >addelement('text', 'name', get_string('modulename', 'exporter'), array( size' => '64' )); ' //Vytvoříme Checkbox pro generování požadovaného materiálu $mform->addelement('advcheckbox', 'lesson', get_string('lesson', 'exporter'), null, array('group' => 1)); Pomocí tohoto zápisu vytvoříme HTML prvek typ textbox, do kterého zapíšeme název našeho modulu, který je povinný a stejně tak se bude zobrazovat v kurzu. Poté vytvoříme checkboxy tak, jak je zmíněno výše pro přednášky a stejným způsobem i pro ostatní materiály. 26

Obrázek 4 Nastavení instance modulu Tím získáme uvedený formulář, ve kterém můžeme nastavovat požadovaný výstup 5.3.3 Získávání dat Tato část byla pro mne nejsložitější. Nejprve jsem se pokoušel vytvořit složité SQL dotazy, které mi vyberou požadovaná data. Tahle volba měla své pro i proti. Používání dotazů by bylo asi rychlejší, než získávání pomocí funkcí, ale mohl bych tím ohrozit bezpečnost systému získávat data, která by neměla být mimo systém nikde zobrazena. Další možností je použít funkce systému Moodle, které při správném použití poskytují požadovaná data, navíc nejsme závislí na konkrétním druhu databáze. 5.3.3.1 Zajímavé části kódu Jako nejvíce zajímavou část kódu jsem vybral získávání dat z databáze. Vezměme tedy konkrétní případ, kdy potřebujeme získat všechny přednášky. Všechny funkce volané na této stránce jsou veřejné metody objektu $DB, takže je nutné nejprve naimportovat tento objekt pomocí jednoduché definice. Globální objekt $DB je instancí třídy moodle_database_class, která je definována v moodle_database.php. 27

Chceme-li tento objekt používat, musíme jej nejprve inicializovat pomocí následujícího kódu. global $DB; Nyní již lze použít zmiňované metody pro získání záznamů z přednášek pro daný kurz. Pravidlem pro psaní dotazů je, že parametr $table (v našem případě lesson), kterou chceme získat, je stejný jako v databázi, ale bez prefixu. Druhý parametr nám omezuje výběr na ty přednášky, které jsou umístěny v kurzu, jehož id je obsaženo v objektu $course. $lessons = $DB->get_records('lesson', array( 'course' => $course->id )); //Get all lessons 5.3.4 Průběh generování Díky výstupu profileru xhproof, který je obsažen v Moodle v administračním rozhraní v sekci Developer - Profiling, můžeme tak získat graf, který znázorňuje, jak jsou následující metody volány a kolikrát během generování. 28

Obrázek 5 Průběh generování 29

Také díky profilování můžeme odhalit slabá místa našeho programu a zjistit tak, která metoda nám zabírá nejvíce prostředků, v našem případě tedy hlavně čas. Ve výše uvedeném grafu můžeme pozorovat celkový průběh volání našich funkcí, které vytváří jakýsi strom. Z důvodu velkého místa jsou uvedeny pouze ty metody, které jsou pro nás zásadní. První metoda Export::Output, která je volána z našeho view.php a stará se vlastně o celé generování, logicky trvala téměř nejdéle. Tato metoda na základě našeho vstupu rozhodne, které materiály jsme požadovaly a zavolá si příslušné další metody, které vrací požadovaný typ obsahu a zapisuje postupně do PDF. Z grafu je také vidět, že nejdražší na čas je v naší třídě metoda Quiz. Při hlubší analýze bychom zjistili, že je poměrně náročná na databázi a provádí mnoho parsování 1. Jelikož tato část generování není hlavním předmětem této práce, nezaměřil jsem se na její optimalizaci. Celkový čas generování je navýšen o zhruba 20 %, které zabralo profilování samotné, proto když se podíváme na výsledek z profilování, vidíme, že od zavolání našeho požadavku až po předání vygenerovaného PDF klientovi trvalo asi pět vteřin. Za povšimnutí stojí také počet volání funkcí zejména WriteHTML a AddPage. Jsou volány mnohokrát, což má také za následek zvýšení času generování, ale bylo to nutné kvůli estetické stránce. Přišlo mi vhodné mít každou část materiálů oddělenou na další stránce, než mít vše pohromadě, ale rychleji. Necelými dvěma vteřinami se podílela na generování i třída mpdf. Z mého pohledu jej považuji za dobrý výsledek. Nemohli bychom ho nijak snížit, protože se nejedná o naši knihovnu. Je vidět, že všechny uvedené metody volají metodu WriteHTML, která spadá pod třídu mpdf. Třída mpdf nám právě zprostředkovává samotné generování. Z grafu je vidět, že metoda WriteHTML a byla zavolána 30 krát. 1 parsovat provádění syntaktické analýzy a rozdělování kódu na malé bloky podle syntaxe jazyka. 30

5.3.5 Jazykové mutace Protože komunita Moodle je velmi rozsáhlá a komunikace mezi komunitou probíhá v angličtině, rozhodl jsem se i já psát celý modul v angličtině, aby se dal použít globálně. Z angličtiny už většina vývojářů dokáže přeložit do své řeči. Ale protože bylo potřeba nasadit tento modul i do školního systému, rozhodl jsem se ho přeložit i do češtiny. 5.4 Stažení a Instalace Moodle Instalace samotného softwaru není příliš složitá a zvládne ji každý alespoň trochu zběhlý v oboru. Začneme tedy od začátku, a to stažením LMS Moodle, který najdeme na stránkách http://download.moodle.org/ a vybereme verzi, ke které splňujeme požadavky pro instalaci. V mém případě to je Moodle 2.6.1+ a je na vás, zda ji stáhnete linuxovým příkazem wget <url balíčku> nebo jiným způsobem. Po úspěšném stažení balíčku je potřeba jej rozbalit příkazem tar xvf <název balíčku> a umístit rozbalenou složku do dokumentového adresáře, kde máme nastaven DocumentRoot Apache nebo DocumentRoot pro Virtual Host. Ve webovém prohlížeči otevřeme adresu s názvem našeho serveru např. http://mujserver/moodle/ a objeví se nám následující stránka s výběrem jazyka, ve kterém budeme chtít instalovat. 31

Obrázek 6 Instalace výběr jazyka Po zvolení vybraného jazyka budeme pokračovat na následující stránce a zkontrolujeme cesty, zda jsou správně vyplněny. Obrázek 7 Nastavení instalačních cest Položka Web address zobrazuje url adresy, odkud bude náš systém přístupný z webového prohlížeče. Moodle directory zobrazuje absolutní cestu na serveru, kde bude program umístěn a Data directory určuje umístění, kam budou ukládány soubory potřebné pro kurzy cache atp. Všimněte si rozdíl cesty Moodle direktory a Data Directory, kde Data Directory není v adresáři DocumentRoot, ale o úroveň výš. Je to z toho důvodu, aby 32

případný útočník nemohl přistoupit k určitým souborům, ani kdyby znal přesnou adresu umístění a název souboru. Obrázek 8 Výběr typu databáze Dále máme před sebou výběr databázového ovladače, který bude použit pro přidávání a získávání dat z databáze. V našem případě to bude ovladač MySQLi Obrázek 9 Rozšíření nutná pro instalaci 33

Důležité je mít nainstalované všechny požadované PHP rozšíření, pokud některé z nich nebude nainstalované, může se stát, že aplikace sice poběží, ale bude zpomalená nebo nepojede vůbec. 5.5 Používání modulu Pro nainstalování nového zásuvného modulu stačí nakopírovat přiložené zdrojové soubory do složky mod v kořenovém adresáři Moodle. Po kopírování a přihlášení se jako administrátor Moodle sám zjistí, že byl přidán nový modul a je potřeba jej nainstalovat. Obrázek 10 Inicializace instalace modulu Jak je již patrné z obrázku, systém zkontroluje zásuvný modul a vypíše shrnutí, zda je možné modul nainstalovat. Po stisknutí tlačítka na nainstalování systém potvrdí jeho úspěšnou instalaci a modul je připraven pro přidávání do kurzu. Teď již stačí být přihlášen jako uživatel s oprávněním pro přidávání a úpravy kurzu a přidat zmíněný modul do kurzu. 34

Obrázek 11 Přidávání modulu do kurzu Aby byl kurz viditelný pro účastníky kurzu, musíme nejprve vytvořit jeho instanci a nastavit jeho vlastnosti. Vyplníme tedy název modulu, který se bude zobrazovat v kurzu, a zaškrtneme políčka studijních materiálů, které mohou být exportovány. 35

Obrázek 12 Nastavení instance modulu Student pak při exportování uvidí pouze ty materiály, které byly nastaveny jako exportovatelné. S výjimkou kvízu, který je nastaven tak, že jej mohou exportovat pouze učitelé a administrátoři. Po stisknutí generování již bude zobrazen samotný výsledek ve formátu PDF, viz obrázek níže. Obrázek 13 Uživatelské nastavení před generováním 36

5.6 Pohled uživatele Při testování z pohledu uživatele jsem se snažil nasimulovat co nejvíce scénářů, které by mohly odhalit případné chyby. Hlavním scénářem bylo, že uživatel bude požadovat všechny materiály naráz, a pak už bude vyhledávat lokálně v souboru. Další podobné scénáře mi už nepřišly tolik zajímavé. Jiným zajímavým scénářem by bylo, kdyby uživatel požadoval třeba jen úryvek z nějakého textu. Například na přednášce uslyší něco, co ho zaujme, ale nebude si pamatovat celý kontext. Pro tento případ jsem přidal další funkci, která umožní exportovat obsah i do formátu HTML. Tento formát je implicitně povolen pouze pro role učitele a administrátora, nikoliv pro studenty. Tuto funkci lze však povolit i pro studenty v administraci našeho modulu přidáním role student v sekci oprávnění nebo do proměnné $capabilities v poli mod/exporter:changeexporttype kterou najdeme ve zmíněném souboru access.php. 6 Testování Při testování jsem zjistil dva zásadní problémy. Asi největší problém, který se mi podařilo pouze minimalizovat, nikoliv odstranit, bylo udělat tento modul co nejvíce uživatelsky přívětivý, to znamená poskytnout uživatelům co nejvíce různých nastavení, které by mohli vyžadovat. Zároveň ale vím, jak je obtěžující stále dokola vyplňovat formuláře, než se dostanete k požadovanému obsahu, a proto jsem dospěl k názoru, že bude nejlepší nastavit defaultní hodnoty, které budou požadované alespoň pro drtivou většinu příchozích uživatelů. Další věcí byl čas strávený generováním. Jako internetový uživatel vím, jak frustrující je čekat dlouhou dobu, než se vám načte požadovaný obsah. Když příchozí uživatel bude čekat příliš dlouho na načtení obsahu, často opustí stránku dřív, než se mu obsah načte a bude hledat informace jinde. Při prvním testování, kde modul nebyl příliš optimalizovaný, trvalo generování až desítky vteřin. Tuto hodnotu se mi podařilo postupně minimalizovat, částečně přenastavováním hodnot na webovém serveru a částečně optimalizací kódu. S každou 37

novou verzí Moodle přichází zrychlení výkonů, ale než se dočkáme takových hodnot, které bychom požadovali, musíme tento nedostatek nahrazovat hardwarovým výkonem. 6.1 Omezení a Nedostatky Při testování jsem se setkal bohužel i s určitými nedostatky, které se sice vyskytly jen ojediněle, ale v reálném provozu by mohly vzniknout mnohem častěji. 1. Prvním poměrně závažným problém je, pokud bude server více vytížen, než obvykle může dojít k situaci, že skript dosáhne hodnoty max_execution_time a tím pádem se ukončí a PDF se tak nevygeneruje. Tento případ však nastal na ne příliš výkonném serveru, a tak předpokládám, že v praxi servery vygenerují obsah mnohem rychleji. Tento problém by bylo možné řešit následujícími způsoby a) Jako první řešení a zároveň i nejjednodušším řešením je, vzít nejhorší případ, kdy generování bude trvat nejdelší dobu. To se dá navodit tak, že vezmeme nereálnou velikost textu, který v praxi nenastane, nebo alespoň nepředpokládáme, že by mohl nastat a podívat se tak na nejvyšší hodnotu času generování. Musíme však dát pozor na to, že doba generování textu není stejná jako čas provádění skriptu a ten nás zajímá. Tato varianta se mi nejvíce zamlouvala a byla poměrně časově nenáročná a spolehlivá. Z praxe vím, že je jednodušší a levnější koupit silnější hardware, než platit čas programátora, aby našel řešení pro takovýto problém. b) Další možností je generovat soubor jednou za čas a ušetřit tak výkon a odkazovat uživatele na již vytvořený soubor. Tohle řešení se mi zdálo jako neefektivní a museli bychom generovat všechny možné volby, které uživatel zvolí. Zároveň by tento modul ztrácel svůj smysl. 38

7 Závěr 7.1 Hlavní cíle Hlavním cílem této práce bylo vytvořit modulový balíček, který následně po instalaci a nakonfigurování do systému umožní vygenerování obsahu kurzu do formátu PDF, což bylo splněno a modulový balíček byl dle zadání vytvořen. Navíc bylo vytvořeno uživatelské rozhraní, které dovoluje uživatelům zvolit, jakou kategorii obsahu vlastně chtějí vygenerovat. Jedinou speciální kategorii tvoří kvíz, který je dostupný jen pro učitele a administrátory, protože je pro studenty nežádoucí, aby viděli testy se správnými odpověďmi. Dále byla rozšířena funkcionalita o získání obsahu z dalších modulových činností, které nebyly v zadání specifikovány. Modul je založen na existujícím datovém modelu a nevytváří žádné další databázové tabulky, kromě těch, které potřebuje pro svoji konfiguraci a nastavení. Byla provedena datová analýza a popsány všechny potřebné kroky v případě rozšíření někým dalším. V datové analýze byl uveden ER diagram, který graficky přibližuje datovou strukturu využitých částí tohoto systému. Díky provedené datové analýze je možné na ní stavět další rozšíření tohoto modulu a provádět případné úpravy. Popsána je adresářová struktura, aplikační logika včetně použitých a také užitečných funkcí. Je zmíněna i instalace a manipulace s modulem a jeho případná migrace na jiný systém. Proběhlo i testování, které mělo za cíl odhalit všechny možné nedostatky a chyby, vzniklé při programování. Dále jsem se zaměřil na testování z pohledu uživatele a snažil se tak najít chyby, které by běžnému uživateli mohly vadit, nebo se alespoň snažit vylepšit užitečnými funkcemi, které by mohly celý modul nějak vylepšit. Postup vývoje modulu byl zdokumentován a popsán tak, aby případný další vývojář měl všechny potřebné informace pro případné rozšíření funkcionality nebo zlepšení. 39

Seznam citací 1. Standardy a metodika vzdělávání pracovníků územní veřejné správy v oblasti cestovního ruchu. In: Standardy a metodika vzdělávání pracovníků územní veřejné správy v oblasti cestovního ruchu [online]. 2010 [cit. 2014-05-15]. Dostupné z: http://www.mmr.cz/getmedia/48a3c5cb-7d83-4be4-8b29- d70769dcafcf/getfile2_1.pdf 2. Installing Moodle. Installing Moodle [online]. 2013, 27.6.2013 [cit. 2014-05- 15]. Dostupné z: http://docs.moodle.org/24/en/installing_moodle 3. CentOS - Linux E X P R E S S. CentOS - Linux E X P R E S S [online]. 2013, č. 1 [cit. 2014-04-21]. Dostupné z: http://www.linuxexpres.cz/distribuce/centos 4. Apache HTTP Server. In: Apache HTTP Server [online]. San Francisco (CA): Wikimedia Foundation, 2001- [cit. 2014-05-15]. Dostupné z: http://cs.wikipedia.org/wiki/apache_http_server 5. Apache Server. ŠTRÁFELDA, Jan. Apache Server [online]. Vyd. 1. - [cit. 2014-05-15]. Dostupné z: http://www.adaptic.cz/znalosti/slovnicek/apache-server/ 6. ROHLÍK, David. Informační systém pro evidenci majetku městského úřadu [online]. Brno, 2006 [cit. 2014-05-15]. 28 s. Dostupné z: http://is.muni.cz/th/49979/fi_b/bc.pdf?lang=en. Bakalářská práce. Masarykova univerzita. 7. Which PHP mode? Apache vs CGI vs FastCGI. Which PHP mode? Apache vs CGI vs FastCGI [online]. 2012 [cit. 2014-05-15]. Dostupné z: http://blog.layershift.com/which-php-mode-apache-vs-cgi-vs-fastcgi/ 8. Mod_php vs. FastCGI vs. PHP-FPM for Web Server Scripting. Mod_php vs. FastCGI vs. PHP-FPM for Web Server Scripting [online]. 2012 [cit. 2014-05- 15]. Dostupné z: http://www.openlogic.com/wazi/bid/209956/mod_php-vs- FastCGI-vs-PHP-FPM-for-Web-Server-Scripting 9. What is MySQL?. What is MySQL? [online]. 2010 [cit. 2014-05-15]. Dostupné z: http://dev.mysql.com/doc/refman/4.1/en/what-is-mysql.html 40

10. Database schema introduction. Database schema introduction [online]. 2013 [cit. 2014-05-15]. Dostupné z: http://docs.moodle.org/dev/database_schema_introduction 11. Course Activities Moodle. Course Activities Moodle [online]. 2013 [cit. 2014-05-15]. Dostupné z: http://moodle.wisc.edu/activities/ 12. MoodleDocs [online]. 2005 [cit. 2014-05-15]. Dostupné z: http://docs.moodle.org/ 13. Activity modules for Moodle [online]. 2007 [cit. 2014-05-15]. Dostupné z: http://www.phd-act.info/file.php/1/pdf/bi_handbook- Activity_modules_for_Moodle.pdf 14. DRLÍK, Martin. Vývoj nových modulů pro LMS Moodle [online]. České Budějovice, 2013 [cit. 2014-05-15]. Dostupné z: http://theses.cz/id/43uoja/drlik_diplomova-prace.pdf. Diplomová práce. Jihoceská univerzita v Českých Budějovicích. 41

Seznam obrázků Obrázek 1 Logo Moodle... 9 Obrázek 2 Zjednodušený datový model LMS Moodle... 17 Obrázek 3 Struktura šablony modulu... 22 Obrázek 4 Nastavení instance modulu... 27 Obrázek 5 Průběh generování... 29 Obrázek 6 Instalace výběr jazyka... 32 Obrázek 7 Nastavení instalačních cest... 32 Obrázek 8 Výběr typu databáze... 33 Obrázek 9 Rozšíření nutná pro instalaci... 33 Obrázek 10 Inicializace instalace modulu... 34 Obrázek 11 Přidávání modulu do kurzu... 35 Obrázek 12 Nastavení instance modulu... 36 Obrázek 13 Uživatelské nastavení před generováním... 36 42

Seznam použitých zkratek PDF Portable Document Format mpdf - mpdf je PHP knihovna, které generuje PDF soubory s podporou kódováním UTF-8 ve formátu HTML Centos - Community Enterprise Operating Systém Linux OS ER Entity relation vztahy mezi entitamy v modelovém diagramu E learning - Označení pro vzdělávací proces, ve kterém používáme multimediální technologie, Internet a další elektronická média pro zlepšení kvality vzdělávání HTML - Hypertext Markup Language značkový hypertextový jazyk programovací jazyk zejména pro Internetové aplikace. TCPDF opensource PHP knihovna určená pro generování PDF souborů PHP - Hypertext Preprocessor, PHP: Hypertextový preprocesor LMS - Learning Management System systém pro řízení výuky. Software, který umožňuje automatizovanou administraci výukových případů. Nenahrazuje organizaci studia. Jeho součástí mohou být podprogramy na: vkládání obsahu kurzů, řízení virtuálních tříd, nástroje na měření změny znalostí, dovedností a kompetencí, nástroje na řízení vzdělávacích potřeb, ověřování znalostí a certifikaci, přizpůsobení obsahu uživatelům, pomoc studentů se studiem prostřednictvím E tutorů (instruktor), chat, diskusní fóra apod. XML - (Extensible Markup Language) programovací značkový jazyk formálně podobný HTML ale orientovaný na obsah aplikace. Universální formát pro ukládání dat a pro jejich zpracování libovolnou aplikací, která tento formát podporuje 43

Přílohy 1 Obsah přiloženého CD Na přiloženém CD se v kořenovém adresáři nachází tato bakalářská práce ve formátu bakalarska_prace.pdf s výstupním souborem zabaleném v zipu exporter.zip 44