Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/IPeerreviewService.java =================================================================== diff -u -rec21ca839bfcba1bb6d6b45276c39a0cc3cb2f3d -r6437f6b8a894d41f5dd5a76a6fe7e95d50171900 --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/IPeerreviewService.java (.../IPeerreviewService.java) (revision ec21ca839bfcba1bb6d6b45276c39a0cc3cb2f3d) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/IPeerreviewService.java (.../IPeerreviewService.java) (revision 6437f6b8a894d41f5dd5a76a6fe7e95d50171900) @@ -91,6 +91,8 @@ */ PeerreviewUser getUserByIDAndSession(Long long1, Long sessionId); + List getUsersBySession(Long sessionId); + /** * Save or update peerreview into database. * Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/PeerreviewServiceImpl.java =================================================================== diff -u -r4bed7d4c0672c281ae66a77fad0d69fb064a9657 -r6437f6b8a894d41f5dd5a76a6fe7e95d50171900 --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/PeerreviewServiceImpl.java (.../PeerreviewServiceImpl.java) (revision 4bed7d4c0672c281ae66a77fad0d69fb064a9657) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/PeerreviewServiceImpl.java (.../PeerreviewServiceImpl.java) (revision 6437f6b8a894d41f5dd5a76a6fe7e95d50171900) @@ -60,6 +60,7 @@ import org.lamsfoundation.lams.rating.dto.StyledCriteriaRatingDTO; import org.lamsfoundation.lams.rating.dto.StyledRatingDTO; import org.lamsfoundation.lams.rating.model.LearnerItemRatingCriteria; +import org.lamsfoundation.lams.rating.model.Rating; import org.lamsfoundation.lams.rating.model.RatingCriteria; import org.lamsfoundation.lams.rating.model.RatingRubricsColumn; import org.lamsfoundation.lams.rating.service.IRatingService; @@ -179,6 +180,11 @@ } @Override + public List getUsersBySession(Long sessionId) { + return peerreviewUserDao.getBySessionID(sessionId); + } + + @Override public void saveOrUpdatePeerreview(Peerreview peerreview) { peerreviewDao.insertOrUpdate(peerreview); } @@ -362,24 +368,11 @@ } if (criteria.isRubricsStyleRating() && !getByUser) { - // for rubrics we need every answer, not just aggregation - StyledCriteriaRatingDTO dto = new StyledCriteriaRatingDTO(); - dto.setRatingCriteria(criteria); - List ratingDtos = ratingService - .getRatingsByCriteriasAndItems(Set.of(criteria.getRatingCriteriaId()), Set.of(currentUserId)) - .stream() - .filter(rating -> getAllUsers || !rating.getLearner().getUserId().equals(currentUserId.intValue())) - .collect(Collectors.mapping(rating -> { - StyledRatingDTO ratingDto = new StyledRatingDTO(currentUserId); - if (rating.getRating() != null) { - ratingDto.setUserRating(String.valueOf(rating.getRating().intValue())); - } - ratingDto.setItemDescription(rating.getLearner().getFullName()); - return ratingDto; - }, Collectors.toList())); + Collection ratings = ratingService + .getRatingsByCriteriasAndItems(Set.of(criteria.getRatingCriteriaId()), Set.of(currentUserId)); - dto.setRatingDtos(ratingDtos); - return dto; + return PeerreviewServiceImpl.getRubricsCriteriaDTO(criteria, currentUserId.intValue(), getAllUsers, + ratings); } List rawData = peerreviewUserDao.getRatingsComments(toolContentId, toolSessionId, criteria, @@ -606,7 +599,29 @@ } } } - + + public static StyledCriteriaRatingDTO getRubricsCriteriaDTO(RatingCriteria criteria, Integer currentUserId, + boolean includeCurrentUser, Collection ratings) { + StyledCriteriaRatingDTO dto = new StyledCriteriaRatingDTO(); + dto.setRatingCriteria(criteria); + List ratingDtos = ratings.stream() + .filter(rating -> rating.getRatingCriteria().getRatingCriteriaId() + .equals(criteria.getRatingCriteriaId()) && rating.getItemId().equals(currentUserId.longValue()) + && (includeCurrentUser || !rating.getLearner().getUserId().equals(currentUserId))) + .collect(Collectors.mapping(rating -> { + StyledRatingDTO ratingDto = new StyledRatingDTO(currentUserId.longValue()); + if (rating.getRating() != null) { + ratingDto.setUserRating(String.valueOf(rating.getRating().intValue())); + } + ratingDto.setItemDescription(rating.getLearner().getFullName()); + ratingDto.setItemDescription2(rating.getLearner().getUserId().toString()); + return ratingDto; + }, Collectors.toList())); + + dto.setRatingDtos(ratingDtos); + return dto; + } + // ***************************************************************************** // private methods // ***************************************************************************** Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/web/controller/MonitoringController.java =================================================================== diff -u -r4bed7d4c0672c281ae66a77fad0d69fb064a9657 -r6437f6b8a894d41f5dd5a76a6fe7e95d50171900 --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/web/controller/MonitoringController.java (.../MonitoringController.java) (revision 4bed7d4c0672c281ae66a77fad0d69fb064a9657) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/web/controller/MonitoringController.java (.../MonitoringController.java) (revision 6437f6b8a894d41f5dd5a76a6fe7e95d50171900) @@ -26,12 +26,15 @@ import java.io.IOException; import java.text.DateFormat; import java.text.SimpleDateFormat; +import java.util.Collection; +import java.util.Comparator; import java.util.Date; -import java.util.HashSet; -import java.util.Iterator; import java.util.List; -import java.util.Set; +import java.util.Map; import java.util.TimeZone; +import java.util.TreeMap; +import java.util.function.Function; +import java.util.stream.Collectors; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; @@ -40,11 +43,15 @@ import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; +import org.lamsfoundation.lams.rating.dto.StyledCriteriaRatingDTO; +import org.lamsfoundation.lams.rating.model.Rating; import org.lamsfoundation.lams.rating.model.RatingCriteria; +import org.lamsfoundation.lams.rating.service.IRatingService; import org.lamsfoundation.lams.tool.peerreview.PeerreviewConstants; import org.lamsfoundation.lams.tool.peerreview.dto.EmailPreviewDTO; import org.lamsfoundation.lams.tool.peerreview.dto.GroupSummary; import org.lamsfoundation.lams.tool.peerreview.model.Peerreview; +import org.lamsfoundation.lams.tool.peerreview.model.PeerreviewUser; import org.lamsfoundation.lams.tool.peerreview.service.IPeerreviewService; import org.lamsfoundation.lams.tool.peerreview.service.PeerreviewServiceImpl; import org.lamsfoundation.lams.util.DateUtil; @@ -87,6 +94,9 @@ @Qualifier("peerreviewService") private IPeerreviewService service; + @Autowired + private IRatingService ratingService; + @RequestMapping("/summary") public String summary(HttpServletRequest request, HttpServletResponse response) { // initial Session Map @@ -110,9 +120,14 @@ sessionMap.put(PeerreviewConstants.ATTR_IS_GROUPED_ACTIVITY, service.isGroupedActivity(contentId)); List criterias = service.getRatingCriterias(contentId); - PeerreviewServiceImpl.removeGroupedCriteria(criterias); - + + if (criterias.size() == 1 && criterias.get(0).isRubricsStyleRating()) { + Map> rubricsData = getRubricsData(sessionMap, + criterias.get(0), criterias); + request.setAttribute("rubricsData", rubricsData); + } + request.setAttribute(PeerreviewConstants.ATTR_CRITERIAS, criterias); return MONITORING_PATH; } @@ -132,6 +147,15 @@ Long criteriaId = WebUtil.readLongParam(request, "criteriaId"); RatingCriteria criteria = service.getCriteriaByCriteriaId(criteriaId); + if (criteria.isRubricsStyleRating()) { + Long toolContentId = (Long) sessionMap.get(PeerreviewConstants.ATTR_TOOL_CONTENT_ID); + + List criterias = service.getRatingCriterias(toolContentId); + Map> rubricsData = getRubricsData(sessionMap, + criteria, criterias); + request.setAttribute("rubricsData", rubricsData); + } + request.setAttribute("criteria", criteria); request.setAttribute("toolSessionId", toolSessionId); return CRITERIA_PATH; @@ -669,4 +693,36 @@ return ""; } + @SuppressWarnings("unchecked") + private Map> getRubricsData( + SessionMap sessionMap, RatingCriteria criteria, Collection criterias) { + List sessionList = (List) sessionMap.get(PeerreviewConstants.ATTR_SUMMARY_LIST); + + criterias = criterias.stream() + .filter(c -> criteria.getRatingCriteriaGroupId().equals(c.getRatingCriteriaGroupId())) + .collect(Collectors.toList()); + Collection criteriaIds = criterias.stream() + .collect(Collectors.mapping(RatingCriteria::getRatingCriteriaId, Collectors.toSet())); + + Map> rubricsData = new TreeMap<>( + Comparator.comparing(GroupSummary::getSessionName)); + for (GroupSummary session : sessionList) { + Map learnerData = new TreeMap<>( + Comparator.comparing(PeerreviewUser::getFirstName).thenComparing(PeerreviewUser::getLastName)); + rubricsData.put(session, learnerData); + + Collection learners = service.getUsersBySession(session.getSessionId()); + List ratings = ratingService.getRatingsByCriteriasAndItems(criteriaIds, + learners.stream().collect(Collectors.mapping(PeerreviewUser::getUserId, Collectors.toSet()))); + + for (PeerreviewUser learner : learners) { + Function dtoBuilder = c -> PeerreviewServiceImpl + .getRubricsCriteriaDTO(c, learner.getUserId().intValue(), true, ratings); + StyledCriteriaRatingDTO dto = PeerreviewServiceImpl.fillCriteriaGroup(criteria, criterias, dtoBuilder); + learnerData.put(learner, dto); + } + } + + return rubricsData; + } } Index: lams_tool_preview/web/WEB-INF/tags/StyledRating.tag =================================================================== diff -u -rc76093f9d9aef9619dee82be9f75c94290385a1e -r6437f6b8a894d41f5dd5a76a6fe7e95d50171900 --- lams_tool_preview/web/WEB-INF/tags/StyledRating.tag (.../StyledRating.tag) (revision c76093f9d9aef9619dee82be9f75c94290385a1e) +++ lams_tool_preview/web/WEB-INF/tags/StyledRating.tag (.../StyledRating.tag) (revision 6437f6b8a894d41f5dd5a76a6fe7e95d50171900) @@ -199,5 +199,187 @@ + + <%-- Some styles for the table and results --%> + + + + + + + + <%-- Each answer column has the same length, all remaining space is taken by the question column --%> + + + + + + + + + + + + + <%-- Check if any other learner rated this learner for this column --%> + + + + + + + + + + + <%-- Calculate again because we need the same cell background colour --%> + + + + + + + + + +
+ +
+ + 0}"> + bg-success + + " + > + +
0}"> + bg-success + + " + > + + + <%-- learners see just how many rates they got from other learners --%> +
+ x ${rateCount} +
+ + <%-- teachers see also who gave the rating --%> + + + +
+ +   +
+
+
+
+
+
+
+ + + + + +
+ <%-- It is sufficient to take user names and columns from the first row/criterion --%> + + + + +
+ + +
+ + + <%-- Each answer column has the same length, all remaining space is take by the question column --%> + + + + + + + + + + + + + + +
+ +
+ + + + class="bg-success" + + > + +
+
+
+
+
+
+
+
\ No newline at end of file Index: lams_tool_preview/web/pages/learning/results.jsp =================================================================== diff -u -r4a6c446731f09a496394db2f52e60431d8160d53 -r6437f6b8a894d41f5dd5a76a6fe7e95d50171900 --- lams_tool_preview/web/pages/learning/results.jsp (.../results.jsp) (revision 4a6c446731f09a496394db2f52e60431d8160d53) +++ lams_tool_preview/web/pages/learning/results.jsp (.../results.jsp) (revision 6437f6b8a894d41f5dd5a76a6fe7e95d50171900) @@ -38,7 +38,6 @@ WARN_COMMENTS_IS_BLANK_LABEL = '', WARN_MIN_NUMBER_WORDS_LABEL = ""; - @@ -103,9 +102,11 @@
-
- -
+ +
+ +
+
@@ -127,7 +128,9 @@ -

+ +

+
Index: lams_tool_preview/web/pages/monitoring/criteria.jsp =================================================================== diff -u -r1ba75f43a383fb925aae69975d748d0a8dfdf9a5 -r6437f6b8a894d41f5dd5a76a6fe7e95d50171900 --- lams_tool_preview/web/pages/monitoring/criteria.jsp (.../criteria.jsp) (revision 1ba75f43a383fb925aae69975d748d0a8dfdf9a5) +++ lams_tool_preview/web/pages/monitoring/criteria.jsp (.../criteria.jsp) (revision 6437f6b8a894d41f5dd5a76a6fe7e95d50171900) @@ -35,8 +35,6 @@ WARN_COMMENTS_IS_BLANK_LABEL = '', WARN_MIN_NUMBER_WORDS_LABEL = ''; - - @@ -45,9 +43,17 @@ - - <%@ include file="criteriapart.jsp" %> + + + + <%@ include file="rubricspart.jsp" %> + + + <%@ include file="criteriapart.jsp" %> + + + Index: lams_tool_preview/web/pages/monitoring/rubricspart.jsp =================================================================== diff -u --- lams_tool_preview/web/pages/monitoring/rubricspart.jsp (revision 0) +++ lams_tool_preview/web/pages/monitoring/rubricspart.jsp (revision 6437f6b8a894d41f5dd5a76a6fe7e95d50171900) @@ -0,0 +1,69 @@ +<%@ include file="/common/taglibs.jsp"%> + + + +<%-- Display collapsible panels with group names only when activity is grouped --%> + +
+ + + + + + <%-- Panel title with session name --%> +
+ + +
+ + + +
+ + + <%-- List learners in the given session --%> +
+ + +
+ <%-- Display ratings given to this user --%> + +
+
+
+
+ + +
+
+
+ +
+ + +
+
\ No newline at end of file Index: lams_tool_preview/web/pages/monitoring/summary.jsp =================================================================== diff -u -r4bed7d4c0672c281ae66a77fad0d69fb064a9657 -r6437f6b8a894d41f5dd5a76a6fe7e95d50171900 --- lams_tool_preview/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision 4bed7d4c0672c281ae66a77fad0d69fb064a9657) +++ lams_tool_preview/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision 6437f6b8a894d41f5dd5a76a6fe7e95d50171900) @@ -110,14 +110,20 @@ - - -

+ + - -
+ + + <%@ include file="rubricspart.jsp" %> + + +

+ <%@ include file="criteriapart.jsp" %> +
+