const token = localStorage.getItem("token"); let contentpage = document.getElementById("content") const groups = ["Control", "Leaderboard", "Badges", "Points"]; const users = {}; const questions = {}; let selecteduser = undefined; let selectedAnswers = undefined; let selectedQuestion = undefined; document.getElementById("csverstellen").addEventListener("click", (ev)=>{ ev.preventDefault() fetch(`/users/csv?uid=${selecteduser.uid}&token=${token}`).then((response)=>{ if(response.status<400){ response.arrayBuffer().then((arrayBuffer)=>{ const csvld = document.getElementById("csvdl"); csvld.setAttribute("download", `csv${selecteduser.uid}.tar`); csvld.setAttribute("href", URL.createObjectURL(new Blob([arrayBuffer]))); csvld.setAttribute("style", ""); }) } }) }) fetch("/users?token="+token).then((response)=>{ if(response.status<400){ response.json().then((json)=>{ json.forEach((data)=>{ if(data.xp){ if(users[groups[data.group]]){ users[groups[data.group]][data.uid]=new user(data); }else{ const item = {}; item[data.uid]=new user(data); users[groups[data.group]]=item; } } }) const allcsv = document.getElementById("allecsv"); allcsv.setAttribute("style", ""); allcsv.addEventListener("click", (ev)=>{ ev.preventDefault(); fetch("/users/csv?token="+token).then((response)=>{ if(response.status<400){ response.arrayBuffer().then((arrayBuffer)=>{ const csvld = document.getElementById("csvdl"); csvld.setAttribute("download", `csv${selecteduser.uid}.tar`); csvld.setAttribute("href", URL.createObjectURL(new Blob([arrayBuffer]))); csvld.setAttribute("style", ""); }) } }) }) fetch("/questions").then((response)=>{ if(response.status<400){ response.json().then((json)=>{ const exclude = []; json.forEach((data)=>{ data.tags.forEach((tag)=>{ if(tag==="rquestions"||tag==="stat"){ exclude.push(data.qid); } if(questions[tag]){ questions[tag][data.qid]=new question(data); }else{ const item = {}; item[data.qid]=new question(data) questions[tag]=item; } }) }) contentpage.innerHTML=`
` const GruppeAuswahl = document.getElementById("Gruppe"); const SpielerAuswahl = document.getElementById("Spieler"); const Fragenkatalog = document.getElementById("Fragenkatalog"); const FragenKategorie = document.getElementById("Fragenkategorie"); const Frage = document.getElementById("Frage") GruppeAuswahl.innerHTML+=Object.keys(users).map((key)=>``).join("\r\n"); GruppeAuswahl.addEventListener("change", (ev)=>{ if(ev.target.value==="Gruppe wählen"){ SpielerAuswahl.innerHTML=""; }else{ SpielerAuswahl.innerHTML=`\r\n${Object.keys(users[ev.target.value]).map((uid)=>"").join("\r\n")}` } }) SpielerAuswahl.addEventListener("change", (ev)=>{ document.getElementById("csvdl").setAttribute("style", "display: none;") document.getElementById("csvdl").setAttribute("href", ""); if(ev.target.value===""||ev.target.value==="Spieler wählen"){ selecteduser=undefined; FragenKategorie.setAttribute("style", "display: none") Frage.setAttribute("style", "display: none"); document.getElementById("csverstellen").setAttribute("style", "display: none;") }else{ selecteduser=users[GruppeAuswahl.value][ev.target.value]; document.getElementById("SpielerInfo").innerHTML=SpielerInfo(exclude); FragenKategorie.setAttribute("style", "") Frage.setAttribute("style", ""); document.getElementById("csverstellen").setAttribute("style", "") } }) FragenKategorie.addEventListener("change", (ev)=>{ Fragenkatalog.innerHTML="" if(ev.target.value==="Fragenkategorie auswählen"){ Fragenkatalog.setAttribute("style", "display: none"); }else{ Fragenkatalog.setAttribute("style", "") selectedAnswers = selecteduser.Antworten(questions[ev.target.value]) Object.keys(selectedAnswers).forEach((question)=>{ const option = document.createElement("option"); option.innerHTML=question; Fragenkatalog.appendChild(option); }) Fragenkatalog.addEventListener("change", (ev)=>{ if(ev.target.value==="Frage auswählen"){ selectedQuestion=undefined }else{ selectedQuestion=ev.target.value } questionElement(exclude).then((jsx)=>{ Frage.innerHTML=jsx; }, (err)=>{ Frage.innerHTML=err; }) }) } }) }, ()=>{ contentpage.innerHTML+="\r\ncan't parse response"; }) }else{ contentpage.innerHTML+="\r\ncan't get questions" } }) }, ()=>{ contentpage.innerHTML="can't parse response"; }) }else{ contentpage.innerHTML="can't fetch user data" } }) const user = function({rounds, logdates, admin, xp, uid}){ this.rounds = rounds; this.logdates = logdates; this.admin = admin; this.xp = xp; this.uid = uid this.Antworten = (Fragen)=>{ const responses = {}; Object.keys(Fragen).forEach((key)=>{ if(this.xp){ this.xp.forEach(({date, xp})=>{ xp.forEach(({qid, right, selected, timeSpan})=>{ if(parseInt(key)==qid){ const {title, answers, page} = Fragen[key]; const selectedAnswers = [] selected.forEach((index)=>{ selectedAnswers.push(index); }) if(responses[title]){ if(responses[title][date]){ responses[title][date].push({selectedAnswers, right, timeSpan}) }else{ responses[title][date]=[{selectedAnswers, right, timeSpan}] } }else{ const item = {qid, textmark: Object.keys(Fragen).indexOf(`${qid}`), page:page||"52"}; item[date] = [{selectedAnswers, right, timeSpan}]; responses[title]=item; } } }) }) } }) return responses; } this.Gesamtpunktzahl = (exclude)=>{ let total = [0, 0]; if(this.xp){ this.xp.forEach(({xp})=>{ xp.forEach(({qid, right})=>{ if(!exclude||!exclude.includes(qid)){ total[1]++; if(right){ total[0]++; } } }) }) } return total; } } const question = function({title, answers, page}){ this.title=title; this.answers=answers; this.page=page } const SpielerInfo = (exclude)=>{ let totaltLogTime = 0; selecteduser.logdates.forEach(([begin, end])=>{ if(end){ totaltLogTime+=Date.parse(end)-Date.parse(begin); } }) return (` `) } const questionElement = (exclude)=>new Promise((res, rej)=>{ const tag = document.getElementById("Fragenkategorie").value; const squestion = selectedAnswers[selectedQuestion] fetch(`/text?id=${tag}${tag==="rquestions"?1:selectedAnswers[selectedQuestion].textmark}`).then((response)=>{ if(response.status<400){ response.json().then((json)=>{ const answermap = []; switch(squestion.page){ case "44": json.content.filter(({id})=>id.includes("acc")&&!id.includes("label")).forEach((item)=>{ answermap.push(`