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

OO-2563: multiple choice with score per answer need to take the negative answer case in account...

parent 62835b26
No related branches found
No related tags found
No related merge requests found
...@@ -49,6 +49,7 @@ import org.olat.ims.qti.QTIModule; ...@@ -49,6 +49,7 @@ import org.olat.ims.qti.QTIModule;
import org.olat.ims.qti.editor.QTIEditHelper; import org.olat.ims.qti.editor.QTIEditHelper;
import org.olat.ims.qti.editor.QTIEditorPackage; import org.olat.ims.qti.editor.QTIEditorPackage;
import org.olat.ims.qti.editor.beecom.objects.Assessment; import org.olat.ims.qti.editor.beecom.objects.Assessment;
import org.olat.ims.qti.editor.beecom.objects.ChoiceQuestion;
import org.olat.ims.qti.editor.beecom.objects.Control; import org.olat.ims.qti.editor.beecom.objects.Control;
import org.olat.ims.qti.editor.beecom.objects.Duration; import org.olat.ims.qti.editor.beecom.objects.Duration;
import org.olat.ims.qti.editor.beecom.objects.EssayQuestion; import org.olat.ims.qti.editor.beecom.objects.EssayQuestion;
...@@ -435,8 +436,17 @@ public class QTI12To21Converter { ...@@ -435,8 +436,17 @@ public class QTI12To21Converter {
Question question = item.getQuestion(); Question question = item.getQuestion();
itemBuilder.setShuffle(question.isShuffle()); itemBuilder.setShuffle(question.isShuffle());
boolean singleCorrect = question.isSingleCorrect(); boolean hasNegative = false;
List<Response> responses = question.getResponses(); List<Response> responses = question.getResponses();
for(Response response:responses) {
if(response.getPoints() < 0.0f) {
hasNegative = true;
}
}
boolean singleCorrect = question.isSingleCorrect();
for(Response response:responses) { for(Response response:responses) {
String responseText = response.getContent().renderAsHtmlForEditor(); String responseText = response.getContent().renderAsHtmlForEditor();
responseText = prepareContent(responseText); responseText = prepareContent(responseText);
...@@ -452,15 +462,19 @@ public class QTI12To21Converter { ...@@ -452,15 +462,19 @@ public class QTI12To21Converter {
} }
itemBuilder.addSimpleChoice(newChoice); itemBuilder.addSimpleChoice(newChoice);
if(response.isCorrect()) {
itemBuilder.addCorrectAnswer(newChoice.getIdentifier());
}
double score = response.getPoints(); double score = response.getPoints();
if(singleCorrect) { if(singleCorrect) {
if(response.isCorrect()) {
itemBuilder.addCorrectAnswer(newChoice.getIdentifier());
}
if(score > 0.0f) { if(score > 0.0f) {
itemBuilder.setMaxScore(score); itemBuilder.setMaxScore(score);
} }
} else { } else {
if((hasNegative && response.getPoints() >= 0.0f) || (!hasNegative && response.getPoints() > 0.0f)) {
itemBuilder.addCorrectAnswer(newChoice.getIdentifier());
}
itemBuilder.setMapping(newChoice.getIdentifier(), score); itemBuilder.setMapping(newChoice.getIdentifier(), score);
} }
} }
...@@ -469,6 +483,11 @@ public class QTI12To21Converter { ...@@ -469,6 +483,11 @@ public class QTI12To21Converter {
itemBuilder.setScoreEvaluationMode(ScoreEvaluation.allCorrectAnswers); itemBuilder.setScoreEvaluationMode(ScoreEvaluation.allCorrectAnswers);
} else { } else {
itemBuilder.setScoreEvaluationMode(ScoreEvaluation.perAnswer); itemBuilder.setScoreEvaluationMode(ScoreEvaluation.perAnswer);
if(question instanceof ChoiceQuestion) {
ChoiceQuestion choice = (ChoiceQuestion)question;
itemBuilder.setMinScore(new Double(choice.getMinValue()));
itemBuilder.setMaxScore(new Double(choice.getMaxValue()));
}
} }
return itemBuilder; return itemBuilder;
......
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