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

OO-4744: remove default passed value if no cut value

Remove the default passed value (false) if the cut value is not choosed
as mode to calculate passed / failed. Finer default correction mode in
course element after chossing a test (grader if grading enabled, manual
if test has manual by coach defined...)
parent abd26433
No related branches found
No related tags found
No related merge requests found
...@@ -55,6 +55,7 @@ import org.olat.course.nodes.CourseNodeFactory; ...@@ -55,6 +55,7 @@ import org.olat.course.nodes.CourseNodeFactory;
import org.olat.course.nodes.IQSELFCourseNode; import org.olat.course.nodes.IQSELFCourseNode;
import org.olat.course.nodes.IQSURVCourseNode; import org.olat.course.nodes.IQSURVCourseNode;
import org.olat.course.nodes.QTICourseNode; import org.olat.course.nodes.QTICourseNode;
import org.olat.fileresource.FileResourceManager;
import org.olat.fileresource.types.ImsQTI21Resource; import org.olat.fileresource.types.ImsQTI21Resource;
import org.olat.ims.qti.QTIModule; import org.olat.ims.qti.QTIModule;
import org.olat.ims.qti.QTIResult; import org.olat.ims.qti.QTIResult;
...@@ -69,11 +70,14 @@ import org.olat.ims.qti.process.AssessmentInstance; ...@@ -69,11 +70,14 @@ import org.olat.ims.qti.process.AssessmentInstance;
import org.olat.ims.qti21.AssessmentTestSession; import org.olat.ims.qti21.AssessmentTestSession;
import org.olat.ims.qti21.QTI21DeliveryOptions; import org.olat.ims.qti21.QTI21DeliveryOptions;
import org.olat.ims.qti21.QTI21Service; import org.olat.ims.qti21.QTI21Service;
import org.olat.ims.qti21.QTI21DeliveryOptions.PassedType;
import org.olat.ims.qti21.model.InMemoryOutcomeListener; import org.olat.ims.qti21.model.InMemoryOutcomeListener;
import org.olat.ims.qti21.model.xml.AssessmentTestBuilder;
import org.olat.ims.qti21.ui.AssessmentTestDisplayController; import org.olat.ims.qti21.ui.AssessmentTestDisplayController;
import org.olat.ims.qti21.ui.QTI21OverrideOptions; import org.olat.ims.qti21.ui.QTI21OverrideOptions;
import org.olat.ims.qti21.ui.event.RestartEvent; import org.olat.ims.qti21.ui.event.RestartEvent;
import org.olat.modules.ModuleConfiguration; import org.olat.modules.ModuleConfiguration;
import org.olat.modules.grading.GradingService;
import org.olat.modules.iq.IQManager; import org.olat.modules.iq.IQManager;
import org.olat.modules.iq.IQPreviewSecurityCallback; import org.olat.modules.iq.IQPreviewSecurityCallback;
import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryEntry;
...@@ -83,6 +87,9 @@ import org.olat.repository.controllers.ReferencableEntriesSearchController; ...@@ -83,6 +87,9 @@ import org.olat.repository.controllers.ReferencableEntriesSearchController;
import org.olat.user.UserManager; import org.olat.user.UserManager;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import uk.ac.ed.ph.jqtiplus.node.test.AssessmentTest;
import uk.ac.ed.ph.jqtiplus.resolution.ResolvedAssessmentTest;
/** /**
* *
* Initial date: 26.06.2015<br> * Initial date: 26.06.2015<br>
...@@ -128,6 +135,8 @@ public class IQConfigurationController extends BasicController { ...@@ -128,6 +135,8 @@ public class IQConfigurationController extends BasicController {
@Autowired @Autowired
private QTI21Service qti21service; private QTI21Service qti21service;
@Autowired @Autowired
private GradingService gradingService;
@Autowired
private RepositoryManager repositoryManager; private RepositoryManager repositoryManager;
@Autowired @Autowired
private RepositoryService repositoryService; private RepositoryService repositoryService;
...@@ -215,11 +224,17 @@ public class IQConfigurationController extends BasicController { ...@@ -215,11 +224,17 @@ public class IQConfigurationController extends BasicController {
logError("Test cannot be read: " + re, e); logError("Test cannot be read: " + re, e);
showError("error.resource.corrupted"); showError("error.resource.corrupted");
} }
QTI21DeliveryOptions deliveryOptions = qti21service.getDeliveryOptions(re);
if(replacedTest) {// set some default settings in case the user don't save the next panel if(replacedTest) {// set some default settings in case the user don't save the next panel
moduleConfiguration.setStringValue(IQEditController.CONFIG_CORRECTION_MODE, needManualCorrection ? "manual" : "auto"); if(gradingService.isGradingEnabled(re, null)) {
moduleConfiguration.setStringValue(IQEditController.CONFIG_CORRECTION_MODE, IQEditController.CORRECTION_GRADING);
} else if(needManualCorrection || getPassedType(re, deliveryOptions) == PassedType.manually) {
moduleConfiguration.setStringValue(IQEditController.CONFIG_CORRECTION_MODE, IQEditController.CORRECTION_MANUAL);
} else {
moduleConfiguration.setStringValue(IQEditController.CONFIG_CORRECTION_MODE, IQEditController.CORRECTION_AUTO);
}
fireEvent(ureq, NodeEditController.NODECONFIG_CHANGED_EVENT); fireEvent(ureq, NodeEditController.NODECONFIG_CHANGED_EVENT);
} }
QTI21DeliveryOptions deliveryOptions = qti21service.getDeliveryOptions(re);
mod21ConfigForm = new QTI21EditForm(ureq, getWindowControl(), moduleConfiguration, mod21ConfigForm = new QTI21EditForm(ureq, getWindowControl(), moduleConfiguration,
NodeAccessType.of(course), deliveryOptions, needManualCorrection); NodeAccessType.of(course), deliveryOptions, needManualCorrection);
mod21ConfigForm.update(re); mod21ConfigForm.update(re);
...@@ -573,6 +588,21 @@ public class IQConfigurationController extends BasicController { ...@@ -573,6 +588,21 @@ public class IQConfigurationController extends BasicController {
return qti21service.needManualCorrection(re); return qti21service.needManualCorrection(re);
} }
private PassedType getPassedType(RepositoryEntry re, QTI21DeliveryOptions deliveryOptions) {
if(deliveryOptions == null) return PassedType.none;
FileResourceManager frm = FileResourceManager.getInstance();
File unzippedDirRoot = frm.unzipFileResource(re.getOlatResource());
ResolvedAssessmentTest resolvedAssessmentTest = qti21service.loadAndResolveAssessmentTest(unzippedDirRoot, false, false);
AssessmentTest assessmentTest = resolvedAssessmentTest.getRootNodeLookup().extractIfSuccessful();
Double cutValue = null;
if(assessmentTest != null) {
cutValue = new AssessmentTestBuilder(assessmentTest).getCutValue();
}
return deliveryOptions.getPassedType(cutValue);
}
private boolean needManualCorrectionQTI12(RepositoryEntry re) { private boolean needManualCorrectionQTI12(RepositoryEntry re) {
boolean needManualCorrection = false; boolean needManualCorrection = false;
QTIDocument doc = TestFileResource.getQTIDocument(re.getOlatResource()); QTIDocument doc = TestFileResource.getQTIDocument(re.getOlatResource());
......
...@@ -59,7 +59,8 @@ public class AssessmentTestBuilder { ...@@ -59,7 +59,8 @@ public class AssessmentTestBuilder {
private Double maxScore; private Double maxScore;
private Long maximumTimeLimits; private Long maximumTimeLimits;
private OutcomeRule testScoreRule; private OutcomeRule testScoreRule;
private OutcomeCondition cutValueRule, minScoreRule; private OutcomeCondition cutValueRule;
private OutcomeCondition minScoreRule;
private TestFeedbackBuilder passedFeedback; private TestFeedbackBuilder passedFeedback;
private TestFeedbackBuilder failedFeedback; private TestFeedbackBuilder failedFeedback;
...@@ -321,7 +322,7 @@ public class AssessmentTestBuilder { ...@@ -321,7 +322,7 @@ public class AssessmentTestBuilder {
} }
boolean updated = false; boolean updated = false;
if(cutValueRule != null && cutValueRule.getOutcomeIf().getExpressions().size() > 0) { if(cutValueRule != null && !cutValueRule.getOutcomeIf().getExpressions().isEmpty()) {
Expression gte = cutValueRule.getOutcomeIf().getExpressions().get(0); Expression gte = cutValueRule.getOutcomeIf().getExpressions().get(0);
if(gte.getExpressions().size() > 1) { if(gte.getExpressions().size() > 1) {
Expression baseValue = gte.getExpressions().get(1); Expression baseValue = gte.getExpressions().get(1);
...@@ -339,6 +340,10 @@ public class AssessmentTestBuilder { ...@@ -339,6 +340,10 @@ public class AssessmentTestBuilder {
assessmentTest.getOutcomeProcessing().getOutcomeRules().add(cutValueRule); assessmentTest.getOutcomeProcessing().getOutcomeRules().add(cutValueRule);
} }
} else if(cutValueRule != null) { } else if(cutValueRule != null) {
OutcomeDeclaration passDeclaration = assessmentTest.getOutcomeDeclaration(QTI21Constants.PASS_IDENTIFIER);
if(passDeclaration != null) {
assessmentTest.getOutcomeDeclarations().remove(passDeclaration);
}
assessmentTest.getOutcomeProcessing().getOutcomeRules().remove(cutValueRule); assessmentTest.getOutcomeProcessing().getOutcomeRules().remove(cutValueRule);
} }
} }
......
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