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.48.2.3 -r1.48.2.4 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java 15 May 2015 04:37:49 -0000 1.48.2.3 +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java 3 Jul 2015 15:59:51 -0000 1.48.2.4 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java,v diff -u -r1.26.2.1 -r1.26.2.2 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java 12 Sep 2014 21:44:07 -0000 1.26.2.1 +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java 3 Jul 2015 15:59:51 -0000 1.26.2.2 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/LearningAction.java,v diff -u -r1.42.2.3 -r1.42.2.4 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/LearningAction.java 12 Dec 2014 14:52:52 -0000 1.42.2.3 +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/LearningAction.java 3 Jul 2015 15:59:51 -0000 1.42.2.4 @@ -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() {