Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java,v diff -u -r1.51 -r1.52 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java 29 Apr 2015 01:31:17 -0000 1.51 +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java 5 Jun 2015 17:09:14 -0000 1.52 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java,v diff -u -r1.27 -r1.28 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java 5 Sep 2014 21:30:05 -0000 1.27 +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java 5 Jun 2015 17:09:14 -0000 1.28 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/LearningAction.java,v diff -u -r1.45 -r1.46 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/LearningAction.java 12 Dec 2014 00:18:13 -0000 1.45 +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/LearningAction.java 5 Jun 2015 17:09:14 -0000 1.46 @@ -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() {