use of org.olat.ims.qti21.AssessmentTestSession in project OpenOLAT by OpenOLAT.
the class QTI21AssessmentDetailsController method getSignatureOptions.
private DigitalSignatureOptions getSignatureOptions(AssessmentTestSession session) {
RepositoryEntry sessionTestEntry = session.getTestEntry();
QTI21DeliveryOptions deliveryOptions = qtiService.getDeliveryOptions(sessionTestEntry);
boolean digitalSignature = deliveryOptions.isDigitalSignature();
boolean sendMail = deliveryOptions.isDigitalSignatureMail();
if (courseNode != null) {
ModuleConfiguration config = courseNode.getModuleConfiguration();
digitalSignature = config.getBooleanSafe(IQEditController.CONFIG_DIGITAL_SIGNATURE, deliveryOptions.isDigitalSignature());
sendMail = config.getBooleanSafe(IQEditController.CONFIG_DIGITAL_SIGNATURE_SEND_MAIL, deliveryOptions.isDigitalSignatureMail());
}
DigitalSignatureOptions options = new DigitalSignatureOptions(digitalSignature, sendMail, entry, testEntry);
if (digitalSignature) {
if (courseNode == null) {
AssessmentEntryOutcomesListener.decorateResourceConfirmation(entry, testEntry, session, options, null, getLocale());
} else {
CourseEnvironment courseEnv = CourseFactory.loadCourse(entry).getCourseEnvironment();
QTI21AssessmentRunController.decorateCourseConfirmation(session, options, courseEnv, courseNode, sessionTestEntry, null, getLocale());
}
}
return options;
}
use of org.olat.ims.qti21.AssessmentTestSession in project OpenOLAT by OpenOLAT.
the class QTI21AssessmentDetailsController method doCorrection.
private void doCorrection(UserRequest ureq, AssessmentTestSession session) {
File unzippedDirRoot = FileResourceManager.getInstance().unzipFileResource(testEntry.getOlatResource());
ResolvedAssessmentTest resolvedAssessmentTest = qtiService.loadAndResolveAssessmentTest(unzippedDirRoot, false, false);
ManifestBuilder manifestBuilder = ManifestBuilder.read(new File(unzippedDirRoot, "imsmanifest.xml"));
TestSessionState testSessionState = qtiService.loadTestSessionState(session);
CorrectionOverviewModel model = new CorrectionOverviewModel(entry, subIdent, testEntry, resolvedAssessmentTest, manifestBuilder, Collections.singletonMap(assessedIdentity, session), Collections.singletonMap(assessedIdentity, testSessionState));
correctionCtrl = new CorrectionIdentityAssessmentItemListController(ureq, getWindowControl(), stackPanel, model, session, assessedIdentity);
listenTo(correctionCtrl);
stackPanel.pushController(translate("correction"), correctionCtrl);
}
use of org.olat.ims.qti21.AssessmentTestSession in project OpenOLAT by OpenOLAT.
the class CorrectionIdentityInteractionsController method initFormExtendedTextInteraction.
private ItemBodyResultFormItem initFormExtendedTextInteraction(TestPlanNodeKey testPlanNodeKey, TestSessionState testSessionState, AssessmentTestSession assessmentTestSession, FormItemContainer layoutCont) {
ItemSessionState sessionState = testSessionState.getItemSessionStates().get(testPlanNodeKey);
String responseId = "responseItem_" + id + "_" + count++;
ItemBodyResultFormItem responseFormItem = new ItemBodyResultFormItem(responseId, resolvedAssessmentItem);
responseFormItem.setItemSessionState(sessionState);
responseFormItem.setCandidateSessionContext(new TerminatedStaticCandidateSessionContext(assessmentTestSession));
responseFormItem.setResolvedAssessmentTest(resolvedAssessmentTest);
responseFormItem.setResourceLocator(inputResourceLocator);
responseFormItem.setAssessmentObjectUri(assessmentObjectUri);
responseFormItem.setMapperUri(mapperUri);
layoutCont.add(responseFormItem);
return responseFormItem;
}
use of org.olat.ims.qti21.AssessmentTestSession in project OpenOLAT by OpenOLAT.
the class CorrectionIdentityInteractionsController method initForm.
@Override
protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
TestPlanNode node = correction.getItemNode();
TestPlanNodeKey testPlanNodeKey = node.getKey();
AssessmentItemSession itemSession = correction.getItemSession();
AssessmentTestSession testSession = correction.getTestSession();
TestSessionState testSessionState = correction.getTestSessionState();
answerItem = initFormExtendedTextInteraction(testPlanNodeKey, testSessionState, testSession, formLayout);
formLayout.add("answer", answerItem);
viewSolutionButton = uifactory.addFormLink("view.solution", formLayout);
viewSolutionButton.setIconLeftCSS("o_icon o_icon_open_togglebox");
solutionItem = initFormExtendedTextInteraction(testPlanNodeKey, testSessionState, testSession, formLayout);
solutionItem.setVisible(false);
solutionItem.setShowSolution(true);
formLayout.add("solution", solutionItem);
List<InteractionResultFormItem> responseItems = new ArrayList<>(interactions.size());
for (Interaction interaction : interactions) {
if (interaction instanceof UploadInteraction || interaction instanceof DrawingInteraction || interaction instanceof ExtendedTextInteraction) {
manualScore = true;
File submissionDir = qtiService.getSubmissionDirectory(testSession);
if (submissionDir != null) {
submissionDirectoryMaps.put(testSession.getKey(), submissionDir);
}
}
}
String mScore = "";
String coachComment = "";
if (itemSession != null) {
if (itemSession.getManualScore() != null) {
mScore = AssessmentHelper.getRoundedScore(itemSession.getManualScore());
}
coachComment = itemSession.getCoachComment();
}
FormLayoutContainer scoreCont = FormLayoutContainer.createDefaultFormLayout("score.container", getTranslator());
formLayout.add("score.container", scoreCont);
statusEl = uifactory.addStaticTextElement("status", "status", "", scoreCont);
statusEl.setValue(getStatus());
String fullname = userManager.getUserDisplayName(correction.getAssessedIdentity());
if (manualScore) {
scoreEl = uifactory.addTextElement("scoreItem", "score", 6, mScore, scoreCont);
} else {
overrideAutoScore = itemSession == null ? null : itemSession.getManualScore();
String page = velocity_root + "/override_score.html";
overrideScoreCont = FormLayoutContainer.createCustomFormLayout("extra.score", getTranslator(), page);
overrideScoreCont.setRootForm(mainForm);
scoreCont.add(overrideScoreCont);
overrideScoreCont.setLabel("score", null);
BigDecimal score = null;
if (itemSession != null) {
score = itemSession.getManualScore();
if (score == null) {
score = itemSession.getScore();
}
}
overrideScoreCont.contextPut("score", AssessmentHelper.getRoundedScore(score));
overrideScoreButton = uifactory.addFormLink("override.score", overrideScoreCont, Link.BUTTON_SMALL);
overrideScoreButton.setDomReplacementWrapperRequired(false);
}
commentEl = uifactory.addTextAreaElement("commentItem", "comment", 2500, 4, 60, false, coachComment, scoreCont);
commentEl.setHelpText(translate("comment.help"));
IdentityAssessmentItemWrapper wrapper = new IdentityAssessmentItemWrapper(fullname, assessmentItem, correction, responseItems, scoreEl, commentEl, statusEl);
toReviewEl = uifactory.addCheckboxesHorizontal("to.review", "to.review", scoreCont, onKeys, new String[] { "" });
if (itemSession != null && itemSession.isToReview()) {
toReviewEl.select(onKeys[0], true);
}
Double minScore = QtiNodesExtractor.extractMinScore(assessmentItem);
Double maxScore = QtiNodesExtractor.extractMaxScore(assessmentItem);
if (maxScore != null) {
if (minScore == null) {
minScore = 0.0d;
}
wrapper.setMinScore(AssessmentHelper.getRoundedScore(minScore));
wrapper.setMaxScore(AssessmentHelper.getRoundedScore(maxScore));
wrapper.setMinScoreVal(minScore);
wrapper.setMaxScoreVal(maxScore);
if (scoreEl != null) {
scoreEl.setExampleKey("correction.min.max.score", new String[] { wrapper.getMinScore(), wrapper.getMaxScore() });
}
if (overrideScoreCont != null) {
overrideScoreCont.setExampleKey("correction.min.max.score", new String[] { wrapper.getMinScore(), wrapper.getMaxScore() });
}
}
if (formLayout instanceof FormLayoutContainer) {
FormLayoutContainer layoutCont = (FormLayoutContainer) formLayout;
layoutCont.contextPut("interactionWrapper", wrapper);
}
}
use of org.olat.ims.qti21.AssessmentTestSession in project OpenOLAT by OpenOLAT.
the class CorrectionOverviewModel method loadLastSessions.
public Map<Identity, AssessmentTestSession> loadLastSessions() {
Set<Identity> identitiesSet = new HashSet<>(assessedIdentities);
List<AssessmentTestSession> sessions = CoreSpringFactory.getImpl(QTI21Service.class).getAssessmentTestSessions(courseEntry, subIdent, testEntry);
Map<Identity, AssessmentTestSession> identityToSessions = new HashMap<>();
for (AssessmentTestSession session : sessions) {
// filter last session / user
Identity assessedIdentity = session.getIdentity();
if (!identitiesSet.contains(assessedIdentity)) {
continue;
}
Date fDate = session.getFinishTime();
if (fDate == null) {
// not terminated
} else {
if (identityToSessions.containsKey(assessedIdentity)) {
AssessmentTestSession currentSession = identityToSessions.get(assessedIdentity);
Date currentFDate = currentSession.getFinishTime();
if (fDate.after(currentFDate)) {
identityToSessions.put(assessedIdentity, session);
}
} else {
identityToSessions.put(assessedIdentity, session);
}
}
}
setLastSessions(identityToSessions);
return identityToSessions;
}
Aggregations