Index: lams_tool_assessment/conf/language/lams/ApplicationResources_en_AU.properties =================================================================== diff -u -r4c51f9c8b6fab7efa4d5296f1ee60c1c3bd207e5 -rc2585242b3a8ef9215af42e9644c15992cc6355b --- lams_tool_assessment/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision 4c51f9c8b6fab7efa4d5296f1ee60c1c3bd207e5) +++ lams_tool_assessment/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision c2585242b3a8ef9215af42e9644c15992cc6355b) @@ -293,7 +293,7 @@ output.desc.first.score =First score output.desc.average.score =Average score label.waiting.for.leader.launch.time.limit =Leader has not started the activity. Please wait until he/she commences it. -label.waiting.for.leader.finish =Time limit set by teacher is over. Please wait until a group leader finishes the activity. +label.waiting.for.leader.finish =Time limit set by teacher is over. Please wait until a group leader submits all answers. warn.mark.hedging.wrong.justification =Justification cannot be left blank error.import.file.format =The import file is not an .xml file. label.file =File Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/AssessmentResultDAO.java =================================================================== diff -u -ra05411c3da91b4b357b1615cc5361ea25e3614da -rc2585242b3a8ef9215af42e9644c15992cc6355b --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/AssessmentResultDAO.java (.../AssessmentResultDAO.java) (revision a05411c3da91b4b357b1615cc5361ea25e3614da) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/AssessmentResultDAO.java (.../AssessmentResultDAO.java) (revision c2585242b3a8ef9215af42e9644c15992cc6355b) @@ -27,6 +27,7 @@ import org.lamsfoundation.lams.tool.assessment.dto.AssessmentUserDTO; import org.lamsfoundation.lams.tool.assessment.model.AssessmentResult; +import org.lamsfoundation.lams.tool.assessment.model.AssessmentUser; public interface AssessmentResultDAO extends DAO { @@ -37,6 +38,14 @@ List getFinishedAssessmentResultsByUser(Long sessionId, Long userId); AssessmentResult getLastAssessmentResult(Long assessmentUid, Long userId); + + /** + * Checks whether the last attempt started by user is finished. + * + * @param user + * @return true if user has finished it, false otherwise + */ + Boolean isLastAttemptFinishedByUser(AssessmentUser user); AssessmentResult getLastFinishedAssessmentResult(Long assessmentUid, Long userId); Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentResultDAOHibernate.java =================================================================== diff -u -ra05411c3da91b4b357b1615cc5361ea25e3614da -rc2585242b3a8ef9215af42e9644c15992cc6355b --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentResultDAOHibernate.java (.../AssessmentResultDAOHibernate.java) (revision a05411c3da91b4b357b1615cc5361ea25e3614da) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentResultDAOHibernate.java (.../AssessmentResultDAOHibernate.java) (revision c2585242b3a8ef9215af42e9644c15992cc6355b) @@ -30,7 +30,9 @@ import org.lamsfoundation.lams.dao.hibernate.LAMSBaseDAO; import org.lamsfoundation.lams.tool.assessment.dao.AssessmentResultDAO; import org.lamsfoundation.lams.tool.assessment.dto.AssessmentUserDTO; +import org.lamsfoundation.lams.tool.assessment.model.Assessment; import org.lamsfoundation.lams.tool.assessment.model.AssessmentResult; +import org.lamsfoundation.lams.tool.assessment.model.AssessmentUser; import org.lamsfoundation.lams.usermanagement.User; import org.springframework.stereotype.Repository; @@ -39,6 +41,9 @@ private static final String FIND_LAST_BY_ASSESSMENT_AND_USER = "FROM " + AssessmentResult.class.getName() + " AS r WHERE r.user.userId = ? AND r.assessment.uid=? AND r.latest=1"; + + private static final String FIND_WHETHER_LAST_RESULT_FINISHED = "SELECT (r.finishDate IS NOT NULL) FROM " + AssessmentResult.class.getName() + + " AS r WHERE r.user.userId = ? AND r.assessment.uid=? AND r.latest=1"; private static final String FIND_BY_ASSESSMENT_AND_USER_AND_FINISHED = "FROM " + AssessmentResult.class.getName() + " AS r WHERE r.user.userId = ? AND r.assessment.uid=? AND (r.finishDate != null) ORDER BY r.startDate ASC"; @@ -120,6 +125,16 @@ q.setParameter(1, assessmentUid); return (AssessmentResult) q.uniqueResult(); } + + @Override + public Boolean isLastAttemptFinishedByUser(AssessmentUser user) { + Assessment assessment = user.getAssessment() == null ? user.getSession().getAssessment() : user.getAssessment(); + + Query q = getSession().createQuery(FIND_WHETHER_LAST_RESULT_FINISHED); + q.setParameter(0, user.getUserId()); + q.setParameter(1, assessment.getUid()); + return (Boolean) q.uniqueResult(); + } @Override public AssessmentResult getLastFinishedAssessmentResult(Long assessmentUid, Long userId) { Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java =================================================================== diff -u -r5e40c22a096ef6175b11206e276600782348306d -rc2585242b3a8ef9215af42e9644c15992cc6355b --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 5e40c22a096ef6175b11206e276600782348306d) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision c2585242b3a8ef9215af42e9644c15992cc6355b) @@ -880,6 +880,11 @@ public AssessmentResult getLastAssessmentResult(Long assessmentUid, Long userId) { return assessmentResultDao.getLastAssessmentResult(assessmentUid, userId); } + + @Override + public Boolean isLastAttemptFinishedByUser(AssessmentUser user) { + return assessmentResultDao.isLastAttemptFinishedByUser(user); + } @Override public AssessmentResult getLastFinishedAssessmentResult(Long assessmentUid, Long userId) { @@ -2833,7 +2838,7 @@ AssessmentUser groupLeader = session.getGroupLeader(); // check if leader has submitted answers - if ((groupLeader != null) && groupLeader.isSessionFinished()) { + if ((groupLeader != null) && isLastAttemptFinishedByUser(groupLeader)) { // we need to make sure specified user has the same scratches as a leader copyAnswersFromLeader(assessmentUser, groupLeader); Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java =================================================================== diff -u -r5e40c22a096ef6175b11206e276600782348306d -rc2585242b3a8ef9215af42e9644c15992cc6355b --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java (.../IAssessmentService.java) (revision 5e40c22a096ef6175b11206e276600782348306d) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java (.../IAssessmentService.java) (revision c2585242b3a8ef9215af42e9644c15992cc6355b) @@ -258,6 +258,14 @@ * @return */ AssessmentResult getLastAssessmentResult(Long assessmentUid, Long userId); + + /** + * Checks whether the last attempt started by user is finished. + * + * @param user + * @return true if user has finished it, false otherwise + */ + Boolean isLastAttemptFinishedByUser(AssessmentUser user); /** * Return the latest *finished* result. Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/LearningAction.java =================================================================== diff -u -r3f746d8b53bf904aeb4792947474a20c6a44b4c8 -rc2585242b3a8ef9215af42e9644c15992cc6355b --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/LearningAction.java (.../LearningAction.java) (revision 3f746d8b53bf904aeb4792947474a20c6a44b4c8) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/LearningAction.java (.../LearningAction.java) (revision c2585242b3a8ef9215af42e9644c15992cc6355b) @@ -205,11 +205,13 @@ return mapping.findForward(AssessmentConstants.WAIT_FOR_LEADER); } + AssessmentResult lastLeaderResult = service.getLastAssessmentResult(assessment.getUid(), + groupLeader.getUserId()); + boolean isLastAttemptFinishedByLeader = lastLeaderResult != null && lastLeaderResult.getFinishDate() != null; + // forwards to the waitForLeader pages boolean isNonLeader = !user.getUserId().equals(groupLeader.getUserId()); - if (assessment.getTimeLimit() != 0 && isNonLeader && !user.isSessionFinished()) { - AssessmentResult lastLeaderResult = service.getLastAssessmentResult(assessment.getUid(), - groupLeader.getUserId()); + if (assessment.getTimeLimit() != 0 && isNonLeader && !isLastAttemptFinishedByLeader) { //show waitForLeaderLaunchTimeLimit page if the leader hasn't started activity or hasn't pressed OK button to launch time limit if (lastLeaderResult == null || lastLeaderResult.getTimeLimitLaunchedDate() == null) { @@ -220,15 +222,15 @@ //if the time is up and leader hasn't submitted response - show waitForLeaderFinish page boolean isTimeLimitExceeded = service.checkTimeLimitExceeded(assessment, groupLeader); - if (isTimeLimitExceeded && !groupLeader.isSessionFinished()) { + if (isTimeLimitExceeded) { request.setAttribute(AssessmentConstants.PARAM_WAITING_MESSAGE_KEY, "label.waiting.for.leader.finish"); return mapping.findForward(AssessmentConstants.WAIT_FOR_LEADER_TIME_LIMIT); } } // check if leader has submitted all answers - if (groupLeader.isSessionFinished()) { + if (isLastAttemptFinishedByLeader) { // in case user joins the lesson after leader has answers some answers already - we need to make sure // he has the same scratches as leader @@ -269,12 +271,14 @@ } } - AssessmentResult lastResult = service.getLastAssessmentResult(assessment.getUid(), user.getUserId()); + //user is allowed to answer questions if assessment activity doesn't have leaders or he is the leader boolean hasEditRight = !assessment.isUseSelectLeaderToolOuput() || assessment.isUseSelectLeaderToolOuput() && isUserLeader; - //showResults if either session or the last result is finished - boolean showResults = user.isSessionFinished() || (lastResult != null) && (lastResult.getFinishDate() != null); + //showResults if user has finished the last result + AssessmentResult lastResult = service.getLastAssessmentResult(assessment.getUid(), user.getUserId()); + boolean showResults = (lastResult != null) && (lastResult.getFinishDate() != null); + // get notebook entry String entryText = new String(); AssessmentUser notebookCreator = (groupLeader == null) ? user : groupLeader; @@ -428,7 +432,7 @@ //in case of time limit - prevent user from seeing questions page longer than time limit allows boolean isTimeLimitExceeded = service.checkTimeLimitExceeded(session.getAssessment(), leader); - boolean isLeaderResponseFinalized = leader.isSessionFinished(); + boolean isLeaderResponseFinalized = service.isLastAttemptFinishedByUser(leader); JSONObject JSONObject = new JSONObject(); JSONObject.put("isPageRefreshRequested", isLeaderResponseFinalized || isTimeLimitExceeded);