Skip to content
Snippets Groups Projects
Commit 5d87943f authored by srosse's avatar srosse
Browse files

OO-1088, OO-716: wording, split the QTI statistics in test statistics and survey statistics

parent 0ff0c182
No related branches found
No related tags found
No related merge requests found
Showing
with 88 additions and 41 deletions
...@@ -52,6 +52,7 @@ import org.olat.course.run.userview.TreeEvaluation; ...@@ -52,6 +52,7 @@ import org.olat.course.run.userview.TreeEvaluation;
import org.olat.course.run.userview.UserCourseEnvironment; import org.olat.course.run.userview.UserCourseEnvironment;
import org.olat.course.statistic.StatisticResourceOption; import org.olat.course.statistic.StatisticResourceOption;
import org.olat.course.statistic.StatisticResourceResult; import org.olat.course.statistic.StatisticResourceResult;
import org.olat.ims.qti.statistics.QTIType;
import org.olat.modules.ModuleConfiguration; import org.olat.modules.ModuleConfiguration;
import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryEntry;
...@@ -261,9 +262,9 @@ public interface CourseNode extends INode, ShortName { ...@@ -261,9 +262,9 @@ public interface CourseNode extends INode, ShortName {
* @return * @return
*/ */
public StatisticResourceResult createStatisticNodeResult(UserRequest ureq, WindowControl wControl, public StatisticResourceResult createStatisticNodeResult(UserRequest ureq, WindowControl wControl,
UserCourseEnvironment userCourseEnv, StatisticResourceOption options); UserCourseEnvironment userCourseEnv, StatisticResourceOption options, QTIType... type);
public boolean isStatisticNodeResultAvailable(UserCourseEnvironment userCourseEnv); public boolean isStatisticNodeResultAvailable(UserCourseEnvironment userCourseEnv, QTIType... type);
/** /**
* this method must generate a nodeevaluation and take care of (if any) child * this method must generate a nodeevaluation and take care of (if any) child
......
...@@ -64,6 +64,7 @@ import org.olat.course.statistic.StatisticResourceOption; ...@@ -64,6 +64,7 @@ import org.olat.course.statistic.StatisticResourceOption;
import org.olat.course.statistic.StatisticResourceResult; import org.olat.course.statistic.StatisticResourceResult;
import org.olat.group.model.BGAreaReference; import org.olat.group.model.BGAreaReference;
import org.olat.group.model.BusinessGroupReference; import org.olat.group.model.BusinessGroupReference;
import org.olat.ims.qti.statistics.QTIType;
import org.olat.modules.ModuleConfiguration; import org.olat.modules.ModuleConfiguration;
/** /**
...@@ -151,12 +152,12 @@ public abstract class GenericCourseNode extends GenericNode implements CourseNod ...@@ -151,12 +152,12 @@ public abstract class GenericCourseNode extends GenericNode implements CourseNod
@Override @Override
public StatisticResourceResult createStatisticNodeResult(UserRequest ureq, WindowControl wControl, public StatisticResourceResult createStatisticNodeResult(UserRequest ureq, WindowControl wControl,
UserCourseEnvironment userCourseEnv, StatisticResourceOption options) { UserCourseEnvironment userCourseEnv, StatisticResourceOption options, QTIType... types) {
return null; return null;
} }
@Override @Override
public boolean isStatisticNodeResultAvailable(UserCourseEnvironment userCourseEnv) { public boolean isStatisticNodeResultAvailable(UserCourseEnvironment userCourseEnv, QTIType... types) {
return false; return false;
} }
......
...@@ -70,6 +70,7 @@ import org.olat.ims.qti.export.QTIExportManager; ...@@ -70,6 +70,7 @@ import org.olat.ims.qti.export.QTIExportManager;
import org.olat.ims.qti.process.AssessmentInstance; import org.olat.ims.qti.process.AssessmentInstance;
import org.olat.ims.qti.statistics.QTIStatisticResourceResult; import org.olat.ims.qti.statistics.QTIStatisticResourceResult;
import org.olat.ims.qti.statistics.QTIStatisticSearchParams; import org.olat.ims.qti.statistics.QTIStatisticSearchParams;
import org.olat.ims.qti.statistics.QTIType;
import org.olat.ims.qti.statistics.ui.QTI12StatisticsToolController; import org.olat.ims.qti.statistics.ui.QTI12StatisticsToolController;
import org.olat.modules.ModuleConfiguration; import org.olat.modules.ModuleConfiguration;
import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryEntry;
...@@ -133,7 +134,10 @@ public class IQSURVCourseNode extends AbstractAccessableCourseNode implements QT ...@@ -133,7 +134,10 @@ public class IQSURVCourseNode extends AbstractAccessableCourseNode implements QT
} }
@Override @Override
public StatisticResourceResult createStatisticNodeResult(UserRequest ureq, WindowControl wControl, UserCourseEnvironment userCourseEnv, StatisticResourceOption options) { public StatisticResourceResult createStatisticNodeResult(UserRequest ureq, WindowControl wControl,
UserCourseEnvironment userCourseEnv, StatisticResourceOption options, QTIType... types) {
if(!isQTITypeAllowed(types)) return null;
Long courseId = userCourseEnv.getCourseEnvironment().getCourseResourceableId(); Long courseId = userCourseEnv.getCourseEnvironment().getCourseResourceableId();
OLATResourceable courseOres = OresHelper.createOLATResourceableInstance("CourseModule", courseId); OLATResourceable courseOres = OresHelper.createOLATResourceableInstance("CourseModule", courseId);
...@@ -155,8 +159,20 @@ public class IQSURVCourseNode extends AbstractAccessableCourseNode implements QT ...@@ -155,8 +159,20 @@ public class IQSURVCourseNode extends AbstractAccessableCourseNode implements QT
} }
@Override @Override
public boolean isStatisticNodeResultAvailable(UserCourseEnvironment userCourseEnv) { public boolean isStatisticNodeResultAvailable(UserCourseEnvironment userCourseEnv, QTIType... types) {
return true; return isQTITypeAllowed(types);
}
private boolean isQTITypeAllowed(QTIType... types) {
if(types == null) return true;
if(types.length == 0 || (types.length == 1 && types[0] == null)) return true;
for(QTIType type:types) {
if(QTIType.survey.equals(type)) {
return true;
}
}
return false;
} }
/** /**
......
...@@ -75,6 +75,7 @@ import org.olat.ims.qti.export.QTIExportManager; ...@@ -75,6 +75,7 @@ import org.olat.ims.qti.export.QTIExportManager;
import org.olat.ims.qti.process.AssessmentInstance; import org.olat.ims.qti.process.AssessmentInstance;
import org.olat.ims.qti.statistics.QTIStatisticResourceResult; import org.olat.ims.qti.statistics.QTIStatisticResourceResult;
import org.olat.ims.qti.statistics.QTIStatisticSearchParams; import org.olat.ims.qti.statistics.QTIStatisticSearchParams;
import org.olat.ims.qti.statistics.QTIType;
import org.olat.ims.qti.statistics.ui.QTI12StatisticsToolController; import org.olat.ims.qti.statistics.ui.QTI12StatisticsToolController;
import org.olat.modules.ModuleConfiguration; import org.olat.modules.ModuleConfiguration;
import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryEntry;
...@@ -147,7 +148,10 @@ public class IQTESTCourseNode extends AbstractAccessableCourseNode implements As ...@@ -147,7 +148,10 @@ public class IQTESTCourseNode extends AbstractAccessableCourseNode implements As
} }
@Override @Override
public StatisticResourceResult createStatisticNodeResult(UserRequest ureq, WindowControl wControl, UserCourseEnvironment userCourseEnv, StatisticResourceOption options) { public StatisticResourceResult createStatisticNodeResult(UserRequest ureq, WindowControl wControl,
UserCourseEnvironment userCourseEnv, StatisticResourceOption options, QTIType... types) {
if(!isQTITypeAllowed(types)) return null;
Long courseId = userCourseEnv.getCourseEnvironment().getCourseResourceableId(); Long courseId = userCourseEnv.getCourseEnvironment().getCourseResourceableId();
OLATResourceable courseOres = OresHelper.createOLATResourceableInstance("CourseModule", courseId); OLATResourceable courseOres = OresHelper.createOLATResourceableInstance("CourseModule", courseId);
...@@ -169,8 +173,20 @@ public class IQTESTCourseNode extends AbstractAccessableCourseNode implements As ...@@ -169,8 +173,20 @@ public class IQTESTCourseNode extends AbstractAccessableCourseNode implements As
} }
@Override @Override
public boolean isStatisticNodeResultAvailable(UserCourseEnvironment userCourseEnv) { public boolean isStatisticNodeResultAvailable(UserCourseEnvironment userCourseEnv, QTIType... types) {
return true; return isQTITypeAllowed(types);
}
private boolean isQTITypeAllowed(QTIType... types) {
if(types == null) return true;
if(types.length == 0 || (types.length == 1 && types[0] == null)) return true;
for(QTIType type:types) {
if(QTIType.test.equals(type) || QTIType.onyx.equals(type)) {
return true;
}
}
return false;
} }
/** /**
......
...@@ -119,6 +119,7 @@ import org.olat.course.statistic.StatisticMainController; ...@@ -119,6 +119,7 @@ import org.olat.course.statistic.StatisticMainController;
import org.olat.group.BusinessGroup; import org.olat.group.BusinessGroup;
import org.olat.group.BusinessGroupService; import org.olat.group.BusinessGroupService;
import org.olat.group.ui.edit.BusinessGroupModifiedEvent; import org.olat.group.ui.edit.BusinessGroupModifiedEvent;
import org.olat.ims.qti.statistics.QTIType;
import org.olat.instantMessaging.InstantMessagingModule; import org.olat.instantMessaging.InstantMessagingModule;
import org.olat.instantMessaging.InstantMessagingService; import org.olat.instantMessaging.InstantMessagingService;
import org.olat.instantMessaging.OpenInstantMessageEvent; import org.olat.instantMessaging.OpenInstantMessageEvent;
...@@ -694,8 +695,10 @@ public class RunMainController extends MainLayoutBasicController implements Gene ...@@ -694,8 +695,10 @@ public class RunMainController extends MainLayoutBasicController implements Gene
boolean vip = isCourseCoach || isCourseAdmin; boolean vip = isCourseCoach || isCourseAdmin;
OpenInstantMessageEvent event = new OpenInstantMessageEvent(ureq, course, courseTitle, vip); OpenInstantMessageEvent event = new OpenInstantMessageEvent(ureq, course, courseTitle, vip);
ureq.getUserSession().getSingleUserEventCenter().fireEventToListenersOf(event, InstantMessagingService.TOWER_EVENT_ORES); ureq.getUserSession().getSingleUserEventCenter().fireEventToListenersOf(event, InstantMessagingService.TOWER_EVENT_ORES);
} else if (cmd.equals("qtistatistic")) { } else if (cmd.equals("teststatistic")) {
launchAssessmentStatistics(ureq, null); launchAssessmentStatistics(ureq, "command.openteststatistic", "TestStatistics", QTIType.test, QTIType.onyx);
} else if (cmd.equals("surveystatistic")) {
launchAssessmentStatistics(ureq, "command.opensurveystatistic", "SurveyStatistics", QTIType.survey);
} else if (cmd.equals("customDb")) { } else if (cmd.equals("customDb")) {
if (hasCourseRight(CourseRights.RIGHT_DB) || isCourseAdmin) { if (hasCourseRight(CourseRights.RIGHT_DB) || isCourseAdmin) {
currentToolCtr = new CustomDBMainController(ureq, getWindowControl(), course); currentToolCtr = new CustomDBMainController(ureq, getWindowControl(), course);
...@@ -855,22 +858,15 @@ public class RunMainController extends MainLayoutBasicController implements Gene ...@@ -855,22 +858,15 @@ public class RunMainController extends MainLayoutBasicController implements Gene
} else throw new OLATSecurityException("clicked groupmanagement, but no according right"); } else throw new OLATSecurityException("clicked groupmanagement, but no according right");
} }
private Activateable2 launchAssessmentStatistics(UserRequest ureq, List<ContextEntry> entries) { private Activateable2 launchAssessmentStatistics(UserRequest ureq, String i18nCrumbKey, String typeName, QTIType... types) {
OLATResourceable ores = OresHelper.createOLATResourceableType("assessmentStatistics"); OLATResourceable ores = OresHelper.createOLATResourceableType(typeName);
ThreadLocalUserActivityLogger.addLoggingResourceInfo(LoggingResourceable.wrapBusinessPath(ores)); ThreadLocalUserActivityLogger.addLoggingResourceInfo(LoggingResourceable.wrapBusinessPath(ores));
WindowControl swControl = addToHistory(ureq, ores, null); WindowControl swControl = addToHistory(ureq, ores, null);
if (hasCourseRight(CourseRights.RIGHT_STATISTICS) || isCourseAdmin) { if (hasCourseRight(CourseRights.RIGHT_STATISTICS) || isCourseAdmin || isCourseCoach) {
StatisticCourseNodesController statsToolCtr = new StatisticCourseNodesController(ureq, swControl, courseRepositoryEntry, uce); StatisticCourseNodesController statsToolCtr = new StatisticCourseNodesController(ureq, swControl, courseRepositoryEntry, uce, types);
currentToolCtr = statsToolCtr; currentToolCtr = statsToolCtr;
listenTo(statsToolCtr); listenTo(statsToolCtr);
all.pushController(translate("command.openstatistic"), statsToolCtr); all.pushController(translate(i18nCrumbKey), statsToolCtr);
return statsToolCtr;
}
if (isCourseCoach) {
StatisticCourseNodesController statsToolCtr = new StatisticCourseNodesController(ureq, swControl, courseRepositoryEntry, uce);
currentToolCtr = statsToolCtr;
listenTo(statsToolCtr);
all.pushController(translate("command.openstatistic"), statsToolCtr);
return statsToolCtr; return statsToolCtr;
} }
return null; return null;
...@@ -1063,17 +1059,23 @@ public class RunMainController extends MainLayoutBasicController implements Gene ...@@ -1063,17 +1059,23 @@ public class RunMainController extends MainLayoutBasicController implements Gene
myTool.addLink("assessment", translate("command.openassessment")); myTool.addLink("assessment", translate("command.openassessment"));
} }
if (hasCourseRight(CourseRights.RIGHT_STATISTICS) || isCourseAdmin || isCourseCoach) { if (hasCourseRight(CourseRights.RIGHT_STATISTICS) || isCourseAdmin || isCourseCoach) {
final AtomicInteger qtiNodes = new AtomicInteger(); final AtomicInteger testNodes = new AtomicInteger();
final AtomicInteger surveyNodes = new AtomicInteger();
new TreeVisitor(new Visitor() { new TreeVisitor(new Visitor() {
@Override @Override
public void visit(INode node) { public void visit(INode node) {
if(((CourseNode)node).isStatisticNodeResultAvailable(uce)) { if(((CourseNode)node).isStatisticNodeResultAvailable(uce, QTIType.test, QTIType.onyx)) {
qtiNodes.incrementAndGet(); testNodes.incrementAndGet();
} else if(((CourseNode)node).isStatisticNodeResultAvailable(uce, QTIType.survey)) {
surveyNodes.incrementAndGet();
} }
} }
}, course.getRunStructure().getRootNode(), true).visitAll(); }, course.getRunStructure().getRootNode(), true).visitAll();
if(qtiNodes.intValue() > 0) { if(testNodes.intValue() > 0) {
myTool.addLink("qtistatistic", translate("command.openqtistatistic")); myTool.addLink("teststatistic", translate("command.openteststatistic"));
}
if(surveyNodes.intValue() > 0) {
myTool.addLink("surveystatistic", translate("command.opensurveystatistic"));
} }
} }
if (hasCourseRight(CourseRights.RIGHT_STATISTICS) || isCourseAdmin) { if (hasCourseRight(CourseRights.RIGHT_STATISTICS) || isCourseAdmin) {
...@@ -1290,11 +1292,16 @@ public class RunMainController extends MainLayoutBasicController implements Gene ...@@ -1290,11 +1292,16 @@ public class RunMainController extends MainLayoutBasicController implements Gene
//the wrong link to the wrong person //the wrong link to the wrong person
} }
} }
} else if ("assessmentStatistics".equals(type)) { } else if ("TestStatistics".equalsIgnoreCase(type) || "SurveyStatistics".equalsIgnoreCase(type)) {
//check the security before, the link is perhaps in the wrong hands //check the security before, the link is perhaps in the wrong hands
if(hasCourseRight(CourseRights.RIGHT_ASSESSMENT) || isCourseAdmin || isCourseCoach) { if(hasCourseRight(CourseRights.RIGHT_ASSESSMENT) || isCourseAdmin || isCourseCoach) {
try { try {
Activateable2 assessmentCtrl = launchAssessmentStatistics(ureq, null); Activateable2 assessmentCtrl;
if("TestStatistics".equalsIgnoreCase(type)) {
assessmentCtrl = launchAssessmentStatistics(ureq, "command.openteststatistic", "TestStatistics", QTIType.test, QTIType.onyx);
} else {
assessmentCtrl = launchAssessmentStatistics(ureq, "command.opensurveystatistic", "SurveyStatistics", QTIType.survey);
}
List<ContextEntry> subEntries; List<ContextEntry> subEntries;
if(entries.size() > 1 && entries.get(1).getOLATResourceable().getResourceableTypeName().equals(type)) { if(entries.size() > 1 && entries.get(1).getOLATResourceable().getResourceableTypeName().equals(type)) {
......
...@@ -20,7 +20,8 @@ command.opengroupmngt=Gruppenmanagement ...@@ -20,7 +20,8 @@ command.opengroupmngt=Gruppenmanagement
command.opensimplegroupmngt=Mitgliederverwaltung command.opensimplegroupmngt=Mitgliederverwaltung
command.openrightmngt=Rechtemanagement command.openrightmngt=Rechtemanagement
command.openstatistic=Kurs Statistiken command.openstatistic=Kurs Statistiken
command.openqtistatistic=QTI Test Statistiken command.openteststatistic=Test Statistiken
command.opensurveystatistic=Fragebogen Statistiken
command.personalnote=Notizen command.personalnote=Notizen
course.closed = Dieser Kurs wurde beendet und wird nicht l\u00e4nger bearbeitet oder aktualisiert. course.closed = Dieser Kurs wurde beendet und wird nicht l\u00e4nger bearbeitet oder aktualisiert.
course.disposed.command.restart=Den Kurs beenden und neu starten course.disposed.command.restart=Den Kurs beenden und neu starten
......
...@@ -17,7 +17,8 @@ command.openassessment=Assessment tool ...@@ -17,7 +17,8 @@ command.openassessment=Assessment tool
command.opendb=Course DB command.opendb=Course DB
command.openeditor=Course editor command.openeditor=Course editor
command.opengroupmngt=Group management command.opengroupmngt=Group management
command.openqtistatistic=QTI Test Statistics command.openteststatistic=Test statistics
command.opensurveystatistic=Survey statistics
command.openrightmngt=Rights management command.openrightmngt=Rights management
command.opensimplegroupmngt=Members management command.opensimplegroupmngt=Members management
command.openstatistic=Course Statistics command.openstatistic=Course Statistics
......
...@@ -17,7 +17,8 @@ command.openassessment=Outil d'\u00E9valuation ...@@ -17,7 +17,8 @@ command.openassessment=Outil d'\u00E9valuation
command.opendb=Base de donn\u00E9es du cours command.opendb=Base de donn\u00E9es du cours
command.openeditor=Editeur de cours command.openeditor=Editeur de cours
command.opengroupmngt=Gestion des groupes command.opengroupmngt=Gestion des groupes
command.openqtistatistic=Statistique des tests QTI command.openteststatistic=Statistique des tests
command.opensurveystatistic=Statistique des sondages
command.openrightmngt=Gestion des droits command.openrightmngt=Gestion des droits
command.opensimplegroupmngt=Administration des membres command.opensimplegroupmngt=Administration des membres
command.openstatistic=Statistique command.openstatistic=Statistique
......
...@@ -15,7 +15,7 @@ command.openarchiver=Archiwizacja ...@@ -15,7 +15,7 @@ command.openarchiver=Archiwizacja
command.openassessment=Ocenianie command.openassessment=Ocenianie
command.openeditor=Edytor command.openeditor=Edytor
command.opengroupmngt=Grupy command.opengroupmngt=Grupy
command.openqtistatistic=Statystyki QTI command.openteststatistic=Statystyki QTI
command.openrightmngt=Uprawnienia command.openrightmngt=Uprawnienia
command.opensimplegroupmngt=Cz\u0142onkowie command.opensimplegroupmngt=Cz\u0142onkowie
command.openstatistic=Statystyki command.openstatistic=Statystyki
......
...@@ -17,7 +17,7 @@ command.openassessment=Ferramenta de avalia\u00E7\u00E3o ...@@ -17,7 +17,7 @@ command.openassessment=Ferramenta de avalia\u00E7\u00E3o
command.opendb=Banco de dados do Curso command.opendb=Banco de dados do Curso
command.openeditor=Editor do curso command.openeditor=Editor do curso
command.opengroupmngt=Gerenciamento de grupo command.opengroupmngt=Gerenciamento de grupo
command.openqtistatistic=Estat\u00EDsticas de Test QTI command.openteststatistic=Estat\u00EDsticas de Test
command.openrightmngt=Gerenciamento de direitos command.openrightmngt=Gerenciamento de direitos
command.opensimplegroupmngt=Gest\u00E3o de membros command.opensimplegroupmngt=Gest\u00E3o de membros
command.openstatistic=Ajuda sobre as configura\u00E7\u00F5es das descri\u00E7\u00F5es command.openstatistic=Ajuda sobre as configura\u00E7\u00F5es das descri\u00E7\u00F5es
......
...@@ -49,6 +49,7 @@ import org.olat.course.nodes.CourseNode; ...@@ -49,6 +49,7 @@ import org.olat.course.nodes.CourseNode;
import org.olat.course.run.userview.UserCourseEnvironment; import org.olat.course.run.userview.UserCourseEnvironment;
import org.olat.course.run.userview.UserCourseEnvironmentImpl; import org.olat.course.run.userview.UserCourseEnvironmentImpl;
import org.olat.group.BusinessGroup; import org.olat.group.BusinessGroup;
import org.olat.ims.qti.statistics.QTIType;
import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryEntry;
/** /**
...@@ -61,11 +62,14 @@ public class StatisticCourseNodesController extends BasicController implements A ...@@ -61,11 +62,14 @@ public class StatisticCourseNodesController extends BasicController implements A
private final LayoutMain3ColsController layoutCtr; private final LayoutMain3ColsController layoutCtr;
private Controller currentCtrl; private Controller currentCtrl;
private final QTIType[] types;
private final StatisticResourceOption options; private final StatisticResourceOption options;
public StatisticCourseNodesController(UserRequest ureq, WindowControl wControl, RepositoryEntry courseRe, UserCourseEnvironment userCourseEnv) { public StatisticCourseNodesController(UserRequest ureq, WindowControl wControl,
RepositoryEntry courseRe, UserCourseEnvironment userCourseEnv, QTIType ... types) {
super(ureq, wControl); super(ureq, wControl);
this.types = types;
options = new StatisticResourceOption(); options = new StatisticResourceOption();
boolean admin = userCourseEnv.isAdmin(); boolean admin = userCourseEnv.isAdmin();
...@@ -109,7 +113,7 @@ public class StatisticCourseNodesController extends BasicController implements A ...@@ -109,7 +113,7 @@ public class StatisticCourseNodesController extends BasicController implements A
@Override @Override
public void visit(INode node) { public void visit(INode node) {
CourseNode courseNode = (CourseNode)node; CourseNode courseNode = (CourseNode)node;
StatisticResourceResult result = courseNode.createStatisticNodeResult(ureq, getWindowControl(), userCourseEnv, options); StatisticResourceResult result = courseNode.createStatisticNodeResult(ureq, getWindowControl(), userCourseEnv, options, types);
if(result != null) { if(result != null) {
StatisticResourceNode courseNodeTreeNode = new StatisticResourceNode(courseNode, result); StatisticResourceNode courseNodeTreeNode = new StatisticResourceNode(courseNode, result);
rootTreeNode.addChild(courseNodeTreeNode); rootTreeNode.addChild(courseNodeTreeNode);
......
...@@ -3,15 +3,14 @@ menu.title=Test Statistiken ...@@ -3,15 +3,14 @@ menu.title=Test Statistiken
splash.choosetest=Whlen Sie einen Test aus splash.choosetest=Whlen Sie einen Test aus
splash.notenoughresults=Fr diesen Test/Umfrage gibt es noch zu wenig Resultate ({0} Teilnehmer) splash.notenoughresults=Fr diesen Test/Umfrage gibt es noch zu wenig Resultate ({0} Teilnehmer)
chart.answer.averageScoreQuestions.y=Durchschnittliche Punkte
chart.answer.averageScoreQuestions.y=Durschnittliche Punkte
chart.percent.participants=% Teilnehmer chart.percent.participants=% Teilnehmer
chart.percent.participants.num=Anzahl Teilnehmer chart.percent.participants.num=Anzahl Teilnehmer
chart.score.histogramm=Punkteverteilung chart.score.histogramm=Punkteverteilung
chart.duration.histogramm=Bearbeitungsdauer chart.duration.histogramm=Bearbeitungsdauer
chart.duration.histogramm.legend=Bearbeitungsdauer (Min.) chart.duration.histogramm.legend=Bearbeitungsdauer (Min.)
chart.averagescore.peritem=Durschnittliche Punkte pro Frage chart.averagescore.peritem=Durchschnittliche Punkte pro Frage
chart.rightanswers.peritem=Richtige Antworten pro Frage in Prozenten chart.rightanswers.peritem=Richtige Antworten pro Frage in Prozenten
chart.responses=Antworten chart.responses=Antworten
chart.survey.overview=bersicht chart.survey.overview=bersicht
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment