České vysoké učení technické v Praze Fakulta elektrotechnická
Bakalářská práce
Aplikace pro psaní testů BOZP Martin Hájek
Vedoucí práce: Ing. Jan Kubr
Studijní program: Elektrotechnika a informatika, strukturovaný, bakalářský Obor: Výpočetní technika Červen 2007
ii
Poděkování Chtěl bych poděkovat Ing. Janu Kubrovi, vedoucímu bakalářské práce, za jeho čas, ochotu a věcné připomínky a dále své rodině za podporu a vytvoření podmínek ke studiu.
iii
iv
Prohlášení Prohlašuji, že jsem svou bakalářskou práci vypracoval samostatně a použil jsem pouze podklady uvedené v přiloženém seznamu. Nemám závažný důvod proti užití tohoto školního díla ve smyslu §60 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ů (autorský zákon).
V Praze dne 10.6.2007
……………………………………………………
v
vi
Abstract This work is focused on design and implemenation of program for writing test BOZP (safety and protection employees in work) over internet. Emphasis is on easy and transparent management with big amount of students writing this test. Main parts of program are: import and export of students, management, giving tests and archivation. Program uses formats of dates used in information system of CTU.
Abstrakt Tato práce se zabývá návrhem a implementací programu pro psaní testů BOZP po internetu. Důraz je kladen na snadnou a přehlednou práci s velkým počtem studentů, kteří daný test mají plnit. Hlavní části programu jsou: import a export studentů, správa, zadávání testů a archivace. Program využívá formáty dat, které používá informační systém ČVUT.
vii
viii
Obsah 1. 2. 3. 4.
5.
6.
7.
8.
9.
Abstrakt - česky a anglicky Úvod charakterizující kontext zadání ......................................................................1 Popis řešeného problému, cíle BP a požadavky na systém .....................................1 Analýza a návrh implementace .................................................................................3 4.1 Volba programovacího jazyka..........................................................................3 4.2 Volba databáze .................................................................................................3 Rešeršní zpracování existujících implementací .......................................................4 5.1 Existující programy na plnění BOZP ...............................................................4 5.2 Nalezené generátory testů.................................................................................4 Implementace ..............................................................................................................9 6. 1 Moodle - původní koncepce ............................................................................9 6. 2 Instalace ...........................................................................................................10 6. 3 "Kurz" a jeho nastavení ...................................................................................11 6. 4 Uživatelské role ...............................................................................................12 Implementace - BOZP testy.......................................................................................13 7. 1 Nastavení testu a základní informace ..............................................................13 7. 2 Výběr mezi testy pro vyučujícího....................................................................15 7. 3 Výběr mezi testy, vstup do testů, prohlížení archivů (pro studenty) ...............15 7. 4 Otázky - správa ...............................................................................................18 7. 5 Povolování psaní testu pro studenty (skupiny)................................................19 7. 6 Zobrazení výsledků testů pro vyučujícího.......................................................21 7. 7 Změny bodování v testech ..............................................................................25 7. 8 Tisk testů..........................................................................................................25 Implementace - správa vyhlášek a studentů ............................................................26 8. 1 Autorizace studentů .........................................................................................26 8. 2 Vyhláška (test BOZP)......................................................................................28 8. 3 Zobrazení studentů, správa ..............................................................................29 8. 4 Import studentů (přidávání povinnosti plnit vyhlášku) ...................................33 8. 5 Export studentů do informačního systému - KOSu a potvrzení exportu.........37 8. 6 Skupiny správa.................................................................................................39 8. 7 Formuláře.........................................................................................................45 8. 8 Import vyučujících do kurzu............................................................................47 Implementace - dokončení .........................................................................................47 9. 1 Databáze ..........................................................................................................47 9. 2 JavaScript.........................................................................................................48 9. 3 Validita HTML ................................................................................................48 9. 4 Paralelní přístupy .............................................................................................48 9. 5 Záloha ..............................................................................................................49 9. 6 Přestup na další verzi Moodle..........................................................................50
ix
10. Testování programu................................................................................................... 51 10.2 Obecná funkčnost............................................................................................. 51 10.3 Zátěžové testy .................................................................................................. 52 11. Srovnání s existujícími řešeními ............................................................................... 53 12. Pokračování práce ..................................................................................................... 55 13. Závěr ........................................................................................................................... 56 14. Seznam použité literatury ......................................................................................... 58 15. Slovníček pojmů ......................................................................................................... 59 16. Přílohy ......................................................................................................................... 61 16.1 Ukázky ze souborů........................................................................................... 61 16.1.1 Import................................................................................................... 61 16.1.2 Export................................................................................................... 61 16.1.3 Formuláře ............................................................................................. 62 16.1.4 Výpis studentů...................................................................................... 64 16.1.5 Vytisknutý test ..................................................................................... 64 16.1.6 Data z KOSu ........................................................................................ 66 16.2 Databáze........................................................................................................... 66 16.3 Soubory změněné (vytvořené) v průběhu práce .............................................. 69 16.4 Postup při testování.......................................................................................... 71 16.5 Výsledky testování reálného množství studentů v systému............................. 79 17. Obrázky....................................................................................................................... 80 17.1 Úvodní stránka programu 17.2 Ikony na úvodní stránce s popisem 17.3 Seznam studentů a jejich vyhlášek 17.4 Osobní profil studenta 17.5 Správa skupin - úvodní stránka 17.6 Import studentů 17.7 Dokončení importu 17.8 Export studentů 17.9 Seznam testů BOZP pro vyučující 17.10 Výsledky testu 17.11 Povolení psaní testu pro… 17.12 Nastavení testu 17.13 Nastavení testu II 17.14 Zobrazení vyhlášek pro studenta 17.15 Ukázka z psaní testu 18. Mapa CD
x
2.
Úvod
2. Úvod Každá osoba, která pracuje s elektrickým zařízením musí získat určitou kvalifikaci podle vyhlášky 50/78 Sb. Platnost této kvalifikace je 2 roky. Po té je nutné si kvalifikaci obnovit. To se provádí u nižší kvalifikace poučením u vyšší kvalifikace psaním testu. Na FEL ČVUT se stanoví několik hromadných termínů, kde studenti test plní. Z důvodu velkého počtu studentů (7000) a poměrně krátké doby platnosti získávané kvalifikace k vyhlášce se tráví zbytečně mnoho času opravou testů a zadáváním výsledků do informačního systému - KOSu. Tento čas by se dal zkrátit psaním testů přes internet se snadnou podporou zápisu výsledků do KOSu. A to je také cílem mé bakalářské práce.
3. Popis řešeného problému, požadavky na implementovaný systém: 3.1
Stručný popis programu + požadavky na nalezený generátor testů
Program si načte do databáze seznam studentů, kteří mají psát BOZP. Načtené studenty rozdělí do skupin podle paralelky, paragrafu a dalších parametrů.
3.2
Požadavky na nalezený generátor testů Program má načtený seznam studentů, nyní je třeba vytvořit test.
3.2.1
Otázky v testu a jeho nastavení
Program musí podporovat tvorbu databáze otázek, ze které se jich několik vybere a vytvoří se z nich vlastní test. Otázky musí být minimálně těchto typů: Multiple-choice zaškrtnutí několika správných odpovědí, Single-choice - zaškrtnutí jediné správné odpovědi, "krátká odpověď" vyplnění správné odpovědi - jednoho určitého slova (fráze). Dobrá je podpora rozdělování otázek do skupin pro větší přehlednost. Vytvoření testu: výběr několika otázek do testu může být buď náhodný, nebo si je vybere přímo zkoušející. Není to podstatné, bude záležet na programu. Ale výhoda náhodných otázek je nesporná. Pro studenty by nebylo tak snadné získat od kolegů "pár otázek a ty se pak naučit". Bylo by zajímavé vytvořit několik kategorií otázek. (např. podle kapitol skript), v každé kategorii mít dostatek otázek a při psaní testu náhodně vybrat z každé kategorie několik otázek. Tím by bylo zajištěno, že test bude komplexně pokrývat celou látku a zároveň bude pokaždé jiný.
3.2.2
Povolování testu pro vybrané studenty
Vzhledem k tomu, že může v jeden čas existovat více testů, je nutné mít možnost jeden určitý test (nebo i více) povolit různým studentům. Více testů zde může být kvůli tomu, že pro každý paragraf budeme chtít jiný typ testu. Minimálně pro první ročník by bylo dobré udělat test trochu složitější, aby se studenti naučili základy bezpečnosti práce.
1
3.
Popis řešeného problému, požadavky na implementovaný systém
Další důvod pro nutnost povolování testů je čas, kdy se bude test psát. Pokud se bude psát o hodinách bylo by dobré povolit psaní jen skupině, která má aktuálně hodinu a tím i zamezit, nebo zkomplikovat případné snahy o podvádění (např. práce na testu z domova, "kolektivně na chodbě"). První ročníky píší BOZP na předmětu "technická dokumentace". Zde se tedy plně využije možnosti povolování testu pro skupiny. Vyšší ročníky píší test hromadně mimo cvičení. Zde záleží na tom, kde jim ho bude dovoleno psát v budoucnu. Zda i z domova (byla by nutná jednoznačná autorizace studenta - prakticky nemožné), nebo se opět zavede psaní testu na některém z cvičení a "speciální případy studentů" (ti kteří například opakují, nebo si dané cvičení nezapsali) se budou řešit individuálně. Při povolení testu skupině by bylo dobré mít možnost povolit test také samostatným studentům, např. těm, kteří píší test s jinou paralelkou.
3.2.3
Skupiny
Vzhledem k tomu, že studentů s kterými budeme pracovat je mnoho, je tedy třeba mít možnost dělení na velké množství skupin (předměty, paralelky) a jejich pohodlnou administraci. Bylo by dobré mít možnost přiřadit jednoho uživatele do více skupin (např. dělení podle třídy, ročníku).
3.2.4
Autorizace
Psaní testu: uživatel musí být identifikován. Nejspíše podle jména a hesla. Možností použití elektronických podpisů se zabývá jiná bakalářská práce. Heslo může být speciální (nebo interní jen pro tuto aplikaci). Další možností může být autorizace pomocí externí databáze (např. školní databáze studentů).
3.2.5
Vyhodnocení testů
Program musí umět vyhodnotit test a zjistit počet dosažených bodů. Bylo by dobré, kdyby existovala možnost ruční korekce ohodnocení testu zkoušejícím. (např. pokud by se v zadání testu objevila chyba). Vzhledem k tomu, že je možné, že někdo test nenapíše. Je nutné mu umožnit opakování testu. Buď aby vyplňoval prázdný test, nebo aby v testu zůstaly jeho původní odpovědi, které by si opravil.
3.2.6
Export testů
Vzhledem k tomu, že nemusí být vždy možné pro určité studenty vyplňovat test přes internet, je nutné mít možnost exportovat připravený test do tisknutelné formy nejlépe PDF, případně dobře zformátovaný html soubor, nebo txt.
3.2.7
Jazyk programu a uživatelská přívětivost Další pozitivní vlastnosti: jazyk programu, popř. možnost překladu do češtiny. Neméně důležitá je uživatelská přívětivost.
3.3
Pokračování mého programu
Jak bylo výše zmíněno, je možné psát test bez počítače. Program proto musí podporovat jednoduché vložení informace do databáze, že student BOZP splnil (Možnost zaškrtnutí studentů, nebo nahrání seznamu uživatelů, kteří mají test splněný). Na konec je třeba exportovat seznam studentů, kteří test právě splnili a bylo možné jim tuto skutečnost zapsat do KOSu.
2
4.
Analýza a návrh implementace
4. Analýza a návrh implementace 4.1
Volba programovacího jazyka Na výběr je několik webových technologií.
4.1.l
PHP a apache
Toto řešení je nezávislé na operačním systému. Stačí nainstalovat nejvíce rozšířený web server apache, nastavit PHP a MySQL(nebo jinou databázi). Pro PHP mluví jeho velká rozšířenost na serverech. Na druhou stranu PHP je spíše jednodušší programovací jazyk, což by při velkých projektech mohlo být na obtíž (např. horší práce s objekty). Vzhledem k tomu, že s PHP jsem již pracoval, tak pro mě bude snazší zdrojové kódy pochopit a upravit. A dále i přes jeho jednoduchost se PHP využívá u velkého množství, hlavně freeware, projektů.
4.1.2
Java
Buď jako samotný program, který ve svém GUI příjemně umožní vytvořit test, který pak exportuje na web server. Nebo jako JSP a servlety na serveru tomcat (funkcí podobné PHP). Výhoda tohoto řešení je opět nezávislost na operačním systému, při použití samotné Java aplikace vyšší uživatelský komfort. V Javě jsem programoval jen v prvním semestru a tak s ní nemám prakticky žádné zkušenosti, proto ji nepoužiji.
4.1.3
ASP.NET a další Opět s nimi nemám zkušenosti a tak je nebudu uvažovat.
4.2
Databáze
Databáze MySQL nebo PostgreSQL. Některé mnou nalezené programy podporují obě databáze, některé jen rozšířenější MySQL. Já jsem se rozhodl pro první jmenovanou. Obě jsou zdarma, ale s PostgreSQL nemám žádné zkušenosti. KONEC_ODDILU
3
5.
Rešeršní zpracování existujících implementací
5. Rešeršní zpracování existujících implementací
5.1
Již existující aplikace na vyplňování testů BOZP
5.1.1
BOZP výrobce Kontis s.r.o.
http://verejnost.itutor.cz/bundle.asp?bid=1004 odkaz [9] Existuje aplikace s podobným zaměřením jako ta moje, ale placená. Na dané stránce se nachází pouze ukázka. Popis ze stránek: Program obsahuje školení BOZP pro vedoucí pracovníky a zaměstnance. Každá lekce je doplněna cvičným testem znalostí, ukončeno závěrečným testem. Obsah dodali pracovníci Institutu bezp. práce, kurz je redigován pracovníky Českého úřadu bezp. práce. Kurz obsahuje 13 lekcí pro vedoucí pracovníky a 3 lekce pro zaměstnance, zkušební a závěrečný test. Neshoduje se s požadavky na program viz. 3.1 a není možné jej dále upravovat nebo rozšiřovat. Program použiji jako referenční na závěr práce.
5.1.2
Vyhl50 win (Vyhl50 dos)
http://dsn.felk.cvut.cz/vyhl50_win/ odkaz [8] Aplikace na zkoušení z vyhlášky 50 §11 pro vyučující. Tato aplikace neumožňuje psaní testu po internetu. Umožňuje tisknout protokol o splnění (nesplnění) vyhlášky (je třeba si vytisknout dva protokoly jeden o splnění testu a druhý pro ústní přezkoušení). Otázky jsou v testu pevně dané a není možné je měnit. Neexistuje možnost jak archivovat výsledky testů jednotlivých uživatelů. Neshoduje se s požadavky na program viz. 3.1 , neumožňuje psaní po internetu. Program použiji jako referenční na závěr práce.
5.1.3
Závěr
Žádný z předchozích programů nebyl vhodný k úpravám. Proto je třeba si vybrat vhodný generátor testů (stávající spolehlivé řešení). Který upravím a po té na něj naváži ve své práci. viz. dále.
5.2
Nalezené generátory testů
Na výběr je několik následujících programů. Nejprve uvádím řešení o kterých má smysl uvažovat. Na závěr jen cituji několik pro mě nevhodných řešení. Zdroj hledání viz. odkaz [7]
4
5.
Rešeršní zpracování existujících implementací
5.2.1
Moodle 1.7.1+ http://www.moodle.cz
odkaz [1]
5.2.1.1 Úvod Moodle je softwarový balík určený pro podporu prezenční i distanční výuky prostřednictvím online kurzů dostupných na WWW. Moodle je vyvíjen jako nástroj umožňující realizovat výukové metody navržené v souladu s principy konstruktivisticky orientované výuky. Moodle umožňuje či podporuje snadnou publikaci studijních materiálů, zakládání diskusních fór, sběr a hodnocení elektronicky odevzdávaných úkolů, tvorbu online testů a řadu dalších činností sloužících pro podporu výuky. (popis z odkaz [1]). Moodle je sice pro náš případ zbytečně rozsáhlý projekt, ze kterého primárně využijeme pouze malou část (správu online testů). Na druhou stranu, tento program umožňuje mnohem více možností při správě testů než dále zmiňovaná řešení. Dále bude možné použít i dalších součástí Moodlu pro podporu psaní BOZP. Např. zobrazování přednášek, slajdů, vytvořit zde slovníček pojmů apod. Tuto možnost ostatní řešení nenabízejí.
5.2.1.2 Otázky v testu a jeho nastavení Podporované typy otázek: multiple-choice, single-choice, "krátká odpověď" (možnost více různě ohodnocených odpovědí), numerická úloha (s nastavenou přesností a možností různých zadaných hodnot pro počítání), napiš co je pravda/nepravda, přiřazování, co k sobě patří, tvořená odpověď (student napíše text, který zkoušející sám ohodnotí). Otázky je možné řadit do skupin (práce s nimi je pak mnohem přehlednější). Při vytvoření testu se nastavují jeho parametry. Uvedu některé zajímavé možnosti jeho nastavení: datum otevření a uzavření testu, časový limit na napsání, počet pokusů k vyplnění studentem (k tomu patří jaký pokus se primárně zobrazí zkoušejícímu - nejlepší, poslední, zda při novém pokusu student uvidí co vyplnil dříve, minimální časová prodleva mezi novými pokusy), co vše student uvidí po vyplnění testu (svůj ohodnocený test, poznámky učitele k otázkám), dále je zde možnost vybrání náhodných otázek do testu (je zde lepší podpora náhodných otázek, kde si zkoušející vybere určité typy otázek ze kterých si bude program vybírat), změna pořadí odpovědí v otázkách (náhodné a pevně dané otázky je možné zkombinovat v jednom testu. Např. bude zde pár pevně daných otázek a zbytek se doplní náhodně). Velkou výhodou z hlediska bezpečnosti je možnost omezit IP adresy, ze kterých budou studenti test psát (např. jen na IP adresy ve škole, v dané učebně). Dále je zde možnost využít "zabezpečené" okno, které omezuje některé funkce (klávesové zkratky, test je v novém okně přes celou obrazovku) Bohužel toto zabezpečení je provedeno přes JavaScript, který je možný u klienta zakázat. Nejde tedy o úplné zabezpečení, ale o ztížení možnosti opisovat.
5.2.1.3 Povolování testu pro vybrané studenty Každý vygenerovaný test je bohužel viditelný a přístupný všem účastníkům kurzu! Chybí zde možnost povolit test pouze určité skupině studentů. To bude nutné dořešit.
5.2.1.4 Skupiny Je zde podpora rozdělování uživatelů do skupin. Jeden student může být i ve více skupinách.
5.2.1.5 Autorizace Moodle obsahuje velké množství způsobů autorizace.
5
5.
Rešeršní zpracování existujících implementací
5.2.1.6 Vyhodnocení testů Program automaticky vyhodnotí správnost zadaných odpovědí. Dále je zde možnost, aby zkoušející opravil již počítačem ohodnocený test. (přidal, nebo ubral body k vybraným otázkám)
5.2.1.7 Export testů Bohužel zde chybí podpora tisku vygenerovaného testu (je možné dát jeho náhled html stránku a tu vytisknout, ale není to moc příjemné řešení). Bylo by ale možné napsat skript, který by zajistil export otázek z testu např. do textového souboru.
5.2.1.8 Jazyk programu a uživatelská přívětivost Práce s programem je velice příjemná a pohodlná. Program je kompletně v češtině (i s nápovědou).
5.2.1.9 Další informace Program pracuje na technologii PHP a MySQL (nebo PostgreSQL) a JavaScript. Některé stránky vyžadují povolení JavaScriptu! Např. správa skupin a psaní testu. Ostatní stránky JS také potřebují, ale jen k usnadnění práce. Nemožnost psaní testu bez JS je zde proto, že JS se používá jako ochrana okna testu, aby se zamezilo případným snahám o podvod (viz. výše). Moodle je na fakultě již používán serveru ocw.cvut.cz. To může pomoci se zavedením mého programu do praxe. Tato skutečnost by měla snížit obavy, které většinou nové, nevyzkoušené věci přinášejí.
5.2.1.10
Závěr
Je vidět, že Moodle je plně profesionální program, který je navíc zdarma. Je velice dobrý, co se týče schopností i příjemné administrace, je dobře strukturovaný. Je zde dostatek informací o struktuře databáze a celého programu, proto by nemělo být tak složité ho upravit. Z toho důvodu jsem si ho vybral jako vhodné řešení.
5.2.2
TCExam http://www.tecnick.com/
odkaz [10]
5.2.2.1 Úvod Program na vytváření a vyhodnocování online testů.
5.2.2.2 Otázky v testu a jeho nastavení Je zde plná podpora tvorby testu. Při tvorbě otázky (multiple-choice a single-choice) se zadávají správné odpovědi. Druhá možnost položení otázky je napsání vlastní odpovědi. Zde je bohužel nutné použít ruční kontrolu správného vyplnění zkoušejícím. Bylo by možné upravit kód tak, aby se otázky typu "krátká odpověď" vyhodnocovaly samy. Tvorba otázek není moc pohodlná v porovnání s dalšími programy. Chybí zde možnost rozdělovat otázky do skupin. (lze pouze nastavit obtížnost otázky). I přiřazování otázek do testu mi nepřipadá příliš vhodné. Velkou výhodou z hlediska bezpečnosti je možnost omezit IP adresy, ze kterých budou studenti test psát.
5.2.2.3 Povolování testu pro vybrané studenty Při psaní testu je možné test přiřadit k určitým skupinám uživatelů.
5.2.2.4 Skupiny Jeden uživatel může být ve více skupinách.
6
5.
Rešeršní zpracování existujících implementací
5.2.2.6 Vyhodnocení testů Program automaticky vyhodnocuje odpovědi na single-choice a multiple-choice. U otázek typu "vlastní krátká odpověď" je nutná manuální korekce. Chybí zde možnost jakkoliv z pozice učitele upravovat odevzdaný test.
5.2.2.7 Export testů Test je možné exportovat do PDF a po té vytisknout (vygenerované PDF je přehledné), pokud by bylo třeba test zadat někomu, kdo nemůže pracovat u PC. Export do PDF je podporovaný u všech tabulek.
5.2.2.8 Jazyk programu a uživatelská přívětivost Program je k dispozici v několika jazycích, do češtiny by byl nutný překlad. Při práci je "neohrabaný" nepracuje se s ním moc dobře.
5.2.2.9 Další informace Program pracuje na technologii PHP, MySQL a JavaScript.
5.2.2.10
Závěr
TCExam poskytuje pouze základní práci pro tvorbu testů. Proto není vhodný jako hledané řešení.
5.2.3
OpenSurvey pilot http://www.opensurveypilot.org/
odkaz [10]
5.2.3.1 Úvod Program na vytváření a online testů. Není zde přímo podpora použití pro testy. Při tvorbě otázek není možné zadat jaká odpověď je správná (bylo by to nutné dodělat - přidání sloupce do databáze a úprava zdrojového kódu).
5.2.3.2 Otázky v testu a jeho nastavení Pozitivní je více možností jak odpovídat na otázku (multiple-choice, single-choice, jedna "krátká odpověď" (nebo i více v jedné otázce), velké textové pole, selectbox). Otázky je možné dělit do skupin, což zvyšuje přehlednost.
5.2.3.3 Povolování testu pro vybrané studenty Při psaní testu je možné test přiřadit pouze k určitým skupinám uživatelů.
5.2.3.4 Skupiny Jeden uživatel může být přítomný ve více skupinách.
5.2.3.6 Vyhodnocení testů Chybí zde možnost automatického vyhodnocování testů.
5.2.3.7 Export testů Chybí zde možnost exportu generovaného testu. Opět je zde možnost zobrazení náhledu - html stránky, která by byla možná vytisknout.
5.2.3.8 Jazyk programu a uživatelská přívětivost Program je k dispozici v několika jazycích, do češtiny by byl nutný překlad. V programu je velice příjemná administrace s velkým množstvím nastavení.
5.2.3.9 Další informace OpenSurvey pilot pracuje na technologii PHP, MySQL a JavaScript
7
5.
Rešeršní zpracování existujících implementací
Je možné si prohlédnout jak který uživatel odpovídal, nebo si zobrazit globální přehled odpovědí v grafech.
5.2.3.10
Závěr
Tento program je určen spíše pro vytváření dotazníků pro firmy a teprve po úpravě by se dal použít. Proto jej nepovažuji za vhodný.
5.2.4
Java aplikace
Zmíním tu několik programů pracujících v Javě, jako řešení je nepoužiji. viz. výběr programovacího jazyka (4.1) •
MySurvey server http://sourceforge.net/projects/mysurveyserver/ odkaz [10] (Popis autora programu) Internetový program postavený na J2EE. Umožňující výrobu, zadávání, distribuci dotazníků, z nich sběr odpovědí a jejich měření. Poskytuje robustní škálovatelné prostředí.
•
WebSurvey toolbox http://sourceforge.net/projects/jspsurveylib/ odkaz [10] (Popis autora programu) Internetový nástroj, který umožňuje snadnou a bezpečnou tvorbu dotazníků. Obsahuje software na správu stránek, editor GUI dotazníků, podporuje clustery a umožňuje úpravu JSP kódu.
5.2.5
Další nalezené programy
Zmíním tu několik dalších aplikací, které se zabývají tvorbou testů. Jsou to velice jednoduché programy pouze pro linux, bez podpory online vyplňování a mnoha dalšího. Pro naše požadavky nevyhovující. •
Quizzy http://www.soomka.com/ odkaz [10] (Popis autora programu) Quizzy je program podobný Mircrosoft Windows style quizzer. Pracuje na Linux konzoly nebo přes XTerm.
•
GQuiz http://sourceforge.net/projects/gquiz/ odkaz [10] (Popis autora programu) GQuiz je multiple-choice program založený na gnomepython.
8
5.
Rešeršní zpracování existujících implementací
5.2.6
Placená řešení
Zmíním tu také několik placených produktů na tvorbu a vyhodnocování testů. Nemá smysl se jimi více zajímat, protože hledáme freeware řešení. Bylo by velice obtížné získat zdrojové kódy a provádět s nimi případné úpravy. Z Microsoft Class serveru jsem se inspiroval na "povolení psaní testu pro studenty a skupiny", ale šlo jen o princip. •
Microsoft Class server http://www.microsoft.com/cze/education/ClassServer/ odkaz [10] (Popis autora programu) Program Microsoft Class Server 3.0 představuje výkonnou platformu pro správu vzdělávacího procesu umožňující zpřístupňovat vyučování a hodnocení přes web.
•
TestCreator 3.7 http://www.markosoft.net/testcreator.html odkaz [10] (Popis autora programu) Program na tvorbu testů, podporující mnoho typů otázek. Umožňuje zadávání testů přes internet nebo vytisknout a zadat na papíře.
5.3
Výběr programu - závěr
K tomu, aby se dal program v praxi úspěšně používat je důležité, aby byl co nejvíce flexibilní a uživatelsky přívětivý. Když porovnám nalezené programy, tak žádný z nich není dokonalý, každému něco chybí. Nejlépe z nich ale vychází Moodle. Jemu chybí nejméně a tak by nemělo být tak složité chybějící části doplnit.
6. Implementace Při psaní byly použity materiály: odkaz [4]
6.1
Moodle původní koncepce
6.1.1
Přihlášení do kurzu, správa skupin a uživatelů
Původní koncepce Moodlu byla: Studenti se "nějak" vloží (přihlásí) do kurzu, při vzniku se vloží do skupiny a tam zůstanou. Existuje zde samozřejmě možnost manuální tvorby skupin a přesunu studentů mezi nimi, bohužel řešení je absolutně nevhodné pro správu 7000 studentů FELu a mnoha skupin (rozdělených např. podle několika předmětů a paralelek) v jednom kurzu. Kromě manuálního zápisu do skupin existuje možnost rozdělit skupiny podle externí databáze nebo podle souboru ve speciálním formátu. 9
6.
Implementace
Výpisy studentů byly samozřejmě jiné (Moodle zajímaly jiné informace, než jsou pro nás podstatné). Bylo vyžadováno, aby se studenti přihlásili alespoň každého půl roku, jinak byli vyškrtnuti z kurzu. Kurzy se zpracovávají pouze přes internet.
6.1.2 o o o o
o
o o o o o o o
o
6.1.3
Testy a vše, co s nimi souvisí Byl tedy jeden kurz, v něm je několik testů. Všechny testy musely být napsány. Všichni studenti viděli všechny testy. Nebylo možné použít stejný test pro jednoho studenta pro dvě různé "písemky" (nyní je možné pro plnění dvou různých BOZP použít nezávisle na sobě (výsledky se neovlivňují) stejný test). Na druhou stranu nebylo možné dát studentovi možnost vybrat si z několika testů na splnění jedné "písemky" (nyní si student může vybrat jakým testem bude plnit BOZP, je-li mu to dovoleno). Nebylo možné "dát si starý test stranou", do koše tak, aby při administraci nepřekážel. Nebylo možné test vytisknout, dát ho studentům vyplnit na papíře a pak výsledky vložit do databáze. Nebylo možné archivovat výsledky testů. Nebylo možné nastavit na kolik procent je nutné test minimálně napsat, aby byl splněn Z předchozího plyne, že studenti mohli psát test kolikrát chtěli (dokud nevyčerpali maximální počet pokusů). Původně byly samozřejmě rozdílné výpisy výsledků testů (bez možností většího třídění, které je pro správu tak velkého množství testů nutné). Vstup do testu byl možný pouze při povolení JavaScriptu (to sice zabraňovalo vyřazení "ochrany testu zabezpečeným oknem" viz. nastavení testu, ale JS nemusí být povolený na každém počítači a tak jeho vyžadování považuji za nevhodné). Další detaily: např. do logů se vkládalo zbytečně mnoho nepodstatných informací (Já jich přidávám méně a jen významné).
Závěr
Jak bylo rozebíráno v úvodu BP, Moodle má mnoho předností oproti ostatním diskutovaným programům. Výše uvedené nevýhody jsem objevil během práce a myslím si, že by se stejné, nebo podobné, objevily i v ostatních projektech.
6.2
Instalace
6.2.1
Požadavky na server
• •
PHP verze: 4.3.0 (testováno na 5.2.0) MySQL verze: 4.1.16 (testováno na 5.0.27)
10
6.
Implementace
6.2.2
Popis instalace - úvod
Na stránce http://docs.moodle.org/cs/Instalace odkaz [1] nebo podrobný odkaz [3] je podrobný návod pro instalaci původního Moodlu. Pokud jsou nějaké rozdíly mezi odkazem a touto BP má tato práce přednost. Před instalací musí již být databáze vytvořena a musí k ní být povolen přístup určitému uživateli! Dále se nesmí stahovat nový jazykový balíček, protože stávající obsahuje víc termínů! Informace o změnách v databázi viz. 9.1
6.2.3 • • • • • • •
6.3
Popis instalace Pro vynucenou reinstalaci je nutné smazat soubor moodle/config.php. Při instalaci se nastavují cesty na server, připojení k databázi, vytvoří se tabulky. Po úspěšné instalaci je třeba vytvořit administrátorský účet. Je nutné nastavit jazyk na češtinu (ta je zahrnuta v instalaci! Do angličtiny není překlad nových termínů). Dále se mohou objevit varování, že nebyla vytvořena vyhláška - lze ignorovat. Dále je třeba "vytvořit úvodní stránku" - stačí nastavit shortname a longname. Nutné nastavit jazyk pro všechny uživatele - language ->language settings -> cs Nutné nastavit způsob ověřování uživatelů - Uživatelé -> Ověřování uživatelů. Co vyplnit viz. 8.1 ověřování studentů. Dále je třeba vytvořit nový kurz a do něho nastavit alespoň jednoho administrátora. (případnou změnu je možné provést i během práce v kurzu).
Kurz a jeho nastavení Pro každý kurz je třeba nastavit alespoň roli administrátora. Dále je vhodné nastavit
učitele. Je zde mnoho dalších nastavení. Detaily je nutné si najít v nápovědě na http://moodle.cz odkaz [1] nebo podrobnější odkaz [3].
6.3.1
Pracovní prostředí - úvodní stránka kurzu
moodle/course/view.php (malé úpravy) [Obrázky - 1] (úvodní stránka) Úvodní stránku kurzu jsem přijal z Moodlu. Mé úpravy spočívaly převážně v přesouvání ikon a odkazů, z mazání nepotřebných a přidávání nových, tak aby to co nejvíce vyhovovalo danému použití. Na stránce nalezneme různé akce pro správu, aktuality, vstup do BOZP testů a seznam činností a materiálů (jaké všechny komponenty je možné použít viz. dále).
11
6.
Implementace
6.3.1.1 Správa úvodní stránky kurzu Povolení upravovat úvodní stránku kurzu má jen administrátor. Ten zde vidí vše. Studenti vidí jen to, co je jim umožněno. K povolení úprav stránky a obsahu témat se dostaneme tlačítkem "zapnout režim úprav vpravo nahoře". Stránka je velice variabilní, je možné ji upravovat, přidávat bloky, schovávat je posouvat je apod. Podobné to je se tématy (skupiny činností a materiálů). V příloze jsou uvedené ikony, které se vyskytují na ploše spolu s vysvětlením, co dělají. [Obrázky - 17.2] (ikony na úvodní stránce kurzu)
6.3.1.2 Materiály a činnosti přidávané na úvodní stránku kurzu Zde uvádím seznam použitelných objektů, které je možno zobrazit na úvodní stránce kurzu (dále jen "plochu"). Pro bližší informace doporučuji nápovědu Moodlu. o Textová stránka o Webová stránka o Soubory a odkazy na webové stránky o Adresář: adresář se soubory, kterým lze procházet o Popisky: vlastní text, či obrázek přímo na ploše o o o o
Diskuzní fórum Ankety: jedna otázka přihlášení studenti mohou hlasovat Přednášky: interaktivní možnost výuky (pro náš případ jen zajímavost) Slovníky
o Nepoužité moduly: Online chat, databáze (studenti mohou nahrávat data na server), balíky SCORM/AICC (webové stránky, java, flash), průzkum (předdefinované dotazníky pro spokojenost s online výukou - nad rámec našich požadavků), Wiki (kolektivní tvorba dokumentů), úkoly (tvorba a odevzdávání domácích úkolů), workshop (tvorba úkolů a vzájemné hodnocení), balíček ICM content.
6.4
Uživatelské role
Z Moodlu jsem přejal rozdělení práv na role. Nyní jsou podporované a testované jen následující. o Administrátor - má veškerá možná práva o Učitel - Má práva jen pro jeden kurz. Může dělat veškerou běžnou správu studentů. Tzn. import, export, povolování testů, kontrolu testů, změny stavů studentů, tvorbu a správu skupin. o Student - Jeho práva jsou nejmenší. Může pouze psát test, je-li mu to dovoleno může změnit své informace (jméno atd.).
12
7.
Implementace - BOZP testy
7. Implementace - BOZP testy Při psaní jsem se snažil použít stejné principy jako v originálním programu. Ne vždy to ale bylo možné, protože vzhledem k tomu, že Moodle je openSource projekt, podílelo se na něm mnoho autorů a tak byly na různých stránkách pro jednu věc použity různé způsoby řešení. V několika případech se mi také nepodařilo zjistit, jak (kde) je daná věc prováděna (např. tvorba a změny určitých objektů) a tak jsem použil vlastní řešení. Tvorbu testů jsem v základu převzal z Moodlu, vhodně jsem ji upravil a doplnil.
7.1
Nastavení testů a základní informace moodle/mod/quiz/edit.php (S úpravami) [Obrázky - 12, 13] (nastavení testu)
7.1.1
Možná nastavení testu heslovitě (zde jsou všechna různá nastavení testů dohromady) (jsou zde jen hrubé informace podrobnosti viz. nápověda Moodlu) Co je tučně je moje, nebo upraveno, co je podtrženo je původní.
o Koš: Slouží k zpřehlednění práce, staré nepoužívané testy se tam vloží a nepřekáží učiteli při správě aktuálních testů. Je to jen atribut v databázi, tzn. testy i pokusy o jejich splnění jsou stále uloženy a je možné je z koše vyndat. o Odstranění testů. Test i pokusy studentů o jeho splnění budou odstraněny z databáze! Tuto možnost je doporučeno používat jen pokud je vytvořen chybný test bez pokusů. o Viditelnost testů: Jakýkoliv vytvořený test je možné úplně schovat pro studenty. Nebudou se moci pokoušet o jeho splnění, ani nebudou moci nahlížet do jeho archivu, ani pokud ho mají explicitně povolený v sekci "povol test pro". Tato možnost se hodí opět pro případ chyby v testu, test zneviditelníme, opravíme chybu a poté ho opět zviditelníme. o Datum otevření a uzavření testu: Od kdy do kdy je možno do testu vstoupit o Časový limit na splnění testu o Počet úloh, které se mohou maximálně zobrazit na stránce o Zamíchat úlohy - při pokusech se mění pořadí úloh o Zamíchat v rámci úloh - při pokusech se mění pořadí odpovědí o Povolený počet pokusů - (upraveno) povolený počet pokusů jednoho studenta na splnění jednoho BOZP testu. Pokud student dosáhne limitovaného počtu pokusů je nutné ho individuálně řešit (asi zbytečná možnost, v praxi se chceme vyhnout manuálním zásahům učitele) o Časová prodleva mezi pokusy - (před druhým a pak mezi dalšími) (upraveno) tento čas je možné manuálně zkrátit explicitním povolením testu. 13
7.
Implementace - BOZP testy o Každý pokus staví na předchozím - Při svých dalších pokusech dostanou studenti test předvyplněný podle jejich posledního pokusu. Odpovědi si mohou opravit. (upraveno) Stavění na dalším pokusu je možné pouze v rámci jedné vyhlášky. Pokud je test použit pro více vyhlášek, odpovědi se v prvním pokusu na další vyhlášce nepředvyplní. o Zobrazit test v zabezpečeném okně - psaní testu je hlídáno JavaScriptem, který ztěžuje opisování. (upraveno) Podrobnosti viz. vstup do testu 7.3 o Heslo pro vstup do testu o Síťová adresa - z jakých IP adres je možné začít psát test o Režim skupiny - zda studenti z cizích skupin než ze studentovi vlastní mohou vidět jeho testy o Studentům se má zobrazit - co si mohou studenti prohlédnout po dopsání testu (upraveno) viz. odstavec dále. o Overall feedback - Text, který se studentům zobrazí při dosažení určitého počtu bodů v testu. (upraveno) viz. odstavec dále.
7.1.2
Vysvětlení některých výše uvedených možností
7.1.2.1 Studentům se má zobrazit (když se chtějí podívat na své archivní testy) Původně zde byla možnost nastavit co ze svých výsledků mohou studenti vidět (body, odpovědi, správně odpovědi). Bylo možné to nastavit pro období do 3 minut od napsání testu, před uzavřením testu a po uzavření testu. Pro naše použití se předpokládá, že se test nebude uzavírat (nebo se uzavře až po letech). Proto zde byly nutné změny. Dalším důvodem bylo, že i když jsme zakázali zobrazení odpovědí, odpovědi byly vidět, pokud bylo povolené zobrazení něčeho dalšího např. bodů. Ale pokud bylo zakázáno zobrazení bodů v testu, body nebyly vidět ani nikde jinde v programu. Což nepovažuji za vhodné. Proto jsem zde místo "daného časového období 3 minuty od testu" dal možnost nastavit období pro zobrazení od "čas" do "čas". (Před uzavřením testu a po uzavření testu jsem ponechal beze změny). Dále při přístupu do testu se zobrazí studentovi odpovědi pouze, pokud je mu to přímo dovoleno. Body se mu v celém programu zobrazují (pokud je mu to nastaveno). Ale při prohlídce testu, body za každou otázku uvidí, pouze pokud je mu zároveň umožněno vidět správné odpovědi). Default nastavení je: o Od 12 hod. do 2 měsíců (od napsání testu) se mu zobrazí jeho odpovědi. o Po uzavření testu (pokud je nastaveno) se mu zobrazí vše co je možné. o V ostatních případech (0 až 12 hodin a po dvou měsících) se mu nezobrazí nic. (Toto je zde kvůli ztížené možnosti opisování po 12 hodinách už budou mít všichni ze skupiny test hotový a při dalším psaní vyhlášky (což je později než za dva měsíce) si nebudou moci své staré otázky zobrazit)
7.1.2.2 Overall feedback Zde je možné nastavit, co se má studentovi zobrazit za text, při napsání testu na x%. Nebylo to možné použít jako náhrada mého nastavení "Na kolik procent je nutné test minimálně napsat" viz. dále.
14
7.
Implementace - BOZP testy
Navíc zde byla chyba: Při prohlížení výsledků testu a zobrazení "testů bez pokusu" (viz. 7.6) se nezobrazily žádné testy (V SQL dotazu bylo použito špatné spojení).
7.1.2.3 Na kolik procent je minimálně potřeba test napsat (minpercent) V Moodlu chyběla možnost, nastavit pro test, na kolik procent je ho třeba minimálně napsat, aby byl splněný. Byla zde pouze nedostatečná možnost v podobě " Overall feedback" viz. výše. Minpercent je možné nastavit kdykoliv: v průběhu psaní i po dopsání testu. Při změně této hodnoty se přehodnotí všechny pokusy a nastaví se zda byly splněny, nebo ne (z toho plyne i přehodnocení stavů psaní vyhlášky) (viz. 7.7) Defaultní hodnota je 80%. Minpercent je nový sloupec v databázi.
7.1.2.4 Přidávání otázek do testu Viz (sekce správa otázek 7.4)
7.2
Výběr mezi testy (pro učitele) moodle/mod/quiz/index.php (S úpravami) [Obrázky - 9] (seznam testů BOZP pro vyučující)
Stránka je dostupná přímo z pracovní plochy. Studenti sem nemají přístup a jsou směrováni na indexstudent.php. viz. 7.3 Učitelé na této stránce primárně naleznou seznam všech testů, které jsou momentálně aktivní, dostupné pro testování studentů. Je možné nechat si zobrazit i archivní testy z koše (viz. základní informace). U testů je možné provádět základní nastavení (koš, viditelnost, (odstranění)). Je zde odkaz na tvorbu nového testu. Jako základ těchto stránek jsem použil stránky z Moodlu. Testy zobrazuji jinak, než původně, přidal jsem sem odkazy na úpravu testů.
7.3
Výběr mezi testy, vstup do testů, prohlížení archivu BOZP testů - (primárně pro studenty) moodle/mod/quiz/indexstudent.php (Stránku jsem upravoval) [Obrázky - 14] (zobrazení vyhlášek pro studenta)
7.3.1
Vstup pro studenty a pro učitele
Stránka je pro studenty dostupná přímo z plochy. Pro učitele, který si chce zobrazit testy BOZP určitého studenta, je dostupná z sekce "účastníci" po kliknutí na paragraf, nebo stav psaní vyhlášky daného studenta.
15
7.
Implementace - BOZP testy
7.3.2.1 Zobrazené informace Na této stránce jsou zobrazeny všechny paragrafy vyhlášky 50 o které se student pokoušel, nebo se aktuálně pokouší. Je zde vidět jaké různé testy psal pro každý paragraf (zobrazen je jen každý nejlepší pokus) (pozn. aby student viděl archivní pokusy, nemusí mít daný test explicitně povolen viz. 7.5, ale pokud bude libovolný test nastaven učitelem jako "neviditelný" nebude pro studenta vůbec viditelný, ani v archivu). Dále jsou zde označené testy, které je možné použít pro splnění aktuální vyhlášky. (Aby byly povolené musí být aktuální vyhláška ve stavu 1 nebo 2, tzn. stále nesplněná a musí být povolen přístup do testu (viz. povol test pro 7.5)) Je zde napsané, že student má psát BOZP, i když zatím nemá povolený žádný test. Také je zde vidět pokus o vyhlášku, kterou student psal "na papír" tzn. vyhlášku získal, ale v databázi není uložen jeho test. Dále zde student vidí v jakém stavu se nachází aktuální BOZP (aby si mohl zkontrolovat, zda byla informace o splnění vložena do KOSu) více informací o "stavu" viz.8.2 Je možné psát BOZP na jeden paragraf několikrát. To je důležité pro studenty vyšších ročníků, kteří si musí obnovovat některý z paragrafů. Pokusy o splnění různých testů BOZP (i na stejným paragraf) jsou v tabulce rozdělené a vzájemně se neovlivňují. Kliknutím na název testu se zobrazí všechny jeho pokusy, které na danou vyhlášku potřeboval viz. 7.3
7.3.2.2 SQL dotaz na výběr moodle/lib/datalib.php …. funkce get_quizes_in_course_stud(…) V této funkci se vybírají všechny testy a vyhlášky, které se mají studentovi zobrazit. viz. minulý odstavec. Na výběr není použit jeden SQL dotaz, jak by bylo vhodné, ale tři různé SQL dotazy, jenž v PHP slučuji. Není to nejvhodnější řešení, ale nepodařilo se mi napsat jeden SQL dotaz. Slučování tabulek na úrovni PHP není programátorsky vhodné, ale vzhledem k malému počtu řádků, se kterými se pracuje (průměrně 10 řádků) je to přijatelné. Tři SQL dotazy pro různé situace: 1. Zobraz vyhlášky, u kterých byl pokus o test. Vyber jen nejlepší pokus o test. Zde nezáleží, zda je vyhláška povolená nebo ne. 2. Zobraz všechny testy, které jsou pro studenta povolené a přidej je k výběru, pokud test ve výběru je, nastav mu info, že je povolený (kvůli správnému zobrazení). Celý tento bod se provádí, pouze pokud existuje aktivní vyhláška, jinak by neměl smysl. 3. Přidej uzavřené (ve stavu 0) pokusy o vyhlášku, které byly napsány "na papír", nebo nebyly vůbec splněny. tzn. v databázi pro ně není uložený žádný pokus o test.
7.3.3
Zobrazení pouze pokusů o test pro jednu vyhlášku (a jeden test)
moodle/mod/quiz/view.php (Stránku jsem upravoval) (Pokračování textu před SQL dotazem) Zde je seznam všech pokusů použitých studentem pro daný paragraf (barevně jsou odlišeny pokusy, které jsou úspěšné). Kliknutím na "pokus" se zobrazí studentovy odpovědi (je-li to možné - viz. nastavení testu 7.1). Stejné možnosti má i učitel, který si prohlíží studenta. Ten zde má navíc možnost upravovat body, dosažené za otázku, vkládat komentář (viz. Změna bodování v testech 7.7).
16
7.
Implementace - BOZP testy
7.3.4
Vstup do testu
moodle/mod/quiz/view.php a attempt.php (upraveno) [Obrázky - 15] (ukázka psaní testu) Pokud má student plnit BOZP, je dole na stránce view.php tlačítko, kterým vstoupí do testu. Nebo je zde vysvětlení, proč není možné test plnit.
7.3.4.1 Důvody pro zamítnutí vstupu do testu: o Chybí vyhláška, pro kterou by se test psal - buď pro studenta není vypsána žádná vyhláška, nebo se ztratila proměnná předávající číslo vyhlášky, pro kterou se test píše. Druhý problém lze vyřešit návratem na hlavní stránku a pokusit se znovu o vstup do testu. o Krátký čas mezi dvěma pokusy (upraveno). Pokud je test studentovi znovu povolen, je také zrušena prodleva mezi testy viz. povol test pro 7.5 o Omezený počet pokusů psaní testu na jednu vyhlášku (upraveno). Původně se pokusy počítali globálně o Test nebyl povolen (viz. povol test pro) o Vyhláška byla již splněna. Splněnou vyhlášku není možné opakovat. o Je vyžadováno zabezpečené okno a není povolen JavaScript (upraveno). Podrobnosti viz. níže o Původní nezměněné důvody viz. nastavení testu 7.1. Učitel prohlížející si studenta nemá možnost pokusit se za něho psát test. Ověření, zda má student právo vstoupit do testu, je samozřejmě i přímo v souboru, který zajišťuje psaní testu. (mod/quiz/attempt.php).
7.3.4.2 JavaScript Při vstupu do testu byl původně vyžadován JavaScript (tato podmínka mi nepřipadá nutná ani vhodná) Proto jsem zde provedl změny, aby byl JS vyžadován jen při použití zabezpečeného okna testu (viz. nastavení testu). Pokud je okno nezabezpečené je možné psát test i bez JS (původně nebyl test plně funkční). Má ochrana, která vyžaduje JS pro zabezpečené okno není neprolomitelná, pouze studentovi zhoršuje možnost podvádět (povolení JS se testuje před vstupem do testu i během testu, když nastane refresh).
7.3.4.3 Závěr Jako základ těchto stránek jsem použil stránky z Moodlu. Ty v originále poskytovaly jen základní, nijak nerozdělené zobrazení seznamu všech testů, které byly v celém kurzu dostupné.
17
7.
Implementace - BOZP testy
7.4
Otázky - správa moodle/mod/quiz/edit.php (Bez úprav)
7.4.1
Přidávání otázek do testu a jejich nastavení
Přidávat otázky do testu je možné, jen pokud do něho žádný student nevstoupil! Přidávání a odebírání otázek v testu je jednoduché a intuitivní. Pro přidání náhodně vybrané otázky z kategorie (viz. dále typy otázek) je zde samostatné tlačítko vpravo dole. Standardně mají všechny otázky stejnou váhu. Pokud je třeba, je možné nastavit různým otázkám různou váhu pro hodnocení testu - nastavením bodů za otázku (ve formuláři je to nazváno "známka"). Toto lze měnit, i když studenti již psali nějaké testy. Pak je ale nutné provést přehodnocení odpovědí (výsledky -> znovu oznámkovat) ! Toho lze využít pokud je například do testu vložena chybná otázka, té pak nastavit bodové hodnocení 0.
7.4.2
Typy otázek
moodle/question/edit.php (Bez úprav) [Obrázky - 15] (ukázka psaní testu) Je tam vidět, jak otázky vypadají. Moodle obsahuje mnoho typů otázek, které je možné dělit do kategorií. Všechny otázky je možné vložit do testu, bohužel ne všechny je možné exportovat a tak zálohovat, nebo přenášet mezi kurzy.
7.4.2.1 Plně podporované typy otázek: (převzato a upraveno z nápovědy) Následující otázky je možné bez problémů zálohovat, přenášet, tisknout o Úloha s výběrem odpovědi (multiple-choice, single-choice): Pozor. U více správných odpovědí je nutné nastavit penalizaci (záporné ohodnocení) za špatné odpovědi. Pokud by totiž student zaškrtl všechny odpovědi, otázku by splnil! (Penalizace se nastavuje v procentech. Kolik procent z bodů za otázku přidá (ubere) daná odpověď. Procenta z otázek se sčítají, ale do celkového hodnocení testu se započítá jen součet <0, 100%> o Krátká tvořená odpověď: student odpoví jedním slovem, nebo frází. (může existovat i více různě ohodnocených odpovědí. o Numerická úloha: stejné jako Krátká tvořená odpověď, ale pro čísla o Pravda/nepravda: napsat zda je otázka pravdivá nebo ne. o Přiřazování: standardní - spojte prvky, které k sobě patří o Popis: Popis není skutečná úloha. Slouží k zobrazení libovolného textu (případně obrázku) a nevyžaduje odpověď. o Náhodně vybíraná úloha: Není to úplně samostatná úloha. Při řešení testu se nahradí náhodně vybranou úlohou ze zvolené kategorie. o o o o o o
Částečně podporované typy otázek: Následující otázky je možné vkládat do testu, ale není možné je exportovat, tisknout Vypočítavá úloha: Tvorba příkladu na počítání Doplňovací úloha (cloze): úloha, do které se dají vložit další úlohy Přiřazování pro náhodně vybrané úlohy s krátkou tvořenou odpovědí Tvořená odpoveď: student napíše odpověď, učitel jí opraví - pro náš případ nepoužitelné.
18
7.
Implementace - BOZP testy
7.4.3
Import a Export otázek
(Bez úprav) Exportují se otázky v zadané kategorii. Je na výběr několik různých formátů. o GIFT - textový soubor - nezachovává všechny informace o otázkách o Moodle XML - zachovává všechny informace o otázkách, bohužel zde není podpora všech otázek. Vhodný pro zálohu otázek, přenášení otázek mezi kurzy. o Další - pro nás nezajímavé
7.4.4
Správa otázek (Bez úprav) Je standardní. Umožňuje mazat přidávat otázky, přenášet mezi kategoriemi
7.5
Povolování testu pro jednotlivce a skupiny
moodle/mod/quiz/enablegu.php (Celé moje) [Obrázky - 11] (povolení testu pro) Na této stránce je možnost povolit, zrušit povolení psát daný test pro skupiny i jednotlivé studenty. Důvody pro povolování byly diskutovány v úvodní části "požadavky na implementovaný systém 3.1". Zde se budu věnovat pouze technické stránce.
7.5.1
Základní informace
Pokud student nemá povolený test, nemůže ho začít plnit. Jestliže mu bude povolení odebráno v průběhu psaní testu, test se mu neuloží (když proběhne refresh stránky, dojde k přerušení pokusu). Pokud je test nastaven jako "neviditelný" nebude vidět nikdy (ani pokud je explicitně povolen). Archivní pokusy studentů jsou viditelné, i když daný test není explicitně povolen.
7.5.1
Odebrání povolení při importu
Když je student importován (je mu přidána povinnost psát BOZP) jsou mu odebrána všechna stará povolení psát test. (jedná se o povolení pro vstup jednotlivce. Pokud se při importu vkládají studenti do skupin dojde, pokud nalezneme již existující skupinu, k odebrání jejího povolení. Pozor, může se stát, že by student po importu mohl začít psát test, který by mu nenáležel, pokud by zůstal členem nějaké staré skupiny, které by zůstalo staré povolení z dřívějška a např. nebyla aktualizována. Záleží tedy také na učiteli, jak pečlivě bude odebírat povolení skupinám, které již test napsaly (nebo bude skupiny odstraňovat, a tím i rušit jejich povolení. viz. správa skupin 8.6)
7.5.2
Povolení pro skupiny Je jednoduché a intuitivní. Je zde "strom" skupin (viz. dále).
7.5.2.1 Povolení testu pro paralelky z předmětu Informace o nastavení skupin viz. "skupiny nastavení" 8.6 ((Zkráceně: je podpora automatického rozdělení do skupin podle předmětu a paralelky -> název těchto skupin je např. "X36POK par107 ( Po 16.15)") ) 19
7.
Implementace - BOZP testy
Protože není možnost mít "nadskupinu" (skupinu skupin) je zde využito stejných, automaticky generovaných názvů skupin a tak se paralelky při zobrazení "vloží" pod nadskupinu s názvem předmětu. Při kliknutí na tuto nadskupinu se označí všechny skupiny patřící pod ní (Pozor, na toto je použit JavaScript, pokud není v prohlížeči podporován, označení nadskupiny nic neudělá a je třeba označit každou skupinu zvlášť).
7.5.2.2 Princip zpracování Zaškrtnuté skupiny mají povoleno vstoupit do testu, nezaškrtunuté nemají. Při odeslání formuláře se zkontroluje, zda nedošlo ke změně zaškrtnutí a v případě, že ano tak se aktualizuje i povolení dané skupiny. Přesný popis viz. 7.5.5.2
7.5.3
Povolení pro jednotlivce
7.5.3.1 Další možnost přidání povolení pro jednotlivce Na této stránce je pouze jednoduchá možnost přidání povolení. Pro jednotlivce je vhodnější používat pohodlnější možnost - stránku "výsledky testu" 7.6 (tam je možnost mnoha dělení a vyhledávání studentů např. podle data importu, paragrafu, stavu a všem vybraným test povolit).
7.5.3.2 Princip zpracování Zpět k této stránce. Zde se do textarea napíše seznam uživatelských jmen, kterým má být povolení přidáno. Při odebírání povolení je zde seznam uživatelských jmen a jejich odškrtnutím dojde ke zrušení povolení. Při povolení testu pro jednotlivé studenty jim bude také zkrácena minimální doba mezi dvěma testy (viz nastavení testu) Jinak by sice měli test povolený, ale stejně by ho nemohli plnit.
7.5.4
Automatické rušení povolení
Jak bylo zmíněno výše, povolení se odebere při přidání povinnosti studenta psát BOZP. Je zde ale i další možnost, jak se jednoduše zbavit nechtěných povolení (pro jednotlivce i skupiny). Většinou má být povolení platné pouze určitou dobu, proto je na této stránce odkaz, kterým si lze vybrat jak stará povolení (pouze daného testu) se mají smazat (starší než 12 hod až 1 rok).
7.5.5 Paralelní přístupy ke stránce Na této stránce je dost pravděpodobné, že na ní budou v jednom okamžiku pracovat dva vyučující. Je nutné zajistit, aby při povolování testů jeden druhému nerušil povolení.
7.5.5.1 Paralelní práce u studentů Rušení povolení pro jednotlivé studenty. Vzhledem k tomu, že je zde oddělená část přidávající povolení od části rušící povolení, nedojde zde k chybám způsobeným paralelním zpracováním (alespoň ne k přímým chybám).
20
7.
Implementace - BOZP testy
7.5.5.2 Paralelní update skupin Zde je situace jiná. Přidávání a rušení povolení je umístěno na jednom formuláři. Všechny možné situace, které mohou nastat při updatu skupin: původně zaškrtnuto 0 0 0 0 1 1 1 1
1. vyuč. 2. vyuč. Správný zaškrtne zaškrtne výsledek 0 0 0 0 1 1 0 1 1 1 1 1 0 0 0 1 0 0 1 0 0 1 1 1
"1" - zaškrtnuto "0" - nezaškrtnuto Základní předpoklad pro paralelní přístup: Vyučující, který neměnil zaškrtnutí u skupiny, povolení nechtěl měnit. Pokud by toto neplatilo bylo by nutné použití zámků, či jiného způsobu k zajištění správného fungování, ale to je pro tento případ zbytečné.
Řešení paralelního přístupu Vždy, když nastane refresh stránky, se do sessions uloží jak byly nastaveny povolení původně. Při odeslání formuláře se porovnávají následující data: zaškrtnutí v odeslaném formuláři (2. vyuč), zaškrtnutí původní (původně), zaškrtnutí aktuálně v databázi (1. vyuč.). Chování, je jako v předchozí tabulce (první učitel ukládá data před druhým).
7.6
Výsledky testů
moodle/mod/quiz/report.php (Stránku jsem upravoval) [Obrázky - 10] (výsledky testu) Stránka je dostupná pouze pro učitele. Tato stránka neslouží pouze k zobrazení výsledků testů, ale umožňuje mnohem více. Povolování (odstraňování povolení) testů, odstraňování jednotlivých pokusů.
7.6.1
Zobrazení pokusů
Původně zde byly zobrazeny jiné informace, které pro nás nebyly zajímavé. Nyní je ve výsledcích testů vidět: o na kolik procent student napsal pokus, o každý pokus je barevně označen, zda je splněný, či nikoliv, což zpřehledňuje učiteli kontrolu (nastavení, na kolik procent je třeba test napsat je "minpercent" v nastavení testu), o jakém stavu je jeho vyhláška (více informací o "stavu" je v 8.2.3), o kdy student začal práci na pokusu, o kliknutím na "procentuální úspěšnost" je možné se podívat, jak daný student vyplnil test (a případně mu změnit bodové ohodnocení odpovědí. (viz. Změna bodování v testech 7.7) ).
21
7.
Implementace - BOZP testy
7.6.2
Na této stránce bylo několik chyb v kódu Moodlu, které jsem opravoval
•
Pokud bylo v testu nastaveno "Overall feedback" (viz. nastavení testu 7.1) nezobrazovali se studenti "kteří neměli pokus".
•
Exportovali se všichni studenti, nejen ti, kteří byli aktuálně nastavení (např. zobrazením skupiny, zobrazení určitých testů viz. nastavení okolo výsledků testů).
•
Nezachovávaly se parametry zobrazení testů při změně parametrů.
7.6.3
Parametry pro zobrazení studentů:
Vzhledem k tomu, že se předpokládá velké množství studentů, se kterými se bude pracovat je nutné mít možnost třídit výsledky. Parametry výběru se dají různě kombinovat.
7.6.3.1 Skupiny •
Rozdělení do skupin: (původní, s opravami)
•
Rozdělení do "nadskupin" - podle předmětu: Zde se dají zobrazit studenti celého předmětu, nikoliv jen jedné paralelky jako u normálních skupin. Využívá se zde, stejně jako v sekci "povol test pro", stejných názvů automaticky generovaných skupin). tzn. pokud si např. vyberu předmět "X36POK", zobrazí se mi členové všech skupin, které začínají jménem "X36POK".
7.6.3.2 Jaké pokusy o test (první čtyři jsou původní s úpravami) •
studenti s pokusy - zobrazí se studenti, kteří už mají nějaký pokus o test pro vyhlášku,
•
studenti bez pokusu - zobrazí se studenti, kteří ještě nic nepsali žádný test pro vyhlášku,
•
všichni studenti ,
•
všechny pokusy .
dále již jen mé dotazy. Zde se bude zobrazovat jen studentův nejlepší pokus daného paragrafu. Pozn. zde se počítá s výsledkem testu, ignoruje se, v jakém stavu se student nachází. Může se tedy stát, že při zobrazení studentů, kteří test nezvládli se zobrazí student, který sice tento test nezvládl, ale v jiném testu vyhlášku splnil. Pokud chceme vidět jen studenty, kteří nemají splněnou vyhlášku, je nutné použít "zobrazení studentů nacházejících se ve stavu" viz. níže. •
Studenti, kteří test zvládli - zobrazí se jen studenti, kteří mají pro každý paragraf alespoň jeden pokus ohodnocený jako splněný.
•
Studenti, kteří test nezvládli (jen ti, kteří se o test pokoušeli) - zobrazí se jen studenti, kteří pro každý paragraf nemají žádný pokus splněný a už se pokoušeli plnit test.
•
Studenti, kteří test nezvládli (i ti, kteří test ještě nepsali) - zobrazí se jen studenti, kteří nemají žádný pokus pro každý paragraf splněný, nebo se ještě o psaní testu nepokoušeli. Pozor: tato volba nelze použít spolu s "výběrem nadskupin předmětů" pokud se tyto parametry použijí najednou, zobrazí se jen studenti s pokusem! Pokud chceme zobrazit studenty celého předmětu, kteří se o test
22
7.
Implementace - BOZP testy nepokoušeli, můžeme použít "zobrazení: studenti bez pokusu" viz. výše, a po té udělat druhý výběr zobraz studenty, kteří psali test a nezvládli ho. To funguje bez problémů. Tato volba funguje normálně se všemi ostatními parametry, dokonce i s normálními skupinami.
7.6.3.3 Zobrazení testů (záleží na stavu psaní vyhlášky viz. 8.2.3) •
Studenti, kteří nemají ukončenou práci na vyhlášce tzn. jen aktivní - Zobrazí se jen pokusy, na kterých studenti pracují. (Nacházejí se ve stavu mají psát, nezvládli test, zvládli test, čekají na potvrzení exportu). Ukončené pokusy, co jsou v archivu se nezobrazí.
•
Archivní pokusy o vyhlášku tzn. pasivní - Zobrazí úplně všechny pokusy, i ty co byly zakončeny a jsou nyní v archivu. Standardně se ale nezobrazují kvůli přehlednosti. Za běžných okolností ukončené pokusy nechceme vidět.
7.6.3.4 Píšící paragraf číslo čísla paragrafu - zobrazení studentů, píšící daný paragraf
7.6.3.5 Nacházející se ve stavu číslo stavu - (více informací o "stavu psaní vyhlášky" je v 8.2.3) Při použití toho parametru se ignoruje, co bylo nastaveno v "zobrazení aktivních/pasivních testů" Zde je na výběr ze stavů: o 0 - Ukončená vyhláška (nemá nic dělat, pasivní) (žádná vyhláška není aktivní) o 1 - Má plnit vyhlášku o 2 - Nezvládl test o 1+2 - Má plnit vyhlášku, nebo nezvládl test o 3 - Zvládl test a čeká na export o 4 - Byl exportován a čeká na potvrzení Rozdíl mezi zobrazením studentů ve stavu "2 - nezvládli test" a zobrazením "nezvládnutých pokusů" je vysvětlen výše v "jaké pokusy o test".
7.6.3.6 Studenti importovaní v Datum importu studentů - zde jsou různá data, kdy byl proveden import studentů (byla přidána povinnost psát BOZP) a kde ještě nebyl proveden export, tzn. pokud se použije tato možnost, zobrazí se jen aktivní studenti.
7.6.3.7 Zobraz testy napsané mezi… Datum psaní testu - Zobrazí se jen testy napsané mezi zadanými daty. Tento parametr se ignoruje při exportu studentů do souboru viz. níže.
7.6.3.8 Vyhledávání (původní, upraveno, aby se vyhledávalo v dalších sloupcích) Vyhledává se ve jménu a přímení, uživatelském jménu a emailu.
23
7.
Implementace - BOZP testy
7.6.4
Export seznamu pokusů studentů do souboru
(Původní, upraveno) Kvůli možnosti zálohy, nebo jiné analýzy výsledků je zde možnost exportovat seznam studentů do textového souboru (CSV - sloupce oddělené tabelátory), nebo přehledněji do souboru Excel. Při exportu do Excelu je možné exportovat maximálně 100 řádků, jinak dojde k chybě (zde tato chyba není ošetřena). Pozn. soubor CSV lze také otevřít v Excelu (ale bez zformátovaných buněk). Původně se zde exportovali všichni studenti, bez ohledu na to, co za parametry zobrazení bylo nastaveno. Já jsem kód upravil tak, že se exportují jen ty řádky, které vyhovují nastaveným parametrům pro výběr studentů (pod tabulkou, skupiny i nadskupiny - předměty. Jediný ignorovaný parametr je "zobraz testy napsané mezi daty"). Exportují se i řádky, které se nezobrazily na stránce z důvodu její omezené kapacity.
7.6.5
Povolení (zakázání) psaní testu pro vybrané uživatele
(bylo přidáno) Jak bylo napsáno v části 7.5 na této stránce je možné povolit (zrušit) povolení studentů psát tento test.
7.6.5.1 Postup Vyberou se studenti - zadáním parametrů pro zobrazení (viz. výše), a pak buď se označí vybraní studenti (checkbox), nebo pokud se pracuje s velkým množstvím studentům, je zde možnost zaškrtnout pouze "provést příkaz pro všechny vyhovující studenty" (Tím se ignoruje jaký student byl zaškrtnutý a povolení se přidá (zruší) všem, kteří vyhovují parametrům pro zobrazení). Nakonec se stiskne požadovaná akce. Tlačítko se nachází pod seznamem studentů. Při povolení testu pro jednotlivé studenty jim bude také zkrácena minimální doba mezi dvěma testy (viz nastavení testu) Jinak by sice měli test povolený, ale stejně by ho nemohli plnit.
7.6.6
Odstranění pokusu
(původní, bylo upraveno) Je zde možnost, podobně jako v předchozím odstavci, vybrat a označit uživatele a smazat jim napsaný pokus. Chová se to jako kdyby ho nikdy nepsali. Teoreticky se toho dá využít jen, pokud student použil maximální počet pokusů dané ho testu pro vyhlášku a učitel mu chce dát další šanci. Ale prakticky tato situace nenastane (zbytečně složité pro administraci učitelem). Při odstranění pokusu se aktualizuje stav psaní vyhlášky (viz. 7.7) (stav se přepočítá pro zbytek pokusů o daný test). Kvůli bezpečnosti zde není možné použít "provést příkaz pro všechny vyhovující studenty". Hrozí nebezpečí nechtěného smazání pokusů.
7.6.7
SQL dotazy na zobrazování výsledků testů
Už původní SQL dotaz byl dost nepřehledný. Jádro bylo různé pro rozdílné způsoby zobrazení skupin a také v závislosti na tom, jaké testy se mají zobrazit. Když jsem SQL dotaz upravoval, snažil jsem se vyhnout zásahům do původního kódu. Nahrazení v původním dotazu tabulky "user" za spojení tabulek "user" a "user_vyhlaska" a
24
7.
Implementace - BOZP testy
dále v některých případech "quit_attemtp" za spojení "quiz_attempt" a MAX( ) z "quiz_attempt". Pro ně jsem použil nahrazení v řetězci dotazu řetězec za řetězec (př. "str_replace(user, user JOIN vyhlaska …)" ), toto sice není profesionální řešení, ale usnadňuje případné hledání, nápravu chyb a je mnohem přehlednější. (Testoval jsem, že to funguje při všech různých dotazech) Po ukončení velkého testování je možné zrušit toto nahrazování řetězců a použít správné řešení tzn. uložit tyto změny v dotazech přímo.
7.7
Změny bodování v testech
mod/quiz/edit.php, review.php a comment.php (původní, rozšířeno) [Obrázky - 13] (nastavení testu 2) Manuální změny dosažených bodů za otázky, přehodnocení bodů v testu jsem ponechal původní. Mé změny spočívaly ve změně stavu psaní vyhlášky (viz. 8.2.3) v závislosti na změně ohodnocení testů.
7.7.1
Kdy je nutno přepočítat stav psaní vyhlášky
Při změně na kolik je třeba test minimálně napsat (viz. minpercent v nastavení testu 7.1) a při manuální změně dosaženého počtu bodů za odpověď v testu (viz. zobrazení výsledků testů 7.6). Při těchto změnách se automaticky přehodnocuje stav psaní vyhlášky. Pokud se změní počet bodů, které je možné získat za otázku (viz. nastavení testu), je nutné kliknout na záložku "znovu oznámkovat", která znovu ohodnotí odpovědi studentů a přehodnotí stav psaní vyhlášky.
7.7.2
Postup přehodnocení
Změna stavu se může projevit pouze na testech na kterých se nyní pracuje, testy z archivu se nepřehodnocují (ani by to nemělo význam). Přehodnocení probíhá následujícím způsobem. Vzhledem k tomu,že na splnění jedné vyhlášky je možné používat více testů, je nutné při přehodnocování prohledat všechny takto přidružené testy (aby nedošlo k tomu, že student má paragraf splněný jedním testem, ale dříve použil jiný test, který nezvládl. U nesplněného testu by se provedlo přehodnocení. Chybné by bylo nastavit stav jako nesplněno. Můj program ale pozná, že vyhláška byla splněna jiným testem a stav nezmění).
7.8
Tisk testu
moodle/question/printtest.php (Celé moje. Jako vzor jsem použil export otázek) Původně Moodle umožňoval pouze export všech otázek, nikoliv export určitého testu. Základní princip je podobný a tak jsem upravil skript, který exportoval otázky tak, aby exportoval daný test. Jsou dvě možnosti tisku. Pro studenty - prázdný test, který se vytiskne a rozdá studentům k vyplnění. Druhá možnost vytisknout vyplněný test pro kontrolu učitelem.
25
7.
Implementace - BOZP testy
Manuální kontrola testu, prováděná učitelem, má jednu záludnost. Při použití otázky typu "přiřazování", se při každém vygenerování souboru změní pořadí prvků, které se mají spojovat. To bohužel činí manuální kontrolu obtížnější. Tisknout se dají všechny "plně podporované otázky" viz. správa otázek 7.4 Ostatní se nevytisknou. Při tisku testu, který má obsahovat náhodné otázky se do tisknutého testu bohužel nevkládají náhodné otázky, ale ty, které byly naposledy vytvořené. Zatím je možnost tisku pouze do dobře zformátovaného textového souboru . (ukázka viz. přílohy 16.1.5 "tisk testů"). V budoucnu by bylo možné přidat plug-in např. na tisk do formátu PDF.
7.8.1
Případné přidání nového formátu tisku
U tisku jsem ponechal možnost, že všechny formáty pro tisk se vkládají jako plug-in do adresáře question/format/nazevPlugInu/format.php. Struktura souboru format.php není složitá. Nebudu jí zde ale popisovat. Při psaní bude nejlepší se inspirovat stávajícím pluginem /printtxt/. Tam v nejjednodušším případě pouze upravit funkci "writequestion(…)", která zajišťuje samotný tisk jednotlivých otázek. A funkci " print_presave_process(…)", která zajišťuje vytištění hlavičky a patičky v exportovaném souboru (pozor, parametrem této funkce jsou exportované otázky. Je tedy nutné je mezi hlavičkou a patičkou vytisknout!). Pokud by bylo potřeba upravit i něco dalšího např. výběr otázek, které se mají tisknout do souboru. Je možné upravit v souboru question/format.php funkci " printprocess(…)". Změny v tomto souboru se projeví ve všech pluginech pro tisk.
8. Implementace - správa studentů Správu studentů jsem převážně napsal sám. Použil jsem pouze původní výpis studentů, což se opět neobešlo bez velkých zásahů do kódu. Ponechal jsem zde role: administrátor, učitel, student (jsou zde i další, ale ty jsem netestoval). Pro běžnou správu kurzu stačí role učitel.
8.1
Autorizace studentů moodle/login/index.php (upraveno) Používám informace získané z materiálu: materiál [8] a od autora dané práce.
26
8.
Implementace - správa studentů
8.1.1 • • •
8.1.2
Požadavky na autorizaci Zajistit bezpečnost údajů. Použít "přihlašovací jméno z KOSu" (část školního emailu). Na toto jméno jsou všichni studenti zvyklí a data exportovaná z KOSu vypisují pouze toto jméno. Pokud možno použít jedno ze stávajících hesel, aby si studenti nemuseli pamatovat další heslo, popř. aby se nemusela zajišťovat distribuce hesla. Pokud by se nenašlo jiné řešení bylo by možné použít pro studenta nové heslo, které by se distribuovalo. Studenti se budou přihlašovat jen jednou za dva roky a tak případné nové heslo nepředstavuje závažný problém.
Uživatelské jméno v programu
Uživatelské jméno, které se použije při ověření studenta ("username") při přihlášení může být různé od uživatelského jména pro KOS ("kosname"), které se v programu zobrazuje a se kterým se běžně pracuje. Do databáze jsem proto přidal kromě původního sloupce "username" také sloupec "kosname". • username - použije se pro ověření studenta při přihlášení. viz. 8.1.5. • kosname - S tímto uživatelským jménem se student vytvoří. Toto jméno se v programu primárně zobrazuje. Používá se při importu i exportu.
8.1.2 • •
8.1.3
Druhy autorizací, které je možné použít LDAP - ověření proti školnímu LDAP serveru. Interní - Ověřování uživatelů proti vlastní databázi Moodle. Moodle obsahuje i další možnosti autorizace. Vzhledem k tomu, že se na FEL ČVUT nepoužívají, dále jsem se jimi nezabýval. O jaké typy se jedná - viz. nápověda Moodle.
LDAP
Ověřování studentů proti serveru LDAP ČVUT na usermap.cvut.cz. Tohoto způsobu ověřování je použito u Moodlu zavedeného na ČVUT. Jeho nynější nastavení bohužel nelze použít, protože se uživatel autorizuje podle jiného uživatelského jména, než se používá v KOSu. Podle diplomové práce materiál [8] je možné nastavit autorizaci Moodle na LDAP serveru tak, že lze ověřovat i studenta podle jeho uživatelského jména z KOSu. Tato skutečnost byla dané v diplomové práci testována. Pokud nedošlo ke změnám v LDAP serveru mělo by být možné toto ověřování použít. Bylo by nutné na VIC ČVUT zjistit, jak správně provést nastavení.
8.1.3.1 Autorizace přes LDAP při stávajícím nastavení Pokud by nebylo možné nastavit autorizaci LDAP, aby používala uživatelské jméno KOSu, bylo možné provést tyto změny, aby se dala tato autorizace použít: • Tvorba studenta - označit "username", že student byl nově vytvořen. Např. prefixem "#". Pak by nově vytvořený student byl uložen takto: kosname="novak" username="#novak" • Při autorizaci studenta by se rozpoznalo, že se student hlásí do systému poprvé. To se děje ve funkci "is_valid_username(…)" v lib/moodlelib.php. Stačí odkomentovat if ($username[0]=="#")…. 27
8.
Implementace - správa studentů •
8.1.4
Pak se zavolá stránka login/conectname.php. Zde se má nastavit správné "username". Zatím implementovaná metoda není příliš vhodná. Na stránce je vyplněno "kosname", student vyplní "username" a "heslo". Program zkusí studenta autorizovat. Pokud je autorizace správná, "username" se u studenta uloží. Vhodnější by bylo položit dotaz LDAP serveru. Vzhledem k tomu, že se mi nepodařilo se připojit ke školnímu LDAP serveru, tuto možnost jsem netestoval.
Interní
Implicitně aktivní způsob ověřování. Ověřování uživatelů proti DB Moodlu. Je nepřípustné ukládat jedno ze studentských hesel do další databáze! Pro tuto autorizaci by bylo nutné použít speciální heslo. To není příjemné, ale protože se studenti přihlašují jen jednou za dva roky, je to přijatelné. Pro distribuci hesel mezi studenty je možné použít v Moodlu původní část "řešení ztraceného hesla". Student, který se poprvé přihlásí, klikne na odkaz "zapomenuté heslo". Poté vyplní své uživatelské jméno a email, na něhož mu bude zasláno nové heslo, které si bude moci po přihlášení změnit.
8.1.5 • • • •
Přesný popis autorizace Zatím se při tvorbě uživatele nechává stejné "username" i "kosname". Dále se nastaví způsob autorizace pro nově vytvořené studenty podle globálně nastavené autorizace. Uživatel je při přihlášení požádán o zadání svého uživatelského jména. Zadá své "kosname". Podle něho je v databázi vyhledáno "username", se kterým je provedena autorizace. (k ověření se odešle "username" a "zadané heslo").
8.2
Vyhláška (BOZP)
8.2.1
Možnosti psaní vyhlášky
o Je možné aby student postupně psal více vyhlášek. o Nelze psát více vyhlášek najednou (nelze mít více vyhlášek najednou aktivních). o Jeden paragraf si může student libovolněkrát prodloužit (novým plněním vyhlášky). o Pro splnění každé vyhlášky může mít na výběr z několika testů a zároveň jeden test může použít pro plnění různých vyhlášek (bez toho, aby se výsledky testů nějak ovlivňovaly) další informace 7.3
8.2.2
Uložení v databázi Informace o psaných vyhláškách jsou uloženy v databázi v tabulce user_vyhlaska. Podrobnosti viz. přílohy 16.2 "databáze".
28
8.
Implementace - správa studentů
8.2.3
Stav psaní testu BOZP
Kvůli větší přehlednosti jsem zavedl stav psaní testů, který vyjadřuje v jaké fázi se student při psaní vyhlášky nachází. Podle těchto testů je možné vyhledávat a řadit. •
0 - nemá nic dělat - není aktivní: V minulosti psal vyhlášku, kterou zakončil. Nyní jsou jeho pokusy v archivu, který je možné si zobrazit. Standardně se ale zakončený pokus nezobrazuje kvůli přehlednosti. Za běžných okolností ukončené pokusy nechceme vidět. (pokud se mají zobrazit studenti ve stavu 0 zobrazí se studenti, kteří nemají žádnou vyhlášku ve vyšším stavu!)
•
1 - má plnit vyhlášku - psát test: Studentovi byla přidána povinnost psát test, ale ještě se nedostal k tomu, aby se o splnění pokusil.
•
2 - nezvládl test: O splnění testu se pokusil, ale v testu neuspěl.
•
1+2 má plnit vyhlášku, nebo nezvládl test zobrazení dvou předchozích stavů dohromady.
•
3 - zvládl test, čeká na export: O splnění testu se pokusil a uspěl, teď čeká, až bude exportován a tato skutečnost se objeví i v KOSu.
•
4 - byl exportován, čeká na potvrzení: Byl vygenerován soubor se seznamem studentů, kteří splnili vyhlášku. Zatím se čeká, až budou importováni do KOSu a tento stav bude potvrzen (opět se dostane do stavu 0).
8.2.3.1 Stav psaní vyhlášky po jejím ukončení Stav je jeden sloupec tabulky a tím pádem se zdá, že když student ukončí danou vyhlášku, není poznat, zda ji ukončil úspěšně, nebo neúspěšně. To ale není pravda. Pokud student vyhlášku zvládl, byl exportován a byl mu nastaven čas exportu (od něhož se počítá platnost vyhlášky), pokud student vyhlášku nezvládl, byl mu pouze nastaven stav jako neaktivní a čas exportu je nulový (tzn. neprodlouží to platnost vyhlášky. Platnost se počítá z nejvyššího data exportu).
8.3
Zobrazení studentů, správa, formuláře
moodle/user/index.php (upraveno) [Obrázky - 3] (seznam studentů a vyhlášek) Stránka je založena na původním výpisu, který byl doplněn a upraven, aby nám vyhovoval. Učitelé na této stránce uvidí všechny studenty a jejich pokusy. Studenti jsou místo této stránky směrováni na zobrazení vlastních detailů. [Obrázky - 4] (osobní profil studenta)
8.3.1
Chybějící části (jen podstatné)
Ačkoliv je tato stránka hodně podobná stránce s výpisy testů, chyběly zde různé podstatné detaily: • Chyběl export studentů. • Nezachovávaly se parametry zobrazení studentů při změně parametrů.
29
8.
Implementace - správa studentů
8.3.2
Zobrazení studentů Původně zde byly zobrazeny jiné informace, které pro nás nebyly podstatné.
8.3.2.1 Informace, které jsou vidět u studenta o uživatelské jméno studenta, o v jaké stavu je jeho psaní vyhlášky (tato skutečnost je zvýrazněna i barevně - kvůli větší přehlednosti), o kdy mu byla přidána povinnost plnit vyhlášku, o kdy mu končí platnost poslední vyhlášky, o jaký paragraf dané vyhlášky plní, o v detailech studenta byl přidán titul před, za jménem, zařazení studenta [Obrázky - 4] (osobní profil studenta).
8.3.3
Parametry pro zobrazení studentů
Vzhledem k tomu, že se předpokládá velké množství studentů, se kterými se bude pracovat je nutné mít možnost třídit výsledky. Parametry výběru se dají různě kombinovat.
8.3.3.1 Skupiny • •
Rozdělení do skupin: (původní, s opravami). Rozdělení do "nadskupin" - podle předmětu: Zde se dají zobrazit studenti celého předmětu, nikoliv jen jedné paralelky jako u normálních skupin. Využívá se zde, stejně jako v sekci "povol test pro", stejných názvů automaticky generovaných skupin). tzn. pokud si např. vyberu předmět "X36POK", zobrazí se mi členové všech skupin, které začínají jménem "X36POK".
8.3.3.2 Zobrazení studentů •
•
Studenti, kteří nemají ukončenou práci na vyhlášce tzn. jen aktivní - Zobrazí se jen pokusy, na kterých studenti pracují. (Nacházejí se ve stavu mají psát, nezvládli test, zvládli test, čekají na potvrzení exportu). Ukončené pokusy, co jsou v archivu se nezobrazí. Archivní pokusy o vyhlášku tzn. pasivní - Zobraz úplně všechny pokusy, Pokusy co byly zakončeny jsou nyní v archivu. Standardně se ale nezobrazují kvůli přehlednosti. Za běžných okolností ukončené pokusy nechceme vidět.
8.3.3.3 Píšící paragraf číslo Čísla paragrafu - zobrazení studentů, píšící daný paragraf.
8.3.3.4 Nacházející se ve stavu Číslo stavu - (více informací o "stavu psaní vyhlášky" je v 8.2.3) Při použití toho parametru se ignoruje, co bylo nastaveno v "zobrazení aktivních/pasivních testů".
8.3.3.5 Studenti importovaní v Datum importu studentů - zde jsou různá data, kdy byl proveden import studentů (byla přidána povinnost psát BOZP) a kde ještě nebyl proveden export, tzn. pokud se použije tato možnost zobrazí se jen aktivní studenti.
8.3.3.6 Studenti exportovaní v Datum exportu studentů - zde jsou různá data, kdy byl proveden export studentů (na vrchu jsou nejnovější pokusy) Pro přehlednost se zobrazují jen data mladší dvou let.
30
8.
Implementace - správa studentů
8.3.3.7 Studenti, kteří nebudou mít platnou vyhlášku do příštího Čas - zde je možné si vybrat studenty, kterým bude končit vyhláška nejpozději za zadanou dobu (1 týden až 1 rok), tzn. zobrazí se i studenti, kteří už nyní nemají platnou vyhlášku. Z druhé strany datum vypršení vyhlášky omezeno není.
8.3.3.8 Mají se zobrazit jen jednotliví studenti Běžně se zobrazuje každá vyhláška studenta. Při zaškrtnutí této volby se zobrazí jen jednotliví studenti (vyhláška, která se u nich zobrazí nemusí být ta poslední. Tuto volbu je vhodné použít při přidávání povinnosti plnit vyhlášku vybraným uživatelům, aby pokus o přidání vyhlášky proběhl pro každého studenta jen jednou).
8.3.3.9 Vyhledávání (původní, upraveno, aby se vyhledávalo v dalších sloupcích) Vyhledává se ve: jménu a přímení, uživatelském jménu a emailu.
8.3.4
Tvorba nové skupiny
Kvůli lepší administraci velkého množství studentů je zde možnost vytvořit si vlastní novou skupinu. Ta se vytvoří ze všech studentů, kteří vyhovují zadaným parametrům zobrazení (podobně jako v exportu seznamu studentů viz. dále).
8.3.5
Akce s vybranými uživateli
Původně zde byla pouze možnost zaslat vybraným uživatelům email. Tuto možnost jsem zde ponechal. (Byly zde ale nutné úpravy, kvůli nevyhovujícímu předávání parametrů). Zde jsem nepřidával možnost "provést akci pro všechny vyhovující", protože mi to připadalo dost nebezpečné, mohlo by snadno dojít k tomu, že bude studentovi nastaveno něco, co nemá. Pokud by bylo potřeba provést nějakou úpravu pro více studentů je nutné nastavit: "počet studentů na stránku 1000, dát označit vše a provést danou operaci).
8.3.5.1 Odstraň vyhlášku i s testy Odstraní studentovi označený pokus o vyhlášku a zároveň odstraní i jeho pokusy o test, které použil na plnění. Bude to vypadat, jako by vyhlášku nikdy neplnil. Odstranění by se mělo používat jen výjimečně při chybách. Pokud např. student vyhlášku již nemůže splnit (např. nenapíše velké množství testů, nebo ukončí studium), je lepší ho vložit do stavu "neaktivní pokus o vyhlášku". Podrobnosti viz. dále.
8.3.5.2 Změň stav psaní vyhlášky Jakémukoliv studentovi je možné manuálně změnit stav psaní vyhlášky. (Pozn. stav psaní vyhlášky se automaticky mění v závislosti na tom, jak napsal (nenapsal) test, popř. při změně bodování v testu viz. 7.7) Změna stavu se používá např. pokud student psal test na papír. Pak je nutné manuálně změnit stav na napsal, nenapsal. Nebo pokud student již nemůže splnit vyhlášku (např. nenapíše velké množství testů, nebo ukončí studium). Nebo při neočekávaných událostech.
8.3.5.3 Změň číslo psaného paragrafu Pokud bylo studentovi při importu (přidání povinnosti psát vyhlášku) nastaveno špatné (nebo žádné) číslo paragrafu, který má plnit. Je možné mu jej zde změnit.
31
8.
Implementace - správa studentů
8.3.5.4 Přidej povinnost psát vyhlášku Pro přidání povinnosti plnit vyhlášku pro studenta není nutné používat pouze import viz. 8.4. Zde je možné si vybrat studenty (např. kterým končí platnost vyhlášky nejpozději v … viz. výše), všechny si označit a přidat jim povinnost plnit vyhlášku.
8.3.6
Export seznamu studentů do souboru + tisknutelné formuláře pro BOZP
(Upraveno a rozšířeno ze stránky výsledků testů) Kvůli možnosti zálohy, nebo jiné analýzy, jsem zde přidal možnost exportovat seznam studentů do: • Textový soubor - CSV - zobrazí se všechny sloupce tabulky, sloupce oddělené tabelátory. Soubor CSV je možné otevřít v Excelu. U exportovaného souboru se mění jazykové kódování viz. 8.5.7. • Excel soubor - zobrazí se všechny sloupce tabulky, ukládá se do přehledného souboru xls. Zde je problém. Pokud by se exportovalo více, než 100 řádků, došlo by k chybě. Tomu se předchází tak, že při vyšším počtu řádků se automaticky exportuje jen do CSV. •
Formuláře - formulář na sběr podpisů, protokol o splnění vyhlášky. Další formuláře, úpravy viz. 8.7
•
Seznam uživatelských jmen pro KOS - Je to podobné exportu studentů (formát, nastavení) viz. 8.5 Pozor: zde se exportují všichni studenti podle parametrů pro výběr studentů. (nikoliv jen studenti se splněnou vyhláškou). Dále tímto exportem nedojde ke změně stavu psaní vyhlášky.
8.3.6.1 Export všech vyhovujících Je to podobné jako na stránce výsledky testů (používají se shodné funkce). Zde se ale exportují všechny řádky, které vyhovují nastaveným parametrům pro výběr studentů (pod tabulkou, skupiny i nadskupiny - předměty) (exportují se i řádky, které se nezobrazily na stránce z důvodu její omezené kapacity).
8.3.6.2 Přehledné rozdělení Pokud se při exportu seznamu studentů (při tisku formuláře) použijí parametry "zobraz členy skupiny", nebo členy "předmětu" (skupiny skupin), vždy se ve výsledném souboru seřadí studenti nejprve podle skupin a po té podle uživatelského jména. Seznam každé další skupiny začíná jejím zvýrazněným názvem. Ukázka viz. přílohy 16.1.4 "výpis studentů ". V ostatních případech exportu se výpis na skupiny nedělí (nebylo by to možné, protože jeden student může být členem více skupin. Program by pak nevěděl podle jaké skupiny má výsledek dělit).
8.3.7
Identifikace zobrazených studentů
Já zde nezobrazuji pouze studenty, jak tomu bylo dříve, ale i různé pokusy o vyhlášku. Proto jsem musel změnit identifikaci v checkboxech, kterými se zaškrtávají studenti, s nimiž chci provést nějakou akci. Jako identifikátor jsem ale nemohl použít pouze číslo vyhlášky, protože v návaznosti na původní funkci moodlu - odesílání emailů jsem potřeboval ID studenta, jemuž se má email poslat (formát identifikátoru je: "user4vyhl167"), proto jsem ve
32
8.
Implementace - správa studentů
funkci odesílání emailů user/messageselect.php musel změnit regulární výraz, který čte identifikátor checkbox.
8.4
Import studentů (přidávání povinnosti plnit vyhlášku) moodle/user/import.php moodle/admin/uploaduse.php, lib/uploaduserlib.php (Celé moje) [Obrázky - 6] (import studentů)
8.4.1
Původní možnost importu
V Moodlu existovala stránka na import studentů. Bohužel mi svojí formou vůbec nevyhovovala, a tak jsem z ní použil pouze standardní skript načtení souboru na server.
8.4.2
Formát importovaných souborů
Je podporovaný pouze import textových souborů. (Zatím jsou zde připraveny dva formáty souborů: •
studenti - seznam studentů exportovaných z KOSu (příklad získání těchto dat: v KOSu zobrazení předmětu -> tisk do souboru informace viz. odkaz [5]). Formáty souboru v době psaní BP viz. přílohy 16.1.1 "import studentů".
•
"osoby na paragraf 11" - (osoby u kterých je vyžadován paragraf 11) formát tohoto souboru není daný, tak jsem ho musel navrhnout. Zatím podporovaný viz. přílohy 16.1.1 "import osob pro §11".
Formát načítaných souborů se může měnit. Při každém načtení souboru se dá nastavit co znamená jaký sloupec a další doplňující nastavení viz. dále. Pokud by byla změna formátu souboru stálá, je zde soubor s konfigurací, kde je možné si navolit formát souboru.
8.4.3
Soubor s konfigurací formátu načítaného souboru
(lib/uploaduserlib.php) Je možné nastavit více konfigurací, ze kterých je možné si vybrat jednu během importu.
8.4.3.1 Obsah jedné konfigurace o čím jsou oddělované sloupce (čárka), o čím jsou oddělované řetězce(uvozovky), o jaký sloupec obsahuje jaká data (jméno a přímení, email, username (pro KOS), a další sloupce pro tvorbu skupin), o kolik sloupců má daný soubor, o další defaultní nastavení pro zpracovávání souboru (viz. dále).
33
8.
Implementace - správa studentů
8.4.4
Přidání nové konfigurace
Veškerá nastavení se dějí v souboru lib/uploaduserlib.php. Seznam konfigurací, který se zobrazuje a ze kterého je možné si vybrat se nachází v poli $fileTypeArr. Toto pole se musí vyplnit následujícím způsobem: $fileTypeArr["kod_konfigurace"]="Zobrazený název konfigurace". Dále se na tuto stránku musí přidat "IF($fileType=="kod_konfigurace") a do něho napsat definice konfigurací. viz. předchozí text a zdrojový kód souboru (pozn. v proměnné $fileType se nachází formát souboru, který byl pro probíhající import použit). Ze souboru se dá načíst: username, jméno, přímení, email, jméno a přímení, předmět, paralelka, čas začátku cvičení, titul před jménem, titul za jménem, instituce, oddělení, zařazení. Pokud by bylo potřeba importovat i další vlastnosti byl by nutný zásah do souboru načítání admin/uploaduser.php. Okolo řádku 366 (komentář "jaké další vlastnosti přidávat").
8.4.5
Načtení souboru
Na načtení souboru na server byl použit původní skript. Přímo čtení ze souboru jsem napsal tak, že každý načtený řádek se rozdělí na buňky, které se uloží pro další zpracování. Rozdělování se děje pomocí oddělovače sloupců (dále ODS) a oddělovače řetězců (dále jen ODR). Každý sloupec nemusí být obklopen ODR. Pokud ale je sloupec oddělen ODR, tak se v něm ignoruje případný výskyt ODS. Při čtení souboru se hlídá, zda na některém řádku není menší počet buněk, v tom případě čtení skončí chybou (prázdné řádky (nebo jen s whitespace) se ignorují). Načtené buňky se uloží do pole, které se v sessions předává dále. (Session se smaže, když dojde k úspěšnému importu studentů). Testoval jsem načtení, uložení a předání přes session se souborem s velikostí 1MB. Toto řešení jsem zvolil, protože se na případnou chybu v souboru přijde již před nastavením a učitel tak na případnou chybu může reagovat dříve.
8.4.5.1 Nastavení čteného souboru Nejprve se nastavuje, co za informace se nachází v jednotlivých sloupcích načteného souboru. Nastavení se provede automaticky podle obsahu konfiguračního souboru (viz. výše). Automatické nastavení se neprovede, pokud má načítaný soubor jiný počet sloupců, než je uvedeno v konfiguračním souboru (pro vybranou konfiguraci). Chybu není možné poznat, pokud se pouze prohodily sloupce v souboru. Co se nachází v jednotlivých sloupcích je možné manuálně korigovat. Konfigurace je provedena následovně: u každého sloupce jsou napsány první tři záznamy a vedle je selectbox s výběrem, co může daný sloupec obsahovat. V případě stálých změn je možná snadná úprava konfiguračního souboru. Načítaný souboru musí minimálně obsahovat uživatelské jméno (pro KOS) ostatní data si umí program nahradit. Je ale doporučeno používat i další sloupce: Jméno, přímení, email. Pro případnou tvorbu skupin(viz. dále): Předmět, paralelku a čas vyučování.
8.4.6
Další podporovaná nastavení při importu V závorce je napsané, co je defaultně vybrané pro import studentů.
8.4.6.1 Jaký paragraf mají studenti psát Při importu studentů je doporučeno nastavit, jaký paragraf mají importovaní studenti psát (důvod - přehlednost při dalším zpracování). Změna psaného paragrafu je možná i později. viz. 8.3
34
8.
Implementace - správa studentů
8.4.6.2 Ignorovat první řádek souboru (ANO) Protože první řádek načítaného souboru většinou obsahuje záhlaví - jména sloupců je nutné ho ignorovat, jinak by vznikl uživatel "login".
8.4.6.3 Chcete přidat text za username (NE) Zde je možnost doplnit za načtené uživatelské jméno nějaký postfix. Zatím tato možnost není potřeba. Př. z "hajekm6" to vytvoří "hajekm6@fel"
8.4.6.4 Chcete doplnit email z uživatelského jména (ANO) Email exportovaný z KOSu není standardní školní email. Jsou zde různé soukromé emaily. Myslím si, že by bylo vhodnější používat pro komunikaci emaily školní. Proto je možnost ignorovat načtený email ze souboru, ale email vytvořit z načteného uživatelského jména a doplnit za něj doménu. Např. z username "hajekm6" program vytvoří email "
[email protected]".
8.4.6.5 Chcete vložit studenty automaticky do skupiny (ANO) Soubor exportovaný z KOSu defaultně obsahuje informace o předmětu, cvičební paralelce a času kdy cvičení začíná. Připadalo mi proto vhodné mít možnost použít tato data a studenty automaticky vkládat do skupiny. Aby mohl být student automaticky vložen do skupiny musí být v načteném souboru obsaženo: název předmětu, cvičební paralelka a čas začátku. (formát času začátku je pevný: "Ct (13/2)" pokud by se formát změnil, byl nutný zásah do programu. Změnit vstup $den, $hodina u funkce createGroupName v souboru admin/uploaduser.php). Používám stejné funkce, jako u tvorby skupin z "KOSu" (viz. 8.6), a tak bude název skupin stejný: " X36POK par101 (Ut 14.30)". Skupiny se tvoří, aktualizují při vždy při importu (je-li to zaškrtnuto) viz. dále.
8.4.6.6 Jak se zachovat při nalezení jiného aktivního pokusu o vyhlášku Může se stát, že se při importu narazí na studenta, který již má aktivní pokus o vyhlášku. Vycházel jsem z toho, že existují pouze dva případy které mohou nastat: •
Původní pokus o vyhlášku mu byl vložen "nedávno" - a už na něm může například pracovat. Zde by bylo vhodné ponechat původní pokus a nový ignorovat.
•
Původní pokus o vyhlášku byl vložen před "dlouhou dobou" - student vyhlášku neplnil, nesplnil, nebo se zapomněla exportovat. V tomto případě je vhodné starou vyhlášku ukončit (bez nastavení "dateexport", aby tak nebyla přidána platnost vyhlášky) a začít novou.
Zde je možné vybrat si čas, kdy se vyhláška považuje za starou a kdy za novou. (Standardně 1 rok). Dále se zde nastavuje, jak se má program zachovat pro starou a jak pro novou (pokud nechceme použít standardní reakci popsanou výše).
8.4.6.7 Provádění přidání povinnosti plnit vyhlášku V poslední fázi se čtou záznamy studentů a podle nastavených parametrů se s nimi provádí přidávání povinnosti. Mohou nastat tyto události: Student neexistuje - bude vytvořen nový uživatel, z načteného souboru se mu nastaví uživatelské jméno, jméno a přímení email a další. Student bude přidán do kurzu, ve kterém proběhl import.
35
8.
Implementace - správa studentů Student existuje, ale je zapsán v jiném kurzu. Žádné studentovi údaje nejsou aktualizovány, student se pouze přidá do kurzu, kde proběhl import. Student nemá žádnou vyhlášku aktivní: přidá se mu povinnost psát vyhlášku. Datum přidání vyhlášky se spočítá jen jednou při započetí ukládání. Pak se udržuje v proměnné, aby se ani při čtení dlouhého souboru (čas čtení větší než vteřina) neměnil čas importu pro jednotlivé studenty. Odstraní se stará povolení pro psaní testu pro jednotlivce viz. 7.5 Student již má aktivní pokus o vyhlášku: chování programu viz. předcházející text. Dále se zde student vloží do skupiny: Jen pokud je vyžadováno přidání do skupiny a jsou nastaveny všechny potřebné parametry ve čteném souboru (viz. předcházející text). Pokud je nalezena skupina, která již existuje, jsou jí odebrána všechna stará povolení pro psaní testů viz. 7.5 a jsou smazáni všichni členové skupiny, aby mohli být obnoveni. Skupina samotná ale zůstane, takže pokud nějaký student byl členem skupiny a byl zároveň i v importovaném souboru, nepozná, že byl ze skupiny vyškrtnut a po chvíli opět vložen zpět.
8.4.7
Tabulky s výsledkem importu
o První (červená) seznam studentů, kterým z nějakého důvodu nebyla přidána povinnost plnit vyhlášku (důvod pro nepřidání je uveden pod tabulkou). o Druhá (bílá) seznam studentů, kteří byli úspěšně importováni, popř. došlo zde jen k varování (např. již aktivní vyhláška, která byla klasifikována jako nová viz. předchozí text). Varování se zobrazí pod tabulkami.
8.4.8
Po přidání povinnosti
[Obrázky - 7] (dokončení importu) Při úspěšném přidání povinnosti plnit vyhlášku se nastaví čas importu (dateimport), podle kterého je možné v ostatních částech programu studenty řadit, vyhledávat, tvořit skupiny.
8.4.9
Zobrazení stránky
Způsob zobrazení výsledků a nabízené formuláře se nacházejí odděleně od kódu, který zpracovává data. Je tedy možné jednoduše změnit design. Tato zobrazení se nacházejí v souboru admin/uploaduser.html.
8.4.10 Jazykové kódování souboru při importu V souboru je při importu měněno kódování jazyka funkcí dekoduj_na_utf(…) (lib/weblib.php). Defaultně je měněno kódování načítaných dat z win1250 do utf8 (s tímto kódováním se dále pracuje v celém programu). Pokud by byl importovaný soubor v jiném kódování je nutné změnit tělo této funkce. (Bylo testováno, že importovaný soubor byl již v kódování utf8 a když byla změněna převodní funkce, import proběhl úspěšně.)
36
8.
Implementace - správa studentů
8.5
Export studentů do KOSu a potvrzení exportu
user/export.php (Celé moje) [Obrázky - 8] (export studentů) Na této stránce je možné jednoduše "exportovat studenty do KOSu". Další možnosti "manuálního" exportu studentů (je tam více možností pro nastavení jací studenti se mají exportovat) je na stránce zobrazení studentů pod změnou stavu a pod exportem (viz. 8.3) Dále se na této stránce jednoduše potvrzují exporty (co to je viz. stavy psaní vyhlášky 8.2.3). Opět se možnost potvrzení exportu nachází i na stránce zobrazení studentů pod změnou stavu.
8.5.1
Export do KOSu
Jak jsem zjistil, přímý export studentů, kteří splnili vyhlášku, do KOSu není možný. (Není možné např. zapsat zápočet všem studentům, kteří jsou uvedeni v souboru CSV). Je nutný manuální zápis zápočtů. Tomu tedy odpovídá stávající formát exportovaného souboru viz. dále. Je snaha usnadnit manuální zadávání zápočtů tím, že jsou studenti automaticky řazeni podle cvičebních paralelek.
8.5.1.1 Podporované formáty o seznam username v CSV, o seznam username a celé jméno v Excelu. Ukázky viz. přílohy 16.1.2 "export". Pozor, při exportu do Excelu lze exportovat pouze 100 řádek. Pokud se jich exportuje více, použije se automaticky místo formátu Excel soubor CSV. Při exportu se mění jazykové kódování souboru viz. 8.5.7.
8.5.1.2 Přehledné rozdělení Pokud při výpisu použiji výběr pro skupinu (paralelku), nebo "předmět" (skupinu skupin), ve výsledku se v obou formátech oddělí studenti jednotlivých paralelek (skupin). A na začátku každé skupiny, bude uvedeno její jméno. V ostatních případech exportu se výpis na skupiny nedělí (nebylo by to možné, protože jeden student může být členem více skupin a program by pak nevěděl podle jaké skupiny má výsledek dělit). Funkce, které se zde používají pro export jsou shodné s funkcemi, které se používají na stránce user/index.php. viz. 8.3
8.5.2
Změna/ přidání formát exportovaných dat
Vzhledem k tomu, že může být požadován další (nebo úprava stávajícího) formát exportovaných dat, je možnost ho nastavit v souboru lib/exportlib.php. (jedná se o změny: jaká data se mají zobrazit, kde se mají zobrazit, jak mají vypadat).
8.5.2.1 Postup přidání nového formátu •
Vyplnit pole: $fileTypeArr["kodFormatu "]=popis daného formátu. Kód formátu je řetězec, podle kterého se daný formát dále rozpoznává. Jeho formát musí být: CSV_nazev, nebo Excel_nazev. (pozor na velikost písmen a nezapomenout na podtržítko!). CSV_/Excel_ znamená, jaký typ souboru to bude.
37
8.
Implementace - správa studentů •
•
•
•
8.5.3
printExportHeader(…) - tisk hlavičky souboru. V této funkci lze do if ($typ==kodFormatu) přidat zavolání funkce, která do exportovaného souboru zapíše hlavičku požadovaného formátu (jak funkce vypadá a jaké má parametry viz. komentáře ve zdrojovém kódu). printListOfStudent(…) - tisk pole objektů získaného SQL dotazem (tisk seznamu studentů). Je to obdobné, jako u hlavičky. Jen se dále volají jiné funkce. (jak funkce vypadá a jaké má parametry viz. komentáře ve zdrojovém kódu). Přímo ve funkci formátu bude cykl, který vytiskne všechny prvky z pole. Obě předchozí funkce mají jako parametr proměnnou "class DOWNLOADOBJECT $downloadObjekt", která obsahuje proměnné, sloužící k identifikaci zapisovaného souboru (např. u typu souboru Excel obsahuje identifikátory "listu", "sešitu" a řádku). Tato třída se předává jako parametr funkcím tisknoucím hlavičku i tělo exportovaného souboru. tvorba tlačítek a selectboxů na výběr formátů se tvoří automaticky z pole, není potřeba se o ni starat.
Limity změn formátů
Je poměrně snadné změnit (přidat) formát exportovaného souboru, ale musí se použít jediné podporované formáty: textový CSV nebo Excel. Pokud by bylo potřeba přidat např. formát PDF, byl by nutný zásah do programu.
8.5.3.1 Postup přidání "nového typu souboru" • •
•
•
8.5.4
Nahrání daného rozšíření na server. V souborech user/index.php a user/export.php přidat typ souboru "PDF" a jeho tvorbu header a inicializace stahovaného souboru. (podobně jako u stávajícího formátu Excel). Bylo by nutné rozšířit obsah "class DOWNLOADOBJECT", která obsahuje proměnné, sloužící k identifikaci zapisovaného souboru (např. u typu souboru Excel obsahuje identifikátory "listu", "sešitu" a řádku). Tato třída se předává jako parametr funkcím tisknoucím hlavičku i tělo exportovaného souboru. Nakonec by bylo samozřejmě nutné vytvořit nový formát. viz. výše.
Export studentů
(platí pouze pro stránku user/export.php. Stránka user/index.php má vlastní, nezávislé nastavování parametrů jací studenti se mají exportovat). Standardně se exportují pouze studenti, kteří splnili alespoň jeden test. Jsou tedy ve stavu 3 (zvládl test, čeká na export). Studenti v ostatních stavech se běžně ignorují (výjimku lze nastavit pro stav 4 viz. dále).
8.5.4.1 Možnosti výběru studentů, kteří mají být vybráni • • • •
Je členem předmětu - do jakého předmětu (nadskupiny) patří. Je členem skupiny Píšící paragraf - číslo psaného paragrafu. Studenti importovaní v - datum, kdy byli studenti importovaní. Zobrazují se jen data importu, u kterých ještě neproběhl export.
38
8.
Implementace - správa studentů • •
Studenti exportovaní v - datum exportu studentů. Pro přehlednost se zobrazují jen data mladší dvou let. Exportuj i studenty ve stavu 4 - Pokud by nedošlo k vložení informace, že student zvládll vyhlášku do KOSu (např. exportovaný soubor by se ztratil), ale export by proběhl, student by zůstal ve stavu 4 (čeká na potvrzení exportu). Pokud bychom ho chtěli znovu exportovat, je nutné ho přidat k zobrazeným studentům zaškrtnutím této volby.
Po úspěšném exportu se nastaví čas exportu (Datum exportu se spočítá jen jednou při započetí ukládání. Pak se udržuje v proměnné, aby se ani při dlouhém zápisu (čas zápisu větší než vteřina) neměnil čas exportu pro jednotlivé studenty). Je nutné si zapamatovat, kdy byl export proveden, aby se mohl později export potvrdit! (Podrobnosti viz. dále)
8.5.5
Potvrzení zápisu exportovaným studentům
Tato volba zde je kvůli tomu, aby se zamezilo ztrátě souboru s exportovanými studenty. Poté, co je student exportován je nutné mu ještě tuto skutečnost potvrdit a tím ho převést do neaktivního stavu 0 ("nemá nic dělat"). Bez potvrzení exportu, by se stále vyskytoval mezi aktivními členy.
8.5.5.1 Výběr studentů, kterým se má potvrdit export Export lze potvrdit jen studentům, kteří jsou ve stavu 4 (čekají na potvrzení exportu). Výběr, jací studenti se mají potvrdit, se děje pouze podle data, kdy proběhl export (jméno exportovaného souboru je defaultně: "export_paragraf_§_datum a čas"). Jak bylo řečeno na začátku, potvrzení lze provádět i na stránce user/index.php viz. 8.3
8.5.6
Zobrazení stránky
Nabízené formuláře se nacházejí odděleně od kódu, který zpracovává data. Je tedy možné jednoduše změnit design. Tato zobrazení se nacházejí v souboru user/export.html.
8.5.7
Jazykové kódování souboru při exportu
Při exportu do souboru CSV je měněno kódování jazyka funkcí dekoduj_na_win1250(…) (lib/weblib.php). Defaultně je měněno kódování z utf8 do win1250. Kódování win1250 jsem použil, protože toto kódování používá MS Excel. Pokud by bylo vyžadováno jiné kódování je možné změnit tělo dříve zmíněné funkce.
8.6
Skupiny - správa
moodle/course/groupsetup.php (Celé moje, použito pouze odkaz na původní správu skupin, která je stejně prakticky nepužitelná). [Obrázky - 5] (Správa skupin)
39
8.
Implementace - správa studentů
8.6.1 • • • • •
8.6.2
Způsob tvoření skupin Pomocí seznamu studentů exportovaného z KOSu viz. dále Při importu studentů - viz. 8.4 Pomocí "KOSu" viz. dále "polomanuálně" nastavením parametrů pro výběr studentů v zobrazení studentů a vytvořením si vlastní skupiny viz 8.3 Použít původní manuální správu skupin - velice nevhodné!
Názvy skupin (automaticky generované)
Automaticky generované názvy skupin (stejný formát) usnadňují správu a zvyšují přehlednost. Název skupiny se tvoří z názvu předmětu a cvičební paralelky. Dále je zde ještě zobrazen den a čas začátku cvičení. Použitý formát je např. "X36POK par101 (Ut 14.30)". Formát je případně možné změnit v souboru moodle/lib/grouplib.php, ve funkci createGroupName(…). Je tam komentář, který vysvětluje jaké proměnné předávají jaká data a v jakém formátu. Při změnách je nutné mít na paměti požadavky pro použití "nadskupin" viz. další odstavec.
8.6.3
Nadskupiny (předměty, skupiny skupin)
Při vytvoření skupin podle cvičebních paralelek vznikne velké množství skupin, proto je vhodné, aby se i skupiny mohly vkládat do skupin (nadskupin) podle předmětu (např. X36POK) a tím zjednodušovat a zpřehledňovat práci.
8.6.3.1 Výběr způsob získání nadskupin •
Využít shodného formátu názvů skupin - snadnější řešení. Nadskupiny pak tvořit pouze "virtuálně". Jako nadskupinu brát např. všechny skupiny, jejichž název začíná "X36POK". Toto řešení jsem použil.
•
Vytvořit další dvě tabulky v databázi - složitější a profesionálnější. "Název nadskupiny" a druhá "propojení skupin a nadskupin". Zde by bylo velice složité naprogramovat spolupráci s dalšími částmi programu hlavně by neúměrně rostla složitost SQL dotazů, proto jsem to nepoužil.
8.6.3.2 Řešení nadskupin - požadovaný formát názvu skupin Jak bylo napsáno výše při použití nadskupin se využívá shodnosti první části názvu skupiny. Při výběru (když použiji nadskupinu jako parametr pro zobrazení studentů) nejsou žádné problémy (možná jen, pokud by si někdo vytvořil manuálně skupinu "X36POK nějaký text", jenž by také patřila pod předmět "X36POK"). Název skupin musí začínat názvem předmětu a za ním musí následovat mezera. Při hledání nadskupin se v názvech skupin hledá první mezera (která odděluje název předmětu). Mezi nadskupiny se zobrazí jen text (do první mezery) z názvů skupin, kde je mezera a kde délka přečteného názvu předmětu je <4, 7> (nenašel jsem předmět s kratším (34SP), nebo delším názvem(XE34SIO), než je uváděno). Pokud je ale vytvořena manuální skupina s mezerou v názvu a "nevhodně" dlouhým prvním slovem, v nadskupinách se také objeví. To není možné jednoduše kontrolovat. Bylo by možné použít pro kontrolu regulární výrazy, ale nejspíše ne jeden, ale několik, kvůli velice proměnlivé struktuře názvů předmětu. Má jednoduchá kontrola, ale zachytí okolo 90% nevhodných názvů skupin (ze kterých nelze tvořit nadskupinu) a to je dostatečné.
40
8.
Implementace - správa studentů
8.6.4
Správa skupin
Pro snadnější správu skupin je zde několik funkcí, které automaticky pomohou odstranit skupiny, které již nechceme. Touto poloautomatickou správou je vhodné vyčistit skupiny poté, co dojde k přezkoušení vyhlášky u většiny studentů, aby se zabránilo smíchání starých a nových skupin a tím ke snížení přehlednosti. Dále se tím zabrání možnosti, že by student mohl po importu začít psát test, který by mu nenáležel, pokud by zůstal členem nějaké staré skupiny, které zůstalo staré povolení z dřívějška a např. nebyla aktualizována. Záleží tedy také na učiteli, jak pečlivě bude odebírat povolení skupinám, které test již napsaly. (povolení psaní testu viz. 7.5) a nebo jak bude staré skupiny odstraňovat.
8.6.4.1 Smaž skupiny, kde není žádný aktivní účastník Vyberou se skupiny, ve kterých není žádný student, nebo pokud je, tak je ve stavu 0 (je neaktivní). Tyto skupiny se zobrazí v seznamu a pak je možné si vybrat, zda se smažou všechny, nebo jen vybrané.
8.6.4.2 Smaž skupiny vytvořené před více než… Vyberou se skupiny, které byly vytvořeny dříve než zadaná doba (1 měsíc až 4 roky). Tyto skupiny se zobrazí v seznamu a pak je možné si vybrat, zda se smažou všechny, nebo jen vybrané. Skript, na zobrazení tohoto seznamu je stejný jako v předchozím případě.
8.6.4.3 Původní manuální správa skupin Použití původní správy nejde prakticky použít pro 7000 studentů FELu a několik desítek skupin. Pro funkci je potřeba mít povolený JavaScript. Případné další informace jsou v nápovědě k Moodlu.
8.6.5
Tvorba skupin - podle předmětů z KOSu
moodle/kos/… (Celé moje) Význam této stránky se projeví pokud by nebylo možné rozdělit studenty do skupin při importu, popřípadě, pokud by bylo potřeba studenty dělit podle více předmětů. Zde se tedy tvoří skupiny podle dat získaných z KOSu. Musíme tedy získat data z KOSu alespoň zprostředkovaně.
8.6.5.1 Způsob získání dat • •
•
•
Přímo napojení na KOS - není možné. Napojení na databázi, která je aktualizovaná podle KOSu - nevím, zda nějaká databáze existuje, ale je pravděpodobné, že ano. Tato možnost by byla asi nejpříjemnější na administraci. Bohužel, zatím není podporovaná. Možnost doprogramování by měla být snadná viz. dále. Pomocí souborů CSV pro všechny tabulky KOSu (dále jen myKOS) - Toto řešení je na údržbu "složité" na začátku, kdy je nutné na začátku každého semestru aktualizovat soubory na serveru Moodlu. Na druhou stranu dále poskytuje jednoduchou možnost, jak tvořit skupiny. Ve stávajícím programu podle předmětu. Po přeprogramování by se daly parametry jednoduše změnit. Např. tvorba skupiny podle vyučujících. Pomocí seznamu studentů exportovaného z KOSu (např. seznam studentů zapsaných na určitý předmět) - tato možnost je podobná importu viz.8.4. Další informace viz. dále.
41
8.
Implementace - správa studentů
8.6.6
Použití seznamu studentů exportovaných z KOSu
Tato možnost je velice podobná importu studentů viz. 8.4. Jako vstup se tedy používá stejný soubor jako v importu (textový soubor, který se získá z KOSu (příklad získání těchto dat: v KOSu zobrazení předmětu -> tisk do souboru). Formát souboru v době psaní BP viz. přílohy 16.1.1 import studentů")
8.6.6.1 Provedení skriptu Tato aktualizace skupin je ve skutečnosti stejný skript jako pro import v admin/uploaduser.php, ale při použití pro pouhou aktualizaci skupin (zde) se neprovádí veškeré operace (využívá se zde načtení souboru, dekódování načtených dat a tvorba skupin. Neprovádí se: tvorba nových uživatelů, přiřazování do kurzu, přidávání povinnosti plnit vyhlášku). Pokud tedy je v souboru nalezen uživatel, který neexistuje v Moodlu, bude tento uživatel ignorován. Zda se jedná o import studentů, nebo update skupin, se pozná podle přítomnosti proměnné $groupsonly=1, která se přidává přes URL, když chceme update skupin. Přesné fungování tohoto programu je v 8.4. Samozřejmě bez určitých částí, jak bylo napsáno výše.
8.6.7
Pomocí myKOSu (použití souborů CSV pro všechny tabulky KOSu)
Databáze KOSu je nepřístupná pro programy mimo KOS. Není tedy možné brát data přímo z něho. Každý den se ale data z KOSu exportují do souborů na stránky http://service.felk.cvut.cz/kos/. Tato data jsou ve formátu textového souboru, sloupce oddělené čárkami a textové sloupce jsou v uvozovkách. Tento formát je použitelný pro použití v našem programu.
8.6.7.1 Nahrání požadovaných souborů na server Moodle (změna cesty k souborům) Nutno provést po začátku každého semestru (nejlépe po prvních čtrnácti dnech, kdy již studenti nemohou měnit do jakého cvičení chodí). Soubory, které jsou požadovány jsou umístěny na service.felk.cvut.cz/kos/. Zde je umístěno 8 souborů. (V dosavadním programu se sice nepoužívají všechny soubory, ale je vyžadováno, aby byly nahrány všechny). Požadované soubory: katedry, mistnosti, predemety, rozmist, rozstud, studenti, ucitele, zapis. Formát těchto souborů viz. přílohy 16.1.6 "Data z KOSu". K nahrání bude učitel vyzván, pokud některý z vyžadovaných souborů není dostupný (tzn. nejen když tam soubory nejsou, ale i při chybě serveru). Nebo je možné soubory aktualizovat manuálně na stránce kos/configkos.php (během práce s myKOSem je na config dostupný link). Jsou dvě možnosti, jak nahrát: • Pomocí Moodlu - v configkos.php je seznam požadovaných souborů. U každého je tlačítko, kterým se zavolá v Moodlu původní skript, který zajišťuje upload souborů na server a zároveň vrací do configkos.php cestu k nově importovanému souboru. (další informace pro práci s uploadem na server jsou k nalezení v nápovědě. • Manuálně - soubory nahrát na server např. přes FTP a pak v configkos.php nastavit manuálně cestu k souboru. (Na dané www stránce jsou inputboxy, do kterých je třeba napsat správnou cestu). Vzhledem k tomu, že zde je potřeba zajistit, aby data v souborech zůstala aktuální, můj program hlídá, aby doba od uploadu souboru nebyla starší než 3 měsíce. Pokud je soubor starší napíše se u něho varování (ale zůstává stále použitelný). 42
8.
Implementace - správa studentů
8.6.7.2 Způsob práce s myKOSem Výběr katedry, předmětu Nejprve se otevře soubor katedry.txt a odtud se vypíšou všechny katedry. Z nich si učitel vybere jednu, na které si určí předmět, podle kterého chce dělit (defaultní katedra se dá nastavit v souboru kos/readconfig.php). V dalším kroku si obdobně vybere předmět.
8.6.7.3 Průběh aktualizace skupiny Znám ID předmětu. Z toho si zjistím v tabulce "rozmist" (rozvrhové lístky místností RLM) informace: cvičební paralelky, časy začátku cvičení, ID RLM. Dále si v tabulce "rozstud" (rozvrhové lístky studentů - obsahuje spojení ID RLM a ID studenta) jací studenti jsou zapsáni v daných cvičeních. Nakonec díky znalostem ID studenta si zjistím jeho uživatelské jméno v tabulce "studenti". Z informací o všech paralelkách si předvytvořím skupiny v automatickém formátu (viz. dřívější text). Po té si databáze Moodlu vyberu všechny studenty. Postupně je procházím a porovnávám jejich username (pro KOS) a porovnávám, zda se vyskytuje i v načtených studentech z myKOSu. Pokud ano, vloží se daný student jako člen do odpovídající skupiny.
8.6.7.4 Čtení souborů myKOSu Kvůli případnému přeprogramování získávání dat z KOSu, jsem se zde rozdělil tuto činnost na dvě části. Soubor kos/locallib.php čtení ze souboru a navrácení načteného pole objektů a kos/setupgroups.php, které předané pole zpracovává, vybírá, co je potřeba a tvoří skupiny. Podobně soubor kos/configkos.php obsahuje pouze obecné funkce k nastavení tvorby skupin. Funkce závislé na implementaci získávání dat se opět nachází v kos/locallib.php. Pole objektů, které se vrací má stejný formát, který vrací původní funkce moodlu get_records_sql(…). Tzn. pole objektů. Každý objekt je jeden záznam z databáze. (př. $user[22]->username, $user[22]->id,…) Funkce, které zajišťují načtení dat ze souboru a vrací pole objektů. Pro každou tabulku (stejnojmenný soubor) je jedna funkce např. "select_katedry(…)". Tyto funkce se snaží být podobné SQL dotazům. Jsou zde parametry jež se chovají jako WHERE v SQL. Tzn. snižují počet načtených řádků, aby se s nimi zbytečně nepočítalo. Parametry těchto funkcí jsou: o whereCol - jaký sloupec nás zajímá "název slupce string". Stringový název se ve funkci převede na pořadové číslo sloupce. o whereIs - Jedna proměnná, která když se rovná prvku z daného sloupce, přidá se daný řádek do výběru (vrátí se). o whereIsArray - stejné jako whereIs, ale testuje se pole proměnných. Funkce "select_...(…)" se primárně starají o převod stringového názvu sloupce na pořadové číslo sloupce v souboru, zavolají funkci čtení souboru a tvoří z dat načtených ze souboru přehledné pole objektů. Pokud se zjistí, že načtený soubor nemá správný počet sloupců zobrazí se chyba. Přímo čtení dat ze souboru provádí funkce "read_from_file(…)" Parametry má podobné jako funkce "select_...(…)" s tím rozdílem, že zde se název sloupce předává jako pořadové číslo sloupce v souboru a vrací dvourozměrné pole načtených dat.
43
8.
Implementace - správa studentů
setupgroups.php obecné, nezávislé na způsobu čtení - volání fcí "select_...(…) v parametru "název" sloupce - zpracování vrácených polí objektů - tvorba skupin…
locallib.php Závislé na metodě čtení (zatím podpora čtení textového souboru…) - umístění fce "select_...(…) - umístění fce - úprava předaných parametrů read_from_file(…) název sloupce na jeho pořadové - čtení souboru podle číslo v souboru zadaných parametrů (vrací se - zavolání fce read_from_file(…) jen řádky vyhovující - převod vráceného podmínce "WHERE") dvourozměrného pole na pole - vrácení načteného objektů dvourozměrného pole - a jeho vrácení
8.6.7.5 Změna formátu souborů exportovaných z KOSu (přehození sloupců v souboru) Pro nápravu je nutné v souboru kos/locallib.php změnit ve všech funkcích "select_...(…)" převod mezi názvem sloupce a pořadovým číslem sloupce v souboru.
8.6.7.6 Další funkce vázané na "způsob čtení dat z KOSu" (zde ze souborů): o test_file(…) - test zda daný soubor (popř. tabulka) existuje. o test_and_update(…) - parametr je cesta k souboru. Tato funkce zjistí, zda to je absolutní cesta k souboru. Popř. jestli to je "relativní do datové složky kurzu". o update_kos(…) - otestuje přítomnost všech souborů (tabulek) pokud nějaký soubor není dostupný zobrazí formulář na znovu nastavení cest. (tato funkce se volá i při vynuceném nastavení cest). o check_form_kos(…) - funkce, která se stará o vyhodnocení formuláře vytvořeného v předchozí funkci.
8.6.8
Případné napojení mého programu na externí databázi aktualizovanou z KOSu
Nutnost nahrávání souborů na server je nepříjemná. Příjemnější řešení by bylo nepoužívat soubory exportované z KOSu, ale přímo být napojen na databázi, která by se občas aktualizovala podle KOSu. Pokud takováto možnost existuje nemělo by být složité předělat spolupráci s mým programem. o Jednoduchá, (ale neefektivní) možnost - pouze přepsat získávání dat v "select_...(…)" funkcích. o Nebo přeprogramovat velkou část "kroku 2" v souboru setupgroups.php. Tak, aby se spojování tabulek nahradilo jedním velkým SQL dotazem se strukturou vrácených dat podobnou jako při " Použití seznamu studentů exportovaných z KOSu "
44
8.
Implementace - správa studentů
8.7
Formuláře /moodle/lib/formularelib.php (Upraveno a rozšířeno ze stránky výsledků testu)
8.7.1
Obecně k exportu a formulářům
Možnost tisku formulářů se nachází na stránce výpisů studentů (viz. 8.3). Do formuláře se vkládají všichni studenti, kteří vyhovují zadaným parametrům pro zobrazení studentů (pod tabulkou, skupiny i předměty) (exportují se i řádky, které se na stránce nezobrazily z důvodu její omezené kapacity). Není obecné pravidlo pro které studenty by se měly formuláře tisknout. Nejlepší je zobrazit si studenty jedné paralelky a pro ně si formulář vygenerovat. POZOR. Program neumí exportovat do souboru Excel více než 100 studentů! To se řeší tak, že se při větším množství automaticky použije formát CSV, ve kterém na počtu exportovaných studentů nezáleží (hodnoty jsou v odpovídajících buňkách, ale pak je nutné si dodělat formátování dokumentu - např. ohraničení buněk,…). Při tisku formuláře se mění jazykové kódování souboru viz. 8.5.7.
8.7.2
Typy formulářů
(zatím vytvořené) Sběr podpisů pro test - viz. přílohy 16.1.3 "Formuláře podpisy ". Tento formulář slouží ke sběru podpisů studentů, kteří potvrzují, že splnili školení BOZP (zakončené testem). Pokud se exportují členové skupiny (paralelky) je před výpisem studentů napsáno o jakou skupinu se jedná. (to samé se děje, pokud se exportují studenti předmětu (skupiny skupin). Text formuláře vychází ze skutečného formuláře. Jediné co jsem změnil, byl sloupec "datum narození studentů", který sloužil k jedinečné identifikaci studenta. (není vhodné veřejně používat data narození nebo dokonce rodná čísla). Tento sloupec jsem nahradil sloupcem uživatelské jméno, které studenti znají (stále jej používají je v emailu) a také je jednoznačně identifikuje. Proměnné "skolení provedl", "v místnosti", "datum" se mění automaticky. viz. dále. Protokol o splnění testu - viz. přílohy 16.1.3 "Formuláře podpisy". Tento formulář slouží k evidenci osob, které plní (prodlužují platnost) vyhlášku 50 paragraf 11. Text formuláře vyhází ze skutečného formuláře. Automaticky se vyplní pole: jméno, tituly, zařazení, pracoviště osoby. Dále se zobrazí zda osoba zvládla napsat test (napíše se na kolik procent osoba splnila test - pokud psala více testů zobrazí se nejlepší úspěšný pokus). Jsou předpřipravené kolonky na zadání ústní otázky a na podpisy komise (jména členů komise program neumí automaticky vyplnit). Celý formulář vypadá tak, že v souboru Excel je formulář pro každého studenta umístěn na novém "listu" (sheet). Proměnné "předseda komise", "členové komise", "datum a čas" se mění automaticky. viz. dále.
45
8.
Implementace - správa studentů
8.7.3
Plnění formuláře automatickými daty
Formuláře obsahují data jako "členové komise", "osoba provádějící školení" atd. tato data se načítají ze souboru /moodle/formulare/config.php a je nutné je manuálně aktualizovat, když se změní obsazení komise. Data jsou pro jednoduchost uložena jako proměnné.
8.7.4
Změna/ přidání formát exportovaných dat
Vzhledem k tomu, že může být požadován další (nebo úprava stávajícího) formuláře, je možnost ho nastavit v souboru lib/formularelib.php. (jedná se o změny: jaká data se mají zobrazit, kde se mají zobrazit, jak mají vypadat atd.).
8.7.4.1 Při přidání nového formátu je potřeba udělat o Nastavit název formuláře a tlačítka - (podle tohoto názvu se v dalších funkcích rozpoznává o jaký formulář se jedná) nastavuje se při tvorbě tlačítka. funkce " print_button_formulare(…)" v souboru lib/formularelib.php. Název se přidává do $options["formulare"]. Dále je třeba nastavit jaký typ souboru bude formulář (CSV/Excel). o Hlavička souboru - (co za text se zobrazí na začátku souboru) funkce, která to zajišťuje je "print_header_formulare(…)". Zde se v "sérii IFů" vybírá jaká konkrétní funkce pro tisk hlavičky se má pro daný formulář zavolat. (např. "print_header_formulare_název formuláře(…)" ). Parametry viz. zdrojový kód. o print_data_formulare (…) - tisk pole objektů získaného SQL dotazem (pole studentů). Je to obdobné, jako u hlavičky. Jen se dále volají jiné funkce. (jak funkce vypadá a jaké má parametry viz. komentáře ve zdrojovém kódu). Přímo ve funkci formátu bude cykl, který vytiskne všechny prvky z pole. o Obě předchozí funkce mají jako parametr proměnnou "class DOWNLOADOBJECT $downloadObjekt", která obsahuje proměnné, sloužící k identifikaci zapisovaného souboru (např. u typu souboru Excel obsahuje identifikátory "listu", "sešitu" a řádku). Tato třída se předává jako parametr funkcím tisknoucím hlavičku i tělo exportovaného souboru.
8.7.4.2 Limity změn formátů Je poměrně snadné změnit (přidat) formulář, ale musí se použít jediné podporované formáty: textový CSV nebo Excel. Pokud by bylo potřeba přidat např. formát PDF, byl by nutný zásah do programu. Principielně by šlo o: o Nahrání daného rozšíření na server. o V souboru user/index.php přidat typ souboru "PDF" a jeho tvorbu header a inicializace stahovaného souboru (podobně jako u stávajícího formátu Excel). o Bylo by nutné rozšířit obsah "class DOWNLOADOBJECT", která obsahuje proměnné, sloužící k identifikaci zapisovaného souboru (např. u typu souboru Excel obsahuje identifikátory "listu", "sešitu" a řádku). Tato třída se předává jako parametr funkcím tisknoucím hlavičku i tělo exportovaného souboru. o Nakonec by bylo samozřejmě nutné vytvořit nový formát. viz. výše.
46
8.
Implementace - správa studentů
8.7.5
Funkce pro zápis do .xls souboru
/lib/excel/… zde jsou soubory, kde se dají najít všechny funkce pro zápis do Excelu. Důležité soubory: test - ukázkový soubor s použitím funkcí, Format - funkce na formátování buněk, Worksheet - funkce s pracovním listem.
8.8
Import vyučujících do kurzu (doplnění k import studentů viz. 8.4)
8.8.1 • •
8.8.2
Způsoby tvorby vyučujícího Manuální vytvoření osoby a manuální zařazení do role učitel. Je nutné být přihlášen jako administrátor. Import pomocí souboru. Stačí práva jako učitel.
Import pomocí souboru
Využívá se zde stejné stránky jako pro import studentů viz. 8.4. Formát importovaného souboru je stejný jako v případě "import osoby na paragraf 11". Formát viz. přílohy 16.1.1 "Import". Pro jednoduchost se vyučujícímu také přidává vyhláška k plnění, i když žádnou plnit nebude. Program je koncipován tak, že každá osoba musí mít alespoň jednu vyhlášku (i archivní).
9. Implementace - dokončení
9.1
Databáze
Musel jsem přidávat tabulky do databáze a u některých stávajících přidávat sloupce. Zde uvádím jaké změny byly provedeny.
9.1.1
Tvorba a uložení skriptu tabulek
Tabulky databáze se tvoří při instalaci Moodlu. Informace o základních tabulkách jsou v adresáři: moodle/lib/db/… . Informace o jednotlivých komponentách (já měním jen quiz a tak uvádím cestu k němu) moodle/mod/quiz/db/… .
47
9.
Implementace - dokončení
V adresářích se nacházejí soubory: install.xml (tabulky popsány jazykem XML), mysql.sql, postgres7.sql (poslední dva obsahují SQL skript). Při instalaci se preferuje XML soubor, teprve, při jeho chybě se zkouší SQL skripty.
9.1.2
Změny provedené v databázi
Viz. přílohy 16.2 "Databáze".
9.2
JavaScript
Stránky a funkce, které jsem psal já ke své práci nepotřebují JavaScript, ten pouze usnadňuje práci. Používat JS je velice doporučeno. Např. všech výpisech jsou JS funkce označ vše (zruš vše), JS kontroluje formuláře atd.
9.2.1
Některé původní části Moodlu bez JS vůbec nefungují
o Manuální správa skupin viz. 8.6 o Upload souborů na server viz. 8.6.7 o "Někdy" psaní testu studentem (nefunguje pouze je-li vyžadováno psaní v zabezpečeném okně, jinak psaní funguje i bez JS viz. 7.3 vstup do testu).
9.3
Validita HTML
Stránka má nastaveno typ dokumentu "Transitional". Stránky, které jsem upravoval jsou validní (s výjimkou JavaScriptu na některých stránkách). Stránka moodle/quiz/edit.php validní není, ale chyby jsou již v původní části kódu (stránka se ale správně zobrazuje v FireFoxu i Exploreru).
9.4
Paralelní přístupy
9.4.1
Vyučující - "správci kurzu"
Na správě kurzu může spolupracovat více učitelů, kteří mají stejné pravomoci. Předpokládá se, že jeden vyučující provede import studentů a o správu studentů (povolování testů, export studentů) se může starat více vyučujících. Povolování testů, export studentů je možný jak pro všechny studenty, tak pro předměty (skupina skupin) i pro jednotlivé cvičební paralelky (jednotlivé skupiny). Při spolupráci více vyučujících na správě kurzu je nutné zajistit mezi vyučujícími domluvu, aby každý z nich spravoval jen studenty, které má přiděleny (jen své skupiny).
48
9.
Implementace - dokončení
9.4.2
Běžné chyby při paralelní práci
Paralelní zpracování jsem musel více řešit na stránce povolování testu pro studenty viz. 7.5 (stručně: pokud dva vyučující povolují testy pro rozdílné skupiny, je třeba dbát na to, aby si vzájemně nerušili povolení). Podobná situace sice může nastat i v ostatních formulářích (např. dva vyučující si najednou zobrazí vyhlášky studentů. Ten první exportuje část studentů a chvíli po té chce i druhý exportovat studenty, pokud o sobě nevědí, druhý vyučující exportuje jen studenty, které první vyučující neexportoval (Pokud by o sobě oba vyučující věděli, nebyl by problém exportovat i již exportované studenty). Toto jsem neřešil, protože tyto případy jsou málo pravděpodobné. Zabránění této možnosti by bylo velice komplikované.
9.4.3
Studenti
Najednou může být přihlášeno velké množství studentů, ale každý jen sám za sebe. Proto není nutné nijak řešit paralelní přístupy.
9.5
Záloha
Můj program přímo nepodporuje vytvoření a obnovení zálohy. Je nutné použít "externí" program a zálohovat databáze zvlášť. Server, na kterém program poběží, si bude pravděpodobně zálohu DB zajišťovat automaticky.
9.5.1
Zálohování - perioda zálohování, co zálohovat
Tento program se nebude používat celoročně, ale spíš nárazově (Testování BOZP probíhá převážně v několika termínech po začátku semestru). Během aktuálního používání by bylo dobré zajistit zálohu DB nejlépe každou noc, aby v případě chyby serveru bylo ztraceno minimum informací (testy psané studenty během jednoho dne). V době mimo psaní testů BOZP není nutné databázi zálohovat (pokud budu předpokládat, že v této době nebudou žádné adhoc psaní BOZP testů). Dále je nutné zajistit zálohu souborů nahraných na server (přednáškové materiály). Ty jsou umístěny v adresáři (viz. proměnná dataroot v config.php) moodledata/id_kurzu/. ID kurzu je vidět např. v url na úvodní stránce kurzu course/view.php?id=…. Také je dobré si zálohovat (stačí jednou při instalaci) soubor config.php. Ten obsahuje základní nastavení programu (typDB, přihlašovací jméno, heslo).
9.5.2
Obnovení ze zálohy
Toto opět není řešeno v programu. Při pádu serveru a ztrátě všech informací na něm uložených je nutné: nainstalovat znova program (nastavení při instalaci použít nejlépe ze souboru config.php viz. výše), pak obnovit databázi ze zálohovaného souboru. Toto předpokládá, že při reinstalaci nedojde ke změně nastavení (oproti původní).
9.5.3
Nepoužitá záloha v Moodlu
Moodle v sobě obsahuje možnost zálohy. Protože jsem již neměl čas tuto zálohu upravit, nepoužil jsem ji. Raději jsem ji skryl, aby ji případný uživatel mylně nepovažoval za plně funkční. Soubory zálohy jsou např. mod/quiz/backuplib.php, backup/….
49
9.
Implementace - dokončení
Aby byl vidět odkaz na zálohu na úvodní stránce kurzu, je nutné odkomentovat v souboru bocks/admin/block_admin.php skript u komentáře "/// Backup this course".
9.6
Přestup na další verzi Moodle
Při psaní programu jsem nepočítal s tím, že by se dalo snadno přecházet na nové verze Moodlu.
9.6.1
Způsob přechodu na další verzi - úpravy souborů
Pokud by tato potřeba byla (např. z důvodu objevení bezpečnostní chyby) bylo by nutné nahradit některé stávající soubory těmi z nové verze a zároveň kontrolovat, zda původní soubor nebyl upravován. V tom případě by bylo nutné kontrolu prohloubit a porovnávat jednotlivé funkce, popř. obsah jednotlivých funkcí. Seznam upravovaných souborů viz. přílohy 16.3 "Soubory změněné při práci". Přímo v programu jsou mé změny označeny zepředu a zezadu komentáři "// -------------" (Soubory, které jsem psal kompletně sám nemusí tyto komentáře obsahovat).
9.6.2
Možné řešení jak přepsat kód, aby se dalo běžně přecházet na nové verze
Například tak, že by základ psaní testů BOZP byl kompletně modul. Pak by se při nové verzi pouze nahrál nový modul a v několika dalších souborech by se upravilo např. co se má implicitně zobrazit na první stránce atd. Přeprogramování by nebylo triviální. Nejspíše by se vyšlo z modulu "quiz" (mod/quiz/…). Tzn. bylo by nutné přejmenovat všechny vázané tabulky v databázi. Dále jsou zde vazby na ostatní komponenty (některé např. questions) byly také upravovány. Dále vyřešení zobrazení a správy vyhlášek. Zde by se dal opět vytvořit nový modul. Zjednodušeně řečeno všechny upravené soubory (týkající se vyhlášek) by se nahrály do jednoho adresáře. Opět by se musely řešit vazby na další komponenty.
50
10.
Testování programu
10. Testování programu
10.1 Testovací konfigurace 10.1.1 Lokální server Server: lokální na osobním počítači. Pro jednoduchost, nenáročnost na instalaci, nastavení a obsahu všech potřebných knihoven, jsem zvolil WAMP5 server verze. 1.6.6. Ta obsahuje: PHP 5.2.0, MySQL 5.0.27. HW: CPU Pentium M 740 (1,73GHz, 533FSB) 512MB, 533MHz DDR2 HDD 80GB, ultraATA, 4200rpm OS: winXP prohlížeč: FireFox 2.0.0.3 Databáze: název DB a prefix tabulek jsou rozdílné od hodnot, použitých při vývoji. Testována čistá instalace, podle návodu uvedeného v BP. Způsob ověřování uživatelů: "pouze ručně vytvářené účty" (v době testování nebyl dostupný jiný způsob). Excel: MS Excel 2003
10.1.2 Skutečný server dsnlab10… Program byl testován i na školním serveru dsnlab10… Server: Apache 2.2.3, PHP 5.2.0.8, MySQL 5.0.32. HW: CPU Intel Core 2 Duo E6300 (1.86GHz, 1066FSB) 2 x 1024MB, 800MHz DDR2 HDD 320GB, Serial ATA, 7200rpm OS: Linux Debian prohlížeč: Explorer 6.0 Testována čistá instalace, podle návodu uvedeného v BP. Způsob ověřování uživatelů: "pouze ručně vytvářené účty" (v době testování nebyl dostupný jiný způsob). Excel: MS Excel 2003
10.2 Obecná funkčnost Toto bylo ověřováno již během psaní BP. Zde provádím závěrečný test. "Testuji zda vše dělá co má", zda vše spolupracuje a zda nedochází k negativnímu ovlivňování součástí atd. Toto vše bylo testováno již při vývoji. Průběh závěrečného testu. viz. přílohy 16.4 "Postup při testování". Test byl proveden jak na lokálním serveru (s firefoxem), tak na serveru dsnlab10 (s explorerem).
51
10.
Testování programu
10.3 Zátěžové testy Pro tento test importuji do databáze velké množství studentů (7000) a testuji, jak se systémem pracuje. Testovací data jsou založena na skutečných datech (exporty z KOSu). Všechny tyto soubory jsou umístěny v přílohy 16.1.6 "Data z KOSu". Ze zveřejněných dat byly odstraněny citlivé informace, jména, RČ atd.
10.3.1 Výňatek nejdůležitějších hodnot Zde následují data získaná při testování na serveru dsnlab10. Počet ovlivněných studentů Odezva při práci s formuláři 7000 / zobrazeno 35 Manuální změny na stránce zobrazení studentů - změna 300 (předmět) stavu vyhlášky, odebrání vyhlášky atd. 35 (paralelka) Všichni studenti byli zaškrtnuti checkboxem Import (přidání povinnosti plnit vyhlášku) 300 (předmět) Export studentů 300 (předmět) Potvrzení exportu 300 (předmět) Při přidávání / odebírání povolení psát test pro skupiny 300 (předmět) i jednotlivce 35 (paralelka) Požadavek
čas zpracování < 1 sec 10 sec 1 sec 5 sec 5 sec 1 sec 1 sec 1 sec
Veškeré hodnoty viz. přílohy 16.5 "Výsledky testování reálného množství studentů". Protokol obsahuje i mezní testy - práce s 2000 studenty najednou. Dále jsou zde testy na lokálním serveru, kde časy byly mnohem delší, než na serveru dsnlab10.
52
Porovnání s existujícími řešeními
11.
11. Porovnání s existujícími řešeními 11.1
Tabulka s porovnáním otázka
Tento program
BOZP (Kontis s.r.o.) odkaz [9]
vyhl50_win/dos odkaz [6]
Plnění online - po internetu
ANO
ANO
NE
Správa výsledků starých testů na serveru
ANO
spíše NE (maximálně v rámci 12 měsíců, kdy je povolen přístup)
NE
Uživatelská přívětivost
ANO
ANO
NE
Administrace kurzu
ANO
Cena
0 Kč
Možnosti otázek v testu
Pevně dané i náhodně generované, možnosti úprav otázek
nezjištěno (ke kurzu lze veřejně přistoupit pouze jako uživatel) 113Kč / jeden kurz (pro jednu osobu přednáška a dva testy) Náhodně generované
NE
0 Kč
Pevně dané - není možno přidávat ani upravovat
Tisk formulářů o plnění vyhlášky 50
ANO
spíše NE
Počet lidí, pro které je program určen
tisíce
tisíce
Podpora skupin Podpora výuky zobrazení dalších materiálů
ANO ANO (vše jako v originálním Moodle viz. 6.3.2)
spíše ne
ANO (Nutno tisknout dva formuláře a ty manuálně spojit) desítky - je nutná manuální správa výsledků atd. NE
ANO - připravená online přednáška
ANO - ale jen minimální
Několik typů kurzů
ANO - "neomezený počet"
Specializovaný kurz pro vedoucí a pro běžné zaměstnance
Jen kurz pro vedoucí
Možnost úprav výsledků, manuální zásahy
ANO
spíše NE
NE
Platforma
PHP, MySQL
Flash
Macromedia Authorware
ANO
ANO
NE (volně přístupné)
NE
ANO
ANO
Přidání povinnosti plnit vyhlášku jen vybraným lidem Možnost plnit test na
53
11.
Porovnání s existujícími řešeními
ukázku Navrhnuto pro FEL ČVUT
11.2
ANO
NE
ANO
Závěr
Můj program se snaží používat ty nejlepší možnosti, které nabízejí ostatní porovnávané programy (výukové materiály, formuláře) viz. předchozí tabulka. Oproti ostatním programům umožňuje jednoduchou správu velkého množství uživatelů (a s tím související - povolování testů jen pro vybrané studenty, velké možnosti pro filtrování zobrazených studentů, správa skupin, nadskupin viz. text BP). Dále je zde navíc archivace starých vyhlášek, je přizpůsoben pro práci s KOSem na FEL ČVUT. Jediné co mu schází, je možnost plnění testu na ukázku. To lze nahradit exportem testu a jeho následné umístění do kurzu.
54
12.
Pokračování práce
12. Pokračování práce 12.1 • •
12.2 • •
• • • • •
• • • • • • • •
Co by bylo vhodné dodělat, předělat Dodělat formuláře, které by byly potřeba, nebo upravit stávající. Přidat import ze souboru xml..
Co by bylo možné dodělat předělat Umožnit lepší plnění automatických dat do formulářů viz. 8.7 Přidat možnost "undo" - pro každou operaci, která nastavuje studenty mít možnost ji jednoduše anulovat. (Zatím je možnost jen provést korekci manuálně podle obsahu logu.Tato úprava by nebyla triviální, vyžadovala by velký zásah do kódu programu, musel by se kompletně předělat log, aby bylo vidět, jaké hodnoty byly původní). Upravit původní zálohu v Moodlu tak, aby fungovala i na nové tabulky. Přepsat kód tak, aby se dalo plynule přecházet na další verze Moodlu, bez velkých úprav kódu. Podrobnosti viz. 9.6 Předělat SQL dotaz vypisující vyhlášky a testy pro vyhlášky u jednotlivých studentů (mod/quiz/indexstudent.php viz.7.3) Zatím jsou zde spojeny výsledky tří různých dotazů. SQL dotaz funguje správně. Ale není vhodně řešen. Při importu studentů dát možnost aktualizovat jen vybrané položky studenta (jméno, email) podle importovaného souboru. Přeprogramovat import vyučujících, aby se zde nezobrazovaly parametry k nastavení, které nejsou použitelné pro učitele (např. přidávání vyhlášky). K tomu by bylo třeba přeprogramovat výpisy v programu tak, aby se mezi studenty nezobrazovali učitelé (kteří u sebe nemají žádnou vyhlášku). Přeprogramovat výběr zobrazených skupin ve výpisech. Dát možnost zobrazit členy více skupin najednou. Např. "vyskakovacím oknem" ve kterém by se zobrazila stromová struktura skupin a kde by se zaškrtly skupiny, které se mají zobrazit. Přepracovat pravomoci vyučujících. Každý vyučující by mohl spravovat pouze určitou skupinu studentů. Zatím je nutná domluva mezi vyučujícími, aby každý spravoval pouze tu svou skupinu. Připojení ke KOSu - viz. správa skupin 8.6.7 Přidat automatické zasílání upozornění studentům, že jim bude končit platnost kvalifikace podle vyhlášky 50 (zatím je nutné manuálně vybrat studenty s končící vyhláškou a zaslat jim email). Přidat možnost vytvořit jeden ukázkový test, který si mohou studenti nezávazně vyplnit a otestovat si tak své znalosti. Vyhodnocování testů - bylo by zajímavé mít možnost nastavit kolik otázek může být špatně v každé kategorii otázek. (Toto by vyžadovalo velký zásah do programu, bylo by nutné přepsat všechny funkce vyhodnocující test). Tisk testů do PDF - Přidat možnost tisku testu do jiného, lepšího formátu např. PDF (zatím se tiskne do vhodně zformátovaného textového souboru). Lépe zpracovat přidávání modulů na různé typy importu, exportu a tisku formulářů.
55
13.
Závěr
13. Závěr Bakalářská práce splnila svůj cíl. Navrhl jsem a implementoval aplikaci na psaní testů BOZP po internetu.
13.1
Shrnutí řešení
Použil jsem stávající program na generování testů - Moodle, který jsem vhodně upravil. Změnil jsem původní modul psaní testů (přidal jsem např. na kolik procent je třeba test minimálně napsat, povolení testu jen pro vybrané studenty a další). Vytvořil jsem import studentů, kteří mají plnit test BOZP ze seznamu studentů jedné paralelky uloženého v souboru, který je získán z KOSu. Zatím je podporovaný pouze textový soubor CSV, u kterého je možné změnit formát načítaných dat. Podobným způsobem lze importovat osoby pro testování vyhlášky 50/78 Sb., §11. Dále je možné stejně snadno importovat seznam vyučujících, kteří budou spravovat studenty v systému. Na všech stránkách, kde se vypisují studenti (nebo se s nimi musí jinak pracovat), je možnost si zobrazit jen členy určitého předmětu, nebo jen paralelky (skupiny). Pro tvorbu skupin se ukázalo jako nejvhodnější řešení použití seznamu studentů jednoho předmětu, exportovaného z KOSu. Další implementovaná možnost "nepřímého napojení na KOS" se ukázala být nevhodná, kvůli náročnosti na vedlejší administraci (nahrání souborů na server programu). Přidal jsem možnost snadno rušit skupiny, ve kterých není žádný aktivní účastník, nebo které jsou staré. KOS neumožňuje zapsat zápočet seznamu studentů uloženému v souboru. Z toho důvodu je nutný manuální zápis zápočtu do KOSu, za splnění vyhlášky. Z těchto důvodů jsem navrhl formát exportovaného souboru, kde jsou studenti děleni podle paralelek vybraného předmětu, a tím se zadávání zjednoduší. Pro podporu psaní vyhlášky jsem implementoval formuláře na podpisy studentů a protokol o plnění vyhlášky 50/78 Sb., §11. Tyto formuláře jsou v praxi použitelné, ale není dopracovaná jejich pohodlná administrace. Program je po funkční stránce v pořádku. Při testech s velkým množstvím studentů uložených v databázi se program chová správně. Při běžné práci (výpisy studentů) jsou odezvy kratší než 1 sec. Import jednoho předmětu (300 studentů) trvá méně než 5 sec. I při nasazení na pomalejší server se s programem pracuje dobře, odezva je opět menší než 1 sec a časově náročné operace (např. import) se nemusí provádět tak často. Při psaní programu jsem nepočítal s tím, že by se dalo běžně přecházet na další verze Moodlu, a tak je případný přechod na další verzi náročný - vyžaduje zkoumání, jaké soubory je možné použít z nové verze. Také případná záloha není implementována přímo v programu, ale je nutné ji dělat manuálně na serveru. Zjistil jsem, že do Excelu lze exportovat pouze 100 řádek, jinak dochází k chybě souboru. Tuto chybu jsem vyřešil tak, že pokud se exportuje více řádek, automaticky se změní formát souboru na CSV (také lze otevřít v Excelu, ale bez zformátovaných buněk). 56
13.
Závěr
Program by bylo možné doplnit o další zajímavé možnosti, které by zjednodušily a rozšířily jeho využití - podrobnosti uvádím v kapitole 12.
13.2
Nasazení v praxi
Program je v nynějším stavu použitelný i v praxi. Nejprve by samozřejmě bylo nutné zahájit testovací provoz. Pro testování by bylo vhodné využít několik osob např., které mají plnit vyhlášku 50/78 Sb., §11. Po ukončení testovacího provozu by neměl být problém ho použít i pro studenty.
13.3
Vedlejší produkty práce
V průběhu této práce jsem zjistil jak je důležité nejdříve celý problém analyzovat a vždy si rozvážit důsledky navrhovaného řešení. Takto jsem si několikrát zbytečně přidělal práci, když jsem vytvořil řešení, které kolidovalo s jinou částí programu.
57
14.
Použitá literatura
14. Použitá literatura [1]
Stránky projektu Moodle http://www.moodle.cz http://www.moodle.org
Česká Oficiální
[2]
Stránka Moodlu na ČVUT http://ocw.cvut.cz/moodle/
[3]
Kvalitní nápověda k Moodlu s obrázky (slovensky) http://www.infosys.tnuni.sk/index.php?id=270
[4]
Stránky zabývající se tvorbou webu http://www.php.net/manual/cs/ http://www.jakpsatweb.cz http://amun.felk.cvut.cz/x36www/ http://service.felk.cvut.cz/courses/36DBS/ http://www.w3.org/
Manuál PHP HTML předmět X36WWW předmět X36SDBS World Wide Web Consortium
[5]
Návody na používání informačního systému, komponenta studia http://cs.felk.cvut.cz/~halaska/navody/indexkos.htm
[6]
Program na psaní vyhlášky 50 §11 na FEL ČVUT http://dsn.felk.cvut.cz/vyhl50_win/ http://dsn.felk.cvut.cz/vyhl50_dos/
[7]
Stránka hostující open-source software http://sourceforge.net/
[8]
Podpora tvorby e-lerningových kurzů - diplomová práce na FEL ČVUT autor: ing. Stanislav Duben http://www.duben.org/index.php?option=com_content&task=view&id=3&Itemid=20
[9]
Program na psaní testů BOZP po internetu - komerční. http://verejnost.itutor.cz/bundle.asp?bid=1004
[10] Další programy, ze kterých byl vybírán vhodný generátor testů. http://www.tecnick.com/ TCExam http://www.opensurveypilot.org/ OpenSurveyPilot http://sourceforge.net/projects/mysurveyserver/ MyServer WebSurvey toolbox http://sourceforge.net/projects/jspsurveylib/ http://www.soomka.com/ Quizzy GQuiz http://sourceforge.net/projects/gquiz/ http://www.microsoft.com/cze/education/ClassServer/ Microsoft class server http://www.markosoft.net/testcreator.html Test creator 3.7
58
15.
Slovníček pojmů
15. Slovníček pojmů … - vysvětlení termínů u testů viz. 7.1 aktivní student - student, který aktuálně plní vyhlášku (je ve stavu 1 až 4) CSV - comma separated values. Uložení "tabulky" do souboru. Jednotlivé sloupce jsou odděleny (většinou se používá: oddělovač sloupců čárka a zároveň každý sloupec v uvozovkách). V této práci je při importu použit výše zmíněný formát. Při exportu se používá oddělovač tabelátor. To má výhodu, že toto CSV lze otevřít v Excelu (hodnoty jsou rozděleny do buněk). BOZP - bezpečnost ochrana zdraví při práci. Na FEL se zároveň s testem BOZP píše i test z vyhlášky 50. Pro tuto bakalářskou práci jsou tyto dva termíny zaměnitelné. BP - bakalářská práce KOS - Informační systém, komponenta studia. Jsou zde informace o studentech, vyučujících (studované předměty atd.) import studentů - přidání studentovi povinnosti plnit vyhlášku kosname - uživatelské jméno používané v KOSu, nemusí být stejné s username pro přihlašování Kurz - Souhrn testů a materiálů ve kterém přihlášený student plní všechny své vyhlášky. minpercent - vlastnost testu, na kolik procent je ho potřeba napsat, aby byl považován za splněný Moodle - [můdl] softwarový balíček pro tvorbu a správu kurzů po internetu. myKOS - moje náhrada KOSu viz. správa skupin 8.6 paragraf vyhlášky - Stupeň kvalifikace vyhlášky 50 se dělí podle paragrafů - §3 až §11. parametry zobrazení (u výpisů) - nastavení, jací studenti (vyhlášky) se mají zobrazit (filtrování zobrazených výsledků). Jedná se o nastavení pod tabulkami např. zobraz jen studenty pasivní/aktivní, ve stavu atd. pasivní student - student, který nemá plnit vyhlášku je ve stavu 0. platnost vyhlášky - jak dlouho platí kvalifikace pro vyhlášku 50. Platnost je 2 roky. pokus, pokus o test - Studentem vyplněný a odevzdaný "test" povinnost plnit vyhlášku - student by měl psát BOZP. povolení psát test - zda student může vstoupit do testu. Musí se povolit. Lze pro studenty, nebo pro skupiny. viz. 7.5 potvrzení exportu - když je student exportován, dostane se do tohoto stavu a čeká se, než se mu potvrdí to, že mu byl zápočet zapsán do KOSu. viz. 8.5 program - Aplikace na vyplňování testů BOZP po internetu. Výsledek této BP. předmět - název předmětu (většinou používám kód např. X36POK), též nazýváno jako skupina paralelek (skupina skupin, nadskupina). přehodnocení pokusů - při změně bodů za test se přepočítává, zda je test splněný, či nikoliv a zda se má měnit stav psaní vyhlášky. skupina skupin - viz. předmět stav psaní vyhlášky - v jakém stavu se nachází psaní vyhlášky 0 - uzavřená vyhláška 1 - má plnit vyhlášku 2 - nezvládl test 3 - zvládl test, čeká na export 4 - byl potvrzen a čeká na export test - quiz, písemka na počítači. username - uživatelské jméno používané při přihlášení.
59
15.
Slovníček pojmů
vyhláška, vyhláška 50 - Stanovení kvalifikace pracovníků pracujících s elektrickými zařízeními. Na FEL se zároveň s vyhláškou 50 plní i test BOZP. Pro tuto bakalářskou práci jsou tyto dva termíny zaměnitelné.
60
16.
Přílohy
16. Přílohy
16.1 Ukázky ze souborů 16.1.1 Import 16.1.1.1
Import studentů - soubor získaný z KOSu
přílohy/import/ import_studenti_original_KOS.txt Ukázka (pouze informativní - v reálu není řádek zalomen) Semestr, Učitel, Kód, Název, Paralelka, Místnost, Den, Rodné_číslo, Student, Ročník, Skupina, Login, Celkem, Email "B062", "Kubr J.", "X36PKO", "Počítačové komunikace", 101, "K310", "Ct(13/2)", "771122", "Novák Jan", 6,30, "NOVAJ2", 20, "
[email protected]"
16.1.1.2
Import osobo pro psaní vyhlášky 50 §11
přílohy/import/ import_osoby_paragraf_11.txt Ukázka (pouze informativní - v reálu není řádek zalomen) uživatelské_jméno, Přímení, Jméno, email, Titul_před, Titul_za, zařazení, pracoviště "xnovah2", "Novák", "Honza", "
[email protected]", "ing", "CSc", "docent", "katedra počítačů FEL ČVUT"
16.1.2 Export 16.1.2.1
Export do souboru CSV
přílohy/export/export_CSV.txt Ukázka // ---- X36LOB par101 (Po 14.30) "novakj1" "novakj2"
16.1.2.1
Export do souboru Excel
přílohy/export/export_Excel.xls Ukázka Výpis exportovaných studentů
X36PJP par101 ( St 7.30) hajekm6 novakj1
martin haczek jan novák
61
16.
Přílohy
16.1.3 Formuláře 16.1.3.1
Formulář na podpisy
přílohy/formulare/formular_podpisy.xls Ukázka Záznam o základním školení BOZP Konaném dne: 16. 5. 2007 Školení provedl: Jan Kubr
na FEL v místnosti: K1 podpis: ........................
Osnova školení BOZP 1) Právní podklady BOZP 2) Obecné povinnosti - pov. zaměstnavatele OZ §§415 a 420, ZP §§ 35, 73, 74, 132 až 4 3) Povinnosti zaměstnance k zajišt. BOZP, OZ §§ 415 a 420, ZP §§ 35, 73, 74, 135 a 136 4) Vyhláška úřadu bezpečnosti práce č. 48/82 Sb. 5) Bezpečnost práce s elektrickým zařízením, vyhl. ČUBP a ČBU č. 50/78, §3 6) Pracovní úraz, evidence, odškodňování - Nař. vl. č. 108/94 Sb. a Nař. vl. č. 494/01 Sb. 7) Pracovní podmínky žen a mladistvých (§ 149 až 168 ZP 8) Bezpečnost práce se zobrazovacími jednotkami - Nař. vl. č. 178/01 Sb. a Nař. vl. č. 523/02 Sb. 9) První pomoc - traumatologický plán 10) Důležité telefony 11) Rozbor příčin úrazů za minulé období Potvrzuji, že jsem byl proškolen a že jsem výkladu porozumněl: Username(KOS)
Celé jméno
X36POK par101 (Ct 18.00) novakj1 novakj2
16.1.3.1
Podpis
Honza Novák Jan Novák
Formulář na podpisy CSV
přílohy/formulare/formular_podpisy_CSV.txt Ukázka Záznam o základním školení BOZP Konaném dne: 16. 5. 2007 Školení provedl: Jan Kubr
na FEL v místnosti: K1 podpis: ........................
Osnova školení BOZP 1) Právní podklady BOZP 2) Obecné povinnosti - pov. zaměstnavatele OZ §§415 a 420, ZP §§ 35, 73, 74, 132 až 4 3) Povinnosti zaměstnance k zajišt. BOZP, OZ §§ 415 a 420, ZP §§ 35, 73, 74, 135 a 136 4) Vyhláška úřadu bezpečnosti práce č. 48/82 Sb. 5) Bezpečnost práce s elektrickým zařízením, vyhl. ČUBP a ČBU č. 50/78, §3 6) Pracovní úraz, evidence, odškodňování - Nař. vl. č. 108/94 Sb. a Nař. vl. č. 494/01 Sb. 7) Pracovní podmínky žen a mladistvých (§ 149 až 168 ZP 8) Bezpečnost práce se zobrazovacími jednotkami - Nař. vl.č.178/01 Sb. a Nař. vl.č.523/02 Sb. 9) První pomoc - traumatologický plán 10) Důležité telefony 11) Rozbor příčin úrazů za minulé období Potvrzuji, že jsem byl proškolen a že jsem výkladu porozumněl: Username(KOS)
Celé jméno
Podpis
X36PKO par101 (Ct 18.00) 11anovah6 Honza Novák 11anovaj2 Jan Novák
62
16.
Přílohy
16.1.3.1
Formulář na podpisy
přílohy/formulare/formular_protokol_splneni.xls Ukázka Protokol o testu podle vyhl. 50/1978 Sb., $11
Jméno Zařazení Pracoviště
ing Honza Novák CSc docent katedra počítačů FEL ČVUT
Test byl napsán na 100 proc. Minimálně je požadováno 80 proc. čímž VYHOVĚL požadavkům na jeho splnění
Ústní část zkoušky 1) 2) 3)
Celkové hodnocení
Komise: Předseda Ing. Jiří Smítka Členové Ing. Jan Kubr Členové Ing. Zdeněk Muzikář, CSc.
........................... Podpis předseda
Nevyhověl Nevyhověl Nevyhověl
Vyhověl
Nevyhověl
Datum 16. 5. 2007 Čas 16:23
........................... Podpis členové
63
Vyhověl Vyhověl Vyhověl
16.
Přílohy
16.1.4 Výpisy studentů 16.1.4.1
Výpis CSV studenti
přílohy/vypisy_studentu/vypis_CSV_studenti.txt Ukázka Username (KOS) Celý název Stav psaní vyhlášky Povinnost psát od Platnost BOZP do Paragraf // ---- X36LOB par101 (Po 14.30) novakj1 Jan Novák 1 má plnit vyhlášku - psát test novakj2 Josef Novák 1 má plnit vyhlášku - psát test
16.1.4.2
29. duben 2007 29. duben 2007
6 6
Výpis Excel studenti
přílohy/vypisy_studentu/vypis_Excel_studenti.xls Ukázka Username (KOS)
Stav psaní vyhlášky
Celý název
Povinnost psát od
Platnost BOZP do Paragraf
11. duben 2007
24. duben 2009
11
11. duben 2007
24. duben 2009
11
X36PJP par101 ( St 7.30) hajekm6
martin haczek
novakj1
Jan Novák
4 byl exportován, čeká na potvrzení 4 byl exportován, čeká na potvrzení
16.1.5 Vytisknutý test 16.1.5.1
Test vytisknutý - zadání pro studenty
přílohy/vytisknuty_test/test_tisk_zadani.txt Ukázka test číslo jedna BOZP Jméno a přímení .................... 1 )
Datum............ Cvičení............
::Spojte čísla, která k sobě patří [ ] policie [1] 112 [ ] hasiči [2] 150 [ ] záchranka [3] 158 [ ] tínová linka [4] 155
-----------------------------------------------------------------2 ) ::Fázový vodič má barvu Může být více správných odpovědí [ ] černá [ ] hnědá [ ] bílá [ ] červená [ ] růžová
-----------------------------------------------------------------3 ) ::Jaké napětí je podle normy v zásuvkách Je jen jedna správná odpověď ( ) 220 / 400 V ( ) 230 / 380 V ( ) 220 / 380 A ( ) 230 / 400 W ( ) 230 / 400V
64
16.
Přílohy
-----------------------------------------------------------------4 )
::Jakou zkratku má "Bezpečnost a ochrana zdraví při práci" [....................................]
-----------------------------------------------------------------5 )
::šťourat se v uzavřené fungující zásuvce 300 hřebíkem je nebezpečné? [ ] Pravda [ ] Nepravda
------------------------------------------------------------------
16.1.5.1
Test vytisknutý - zadání pro studenty
přílohy/vytisknuty_test/test_tisk_pro_opravu.txt Ukázka 1 )
::Spojte čísla, která k sobě patří [ ] policie [1] 158 [ ] hasiči [2] 150 [ ] záchranka [3] 155 [ ] tínová linka [4] 112
-----------------------------------------------------------------2 ) ::Fázový vodič má barvu Může být více správných odpovědí [*] (50%) černá [*] (50%) hnědá [ ] (-50%) bílá [ ] (-50%) červená [ ] (-50%) růžová
-----------------------------------------------------------------3 ) ::Jaké napětí je podle normy v zásuvkách Je jen jedna správná odpověď ( ) 220 / 400 V ( ) 230 / 380 V ( ) 220 / 380 A ( ) 230 / 400 W (*) (100%) 230 / 400V
-----------------------------------------------------------------4 )
::Jakou zkratku má "Bezpečnost a ochrana zdraví při práci" [....................................] Správné výsledky a jejich bodové ohodnocení: "BOZP" (100%)
-----------------------------------------------------------------5 )
::šťourat se v uzavřené fungující zásuvce 300 hřebíkem je nebezpečné? [ ] Pravda [*] Nepravda
------------------------------------------------------------------
65
16.
Přílohy
16.1.6 Data z KOSu přílohy/kos/… katedry.txt - číselník organizačních jednotek (kateder) id katedry, číslo katedry, název katedry mistnosti.txt - číselník místností id místnosti, název místnosti předměty.txt - číselník vyučovaných předmětů id předmětu, kód (akronym) předmětu, katedra, název předmětu ucitele.txt id učitele, jméno, příjmení, titul před, titul za, username, katedra studenti.txt id studenta, jméno, příjmení, username zapis.txt - předměty zapsané jednotlivými studenty id studenta, id předmětu rozmist.txt - rozvrhové lístky místností id lístku, předmět, typ výuky, místnost, učitel1, učitel2, týden, den, hodina,přednášková paralelka, cvičební paralelka, laboratorní paralelka typ výuky: P přednáška, C cvičení, L laboratoř druhý učitel by měl být uveden u laboratorních cvičení s více než deseti studenty týden je S sudý nebo L lichý den je 1 až 5, pondělí až pátek hodina je číslo vyučovací hodiny, typicky od 1 do 14 rozstud.txt - rozvrhové lístky studentů id studenta, id rozvrhového lístku místnosti
16.2 Databáze 16.2.1 Změny provedené v databázi (tučně název tabulky) user (lib/db/…) přidán sloupec "kosname" char(100) - uživatelské jméno používané v KOSu (index) přidán sloupec "zarazeni" char(200) - Zařazení zaměstnance přidán sloupec "titulpred" char(30) - titul před jménem přidán sloupec " titulza" char(30) - titul za jménem
quiz (mod/quiz/db/…) přidán sloupec "trash" smallint - koš přidán sloupec "aftertestfrom" bigint - od kdy po ukončení pokusu o test se mají určité informace zobrazit přidán sloupec " aftertestto" bigint - do kdy po ukončení pokusu o test se mají určité informace zobrazit přidán sloupec " minpercent" int - na kolik procent je třeba test minimálně napsat
66
16.
Přílohy
quiz_attempt (mod/quiz/db/…) přidán sloupec "vyhlaskaid" int - pro jakou vyhlášku byl napsán daný pokus o test (index) quiz_enable_group (mod/quiz/db/…) Přidána celá tabulka: Jakým skupinám je povolený jaký test "id" int "quizid" int - číslo testu (index) "groupid" int - id povolené skupiny (index) "timeadded" bigint - čas vložení (quizid a groupid - UNIQUE) quiz_enable_user (mod/quiz/db/…) Přidána celá tabulka: Jakým studentům je povolený jaký test "id" int "quizid" int - číslo testu (index) "userid" int - id povoleného studenta (index) "timeadded" bigint - čas vložení (quizid a userid - UNIQUE) user_vyhlaska (lib/db/…) Přidána celá tabulka: Psaná vyhláška "id" int "userid" int - jaký uživatel píše tuto vyhlášku (index) "stav" int - v jakém stavu je plnění (index) "paragraf" int - pro jaký paragraf se píše "dateimport" bigint - kdy byla přidána povinnost plnit vyhlášku "dateexport" bigint - kdy byla vyhláška exportována do KOSu "course" int - v jakém kurzu se tato vyhláška plní (index) mykos (lib/db/…) Přidána celá tabulka: "id" int "courseid " int - pro jaký kurz to jsou cesty "file" char(100) - o jaký soubor se jedná "path" char(200) - cesta k souboru
67
16.
Přílohy
16.2.2 ER-schéma databáze přílohy/databaze/schema_db.png Toto schéma postihuje pouze změněné tabulky. U původních tabulek nezobrazuje původní parametry.
68
16.
Přílohy
16.3 Soubory změněné (vytvořené) v průběhu práce V souborech je změněná část vždy označena: // ------------Přidaný kód // -------------
16.3.1 Autorizace lib/moodlelib.php login/conectname.php
16.3.2 JavaScript mod/quiz/view.php mod/quiz/attempt.php course/groups.php
16.3.3 Zobrazení testů pro admina mod/quiz/index.php mod/quiz/indexstudent.php // zobrazení testů pro studenty course/mod.php mod/quiz/mod.html mod/quiz/reviewoptions.html mod/quiz/locallib.php course/edit.html course/groups.php mod/quiz/mod.php // formulář na nastavení testu moodledata/lang/cs_utf8/help/quiz/trash.html // help file
16.3.4 Úvodní stránka lib/blocklib.php jaké bloky mají být implicitní… blocks/admin/block_admin.php blocks/participants/block_participant.php blocks/activity_modules/block_activity_module.php course/format/topics/format.php dodělat admin/cron.php // čistící procedura !!!!! course/lib.php
16.3.5 Povolení testu pro specifické skupiny a uživatele lib/datalib.php mod/quiz/index.php mod/quiz/indexstudent.php mod/quiz/view.php mod/quiz/attempt.php lib/acceslib.php (vidět a vstoupit do testu?? pro view.php a attempt.php) mod/quiz/tabs.php lib/acceslib.php mod/quiz/enablegu.php mod/quiz/report/overview/report.php …help/permission.html
16.3.6 Tisk testu mod/quiz/tabs.php horní menu question/printtest.php základní stránka tisku
69
16.
Přílohy lib/questionlib.php question/format/printtxt/format.php question/format.php moodledata/lang/cs_utf8/quiz.php
tento soubor obsahuje formát pro tisk
16.3.7 Zobrazení uživatelů user/index.php user/tabs.php user/view.phpuser/messageselect.php mod/quiz/attempt.php lib/moodlelib.php (je to správná úprava??? lib/dmllib.php lib/weblib.php …help/stav.html …help/showactivest.html …help/paragraf.html …help/koncicivyhlaska.html ….help/username.html
16.3.8 Zobrazení uživatelů u výsledků testu mod/quiz/report/overview/report.php mod/quiz/report.php lib/tablelib.php lib/moodle.lib lib/javascript-static.js lib/dmllib.php lib/weblib.php pix/fel/void.gif mod/quiz/view.php moodledata/lang/cs_utf8/quiz_over_view.php a quiz.php pix/fel/failed.gif a passed.php …help/ execall.html
16.3.9 Úprava testu - na kolik je třeba minimálně napsat mod/quiz/edit.php mod/quiz/editlib.php mod/quiz/review.php mod/quiz/view.php mod/quiz/locallib.php mod/quiz/comment.php mod/quiz/report/regrade/report.php mod/quiz/report/overview/report.php mod/quiz/attempt_close_js.php
16.3.10 Zobrazení testů u uživatele mod/quiz/indexstudent.php
16.3.11 Update skupin …help/setupgroups.html …help/mykos.html kos/… course/groupsetup.php
70
16.
Přílohy
16.3.12 Export uživatelů user/export.php user/export.html lib/exportlib.php …help/overviewdownload.html …help/quiz/overviewdownload.html
16.3.13 Import uživatelů user/edit.html user/edit.php admin/uploaduser.php admin/uploaduser.html lib/uploaduserlib.php user/import.php admin/user.php moodledate/lang/cs_utf8/admin.php …help/paragraf.html …help/oldvyhlaska.html …help/uploadusers.html // dodělat
16.3.14 Formuláře lib/formularelib.php lang/formulare.php formulare/config.php
16.4 Postup při testování 16.4.1 Začátek • •
Instalace a nastavení viz. hlavní text Máme čistou instalaci. Pro jednodušší testování se nepřihlašuji jako student, ale využívám možnosti administrátora, který se umí přihlásit jako jakýkoliv uživatel (kompletní "převtělení" vše se chová, jako by to dělal dotyčný uživatel.)
OK
16.4.2 Import studentů •
•
Import 360 studentů (parametry - defaultní, paragraf 7, jména: "student číslo") (max. čas pro zpracování stránky v apache - nastaveno v souboru admin/uploaduser.php) o Krátký čas a malá paměť (nutno provést pětkrát refresh!, ale výsledek je správný.) o Dlouhý čas a velká paměť (import najednou) Nyní provedeny změny simulující běžnou práci… o student1, 3 - splnili vyhlášku stav 0 o student2, 4 - změněn paragraf na 8
71
OK OK OK
16.
Přílohy student5, 6 - nenapsali test stav 2 student7 ,8 - zvládli test, čekají na export stav3 student9, 10 - byli exportováni čekají na potvrzení stav4 student11, 12 - v databázi (user_vyhlaska) manuálně nastaven čas importu před dlouhou dobou. o byli změněni členové automatických skupin (někteří byli ze skupiny odebráni, někteří tam byli přidáni…)
o o o o
•
•
Opakovaný import (parametry - detaultní, paragraf 4) o student1, 3 - přidána nová vyhláška (v historii je vidět i ta stará) o student2, 4 - paragraf stále 8, stále jen jedna vyhláška o student5, 6 - stále jen jedna vyhláška, stav nezměněn o student7 ,8 - stále jen jedna vyhláška, stav nezměněn o student9, 10 - stále jen jedna vyhláška, stav nezměněn o student11, 12 - přidána nová vyháška, stará byla ukončena (nebyla prodloužena platnost vyhlášky) o členové ve skupinách byli nastaveni správně Upload souborů z KOSu
OK OK OK OK OK OK OK OK
16.4.3 Tvorba testu • • •
Vytvořen test1 (parametry defaultní, minpercent 80%) Vytvořeny otázky (přiřazování, multiplechoice, krátká odpověď, pravda/nepravda) Vytvořen test2 (parametry defaultní, minpercent 80%)
OK OK OK
16.4.4 Povolování testu, dostupnost • • •
Test povolen všem skupinám (test principem patří k importu) Byla provedena aktualizace skupin ze souboru (jako import) Byla zrušena povolení u aktualizovaných skupin
OK OK OK
•
Povolení testu: o test1 pro skupinu1, 2 o test2 pro skupinu 1 o test1 pro student1
OK OK OK
Přihlášení studenti vidí o student1 (skupina1) -> test1 o student30 (skupina2) ->test1, test2 o student60 (skupina3) -> test2 o student100 (skupina4) -> žádný test o student1 (skupina5) -> test1
OK OK OK OK OK
•
• •
Při vyžadovaném "zabezpečeném okně" bez povoleného JavaScriptu nelze vstoupit do testu Při nastavené minimální prodlevě mezi dvěma pokusy - nelze vstoupit do testu (do uplynutí doby)
72
OK OK
16.
Přílohy • • •
Při vstupu do testu z jiné IP adresy než je dovoleno - není možné vstoupit do testu Maximální počet pokusů na jeden test - se počítá pro každou vyhlášku zvlášť (po vyčerpání pokusů nelze vstoupit do testu) Paralelní povolení skupin: o dva vyučující si najednou spustí stránku na povolování testů (test na jednom PC - jedna instance Firefox a druhá Explorer) o První vyučující povolí skupinu 1 a 2 a odešle formulář o Druhý vyučující povolí skupinu 2 a 3 a odešle formulář o Výsledek - zaškrtnuté skupiny 1, 2, 3
OK OK
OK
16.4.5 Psaní testu a změny stavu v závislosti na psaní testů (popsán postup psaní) •
•
•
student30 chce psát test o původní stav1 (bude psát test) o nenapsal test1(75%) -> stav2 (nenapsal test) o nenapsal test2(75%) -> stav2 o napsal test1(90%) -> stav3 (napsal test) o pokus o vstup do testu - nelze, protože má splněnou vyhlášku
OK OK OK OK OK
student1 chce psát test o původní stav1 (bude psát test) o nenapsal test1 (75%) stav2
OK OK
student2 chce psát test o původní stav1 (bude psát test) o napsal test1 (100%) stav3 o admin: exportuje ho a po té mu přidá povinnost plnit novou vyhlášku (opět má povolený test1) o nenapsal test1(50%) stav2 (pro novou vyhlášku, stará vyhláška beze změny)
•
Rozložení pokusů studentů je následující: o student30: 1. vyhláška stav=3 paragraf=7 test1 - 75% 90% test2 - 75% o student1: 1. vyhláška stav=2 test1 - 75% o student2: 1. vyhláška stav=0 (exportováno a splněno) test1 - 100% 2. vyhláška stav=2 test1 - 50%
•
vyučující mění minpercent (sledujeme studenty) 73
OK OK OK OK
16.
Přílohy
•
•
•
o test2 minpercent=100% o student30 stále stav3 (druhý test neovlivní vyhlášku, splněnou prvním testem) o test1 minpercent 60% o student30 stav3 (snížením minpercent test splnil) o student2 stav2 (snížení minpercent mu nepomohlo) o student1 stav3 (snížením minpercent test splnil) o test1 minpercent 100% o student30 stav2 (zvýšením minpercent test nesplnil, nemá splněný ani jeden pokus) o student2 stav2 (zvýšením minpercent test nesplnil ale starý pokus o vyhlášku to nezměnilo) o student1 stav2 (zvýšením minpercent test nesplnil)
OK OK
vyučující změní počet bodů za odpověď studenta o student30 - test1 - napsaný na 90% -> změněny body za první odpověď -> test splněn na 100% -> stav3
OK
Vyučující změní počet bodů za otázku (v nastavení testu) o test1 minpercent=90% o 4. otázka (většinou je v pokusech studentů nevyplněna) je za 0 bodů (simulace zrušení otázky např. byla v ní chyba. ) o 2. otázka je za 10 bodů (např. je to důležitá otázka) o Nyní je třeba přepočítat ohodnocení testů! Jinak jsou testy ohodnoceny špatně! o Všichni studenti, kteří test plnili ho splnili a mají stav3 Vyučující odstraní studentovi pokus o student30 psal vyhlášku. Test1 dvakrát nesplněno, test2 pokus (100%) -> stav3 o vyučující mu odstranil jeden pokus z test1 -> stav3 o Dále vyučující odstranil pokus test2 (100%) -> stav2 (nesplnil test) - (zde je malá chyba. Program nepozná, zda tam není žádný test, nebo žádný splněný. Ale v principu jsou stavy1 a 2 ekvivalentní.)
OK OK OK OK
OK
OK OK OK
OK
OK OK
OK
16.4.6 Povolení vstupu do testu II •
•
Nyní testujeme, zda mohou studenti vstoupit do testu, když mají nějaký test splněný. o Ohodnocení testů je napsané viz: rozložení pokusů výše. o student30 - nesmí vstoupit do testu - má ho splněn - stav3 o student1 - smí vstoupit do testu - nemá ho splněn stav2 o student2 - smí vstoupit do testu pro druhou vyhlášku - zde je stav2 Nesmí vstoupit do psaní testu v první vyhlášce - je uzavřena. Test učitele - smazání povolení starších než… o Mazání se vztahuje jen k určitému testu (povolení ostatních testů se ignorují) o Starší povolení se zruší, novější se ponechají
74
OK OK OK OK
OK OK
16.
Přílohy
16.4.7 Další testy k "testům" •
•
Testujeme, zda mohou studenti vidět jak odpovídali, popř. správné odpovědi u svých pokusů (nastavení testu je původní, ale čas odkdy byl zkrácen na 30 minut. viz. nastavení testu). o Čas psaní testů méně než 30 minut o žádný student nevidí své, ani správné odpovědi o Čas psaní testů více než 30 minut o studenti vidí své odpovědi, nevidí správné odpovědi o Po uzavření testu o studenti vidí své i správné odpovědi Pokud je zaškrtnuto "každý pokus staví na předchozím". o V rámci jedné vyhlášky se předvyplňují původní odpovědi. o První pokus další vyhlášky. Test je prázdný.
OK OK OK
OK OK
16.4.8 Zobrazení všech vyhlášek psaných studentem •
Testujeme zda studenti vidí všechny vyhlášky, které kdy dělali. Pro test použiji studenta student30 o Zatím psal pro jednu vyhlášku dva testy a je ve stavu 3 o Exportujeme ho, potvrdíme export a přidáme novou vyhlášku (paragraf 10) (manuálně -> zůstanou mu povolení psát test) o Opět má povolené dva testy (stále je členem skupin, které jsou povolené) Nyní ale "zadáme studentovi test na papír" Nenapíše žádný test v počítači, ale bude mít manuálně nastaven stav3 splnil test o Zobrazeno správně o Opět je exportován a potvrzen o Proveden hromadný import (paragraf libovolný) (byly aktualizovány skupiny a byla odstraněna všechna povolení pro jednotlivce i aktualizované skupiny) o Jsou vidět dvě uzavřené vyhlášky (jedna s pokusy, druhá "psaná na papír") a jedna otevřená vyhláška - žádné povolené pokusy o Je mu uděleno individuální povolení pro test1 o Zobrazeno správně, u aktuální vyhlášky mu byl povolen test o test byl splněn, student je exportován, potvrzen. Byl znovu importován (paragraf 7 - zde je prodloužení platnosti vyhlášky) o test byl splněn stav3 o dva pokusy napsané na stejně procent. Správně by měl být ve výpisu jen jeden. Chyba ve výsledku se objeví oba - málo závažná chyba.
OK OK
OK OK
OK OK OK OK OK OK
Varování
16.4.9 Zobrazení studentů u výsledku testu •
Výpis pokusů jednotlivých studentů o Výběry studentů - jen členy skupiny, předmětu, píšící paragraf, nacházejícící se ve stavu… o "jaké pokusy o test" - původně obsažené (studenti s pokusy, bez pokusu, …)
75
OK OK
16.
Přílohy o "jaké pokusy o test" - studenti, kteří test zvládli (zobrazí se jen studenti, kteří mají na jednotlivou vyhlášku (z tohoto testu!) alespoň jeden test splněný - zde nezáleží na stavu.) o "jaké pokusy o test" - studenti, kteří test nezvládli ti kteří psali (zobrazí se jen studenti, kteří mají na jednotlivou vyhlášku (z tohoto testu!) všechny testy nesplněné - zde nezáleží na stavu.) o "jaké pokusy o test" - studenti, kteří test nezvládli i ti kteří nepsali (zobrazí se jen studenti, kteří mají na jednotlivou vyhlášku (z tohoto testu!) všechny testy nesplněné, nebo nemají žádný pokus - zde nezáleží na stavu.) (tato volba nelze použít spolu s "nadskupinami" pak se nezobrazují studenti bez pokusu) • • • •
Manuální odstranění pokusu - již bylo testováno (zobrazení všech vyhlášek psaných studentem ) odstranění mění stav. Přidání (zrušení) povolení psát test pro studenty: (pro zaškrtnuté, i pro provést příkaz pro všechny vyhovující) Export - CSV (CSV je možné otevřít v Excelu) Export - XLS (program nezvládne více než 100 řádků. Při vyšším počtu dojde k exportu do CSV)
OK
OK
ERR
OK OK OK OK
16.4.10 Import studentů (přidávání povinnosti psát vyhlášku) II • • • • •
Povolení psát test (pro studenta) se zruší při přidání povinnosti plnit vyhlášku (pokud se studentovi nepřidává vyhláška, povolení se mu neodebírá). Povolení psát test (pro skupiny) se zruší při update skupiy. Zaškrtnuto, aby se nenastavovaly skupiny (skupiny se nenastaví). Snaha provést import s chybným souborem (různý počet buněk na řádek) nahlásí chybu. Snaha provést import s jiným počtem sloupců, než je vynucené typem souboru nahlásí chybu a žádné sloupce nepojmenuje defaultně.
OK OK OK OK OK
16.4.11 Export studentů a potvrzování exportu • • • • •
Při exportu se mění stav exportovaných studentů a mění se čas exportu Fungují výběry: skupina, předmět, paragraf, importovaní kdy, exportovaní kdy, jen stav3 i stav3+4 Export - CSV (CSV je možné otevřít v Excelu) Export - XLS (pokud se exportuje více, než 100 řádků exportuje se do CSV) Potvrzení exportu (potvrdí se jen vybraní studenti - podle data exportu)
OK OK OK OK OK
16.4.12 Správa skupin • •
Úprava podle seznamu studentů exportovaného z KOSu (jako import) (členové skupin byli aktualizováni) Smaž skupiny, ve kterých není žádný aktivní účastník o Nesmažu skupiny z jiného kurzu o Ve skupině není žádný student - smaže o Ve skupině je alespoň jeden student ve stavu <1,4> - nesmaže
76
OK OK OK OK
16.
Přílohy
• •
o Ve skupině jsou všichni studenti ve stavu 0 - smaže Smaž skupiny vytvořené před o Nesmažu skupiny z jiného kurzu o Skupiny starší se smažou, novější se ponechají Správa skupin z KOSu o Nahrání souborů na server (za pomoci manuálního uploadu Moodlu) o Manuální napsání cesty k souboru o Jakýkoliv soubor je nečitelný -> otevření okna na aktualizaci souborů o Soubor je starší, než 3 měsíce -> zobrazí se varování (test proveden zkrácením doby. Místo 3 měsíců asi 1 den. )
OK OK OK OK OK OK OK
16.4.13 Správa studentů •
• •
•
•
•
Výpis vyhlášek a jednotlivých studentů o Výběry studentů - jen členy skupiny, předmětu, píšící paragraf, nacházející se ve stavu, importováni kdy, exportováni kdy… o vyber jen studenty, kteří nebudou mít platnou vyhlášku do… (studentovi byl v DB nastaven manuálně čas exportu 10. srpna 2005 ("dnes je 27. dubna 2007") když bylo zadáno studenti, kterým končí vyhláška během 5 měsíců tento student byl zobrazen) Tvorba skupiny z výběru (byly nastaveny parametry na výběr několika studentů a bylo zadáno - vytvoření skupiny) Manuální změny testuji jak se program chová, když zaškrtnu 300 studentů a provedu: (zda se daná věc provede jen pro zaškrtnuté!) o odstranění vyhlášky o změna stavu vyhlášky o změna čísla paragrafu o přidání povinnosti plnit vyhlášku (pokud má student jinou aktivní vyhlášku, nová se mu nepřidá) Zobrazení vyhlášek studenta učitelem (Zda vyučující vidí stejné vyhlášky (v seznamu studentů klikne na studenta) jako když se student přihlásí a klikne na "testy BOZP") (testován student30 - jednou přihlášen a pak se na něho podíval učitel) Export o CSV (CSV je možné otevřít v Excelu) o Excel (při exportu více než 100 řádků se změní typ souboru na CSV) Formuláře (při exportu více než 100 řádků se změní typ souboru na CSV. Toto nefunguje pro tisk formuláře "protokol…")
16.4.14 Jazykové kódování při práci se soubory (import, export a formuláře) •
Import o Importovací soubor je v kódování win1250. Funkce dekoduj_na_utf(…) převádí win1250 do utf8 (půvoní nastavení).
77
OK
OK
OK
OK OK OK OK
OK OK OK Varování
16.
Přílohy Je importována celá abeceda - velká i malá písmena. Do databáze je uložena správně. o Importovací soubor je v kódování utf8. Funkce dekoduj_na_utf(…) převádí win1250 do utf8 (tzn. chybné nastavení). Je importována celá abeceda - velká i malá písmena. Háčky a čárky jsou uloženy špatně o Importovací soubor je v kódování utf8. Funkce dekoduj_na_utf(…) ponechává kódování souboru tzn. utf8. Je importována celá abeceda - velká i malá písmena. Do databáze je uložena správně. •
•
Export do CSV o Exportované jméno studenta i skupiny obsahuje celou abecedu. Funkce dekoduj_na_win1250 převádí utf8 na win1250 (defaultní nastavení). Exportovaný soubor obsahuje správná data a je správně otevřen v MS Excel o Test byl proveden jak na "stránce pro export" tak na "stránce zobrazení studentů" Formuláře o Jméno studenta i skupiny pro tisk formuláře obsahuje celou abecedu. Funkce dekoduj_na_win1250 převádí utf8 na win1250 (defaultní nastavení). Exportovaný soubor obsahuje správná data a je správně otevřen v MS Excel
78
OK
Varování
OK
OK OK
OK
16.
Přílohy
16.5 Výsledky testování reálného množství studentů v systému Tyto testy navazují na testování funkčnosti.
16.5.1 testy na serveru dsnlab10 Požadavek
Počet ovlivněných studentů Odezva při práci s formuláři 7000 / zobrazeno 35 Manuální změny na stránce zobrazení studentů - změna 2000 stavu vyhlášky, odebrání vyhlášky, … 300 (předmět) Všichni studenti byli zaškrtnuti checkboxem 35 (paralelka) Import (přidání povinnosti plnit vyhlášku a vytvoření 2000 studenta) Import (přidání povinnosti plnit vyhlášku) 2000 300 (předmět) Export studentů 2000 300 (předmět) Potvrzení exportu 2000 300 (předmět) Update skupin ze souboru 300 (předmět) Správa skupin - výběr skupin, kde není žádný aktivní účastník Správa skupin - výběr skupin, starších než Speciální stránka na přidávání povolení testů. 2000 Povol test pro skupiny 300 (předmět)
čas zpracování < 1 sec 40 sec 10 sec 1 sec 1 min
Speciální stránka na přidávání povolení testů. Zruš povolení pro skupiny Stránka výsledků testů. Povolení testů pro jednotlivce. Přidání / rušení povolení.
5 sec 1 sec 2 min 10 sec 1 sec
16.52
2000 300 (předmět) 2000 300 (předmět) 35 (paralelka)
30 sec 5 sec 5 sec 1 sec 1 sec 1 sec 2 sec 1 sec 1 sec 1 sec 1 sec
testy na lokálním serveru Požadavek
Počet ovlivněných studentů Odezva při práci s formuláři 7000 / zobrazeno 35 Manuální změny na stránce zobrazení studentů - změna 2000 stavu vyhlášky, odebrání vyhlášky, … 300 (předmět) Všichni studenti byli zaškrtnuti checkboxem 35 (paralelka) Import (přidání povinnosti plnit vyhlášku a vytvoření 2000 studenta) Import (přidání povinnosti plnit vyhlášku) 2000 300 (předmět) Export studentů 2000 300 (předmět) 79
čas zpracování < 1 sec 2 min 20 sec 2 sec 6 min 3 min 30 sec 40 sec 10 sec
16.
Přílohy
Potvrzení exportu
2000 300 (předmět) 300 (předmět)
Update skupin ze souboru Správa skupin - výběr skupin, kde není žádný aktivní účastník Správa skupin - výběr skupin, starších než Speciální stránka na přidávání povolení testů. 2000 Povol test pro skupiny 300 (předmět) Speciální stránka na přidávání povolení testů. Zruš povolení pro skupiny Stránka výsledků testů. Povolení testů pro jednotlivce. Přidání / rušení povolení.
80
2000 300 (předmět) 2000 300 (předmět) 35 (paralelka)
1 sec < 1 sec 10 sec 5 sec < 1 sec 1 sec 1 sec 1 min 15 sec 2 min 20 sec 2 sec
18.
Mapa CD
18. Mapa CD
81