Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java =================================================================== diff -u -r02ce51e45612531c5ea14bcb54bf9dfa28c18c50 -rdacc22919fbce0447cf7850bdfb602d446354050 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 02ce51e45612531c5ea14bcb54bf9dfa28c18c50) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision dacc22919fbce0447cf7850bdfb602d446354050) @@ -412,15 +412,21 @@ } @Override - public void storeUserAnswers(Long assessmentUid, Long userId, - ArrayList> pagedQuestions, boolean isAutosave) { + public boolean storeUserAnswers(Long assessmentUid, Long userId, + ArrayList> pagedQuestions, Long singleMarkHedgingQuestionUid, + boolean isAutosave) { int maximumGrade = 0; float grade = 0; 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 +472,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 -r39f26ae59d9865f852b62d5f1759b4c9fe6efb24 -rdacc22919fbce0447cf7850bdfb602d446354050 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java (.../IAssessmentService.java) (revision 39f26ae59d9865f852b62d5f1759b4c9fe6efb24) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java (.../IAssessmentService.java) (revision dacc22919fbce0447cf7850bdfb602d446354050) @@ -196,9 +196,13 @@ * @param assessmentUid * @param userId * @param pagedQuestions + * @param singleMarkHedgingQuestionUid - if provided - means only that current single MarkHedging question needs to be stored * @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, Long singleMarkHedgingQuestionUid, boolean isAutosave); /** Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/LearningAction.java =================================================================== diff -u -r5cdb620cacb3897dcf05db9c0d0ffda4271ae638 -rdacc22919fbce0447cf7850bdfb602d446354050 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/LearningAction.java (.../LearningAction.java) (revision 5cdb620cacb3897dcf05db9c0d0ffda4271ae638) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/LearningAction.java (.../LearningAction.java) (revision dacc22919fbce0447cf7850bdfb602d446354050) @@ -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, null, 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() {