use of org.olat.ims.qti21.AssessmentTestSession in project openolat by klemens.
the class QTI21ServiceImpl method deleteAuthorAssessmentTestSession.
@Override
public boolean deleteAuthorAssessmentTestSession(RepositoryEntryRef testEntry) {
log.audit("Delete author assessment sessions for test: " + testEntry);
List<AssessmentTestSession> sessions = testSessionDao.getAuthorAssessmentTestSession(testEntry);
for (AssessmentTestSession session : sessions) {
File fileStorage = testSessionDao.getSessionStorage(session);
testSessionDao.deleteTestSession(session);
FileUtils.deleteDirsAndFiles(fileStorage, true, true);
}
// make sure it's flushed on the database
dbInstance.commit();
return true;
}
use of org.olat.ims.qti21.AssessmentTestSession in project openolat by klemens.
the class QTI21ServiceImpl method pullSession.
@Override
public AssessmentTestSession pullSession(AssessmentTestSession session, DigitalSignatureOptions signatureOptions, Identity actor) {
session = getAssessmentTestSession(session.getKey());
if (session.getFinishTime() == null) {
if (qtiModule.isDigitalSignatureEnabled()) {
signAssessmentResult(session, signatureOptions, session.getIdentity());
}
session.setFinishTime(new Date());
}
session.setTerminationTime(new Date());
session = updateAssessmentTestSession(session);
// make sure that the changes committed before sending the event
dbInstance.commit();
AssessmentSessionAuditLogger candidateAuditLogger = getAssessmentSessionAuditLogger(session, false);
candidateAuditLogger.logTestRetrieved(session, actor);
OLATResourceable sessionOres = OresHelper.createOLATResourceableInstance(AssessmentTestSession.class, session.getKey());
coordinatorManager.getCoordinator().getEventBus().fireEventToListenersOf(new RetrieveAssessmentTestSessionEvent(session.getKey()), sessionOres);
return session;
}
use of org.olat.ims.qti21.AssessmentTestSession in project openolat by klemens.
the class QTI21ServiceImpl method deleteAssessmentTestSession.
@Override
public boolean deleteAssessmentTestSession(List<Identity> identities, RepositoryEntryRef testEntry, RepositoryEntryRef entry, String subIdent) {
Set<AssessmentEntry> entries = new HashSet<>();
for (Identity identity : identities) {
List<AssessmentTestSession> sessions = testSessionDao.getTestSessions(testEntry, entry, subIdent, identity);
for (AssessmentTestSession session : sessions) {
if (session.getAssessmentEntry() != null) {
entries.add(session.getAssessmentEntry());
}
File fileStorage = testSessionDao.getSessionStorage(session);
testSessionDao.deleteTestSession(session);
FileUtils.deleteDirsAndFiles(fileStorage, true, true);
}
}
for (AssessmentEntry assessmentEntry : entries) {
assessmentEntryDao.resetAssessmentEntry(assessmentEntry);
}
return true;
}
use of org.olat.ims.qti21.AssessmentTestSession in project openolat by klemens.
the class QTI21ServiceImpl method reopenAssessmentTestSession.
/*
@Override
public AssessmentTestSession reopenAssessmentTestSession(AssessmentTestSession session, Identity actor) {
// update test session on the database
AssessmentTestSession reloadedSession = testSessionDao.loadByKey(session.getKey());
//update the XMl test session state
TestSessionState testSessionState = loadTestSessionState(reloadedSession);
testSessionState.setEndTime(null);
testSessionState.setExitTime(null);
for(TestPartSessionState testPartSessionState:testSessionState.getTestPartSessionStates().values()) {
testPartSessionState.setEndTime(null);
testPartSessionState.setExitTime(null);
}
for(AssessmentSectionSessionState sessionState:testSessionState.getAssessmentSectionSessionStates().values()) {
sessionState.setEndTime(null);
sessionState.setExitTime(null);
}
TestPlanNodeKey lastEntryItemKey = null;
ItemSessionState lastEntryItemSessionState = null;
for(Map.Entry<TestPlanNodeKey, ItemSessionState> entry:testSessionState.getItemSessionStates().entrySet()) {
ItemSessionState itemSessionState = entry.getValue();
itemSessionState.setEndTime(null);
itemSessionState.setExitTime(null);
if(itemSessionState.getEntryTime() != null &&
(lastEntryItemSessionState == null || itemSessionState.getEntryTime().after(lastEntryItemSessionState.getEntryTime()))) {
lastEntryItemKey = entry.getKey();
lastEntryItemSessionState = itemSessionState;
}
}
if(lastEntryItemKey != null) {
Date now = new Date();
TestPlan plan = testSessionState.getTestPlan();
TestPlanNodeKey currentTestPartKey = null;
for(TestPlanNode currentNode = plan.getNode(lastEntryItemKey); currentNode != null; currentNode = currentNode.getParent()) {
TestNodeType type = currentNode.getTestNodeType();
TestPlanNodeKey currentNodeKey = currentNode.getKey();
switch(type) {
case TEST_PART: {
currentTestPartKey = currentNodeKey;
TestPartSessionState state = testSessionState.getTestPartSessionStates().get(currentNodeKey);
if(state != null) {
state.setDurationIntervalStartTime(now);
}
break;
}
case ASSESSMENT_SECTION: {
AssessmentSectionSessionState sessionState = testSessionState.getAssessmentSectionSessionStates().get(currentNodeKey);
if(sessionState != null) {
sessionState.setDurationIntervalStartTime(now);
}
break;
}
case ASSESSMENT_ITEM_REF: {
ItemSessionState itemState = testSessionState.getItemSessionStates().get(currentNodeKey);
if(itemState != null) {
itemState.setDurationIntervalStartTime(now);
}
break;
}
default: {
//root doesn't match any session state
break;
}
}
}
//if all the elements are started again, allow to reopen the test
if(currentTestPartKey != null) {
testSessionState.setCurrentTestPartKey(currentTestPartKey);
testSessionState.setCurrentItemKey(lastEntryItemKey);
storeTestSessionState(reloadedSession, testSessionState);
reloadedSession.setFinishTime(null);
reloadedSession.setTerminationTime(null);
reloadedSession = testSessionDao.update(reloadedSession);
AssessmentSessionAuditLogger candidateAuditLogger = getAssessmentSessionAuditLogger(session, false);
candidateAuditLogger.logTestReopen(session, actor);
RetrieveAssessmentTestSessionEvent event = new RetrieveAssessmentTestSessionEvent(session.getKey());
OLATResourceable sessionOres = OresHelper.createOLATResourceableInstance(AssessmentTestSession.class, session.getKey());
coordinatorManager.getCoordinator().getEventBus().fireEventToListenersOf(event, sessionOres);
return reloadedSession;
}
}
return null;
}*/
@Override
public AssessmentTestSession reopenAssessmentTestSession(AssessmentTestSession session, Identity actor) {
AssessmentTestSession reloadedSession = testSessionDao.loadByKey(session.getKey());
// update the XMl test session state
TestSessionState testSessionState = loadTestSessionState(reloadedSession);
testSessionState.setEndTime(null);
testSessionState.setExitTime(null);
TestPlanNodeKey lastEntryItemKey = null;
ItemSessionState lastEntryItemSessionState = null;
for (Map.Entry<TestPlanNodeKey, ItemSessionState> entry : testSessionState.getItemSessionStates().entrySet()) {
ItemSessionState itemSessionState = entry.getValue();
if (itemSessionState.getEntryTime() != null && (lastEntryItemSessionState == null || itemSessionState.getEntryTime().after(lastEntryItemSessionState.getEntryTime()))) {
lastEntryItemKey = entry.getKey();
lastEntryItemSessionState = itemSessionState;
}
}
if (lastEntryItemKey != null) {
TestPlan plan = testSessionState.getTestPlan();
TestPlanNode lastItem = plan.getNode(lastEntryItemKey);
TestPlanNodeKey partKey = reopenTestPart(lastItem, testSessionState);
resumeItem(lastEntryItemKey, testSessionState);
// if all the elements are started again, allow to reopen the test
if (partKey != null) {
testSessionState.setCurrentTestPartKey(partKey);
testSessionState.setCurrentItemKey(lastEntryItemKey);
storeTestSessionState(reloadedSession, testSessionState);
reloadedSession.setFinishTime(null);
reloadedSession.setTerminationTime(null);
reloadedSession = testSessionDao.update(reloadedSession);
AssessmentSessionAuditLogger candidateAuditLogger = getAssessmentSessionAuditLogger(session, false);
candidateAuditLogger.logTestReopen(session, actor);
RetrieveAssessmentTestSessionEvent event = new RetrieveAssessmentTestSessionEvent(session.getKey());
OLATResourceable sessionOres = OresHelper.createOLATResourceableInstance(AssessmentTestSession.class, session.getKey());
coordinatorManager.getCoordinator().getEventBus().fireEventToListenersOf(event, sessionOres);
return reloadedSession;
}
}
return null;
}
use of org.olat.ims.qti21.AssessmentTestSession in project openolat by klemens.
the class QTI21ServiceImpl method recordCandidateTestEvent.
@Override
public CandidateEvent recordCandidateTestEvent(AssessmentTestSession candidateSession, RepositoryEntryRef testEntry, RepositoryEntryRef entry, CandidateTestEventType textEventType, CandidateItemEventType itemEventType, TestPlanNodeKey itemKey, TestSessionState testSessionState, NotificationRecorder notificationRecorder) {
CandidateEvent event = new CandidateEvent(candidateSession, testEntry, entry);
event.setTestEventType(textEventType);
event.setItemEventType(itemEventType);
if (itemKey != null) {
event.setTestItemKey(itemKey.toString());
}
storeTestSessionState(event, testSessionState);
return event;
}
Aggregations