Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java =================================================================== diff -u -r1e7597ac1a3c3206dd501bfd994a7ca737281ed2 -r69b35bee45fa0a1aa322c3a0eac35b035862184a --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 1e7597ac1a3c3206dd501bfd994a7ca737281ed2) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 69b35bee45fa0a1aa322c3a0eac35b035862184a) @@ -412,7 +412,7 @@ } @Override - public void storeUserAnswers(Long assessmentUid, Long userId, + public boolean storeUserAnswers(Long assessmentUid, Long userId, ArrayList> pagedQuestions, boolean isAutosave) { int maximumGrade = 0; @@ -421,6 +421,11 @@ AssessmentResult result = assessmentResultDao.getLastAssessmentResult(assessmentUid, userId); Assessment assessment = result.getAssessment(); + //prohibit users from submitting (or autosubmitting) answers after result is finished but Resubmit button is not pressed (e.g. using 2 browsers) + if (result.getFinishDate() != null) { + return false; + } + //store all answers (in all pages) for (LinkedHashSet questionsForOnePage : pagedQuestions) { for (AssessmentQuestion question : questionsForOnePage) { @@ -466,6 +471,8 @@ result.setFinishDate(new Timestamp(new Date().getTime())); assessmentResultDao.saveObject(result); } + + return true; } /** Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java =================================================================== diff -u -rc500d9384f365fe8b4c2997a799c44f92e8c26e9 -r69b35bee45fa0a1aa322c3a0eac35b035862184a --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java (.../IAssessmentService.java) (revision c500d9384f365fe8b4c2997a799c44f92e8c26e9) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java (.../IAssessmentService.java) (revision 69b35bee45fa0a1aa322c3a0eac35b035862184a) @@ -197,8 +197,10 @@ * @param userId * @param pagedQuestions * @param isAutosave indicates whether it's autosave request + * + * @return whether storing results is allowed, false otherwise */ - void storeUserAnswers(Long assessmentUid, Long userId, ArrayList> pagedQuestions, + boolean storeUserAnswers(Long assessmentUid, Long userId, ArrayList> pagedQuestions, boolean isAutosave); /** Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/LearningAction.java =================================================================== diff -u -r0044bcbed6edfa5fdae859e7b14922eb77b9faab -r69b35bee45fa0a1aa322c3a0eac35b035862184a --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/LearningAction.java (.../LearningAction.java) (revision 0044bcbed6edfa5fdae859e7b14922eb77b9faab) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/LearningAction.java (.../LearningAction.java) (revision 69b35bee45fa0a1aa322c3a0eac35b035862184a) @@ -448,7 +448,12 @@ } //store results from sessionMap into DB - storeUserAnswersIntoDatabase(sessionMap, false); + boolean isResultsStored = storeUserAnswersIntoDatabase(sessionMap, false); + // result was not stored in case user was prohibited from submitting (or autosubmitting) answers (e.g. when + // using 2 browsers). Then show last stored results + if (!isResultsStored) { + loadupLastAttempt(sessionMap); + } // populate info for displaying results page prepareResultsPageData(sessionMap); @@ -923,25 +928,27 @@ /** * Store user answers in DB in last unfinished attempt and notify teachers about it. */ - private void storeUserAnswersIntoDatabase(SessionMap sessionMap, boolean isAutosave) { + private boolean storeUserAnswersIntoDatabase(SessionMap sessionMap, boolean isAutosave) { ArrayList> pagedQuestions = (ArrayList>) sessionMap .get(AssessmentConstants.ATTR_PAGED_QUESTIONS); Long assessmentUid = ((Assessment) sessionMap.get(AssessmentConstants.ATTR_ASSESSMENT)).getUid(); Long userId = ((AssessmentUser) sessionMap.get(AssessmentConstants.ATTR_USER)).getUserId(); IAssessmentService service = getAssessmentService(); - service.storeUserAnswers(assessmentUid, userId, pagedQuestions, isAutosave); + boolean isResultsStored = service.storeUserAnswers(assessmentUid, userId, pagedQuestions, isAutosave); // notify teachers ToolAccessMode mode = (ToolAccessMode) sessionMap.get(AttributeNames.ATTR_MODE); Assessment assessment = (Assessment) sessionMap.get(AssessmentConstants.ATTR_ASSESSMENT); - if ((mode != null) && !mode.isTeacher() && !isAutosave && assessment.isNotifyTeachersOnAttemptCompletion()) { + if ((mode != null) && !mode.isTeacher() && !isAutosave && isResultsStored && assessment.isNotifyTeachersOnAttemptCompletion()) { Long toolSessionId = (Long) sessionMap.get(AttributeNames.PARAM_TOOL_SESSION_ID); AssessmentUser assessmentUser = getCurrentUser(toolSessionId); String fullName = assessmentUser.getLastName() + " " + assessmentUser.getFirstName(); service.notifyTeachersOnAttemptCompletion(toolSessionId, fullName); } + + return isResultsStored; } private IAssessmentService getAssessmentService() {