@Override protected void event(final UserRequest urequest, final Controller source, final Event event) { if (source == displayController) { if (event instanceof IQSubmittedEvent) { final IQSubmittedEvent se = (IQSubmittedEvent) event; final AssessmentManager am = userCourseEnv.getCourseEnvironment().getAssessmentManager(); // Save results in case of test if (type.equals(AssessmentInstance.QMD_ENTRY_TYPE_ASSESS)) { // update scoring overview for the user in the current course final Float score = new Float(se.getScore()); final Boolean passed = new Boolean(se.isPassed()); final ScoreEvaluation sceval = new ScoreEvaluation(score, passed, new Long(se.getAssessmentID())); final AssessableCourseNode acn = (AssessableCourseNode) courseNode; // assessment nodes are assesable final boolean incrementUserAttempts = true; acn.updateUserScoreEvaluation( sceval, userCourseEnv, urequest.getIdentity(), incrementUserAttempts); // userCourseEnv.getScoreAccounting().scoreInfoChanged(acn, sceval); exposeUserTestDataToVC(urequest); // Mark publisher for notifications final Long courseId = userCourseEnv.getCourseEnvironment().getCourseResourceableId(); notificationHandler.markPublisherNews(urequest.getIdentity(), courseId); if (!assessmentStopped) { assessmentStopped = true; final AssessmentEvent assessmentStoppedEvent = new AssessmentEvent(AssessmentEvent.TYPE.STOPPED, userSession); singleUserEventCenter.deregisterFor(this, assessmentInstanceOres); singleUserEventCenter.fireEventToListenersOf( assessmentStoppedEvent, assessmentEventOres); } } // Save results in case of questionnaire else if (type.equals(AssessmentInstance.QMD_ENTRY_TYPE_SURVEY)) { // save number of attempts // although this is not an assessable node we still use the assessment // manager since this one uses caching am.incrementNodeAttempts(courseNode, urequest.getIdentity(), userCourseEnv); exposeUserQuestionnaireDataToVC(); getWindowControl().pop(); } // Don't save results in case of self-test // but do safe attempts ! else if (type.equals(AssessmentInstance.QMD_ENTRY_TYPE_SELF)) { am.incrementNodeAttempts(courseNode, urequest.getIdentity(), userCourseEnv); } } else if (event.equals(Event.DONE_EVENT)) { getWindowControl().pop(); if (type.equals(AssessmentInstance.QMD_ENTRY_TYPE_ASSESS) && !assessmentStopped) { assessmentStopped = true; final AssessmentEvent assessmentStoppedEvent = new AssessmentEvent(AssessmentEvent.TYPE.STOPPED, userSession); singleUserEventCenter.deregisterFor(this, assessmentInstanceOres); singleUserEventCenter.fireEventToListenersOf(assessmentStoppedEvent, assessmentEventOres); } fireEvent(urequest, Event.DONE_EVENT); } } }