Index: lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/dao/DokumaranUserDAO.java =================================================================== diff -u -r0ebaba46f0ce87b5138e8e70cc1965887c1c7787 -rb0f4135473a7c21793882bd4aa679e6033d14988 --- lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/dao/DokumaranUserDAO.java (.../DokumaranUserDAO.java) (revision 0ebaba46f0ce87b5138e8e70cc1965887c1c7787) +++ lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/dao/DokumaranUserDAO.java (.../DokumaranUserDAO.java) (revision b0f4135473a7c21793882bd4aa679e6033d14988) @@ -31,6 +31,8 @@ DokumaranUser getUserByUserIDAndSessionID(Long userID, Long sessionId); + DokumaranUser getLearnerByUserIDAndContentID(Long userId, Long contentId); + DokumaranUser getUserByUserIDAndContentID(Long userId, Long contentId); List getBySessionID(Long sessionId); Index: lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/dao/hibernate/DokumaranUserDAOHibernate.java =================================================================== diff -u -r0ebaba46f0ce87b5138e8e70cc1965887c1c7787 -rb0f4135473a7c21793882bd4aa679e6033d14988 --- lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/dao/hibernate/DokumaranUserDAOHibernate.java (.../DokumaranUserDAOHibernate.java) (revision 0ebaba46f0ce87b5138e8e70cc1965887c1c7787) +++ lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/dao/hibernate/DokumaranUserDAOHibernate.java (.../DokumaranUserDAOHibernate.java) (revision b0f4135473a7c21793882bd4aa679e6033d14988) @@ -35,6 +35,8 @@ private static final String FIND_BY_USER_ID_CONTENT_ID = "from " + DokumaranUser.class.getName() + " as u where u.userId =? and u.dokumaran.contentId=?"; + private static final String FIND_LEARNER_BY_USER_ID_CONTENT_ID = FIND_BY_USER_ID_CONTENT_ID + + " AND u.session IS NOT NULL"; private static final String FIND_BY_USER_ID_SESSION_ID = "from " + DokumaranUser.class.getName() + " as u where u.userId =? and u.session.sessionId=?"; private static final String FIND_BY_SESSION_ID = "from " + DokumaranUser.class.getName() @@ -52,6 +54,15 @@ } @Override + public DokumaranUser getLearnerByUserIDAndContentID(Long userId, Long contentId) { + List list = this.doFind(FIND_LEARNER_BY_USER_ID_CONTENT_ID, new Object[] { userId, contentId }); + if (list == null || list.size() == 0) { + return null; + } + return (DokumaranUser) list.get(0); + } + + @Override public DokumaranUser getUserByUserIDAndContentID(Long userId, Long contentId) { List list = this.doFind(FIND_BY_USER_ID_CONTENT_ID, new Object[] { userId, contentId }); if (list == null || list.size() == 0) { Index: lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/service/DokumaranService.java =================================================================== diff -u -re62e56b0f0d04f6820592e95b0271619784a2c9f -rb0f4135473a7c21793882bd4aa679e6033d14988 --- lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/service/DokumaranService.java (.../DokumaranService.java) (revision e62e56b0f0d04f6820592e95b0271619784a2c9f) +++ lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/service/DokumaranService.java (.../DokumaranService.java) (revision b0f4135473a7c21793882bd4aa679e6033d14988) @@ -322,12 +322,22 @@ @Override public LocalDateTime launchTimeLimit(long toolContentId, int userId) { - DokumaranUser user = getUserByIDAndContent(Long.valueOf(userId), toolContentId); + DokumaranUser user = getLearnerByIDAndContent(Long.valueOf(userId), toolContentId); if (user != null) { - LocalDateTime launchedDate = LocalDateTime.now(); - user.setTimeLimitLaunchedDate(launchedDate); - dokumaranUserDao.saveObject(user); - return launchedDate; + DokumaranSession session = user.getSession(); + Dokumaran dokumaran = session.getDokumaran(); + + if (user.getTimeLimitLaunchedDate() == null) { + LocalDateTime launchedDate = LocalDateTime.now(); + user.setTimeLimitLaunchedDate(launchedDate); + dokumaranUserDao.saveObject(user); + + // if the user is not a leader, store his launch date, but return null so the leader's launch date is in use + if (!dokumaran.isUseSelectLeaderToolOuput() || (session.getGroupLeader() != null + && session.getGroupLeader().getUserId().equals(Long.valueOf(userId)))) { + return launchedDate; + } + } } return null; } @@ -345,14 +355,13 @@ } @Override - public DokumaranUser getUserByIDAndContent(Long userId, Long contentId) { - return dokumaranUserDao.getUserByUserIDAndContentID(userId, contentId); + public DokumaranUser getLearnerByIDAndContent(Long userId, Long contentId) { + return dokumaranUserDao.getLearnerByUserIDAndContentID(userId, contentId); } @Override - public DokumaranUser getUserByLoginAndContent(String login, long contentId) { - List user = dokumaranUserDao.findByProperty(User.class, "login", login); - return user.isEmpty() ? null : getUserByIDAndContent(user.get(0).getUserId().longValue(), contentId); + public DokumaranUser getUserByIDAndContent(Long userId, Long contentId) { + return dokumaranUserDao.getUserByUserIDAndContentID(userId, contentId); } @Override Index: lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/service/IDokumaranService.java =================================================================== diff -u -r0ebaba46f0ce87b5138e8e70cc1965887c1c7787 -rb0f4135473a7c21793882bd4aa679e6033d14988 --- lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/service/IDokumaranService.java (.../IDokumaranService.java) (revision 0ebaba46f0ce87b5138e8e70cc1965887c1c7787) +++ lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/service/IDokumaranService.java (.../IDokumaranService.java) (revision b0f4135473a7c21793882bd4aa679e6033d14988) @@ -131,15 +131,18 @@ // ********** for user methods ************* /** + * Get learner by given user ID and tool content ID, i.e. user who has a session assigned. + */ + DokumaranUser getLearnerByIDAndContent(Long userId, Long contentId); + + /** * Get user by given userID and toolContentID. * * @param long1 * @return */ DokumaranUser getUserByIDAndContent(Long userID, Long contentId); - DokumaranUser getUserByLoginAndContent(String login, long contentId); - /** * Get user by sessionID and UserID * @@ -231,6 +234,6 @@ void finishGalleryWalk(long toolContentId) throws IOException; void changeLeaderForGroup(long toolSessionId, long leaderUserId); - + Grouping getGrouping(long toolContentId); } \ No newline at end of file Index: lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/web/controller/LearningWebsocketServer.java =================================================================== diff -u -r705c0f72b765849974bfa0d9f8b04797619e8da7 -rb0f4135473a7c21793882bd4aa679e6033d14988 --- lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/web/controller/LearningWebsocketServer.java (.../LearningWebsocketServer.java) (revision 705c0f72b765849974bfa0d9f8b04797619e8da7) +++ lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/web/controller/LearningWebsocketServer.java (.../LearningWebsocketServer.java) (revision b0f4135473a7c21793882bd4aa679e6033d14988) @@ -54,7 +54,13 @@ existingTimeSettings.timeLimitAdjustment = dokumaran.getTimeLimitAdjustments(); for (Integer userId : userIds) { - DokumaranUser user = dokumaranService.getUserByIDAndContent(userId.longValue(), toolContentId); + + DokumaranUser user = dokumaranService.getLearnerByIDAndContent(userId.longValue(), toolContentId); + if (dokumaran.isUseSelectLeaderToolOuput()) { + // if team leader is enabled, show consistent timer for all group members + user = user.getSession().getGroupLeader(); + } + if (user != null && user.getTimeLimitLaunchedDate() != null) { existingTimeSettings.timeLimitLaunchedDate.put(userId, user.getTimeLimitLaunchedDate()); }