Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/AssessmentQuestionResultDAO.java =================================================================== diff -u -re8a7110708b15579af2c6b31ac52a6da427fef6d -re1d973ac972f78549468d42fd90f22349c3cbee5 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/AssessmentQuestionResultDAO.java (.../AssessmentQuestionResultDAO.java) (revision e8a7110708b15579af2c6b31ac52a6da427fef6d) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/AssessmentQuestionResultDAO.java (.../AssessmentQuestionResultDAO.java) (revision e1d973ac972f78549468d42fd90f22349c3cbee5) @@ -37,9 +37,9 @@ List getAssessmentQuestionResultList(Long assessmentUid, Long userId, Long questionUid); AssessmentQuestionResult getAssessmentQuestionResultByUid(Long questionResultUid); - - List getQuestionResultsByQuestionUid(final Long questionUid); + List getQuestionResultsByQuestionUid(final Long questionUid, boolean finishedOnly); + /** * Returns question result mark from the last finished assessment result, and null if not available. * Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentQuestionResultDAOHibernate.java =================================================================== diff -u -r18b228bd194ec58143b063ea9e0329c5ed12c276 -re1d973ac972f78549468d42fd90f22349c3cbee5 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentQuestionResultDAOHibernate.java (.../AssessmentQuestionResultDAOHibernate.java) (revision 18b228bd194ec58143b063ea9e0329c5ed12c276) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentQuestionResultDAOHibernate.java (.../AssessmentQuestionResultDAOHibernate.java) (revision e1d973ac972f78549468d42fd90f22349c3cbee5) @@ -44,7 +44,7 @@ private static final String FIND_BY_QUESTION_UID = "FROM " + AssessmentQuestionResult.class.getName() + " AS queRes " + " WHERE queRes.qbToolQuestion.uid =:questionUid ORDER BY queRes.finishDate ASC"; - + private static final String FIND_WRONG_ANSWERS_NUMBER = "SELECT COUNT(q) FROM " + AssessmentQuestionResult.class.getName() + " AS q, " + AssessmentResult.class.getName() + " AS r " + " WHERE q.assessmentResult.uid = r.uid AND r.assessment.uid = ? AND r.user.userId =? AND q.qbToolQuestion.uid =? AND (ROUND(q.mark + q.penalty) < q.maxMark) AND (r.finishDate != null)"; @@ -66,8 +66,7 @@ @Override @SuppressWarnings("unchecked") public List getAssessmentQuestionResultList(Long assessmentUid, Long userId, Long questionUid) { - return (List) doFind(FIND_BY_ASSESSMENT_QUESTION_AND_USER, - new Object[] { assessmentUid, userId, questionUid }); + return doFind(FIND_BY_ASSESSMENT_QUESTION_AND_USER, new Object[] { assessmentUid, userId, questionUid }); } @Override @@ -80,9 +79,11 @@ } @Override - public List getQuestionResultsByQuestionUid(final Long questionUid) { - String FIND_BY_QUESTION_UID = "FROM " + AssessmentQuestionResult.class.getName() - + " AS queRes " + " WHERE queRes.qbToolQuestion.uid =:questionUid AND queRes.finishDate != null ORDER BY queRes.finishDate ASC"; + public List getQuestionResultsByQuestionUid(final Long questionUid, + boolean finishedOnly) { + String FIND_BY_QUESTION_UID = "FROM " + AssessmentQuestionResult.class.getName() + " AS queRes " + + " WHERE queRes.qbToolQuestion.uid =:questionUid " + + (finishedOnly ? "AND queRes.finishDate != null" : "") + " ORDER BY queRes.finishDate ASC"; Query q = getSession().createQuery(FIND_BY_QUESTION_UID, AssessmentQuestionResult.class); q.setParameter("questionUid", questionUid); Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java =================================================================== diff -u -r0a7722c693be32526cebf8057b86eb94de2e8707 -re1d973ac972f78549468d42fd90f22349c3cbee5 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 0a7722c693be32526cebf8057b86eb94de2e8707) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision e1d973ac972f78549468d42fd90f22349c3cbee5) @@ -833,6 +833,10 @@ String normalisedQuestionAnswer = AssessmentEscapeUtils.normaliseVSAnswer(questionDto.getAnswer()); for (OptionDTO optionDto : questionDto.getOptionDtos()) { + // refresh latest answers from DB + QbOption qbOption = qbService.getOptionByUid(optionDto.getUid()); + optionDto.setName(qbOption.getName()); + Collection optionAnswers = AssessmentEscapeUtils.normaliseVSOption(optionDto.getName()); boolean isAnswerMatchedCurrentOption = false; for (String optionAnswer : optionAnswers) { @@ -848,7 +852,6 @@ if (isAnswerMatchedCurrentOption) { mark = optionDto.getMaxMark() * maxMark; - QbOption qbOption = qbService.getOptionByUid(optionDto.getUid()); questionResult.setQbOption(qbOption); break; } @@ -1416,13 +1419,14 @@ public QuestionSummary getQuestionSummary(Long contentId, Long questionUid) { AssessmentQuestion question = assessmentQuestionDao.getByUid(questionUid); QbQuestion qbQuestion = question.getQbQuestion(); + boolean isVSA = question.getType() == QbQuestion.TYPE_VERY_SHORT_ANSWERS; List allQuestionResults = assessmentQuestionResultDao - .getQuestionResultsByQuestionUid(questionUid); + .getQuestionResultsByQuestionUid(questionUid, !isVSA); QuestionSummary questionSummary = new QuestionSummary(question); //prepare extra data for VSA type of questions, so teachers can allocate answers into groups - if (question.getType() == QbQuestion.TYPE_VERY_SHORT_ANSWERS) { + if (isVSA) { boolean isQuestionCaseSensitive = question.getQbQuestion().isCaseSensitive(); //find all questionResults that are not allocated into groups yet List notAllocatedQuestionResults = new ArrayList<>();