Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dto/QuestionSummary.java =================================================================== diff -u -re8a7110708b15579af2c6b31ac52a6da427fef6d -rf88d199227dcdea28740a0783adcf0c726eed463 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dto/QuestionSummary.java (.../QuestionSummary.java) (revision e8a7110708b15579af2c6b31ac52a6da427fef6d) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dto/QuestionSummary.java (.../QuestionSummary.java) (revision f88d199227dcdea28740a0783adcf0c726eed463) @@ -20,7 +20,6 @@ * **************************************************************** */ - package org.lamsfoundation.lams.tool.assessment.dto; import java.util.List; @@ -53,10 +52,13 @@ //used only for question summary page private List notAllocatedQuestionResults; private boolean isTbl; - + //used only for export private List> questionResultsPerSession; - + + // used for answer rating + private boolean showOwnGroupRating; + public QuestionSummary(AssessmentQuestion question) { this.questionDto = new QuestionDTO(question); } @@ -76,15 +78,15 @@ public void setAverageMark(float averageMark) { this.averageMark = averageMark; } - + public List getNotAllocatedQuestionResults() { return notAllocatedQuestionResults; } public void setNotAllocatedQuestionResults(List notAllocatedQuestionResults) { this.notAllocatedQuestionResults = notAllocatedQuestionResults; } - + public boolean isTbl() { return isTbl; } @@ -101,4 +103,11 @@ this.questionResultsPerSession = questionResultsPerSession; } + public boolean isShowOwnGroupRating() { + return showOwnGroupRating; + } + + public void setShowOwnGroupRating(boolean showOwnGroupRating) { + this.showOwnGroupRating = showOwnGroupRating; + } } Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/controller/LearningController.java =================================================================== diff -u -rce676682974b313c309212050dfad64cb41e60f6 -rf88d199227dcdea28740a0783adcf0c726eed463 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/controller/LearningController.java (.../LearningController.java) (revision ce676682974b313c309212050dfad64cb41e60f6) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/controller/LearningController.java (.../LearningController.java) (revision f88d199227dcdea28740a0783adcf0c726eed463) @@ -55,6 +55,7 @@ import org.lamsfoundation.lams.qb.model.QbOption; import org.lamsfoundation.lams.qb.model.QbQuestion; import org.lamsfoundation.lams.rating.dto.ItemRatingDTO; +import org.lamsfoundation.lams.rating.dto.RatingCommentDTO; import org.lamsfoundation.lams.rating.model.RatingCriteria; import org.lamsfoundation.lams.rating.model.ToolActivityRatingCriteria; import org.lamsfoundation.lams.rating.service.IRatingService; @@ -1148,26 +1149,13 @@ } sessionIndex++; } - + // put user's own group first + sessionList.add(0, user.getSession()); request.setAttribute("sessions", sessionList); Map questionSummaries = service.getQuestionSummaryForExport(assessment); request.setAttribute("questionSummaries", questionSummaries); - // question summaries need to be in the same order as sessions, i.e. user group first - if (userSessionIndex != null) { - sessionList.add(0, user.getSession()); - for (QuestionSummary summary : questionSummaries.values()) { - List> questionResultsPerSession = summary - .getQuestionResultsPerSession(); - if (questionResultsPerSession != null) { - List questionResults = questionResultsPerSession - .remove((int) userSessionIndex); - questionResultsPerSession.add(0, questionResults); - } - } - } - // Assessment currently supports only one place for ratings. // It is rating other groups' answers on results page. // Criterion gets automatically created and there must be only one. @@ -1203,6 +1191,41 @@ Map itemRatingDtoMap = itemRatingDtos.stream() .collect(Collectors.toMap(ItemRatingDTO::getItemId, Function.identity())); + Long ratingUserId = user.getSession().getGroupLeader() == null ? userId + : user.getSession().getGroupLeader().getUserId(); + + for (QuestionSummary summary : questionSummaries.values()) { + + List> questionResultsPerSession = summary + .getQuestionResultsPerSession(); + if (questionResultsPerSession != null) { + List questionResults = questionResultsPerSession + .remove((int) userSessionIndex); + // user or his leader should rate all other groups' answers in order to show ratings left for own group + int expectedRatedItemCount = questionResultsPerSession.size(); + + Set questionItemIds = questionResultsPerSession.stream() + .collect(Collectors.mapping(l -> l.get(l.size() - 1).getUid(), Collectors.toSet())); + + // question results need to be in the same order as sessions, i.e. user group first + questionResultsPerSession.add(0, questionResults); + + // count how many ratings user or his leader left + // maybe exact session ID matching should be used here to make sure + int ratedItemCount = 0; + for (Long questionItemId : questionItemIds) { + ItemRatingDTO itemRatingDTO = itemRatingDtoMap.get(questionItemId); + for (RatingCommentDTO ratingCommentDTO : itemRatingDTO.getCommentDtos()) { + if (ratingCommentDTO.getUserId().equals(ratingUserId)) { + ratedItemCount++; + } + } + } + + summary.setShowOwnGroupRating(ratedItemCount == expectedRatedItemCount); + } + } + request.setAttribute("itemRatingDtos", itemRatingDtoMap); } } Index: lams_tool_assessment/web/pages/learning/results/essay.jsp =================================================================== diff -u -r41921e6b323671df6bd1fd88477c2c144165dc8d -rf88d199227dcdea28740a0783adcf0c726eed463 --- lams_tool_assessment/web/pages/learning/results/essay.jsp (.../essay.jsp) (revision 41921e6b323671df6bd1fd88477c2c144165dc8d) +++ lams_tool_assessment/web/pages/learning/results/essay.jsp (.../essay.jsp) (revision f88d199227dcdea28740a0783adcf0c726eed463) @@ -25,13 +25,15 @@ <%-- Get the needed piece of information from a complicated questionSummaries structure --%> + + value="${questionSummary.questionResultsPerSession[status.index]}" /> - + <%-- Show answers for all other teams, and just rating if someone has already commented on this team's answer --%>