Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/dao/IMcUsrAttemptDAO.java =================================================================== diff -u -r1d3ff83fba3454c6e0e4139dc15ad6cecdfa389c -r68a00ed36298398bdd7646b440a122d373bd75a1 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/dao/IMcUsrAttemptDAO.java (.../IMcUsrAttemptDAO.java) (revision 1d3ff83fba3454c6e0e4139dc15ad6cecdfa389c) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/dao/IMcUsrAttemptDAO.java (.../IMcUsrAttemptDAO.java) (revision 68a00ed36298398bdd7646b440a122d373bd75a1) @@ -86,6 +86,11 @@ McUsrAttempt getUserAttemptByQuestion(Long queUsrUid, Long mcQueContentId); /** + * Get the highest attempt order for a all users in a session for a particular question + */ + List getUserAttemptsByQuestionSession(final Long sessionUid, final Long mcQueContentId); + + /** * Count how many attempts done to this option * * @param optionUid Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/dao/hibernate/McUsrAttemptDAO.java =================================================================== diff -u -r1ac047247117455cf3ca4073958e4e2103def960 -r68a00ed36298398bdd7646b440a122d373bd75a1 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/dao/hibernate/McUsrAttemptDAO.java (.../McUsrAttemptDAO.java) (revision 1ac047247117455cf3ca4073958e4e2103def960) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/dao/hibernate/McUsrAttemptDAO.java (.../McUsrAttemptDAO.java) (revision 68a00ed36298398bdd7646b440a122d373bd75a1) @@ -51,6 +51,10 @@ private static final String LOAD_PARTICULAR_QUESTION_ATTEMPT = "from attempt in class McUsrAttempt where attempt.mcQueUsr.uid=:queUsrUid" + " and attempt.mcQueContentId=:mcQueContentId" + " order by attempt.mcOptionsContent.uid"; + private static final String LOAD_FINAL_USER_QUESTION_ATTEMPTS_FOR_QUESTION_SESSION = "from attempt in class McUsrAttempt where " + + " attempt.mcQueUsr.mcSessionId=:sessionUid AND attempt.mcQueContentId=:mcQueContentId " + + " AND attempt.mcQueUsr.responseFinalised = true order by attempt.mcQueUsr.uid"; + private static final String LOAD_ALL_QUESTION_ATTEMPTS = "from attempt in class McUsrAttempt where attempt.mcQueUsr.uid=:queUsrUid" + " AND attempt.mcQueUsr.responseFinalised = true order by attempt.mcQueContentId, attempt.mcOptionsContent.uid"; @@ -104,6 +108,15 @@ } @Override + @SuppressWarnings("unchecked") + public List getUserAttemptsByQuestionSession(final Long sessionUid, final Long mcQueContentId) { + List userAttemptList = getSessionFactory().getCurrentSession() + .createQuery(LOAD_FINAL_USER_QUESTION_ATTEMPTS_FOR_QUESTION_SESSION).setLong("sessionUid", sessionUid.longValue()) + .setLong("mcQueContentId", mcQueContentId.longValue()).list(); + return userAttemptList; + } + + @Override public void updateMcUsrAttempt(McUsrAttempt mcUsrAttempt) { this.getSession().update(mcUsrAttempt); } Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/mcApplicationContext.xml =================================================================== diff -u -r85ef8aca5722a36582117db1e8b988e2c16b6369 -r68a00ed36298398bdd7646b440a122d373bd75a1 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/mcApplicationContext.xml (.../mcApplicationContext.xml) (revision 85ef8aca5722a36582117db1e8b988e2c16b6369) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/mcApplicationContext.xml (.../mcApplicationContext.xml) (revision 68a00ed36298398bdd7646b440a122d373bd75a1) @@ -106,6 +106,7 @@ PROPAGATION_REQUIRED,-McApplicationException PROPAGATION_REQUIRED,-McApplicationException PROPAGATION_REQUIRED,-McApplicationException + PROPAGATION_REQUIRED,-McApplicationException Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/IMcService.java =================================================================== diff -u -rec381d32c228f460e0fd3ce3857aab14d4f6fd87 -r68a00ed36298398bdd7646b440a122d373bd75a1 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/IMcService.java (.../IMcService.java) (revision ec381d32c228f460e0fd3ce3857aab14d4f6fd87) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/IMcService.java (.../IMcService.java) (revision 68a00ed36298398bdd7646b440a122d373bd75a1) @@ -87,6 +87,8 @@ McQueUsr getMcUserBySession(final Long queUsrId, final Long mcSessionUid) throws McApplicationException; + Long getPortraitId(Long userId); + void saveUserAttempt(McQueUsr user, List answerDtos); void updateMcUsrAttempt(McUsrAttempt mcUsrAttempt) throws McApplicationException; Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McService.java =================================================================== diff -u -r729f1d10a1efd78ec420b373a7af23ee66ec3454 -r68a00ed36298398bdd7646b440a122d373bd75a1 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McService.java (.../McService.java) (revision 729f1d10a1efd78ec420b373a7af23ee66ec3454) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McService.java (.../McService.java) (revision 68a00ed36298398bdd7646b440a122d373bd75a1) @@ -416,6 +416,14 @@ } @Override + public Long getPortraitId(Long userId) { + if ( userId != null ) { + User user = (User) userManagementService.findById(User.class, userId.intValue()); + return user != null ? user.getPortraitUuid() : null; + } + return null; + } + @Override public List getPagedUsersBySession(Long sessionId, int page, int size, String sortBy, String sortOrder, String searchString) { return mcUserDAO.getPagedUsersBySession(sessionId, page, size, sortBy, sortOrder, searchString, @@ -774,31 +782,54 @@ return; } - McUsrAttempt userAttempt = mcUsrAttemptDAO.getUserAttemptByUid(userAttemptUid); - Integer userId = userAttempt.getMcQueUsr().getQueUsrId().intValue(); - Long userUid = userAttempt.getMcQueUsr().getUid(); - Long toolSessionId = userAttempt.getMcQueUsr().getMcSession().getMcSessionId(); - Integer oldMark = userAttempt.getMark(); - int oldTotalMark = mcUsrAttemptDAO.getUserTotalMark(userUid); + McUsrAttempt userAttemptToUpdate = mcUsrAttemptDAO.getUserAttemptByUid(userAttemptUid); + McQueUsr selectedUser = userAttemptToUpdate.getMcQueUsr(); + Long userUid = selectedUser.getUid(); + McSession mcSession = selectedUser.getMcSession(); + Integer oldMark = userAttemptToUpdate.getMark(); + int oldTotalMark = mcUsrAttemptDAO.getUserTotalMark(userUid); int totalMark = (oldMark == null) ? oldTotalMark + newMark : (oldTotalMark - oldMark) + newMark; - //update mark for one particular question - userAttempt.setMark(newMark); - mcUsrAttemptDAO.saveMcUsrAttempt(userAttempt); + List userAttempts = new ArrayList(); + McQueUsr groupLeader = mcSession.getGroupLeader(); + if (groupLeader != null) { + if (groupLeader.equals(selectedUser)) { + // This is the group leader so update everyone in the group's mark + userAttempts = mcUsrAttemptDAO.getUserAttemptsByQuestionSession(mcSession.getUid(), + userAttemptToUpdate.getMcQueContent().getUid()); + } else { + String error = new StringBuilder( + "Attempting to update the mark for a non-leader. Cannot update. Session ") + .append(mcSession.getSession_name()).append(":").append(mcSession.getMcSessionId()) + .append(" user ").append(selectedUser.getUsername()).append(":") + .append(selectedUser.getQueUsrId()).toString(); + logger.warn(error); + } + } else { + userAttempts = new ArrayList(); + userAttempts.add(userAttemptToUpdate); + } - //update user's total mark - McQueUsr user = userAttempt.getMcQueUsr(); - user.setLastAttemptTotalMark(totalMark); - updateMcQueUsr(user); + for (McUsrAttempt attempt : userAttempts) { + + attempt.setMark(newMark); + mcUsrAttemptDAO.saveMcUsrAttempt(attempt); - // propagade changes to Gradebook - gradebookService.updateActivityMark(new Double(totalMark), null, userId, toolSessionId, false); + // update user's total mark + McQueUsr user = attempt.getMcQueUsr(); + user.setLastAttemptTotalMark(totalMark); + updateMcQueUsr(user); - // record mark change with audit service - auditService.logMarkChange(McAppConstants.TOOL_SIGNATURE, userAttempt.getMcQueUsr().getQueUsrId(), - userAttempt.getMcQueUsr().getUsername(), "" + oldMark, "" + totalMark); + // propagate changes to Gradebook + gradebookService.updateActivityMark(new Double(totalMark), null, user.getQueUsrId().intValue(), + mcSession.getMcSessionId(), false); + // record mark change with audit service + auditService.logMarkChange(McAppConstants.TOOL_SIGNATURE, user.getQueUsrId(), + user.getUsername(), "" + oldMark, "" + totalMark); + + } } @Override @@ -1865,8 +1896,6 @@ return mcUserDAO.getRawLeaderMarksByToolContentId(toolContentId); } - - // ****************** REST methods ************************* /** Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/action/McMonitoringAction.java =================================================================== diff -u -r729f1d10a1efd78ec420b373a7af23ee66ec3454 -r68a00ed36298398bdd7646b440a122d373bd75a1 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/action/McMonitoringAction.java (.../McMonitoringAction.java) (revision 729f1d10a1efd78ec420b373a7af23ee66ec3454) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/action/McMonitoringAction.java (.../McMonitoringAction.java) (revision 68a00ed36298398bdd7646b440a122d373bd75a1) @@ -288,10 +288,29 @@ } String searchString = WebUtil.readStrParam(request, "userName", true); - List userDtos = mcService.getPagedUsersBySession(sessionId, page - 1, rowLimit, sortBy, - sortOrder, searchString); - int countVisitLogs = mcService.getCountPagedUsersBySession(sessionId, searchString); + List userDtos = new ArrayList(); + int countVisitLogs = 0; + //in case of UseSelectLeaderToolOuput - display only one user + if (groupLeader != null) { + + Integer totalMark = groupLeader.getLastAttemptTotalMark(); + Long portraitId = mcService.getPortraitId(groupLeader.getQueUsrId()); + + McUserMarkDTO userDto = new McUserMarkDTO(); + userDto.setQueUsrId(groupLeader.getUid().toString()); + userDto.setUserId(groupLeader.getQueUsrId().toString()); + userDto.setFullName(groupLeader.getFullname()); + userDto.setTotalMark(totalMark != null ? totalMark.longValue() : null); + userDto.setPortraitId(portraitId==null ? null : portraitId.toString()); + userDtos.add(userDto); + countVisitLogs = 1; + } else { + userDtos = mcService.getPagedUsersBySession(sessionId, page - 1, rowLimit, sortBy, + sortOrder, searchString); + countVisitLogs = mcService.getCountPagedUsersBySession(sessionId, searchString); + } + int totalPages = new Double( Math.ceil(new Integer(countVisitLogs).doubleValue() / new Integer(rowLimit).doubleValue())).intValue();