browser = navigator.appName; horni_okno = ""; var separator = "$" var courses = new Array() var actualCourse = ""; var testURL = ""; var qCount = 0 // celkovy pocet otazek var results = null // pole s pocty vybranych variant; var questionSet = new Array(); var test_repeat = false; var respondents = []; var questions = []; var testElements = [ ["90d1d6645b5f8084b2f8656053f06da5", "a_a_1"], ["5100740c21f035822e341e43f9e656e5", "a_a_1"], ["27072b6f65e4120834ebd39112950692", "a_a_1"], ["ace7c792602d274db3bf42f677d47507", "a_a_1"], ["a2e4dc63af453f2f6224d076a5a58c88", "a_a_1"], ["0296817cf2e75706c3f1c240503744af", "a_a_1"], ["c4e3879909ba02310d429bc91c1c0736", "a_a_1"], ["61127cb33147a0b649ede8a402a16b85", "a_a_1"], ["05c6fdf255937f476e1ca69accad9222", "a_a_1"] ] function Result () { this.type = ""; this.value = "" this.idmd5 = "" } function Respondent(name, uco) { this.name = name; this.uco = uco; this.results = new Array(); this.getResultTable = function () { var vystup = "" vystup += "" + this.name + ""; // vystup += "" + this.getBlankCount() + ""; for (var i= 0; i < this.results.length; i++) { var trida = "white"; if (this.results[i] == "") trida = "red"; if (this.results[i] == "-") trida = "blue"; var vysledek = this.results[i]; //vysledek = vysledek.replace(/\./g, ","); //vysledek = vysledek.replace(/ b/g, ""); vystup += "" + vysledek + ""; } vystup += ""; return vystup } this.getResultsLine = function () { var vystup = this.name + separator vystup += this.uco + separator; vystup += this.prihlaska + separator; for (var i= 0; i < this.results.length; i++) { if (i > 0) vystup += separator vystup += this.results[i] } return vystup } this.getBlankCount = function() { var count = 0; for (var i = 0; i < this.results.length; i++) { if (this.results[i] == "") count++; } return count; } this.init = function(pocet) { this.results = new Array() for (var i = 0; i < pocet; i++) { this.results[i] = ""; } } } var xmlDoc = document.implementation.createDocument("", "test2", null); //xmlDoc.addEventListener("load", readXML, false); var xmlQdesc = document.implementation.createDocument("", "test", null); //xmlQdesc.addEventListener("load", readQdesc, false); function Test() { this.title = "" this.url = "" this.selected = false; this.sady = new Array() this.elements = new Array() this.toString = function () { var vystup = "adresa: " vystup += this.url + "\n" for (var i =0; i < this.sady.length; i++) { vystup += this.sady[i].toString() } return vystup } } function Sada() { this.url = "" this.otazky = new Array() this.poradi = 0; this.text = ""; this.toString = function () { var vystup = "" vystup += "Pocet otazek: " + this.otazky.length + "\n" vystup += "\n" + this.url + "\n" //vystup += this.text + "\n" for (var i =0; i < this.otazky.length; i++) { if (i > 0 ) vystup += "\n--\n" vystup += (i+1) + this.otazky[i].toString() } return vystup } } function Otazka() { this.pouziti = 0; this.idmd5 = ""; this.zadani = ""; this.prvky = new Array(); //this.prvky.push("r_a") this.spravne = 0; this.varianty = 0 this.toString = function () { var vystup = "" vystup += "\n" + this.idmd5 + "\n" vystup += this.zadani vystup += "\n" + this.spravne + "\n" return vystup } this.getItems = function () { var vystup = "" for (var i = 0; i < this.prvky.length; i++) { vystup += this.prvky[i].typ + " " + this.prvky[i].pocet + " " + this.prvky[i].suffix + ";" } return vystup } } function Prvek (typ, suffix) { this.typ = typ this.pocet = 1; this.suffix = suffix; } var test = new Test() //inicializace pole s vysledky var results = new Array() for (var i = 0; i < qCount; i++) { results[i] = new Array() for (var j =0; j < 5; j++) { results[i][j] = 0 } } function parse_test() { document.getElementById("prubeh_title").style.display = "block"; var vystup = ""; questionSet = new Array(); testList = new Array(); testCounter = 0; respondents = [] results = new Array() document.getElementById("test_info").innerHTML = "" document.getElementById("sets_read").innerHTML = "" document.getElementById("tests_read").innerHTML = "" document.getElementById("people_read").innerHTML = "" document.getElementById("display").innerHTML = "" var vstup2 = document.getElementById("test_url").value.split(/\n/) for (var ii = 0; ii < vstup2.length; ii++) { if (vstup2[ii].indexOf("qdesc") > -1 || vstup2[ii].indexOf("qref") > -1 ) testList.push(vstup2[ii]) } if (testList.length == 0) { document.getElementById("test_info").innerHTML = "V seznamu nejsou žáné testy." return; } test_url = testList[0]; test = new Test; test.url = test_url; if (test_url.toLowerCase().indexOf(".qdesc") > -1) { loadQdesc(test_url); } if (test_url.toLowerCase().indexOf(".qref") > -1) { loadQref(test_url); } } function loadQref(t_url) { //alert("nacitam qref: " + t_url) var req = new XMLHttpRequest(); req.open('GET', t_url + "?noproc=", true); req.onreadystatechange = function (aEvt) { if (req.readyState == 4) { if(req.status == 200) { readQref(req.responseText) } else dump("Error loading odpovednik\n"); } } req.send(null); } function readQref(retez) { //var xmlQref = (new DOMParser()).parseFromString(retez, "application/xml"); var adresa = retez.match(/\\s*(\/.+\.qdesc)[\s\<]/)[1]; if (adresa.charAt(0) == "/") adresa = "https://is.muni.cz/auth" + adresa //trim( retez.substring(retez.indexOf("")+11, retez.indexOf("<\/QDESC_URL>")+1) ) //var adresa = xmlQref.childNodes[0].querySelector("QDESC_URL"); //alert(" qdesc: $" + adresa + "$") loadQdesc(adresa) } function loadQdesc(t_url) { if (t_url.charAt(0) == "/") t_url = "https://is.muni.cz/auth" + t_url var req = new XMLHttpRequest(); req.open('GET', t_url, true); req.onreadystatechange = function (aEvt) { if (req.readyState == 4) { if(req.status == 200) { readQdesc(req.responseText) } else dump("Error loading odpovednik\n"); } } req.send(null); } var setIndex = 0; function readQdesc(retez) { xmlQdesc = (new DOMParser()).parseFromString(retez, "application/xml"); var koren = xmlQdesc.childNodes[0]; var vystup = "" var repeater = koren.getElementsByTagName("SKLADAT_OPAKOVANE"); if (repeater.length > 0) { if( repeater[0].firstChild.nodeValue == "ano") { test_repeat = true; document.getElementById("test_info").innerHTML = "Test s více průchody. Načítám odpovědi ze všech průchodů." } if( repeater[0].firstChild.nodeValue == "ano_totez") { document.getElementById("test_info").innerHTML = "Test s více průchody, aktualizuje se stejný formulář. Načítám odpovědi z posledního uloženého průchodu." } if( repeater[0].firstChild.nodeValue == "ne") { document.getElementById("test_info").innerHTML = "Test s jediným průchodem." } } var sady = koren.getElementsByTagName("SADY_OTAZEK") for (var i = 0; i < sady.length; i++) { var sada = new Sada() sada.url = "https:\/\/is.muni.cz\/auth" + sady[i].getAttribute("URL"); sada.poradi = sady[i].getAttribute("PORADI_SADY"); test.sady.push(sada) } testElements = new Array() setIndex = 0 document.getElementById("sets_read").innerHTML = "Načítám sady otázek" readNextSet() } function readNextSet() { if (setIndex < test.sady.length) { var sada = test.sady[setIndex] var req = new XMLHttpRequest(); req.open('GET', sada.url, true); req.onreadystatechange = function (aEvt) { if (req.readyState == 4) { if(req.status == 200) { sada.text = req.responseText //.replace(/\n/g,"") var otazky = sada.text.split(/\n--(\s+)?\n/) for (var i = 0; i < otazky.length; i++) { if (otazky[i] == undefined || otazky[i] == "" || otazky[i].indexOf("++") == 0) continue; var otazka = new Otazka(); otazka.idmd5 = hex_md5(otazky[i]) var prvky = otazky[i].match(/ \:[abclmnrtv](\d+[a-z]?(\(\d+x\d+\))?)?/g) if ( !prvky ) continue; for (var j = 0; j < prvky.length; j++) { var casti = prvky[j].match(/ \:([abclmnrtv])(\d*)([a-z]*)/) var typ = casti[1]; var suffix = casti[3]; //report(otazka.idmd5 + "$" + typ + "$" + suffix + "$") var previous = false; for (var k =0; k < otazka.prvky.length; k++) { if (otazka.prvky[k].typ == typ && "rc".indexOf(otazka.prvky[k].typ) > -1 && otazka.prvky[k].suffix == suffix) { otazka.prvky[k].pocet++; previous = true; } } if (!previous) { otazka.prvky.push(new Prvek(typ, suffix) ) } } //report( "------ " + otazka.idmd5 + " " + otazka.getItems() ) if (otazky[i].indexOf(":") != -1 ) { sada.otazky.push(otazka) questions[otazka.idmd5] = otazka; } } qCount += sada.otazky.length; setIndex++; document.getElementById("sets_read").innerHTML = "Načítám sady otázek: " + setIndex + "/" + test.sady.length readNextSet() } else dump("Error loading set of questions\n"); } } req.send(null); } else { // konec nacitani sad otazek, jde se na XML s odpovedmi if (testList.length > 0) { loadNextXML() document.getElementById("tests_read").innerHTML = "Načítám odpovědi z testů: 0/" + testList.length; } //document.getElementById("vystup_tabulka").value = test.toString() } } function loadNextXML() { var shortUrl = testList[testCounter]; var auth = "https://is.muni.cz/auth" if (shortUrl.indexOf(auth) == 0) shortUrl.substring(auth.length) //document.getElementById("prvky_sady").value = shortUrl; var req = new XMLHttpRequest(); req.open('GET', "https://is.muni.cz/auth/elearning/test_odpovedi.pl?testurl=" + escape(shortUrl) + ";nabizrus=0;nabixml=1;xmlqa=all;prehlosob=1", true); req.onreadystatechange = function (aEvt) { if (req.readyState == 4) { if(req.status == 200) { parseXML(req.responseText) } else alert("Error loading XML with answers\n"); } } req.send(null); } function parseXML(retez) { xmlDoc = (new DOMParser()).parseFromString(retez, "application/xml"); var koren = xmlDoc.childNodes[0]; var vystup = "" var lide = koren.getElementsByTagName("PROCHAZEJICI") for (var i = 0; i < lide.length; i++) { if (lide[i].querySelector("ODP") == null) continue; var lastActions = []; var pruchody = lide[i].getElementsByTagName("PRUCHOD"); for (var ii = 0; ii < pruchody.length; ii++) { var akce = pruchody[ii].getElementsByTagName("AKCE"); // vyhledani posledni ulozene akce var ulozena = null; for (var j = 0; j < akce.length; j++) { if (akce[j].getAttribute("TYP") == "b" || akce[j].getAttribute("TYP") == "c") ulozena = akce[j]; } if (ulozena != null) lastActions[0] = ulozena//.push(ulozena); } var odpoved = "" // nacteni ulozene odpovedi var jmeno = lide[i].getAttribute("JMENO"); var uco = lide[i].getAttribute("UCO"); if (jmeno != null) { if (jmeno.indexOf("(") > -1) jmeno= jmeno.substring(0, jmeno.indexOf("(" ) -1) } else jmeno = "unknown" var respondent = new Respondent(jmeno, uco) respondents.push(respondent) /* if ( !test_repeat && lastActions.length > 1) { lastActions.splice(0, lastActions.length-1) } */ for (var kk = 0; kk < 1 /*lastActions.length*/; kk++) { ulozena = lastActions[kk] for (var iii= 0; iii < test.sady.length; iii++) { var sada = test.sady[iii] for (var jjj = 0; jjj < sada.otazky.length; jjj++) { var otazka = sada.otazky[jjj]; respondent.results[otazka.idmd5] = new Array() var counters = { a:0, b:0, c: 0, l:0, m: 0, n:0, r: 0, t: 0, v: 0 } var poradi = -1 //var ids = lastActions[kk].parentNode.querySelectorAll("IDMD5") var ids = ulozena.parentNode.querySelectorAll("IDMD5") for (var oo = 0; oo < ids.length; oo++) { if (ids[oo].firstChild.nodeValue == otazka.idmd5) { poradi = oo + 1; break} } for (var kkk = 0; kkk < otazka.prvky.length; kkk++){ var prvek = otazka.prvky[kkk] var pid = prvek.typ; counters[prvek.typ]++; if ("crv".indexOf(prvek.typ) > -1) { pid += "_" + String.fromCharCode(96 + counters[prvek.typ] ) } if ("antlm".indexOf(prvek.typ) > -1) { pid += "_a_" + counters[prvek.typ] } if (prvek.typ == "c") { for (var lll =0; lll < prvek.pocet; lll++) { //var odp = lastActions[kk].querySelector("ODP[POR='" + poradi +"'][ID='" + pid +"'][HOD='" + (lll+1) +"']"); var odp = ulozena.querySelector("ODP[POR='" + poradi +"'][ID='" + pid +"'][HOD='" + (lll+1) +"']"); if (odp != undefined && odp != null) respondent.results[otazka.idmd5].push(1) else respondent.results[otazka.idmd5].push(""); } } else { var odp = ulozena.querySelector("ODP[POR='" + poradi +"'][ID='" + pid +"']"); if (odp != undefined && odp != null) respondent.results[otazka.idmd5].push(odp.getAttribute("HOD") ) else respondent.results[otazka.idmd5].push(""); } } //konec prvku otazky } //konec otazky } //konec sady /* konewc bloku s extrakci odpovedi z akce */ } } if (testCounter < testList.length-1) { testCounter++; document.getElementById("tests_read").innerHTML = "Načítám odpovědi z testů: " + testCounter + "/" + testList.length loadNextXML() } else { document.getElementById("tests_read").innerHTML = "Načítám odpovědi z testů: " + testList.length + "/" + testList.length showFinalResults() } } function showFinalResults() { //scitani a statistika var sep = "\t" var qIndex = 0; var cols = 2; var vystup = "" var row1 = "" row1_csv += "" + (j+1) + sep for (var kk = 0; kk < otazka.prvky.length; kk++) { if (kk > 0) { row1 += ""; row1_csv += " " + sep } if (otazka.prvky[kk].typ == "c" ) { for (var ll = 0; ll < otazka.prvky[kk].pocet; ll++) { if (ll > 0) { row1 += "" row1_csv += " " + sep } row2 += "" row2_csv += (ll+1) + sep } } else { row2 += "" row2_csv = " " + sep } } } } row1 += "<\/tr>" row2 += "<\/tr>" vystup += "" + row1; vystup += row2 + "<\/thead>"; vystup += "" vystup_csv += row1_csv + "\n" + row2_csv + "\n" for (var ii = 0; ii < respondents.length; ii++) { var resp = respondents[ii] var row = "" row_csv += "" + results[pozice] + sep pozice++; } } else { row += "" row_csv += "" + results[pozice] + sep pozice++; } } //konec vypisu prvku otazky } //koenc vypisu cele otazky } //konec vypisu sady row += "" vystup += row; vystup_csv += row_csv + "\n" } vystup += "<\/tbody>" vystup += "
 <\/th> <\/th>" var row2 = "
 <\/th> <\/th>" var vystup_csv = "" var row1_csv = " " + sep + " " + sep var row2_csv = " " + sep + " " + sep var sadaMin = 0 //parseInt(document.getElementById("sada_min").value) var sadaMax = test.sady.length -1 //parseInt(document.getElementById("sada_max").value) for (var i =sadaMin; i < sadaMax +1; i++) { var sada = test.sady[i]; for (var j =0; j < sada.otazky.length /**/; j++) { var otazka = sada.otazky[j]; row1 += "" + (j+1) + /*" " + otazka.prvky[0].typ + otazka.prvky[0].pocet+ */ " " + (ll+1) + " 
" + resp.name + "<\/td>" + resp.uco + "<\/td>" var row_csv = resp.name + sep + resp.uco + sep for (var i =sadaMin; i < sadaMax+1; i++) { var sada = test.sady[i]; for (var j =0; j < sada.otazky.length; j++) { var otazka = sada.otazky[j]; var results = resp.results[otazka.idmd5]; if (!results) break; //report(ii + " "+ j+ " " + otazka.idmd5 + ": " + results.join("$")) var pozice = 0; for (var k = 0; k < otazka.prvky.length; k++) { var prvek = otazka.prvky[k] if (prvek.typ == "c") { for (var ll = 0; ll < prvek.pocet; ll++) { row += "" + results[pozice] + "" + results[pozice] + "
"; vystup = "

Výstup v CSV<\/h3>