Index: lams_tool_assessment/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -r6245c792ea9f8419264b518c642cffcf8c3e7fd2 -r97302bfd38611772c8baaf1900f7fcbc87024f6b --- lams_tool_assessment/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 6245c792ea9f8419264b518c642cffcf8c3e7fd2) +++ lams_tool_assessment/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 97302bfd38611772c8baaf1900f7fcbc87024f6b) @@ -136,6 +136,7 @@ monitoring.tab.edit.activity = Edit Activity monitoring.label.group = Group monitoring.label.user.name = Name +monitoring.label.all.learners = All learners label.monitoring.edit.activity.edit = Edit label.monitoring.summary.summary = Summary label.monitoring.summary.double.click = Double click on learner's name to get full individual report. Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/AssessmentUserDAO.java =================================================================== diff -u -r6cda19702eb2790fece3c55bddb223147417af5d -r97302bfd38611772c8baaf1900f7fcbc87024f6b --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/AssessmentUserDAO.java (.../AssessmentUserDAO.java) (revision 6cda19702eb2790fece3c55bddb223147417af5d) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/AssessmentUserDAO.java (.../AssessmentUserDAO.java) (revision 97302bfd38611772c8baaf1900f7fcbc87024f6b) @@ -46,8 +46,11 @@ int getCountUsersBySession(Long sessionId, String searchString); - int getCountUsersByContentId(Long contentId); + List getPagedUsersByContentId(Long contentId, int page, int size, String sortBy, + String sortOrder, String searchString, IUserManagementService userManagementService); + int getCountUsersByContentId(Long contentId, String searchString); + List getPagedUsersBySessionAndQuestion(Long sessionId, Long questionUid, int page, int size, String sortBy, String sortOrder, String searchString, IUserManagementService userManagementService); Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentUserDAOHibernate.java =================================================================== diff -u -r3248d9808412f06775532829889bb22b76da3a9e -r97302bfd38611772c8baaf1900f7fcbc87024f6b --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentUserDAOHibernate.java (.../AssessmentUserDAOHibernate.java) (revision 3248d9808412f06775532829889bb22b76da3a9e) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentUserDAOHibernate.java (.../AssessmentUserDAOHibernate.java) (revision 97302bfd38611772c8baaf1900f7fcbc87024f6b) @@ -28,6 +28,7 @@ import java.util.List; import java.util.Map; +import org.apache.commons.lang.StringUtils; import org.hibernate.query.NativeQuery; import org.hibernate.query.Query; import org.lamsfoundation.lams.dao.hibernate.LAMSBaseDAO; @@ -57,6 +58,23 @@ + " JOIN tl_laasse10_assessment a ON r.assessment_uid = a.uid " + " WHERE r.finish_date IS NOT NULL AND r.latest = 1 AND a.content_id = :toolContentId"; + private static String LOAD_USERS_ORDERED_BY_SESSION_SELECT = "SELECT DISTINCT user.user_id, session.session_id, " + + "user.last_name, user.first_name, user.login_name, result.grade "; + private static String LOAD_USERS_ORDERED_BY_SESSION_FROM = " FROM tl_laasse10_user user "; + private static String LOAD_USERS_ORDERED_BY_SESSION_JOIN = " JOIN tl_laasse10_session session" + + " ON user.session_uid=session.uid LEFT OUTER JOIN tl_laasse10_assessment_result result " + + " ON result.user_uid = user.uid AND result.finish_date IS NOT NULL" + + " AND result.latest = 1 WHERE session.session_id = :sessionId "; + private static String LOAD_USERS_ORDERED_BY_SESSION_WHERE_SEARCH_STRING = " AND (CONCAT(user.last_name, ' ', user.first_name) LIKE CONCAT('%', :searchString, '%')) "; + private static String LOAD_USERS_ORDERED_ORDER_BY_NAME = "ORDER BY (CONCAT(user.last_name, ' ', user.first_name)) "; + private static String LOAD_USERS_ORDERED_ORDER_BY_TOTAL = "ORDER BY result.grade "; + + private static String LOAD_USERS_ORDERED_BY_CONTENT_ID_JOIN = " JOIN tl_laasse10_session session" + + " ON user.session_uid = session.uid JOIN tl_laasse10_assessment AS assessment " + + "ON session.assessment_uid = assessment.uid LEFT OUTER JOIN tl_laasse10_assessment_result result " + + "ON result.user_uid = user.uid AND result.finish_date IS NOT NULL AND result.latest = 1 " + + "WHERE assessment.content_id = :toolContentId "; + @SuppressWarnings("rawtypes") @Override public AssessmentUser getUserByUserIDAndSessionID(Long userID, Long sessionId) { @@ -107,16 +125,6 @@ return this.doFind(FIND_BY_SESSION_ID, sessionId); } - private static String LOAD_USERS_ORDERED_BY_SESSION_SELECT = "SELECT DISTINCT user.user_id, user.last_name, user.first_name, user.login_name, result.grade "; - private static String LOAD_USERS_ORDERED_BY_SESSION_FROM = " FROM tl_laasse10_user user "; - private static String LOAD_USERS_ORDERED_BY_SESSION_JOIN = " INNER JOIN tl_laasse10_session session" - + " ON user.session_uid=session.uid LEFT OUTER JOIN tl_laasse10_assessment_result result " - + " ON result.user_uid = user.uid AND result.finish_date IS NOT NULL" - + " AND result.latest = 1 WHERE session.session_id = :sessionId " - + " AND (CONCAT(user.last_name, ' ', user.first_name) LIKE CONCAT('%', :searchString, '%')) "; - private static String LOAD_USERS_ORDERED_ORDER_BY_NAME = "ORDER BY (CONCAT(user.last_name, ' ', user.first_name)) "; - private static String LOAD_USERS_ORDERED_ORDER_BY_TOTAL = "ORDER BY result.grade "; - @SuppressWarnings("unchecked") @Override public List getPagedUsersBySession(Long sessionId, int page, int size, String sortBy, @@ -126,6 +134,9 @@ StringBuilder bldr = new StringBuilder(LOAD_USERS_ORDERED_BY_SESSION_SELECT).append(portraitStrings[0]) .append(LOAD_USERS_ORDERED_BY_SESSION_FROM).append(portraitStrings[1]) .append(LOAD_USERS_ORDERED_BY_SESSION_JOIN); + if (StringUtils.isNotBlank(searchString)) { + bldr.append(LOAD_USERS_ORDERED_BY_SESSION_WHERE_SEARCH_STRING); + } if ("total".equalsIgnoreCase(sortBy)) { bldr.append(LOAD_USERS_ORDERED_ORDER_BY_TOTAL); } else { @@ -138,26 +149,65 @@ NativeQuery query = getSession().createNativeQuery(bldr.toString()); query.setParameter("sessionId", sessionId); // support for custom search from a toolbar - searchString = searchString == null ? "" : searchString; - query.setParameter("searchString", searchString); + if (StringUtils.isNotBlank(searchString)) { + query.setParameter("searchString", searchString); + } query.setFirstResult(page * size); query.setMaxResults(size); List list = query.list(); - ArrayList userDtos = new ArrayList<>(); - if (list != null && list.size() > 0) { - for (Object[] element : list) { + return AssessmentUserDAOHibernate.getUserDtos(list); + } + @Override + public List getPagedUsersByContentId(Long contentId, int page, int size, String sortBy, + String sortOrder, String searchString, IUserManagementService userManagementService) { + String[] portraitStrings = userManagementService.getPortraitSQL("user.user_id"); + + StringBuilder bldr = new StringBuilder(LOAD_USERS_ORDERED_BY_SESSION_SELECT).append(portraitStrings[0]) + .append(LOAD_USERS_ORDERED_BY_SESSION_FROM).append(portraitStrings[1]) + .append(LOAD_USERS_ORDERED_BY_CONTENT_ID_JOIN); + if (StringUtils.isNotBlank(searchString)) { + bldr.append(LOAD_USERS_ORDERED_BY_SESSION_WHERE_SEARCH_STRING); + } + if ("total".equalsIgnoreCase(sortBy)) { + bldr.append(LOAD_USERS_ORDERED_ORDER_BY_TOTAL); + } else { + bldr.append(LOAD_USERS_ORDERED_ORDER_BY_NAME); + } + + LAMSBaseDAO.sanitiseQueryPart(sortOrder); + bldr.append(sortOrder); + + NativeQuery query = getSession().createNativeQuery(bldr.toString()); + query.setParameter("toolContentId", contentId); + // support for custom search from a toolbar + if (StringUtils.isNotBlank(searchString)) { + query.setParameter("searchString", searchString); + } + query.setFirstResult(page * size); + query.setMaxResults(size); + List list = query.list(); + + return AssessmentUserDAOHibernate.getUserDtos(list); + } + + private static ArrayList getUserDtos(List queryResults) { + ArrayList userDtos = new ArrayList<>(); + if (!queryResults.isEmpty()) { + for (Object[] element : queryResults) { Long userId = ((Number) element[0]).longValue(); - String firstName = (String) element[1]; - String lastName = (String) element[2]; - String login = (String) element[3]; - boolean resultSubmitted = element[4] != null; - float grade = resultSubmitted ? ((Number) element[4]).floatValue() : 0; + Long sessionId = ((Number) element[1]).longValue(); + String firstName = (String) element[2]; + String lastName = (String) element[3]; + String login = (String) element[4]; + boolean resultSubmitted = element[5] != null; + float grade = resultSubmitted ? ((Number) element[5]).floatValue() : 0; - String portraitId = (String) element[5]; + String portraitId = (String) element[6]; AssessmentUserDTO userDto = new AssessmentUserDTO(); userDto.setUserId(userId); + userDto.setSessionId(sessionId); userDto.setFirstName(firstName); userDto.setLastName(lastName); userDto.setLogin(login); @@ -166,24 +216,24 @@ userDto.setPortraitId(portraitId); userDtos.add(userDto); } - } - return userDtos; } @SuppressWarnings("rawtypes") @Override public int getCountUsersBySession(Long sessionId, String searchString) { - final String LOAD_USERS_ORDERED_BY_NAME = "SELECT COUNT(*) FROM " + AssessmentUser.class.getName() + " user" - + " WHERE user.session.sessionId = :sessionId " - + " AND (CONCAT(user.lastName, ' ', user.firstName) LIKE CONCAT('%', :searchString, '%')) "; - + String LOAD_USERS_ORDERED_BY_NAME = "SELECT COUNT(*) FROM " + AssessmentUser.class.getName() + " user" + + " WHERE user.session.sessionId = :sessionId"; + if (StringUtils.isNotBlank(searchString)) { + LOAD_USERS_ORDERED_BY_NAME += " AND (CONCAT(user.lastName, ' ', user.firstName) LIKE CONCAT('%', :searchString, '%')) "; + } Query query = getSession().createQuery(LOAD_USERS_ORDERED_BY_NAME); query.setParameter("sessionId", sessionId); // support for custom search from a toolbar - searchString = searchString == null ? "" : searchString; - query.setParameter("searchString", searchString); + if (StringUtils.isNotBlank(searchString)) { + query.setParameter("searchString", searchString); + } List list = query.list(); if ((list == null) || (list.size() == 0)) { @@ -194,12 +244,18 @@ } @Override - public int getCountUsersByContentId(Long contentId) { - final String LOAD_USERS_ORDERED_BY_NAME = "SELECT COUNT(*) FROM " + AssessmentUser.class.getName() + " user" - + " WHERE user.session.assessment.contentId = :contentId "; + public int getCountUsersByContentId(Long contentId, String searchString) { + String LOAD_USERS_ORDERED_BY_NAME = "SELECT COUNT(*) FROM " + AssessmentUser.class.getName() + " user" + + " WHERE user.session.assessment.contentId = :contentId"; + if (StringUtils.isNotBlank(searchString)) { + LOAD_USERS_ORDERED_BY_NAME += " AND (CONCAT(user.lastName, ' ', user.firstName) LIKE CONCAT('%', :searchString, '%')) "; + } Query query = getSession().createQuery(LOAD_USERS_ORDERED_BY_NAME, Number.class); query.setParameter("contentId", contentId); + if (StringUtils.isNotBlank(searchString)) { + query.setParameter("searchString", searchString); + } return query.uniqueResult().intValue(); } Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dto/AssessmentUserDTO.java =================================================================== diff -u -rf299a43b38f1c06f1c9a0810b3ae6205b10e0269 -r97302bfd38611772c8baaf1900f7fcbc87024f6b --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dto/AssessmentUserDTO.java (.../AssessmentUserDTO.java) (revision f299a43b38f1c06f1c9a0810b3ae6205b10e0269) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dto/AssessmentUserDTO.java (.../AssessmentUserDTO.java) (revision 97302bfd38611772c8baaf1900f7fcbc87024f6b) @@ -27,6 +27,7 @@ private String firstName; private String lastName; private String login; + private Long sessionId; private float grade; private boolean resultSubmitted; @@ -57,6 +58,14 @@ this.login = login; } + public Long getSessionId() { + return sessionId; + } + + public void setSessionId(Long sessionId) { + this.sessionId = sessionId; + } + public float getGrade() { return grade; } Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java =================================================================== diff -u -r3ef9ae27663556230437c96a76b34599ca104a18 -r97302bfd38611772c8baaf1900f7fcbc87024f6b --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 3ef9ae27663556230437c96a76b34599ca104a18) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 97302bfd38611772c8baaf1900f7fcbc87024f6b) @@ -368,15 +368,27 @@ } @Override + public List getPagedUsersByContentId(Long contentId, int page, int size, String sortBy, + String sortOrder, String searchString) { + return assessmentUserDao.getPagedUsersByContentId(contentId, page, size, sortBy, sortOrder, searchString, + userManagementService); + } + + @Override public int getCountUsersBySession(Long sessionId, String searchString) { return assessmentUserDao.getCountUsersBySession(sessionId, searchString); } @Override public int getCountUsersByContentId(Long contentId) { - return assessmentUserDao.getCountUsersByContentId(contentId); + return getCountUsersByContentId(contentId, null); } + @Override + public int getCountUsersByContentId(Long contentId, String searchString) { + return assessmentUserDao.getCountUsersByContentId(contentId, searchString); + } + /** * How many learners can possibly access this activity */ Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java =================================================================== diff -u -r3ef9ae27663556230437c96a76b34599ca104a18 -r97302bfd38611772c8baaf1900f7fcbc87024f6b --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java (.../IAssessmentService.java) (revision 3ef9ae27663556230437c96a76b34599ca104a18) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java (.../IAssessmentService.java) (revision 97302bfd38611772c8baaf1900f7fcbc87024f6b) @@ -110,9 +110,14 @@ List getPagedUsersBySession(Long sessionId, int page, int size, String sortBy, String sortOrder, String searchString); + List getPagedUsersByContentId(Long contentId, int page, int size, String sortBy, + String sortOrder, String searchString); + int getCountUsersBySession(Long sessionId, String searchString); int getCountUsersByContentId(Long contentId); + + int getCountUsersByContentId(Long contentId, String searchString); int getCountLessonLearnersByContentId(long contentId); Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/controller/MonitoringController.java =================================================================== diff -u -r3ef9ae27663556230437c96a76b34599ca104a18 -r97302bfd38611772c8baaf1900f7fcbc87024f6b --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/controller/MonitoringController.java (.../MonitoringController.java) (revision 3ef9ae27663556230437c96a76b34599ca104a18) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/controller/MonitoringController.java (.../MonitoringController.java) (revision 97302bfd38611772c8baaf1900f7fcbc87024f6b) @@ -400,7 +400,7 @@ SessionMap sessionMap = getSessionMap(request); Assessment assessment = (Assessment) sessionMap.get(AssessmentConstants.ATTR_ASSESSMENT); - Long sessionId = WebUtil.readLongParam(request, "sessionId"); + Long sessionId = WebUtil.readLongParam(request, "sessionId", true); // Getting the params passed in from the jqGrid int page = WebUtil.readIntParam(request, CommonConstants.PARAM_PAGE); @@ -414,6 +414,11 @@ List userDtos = new ArrayList<>(); int countSessionUsers = 0; + if (sessionId == null) { + userDtos = service.getPagedUsersByContentId(assessment.getContentId(), page - 1, rowLimit, sortBy, + sortOrder, searchString); + countSessionUsers = service.getCountUsersByContentId(assessment.getContentId(), searchString); + } else //in case of UseSelectLeaderToolOuput - display only one user if (assessment.isUseSelectLeaderToolOuput()) { @@ -450,7 +455,7 @@ ArrayNode userData = JsonNodeFactory.instance.arrayNode(); userData.add(userDto.getUserId()); - userData.add(sessionId); + userData.add(userDto.getSessionId()); String fullName = HtmlUtils.htmlEscape(userDto.getFirstName() + " " + userDto.getLastName()); userData.add(fullName); userData.add(userDto.getGrade()); Index: lams_tool_assessment/web/pages/monitoring/parts/masterDetailLoadUp.jsp =================================================================== diff -u -r3b83454706f152d81a25b6c08444ceb3ce964638 -r97302bfd38611772c8baaf1900f7fcbc87024f6b --- lams_tool_assessment/web/pages/monitoring/parts/masterDetailLoadUp.jsp (.../masterDetailLoadUp.jsp) (revision 3b83454706f152d81a25b6c08444ceb3ce964638) +++ lams_tool_assessment/web/pages/monitoring/parts/masterDetailLoadUp.jsp (.../masterDetailLoadUp.jsp) (revision 97302bfd38611772c8baaf1900f7fcbc87024f6b) @@ -3,7 +3,7 @@