Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/IForumUserDAO.java =================================================================== diff -u -r7593a8e2fd4aacb20168191679ffe6e723e08826 -rbec5d3437f63b02dcce242c16cddfe49b88daa8d --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/IForumUserDAO.java (.../IForumUserDAO.java) (revision 7593a8e2fd4aacb20168191679ffe6e723e08826) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/IForumUserDAO.java (.../IForumUserDAO.java) (revision bec5d3437f63b02dcce242c16cddfe49b88daa8d) @@ -3,6 +3,7 @@ import java.util.List; import org.lamsfoundation.lams.dao.IBaseDAO; +import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; public interface IForumUserDAO extends IBaseDAO { @@ -20,7 +21,8 @@ int getCountUsersBySession(Long sessionId, String searchString); - List getUsersForTablesorter(final Long sessionId, int page, int size, int sorting, String searchString); + List getUsersForTablesorter(final Long sessionId, int page, int size, int sorting, String searchString, + boolean getNotebookEntries, ICoreNotebookService coreNotebookService); } Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/hibernate/ForumUserDao.java =================================================================== diff -u -r7593a8e2fd4aacb20168191679ffe6e723e08826 -rbec5d3437f63b02dcce242c16cddfe49b88daa8d --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/hibernate/ForumUserDao.java (.../ForumUserDao.java) (revision 7593a8e2fd4aacb20168191679ffe6e723e08826) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/hibernate/ForumUserDao.java (.../ForumUserDao.java) (revision bec5d3437f63b02dcce242c16cddfe49b88daa8d) @@ -29,11 +29,12 @@ import org.apache.commons.lang.StringEscapeUtils; import org.apache.commons.lang.StringUtils; -import org.hibernate.Query; +import org.hibernate.SQLQuery; +import org.hibernate.type.StringType; import org.lamsfoundation.lams.dao.hibernate.LAMSBaseDAO; +import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; import org.lamsfoundation.lams.tool.forum.persistence.ForumUser; import org.lamsfoundation.lams.tool.forum.persistence.IForumUserDAO; -import org.lamsfoundation.lams.tool.forum.persistence.Message; import org.lamsfoundation.lams.tool.forum.util.ForumConstants; import org.springframework.stereotype.Repository; @@ -84,89 +85,119 @@ return (ForumUser) this.getSession().get(ForumUser.class, userUid); } - @Override @SuppressWarnings("unchecked") - public List getUsersForTablesorter(final Long sessionId, int page, int size, int sorting, String searchString) { - String sortingOrder = ""; + /** Will return List<[ForumUser, String], [ForumUser, String], ... , [ForumUser, String]> + * where the String is the notebook entry. No notebook entries needed? Will return "null" in their place. + */ + public List getUsersForTablesorter(final Long sessionId, int page, int size, int sorting, String searchString, + boolean getNotebookEntries, ICoreNotebookService coreNotebookService) { + String sortingOrder; + boolean sortOnMessage; switch (sorting) { - case ForumConstants.SORT_BY_NO: - sortingOrder = "user.lastName"; - break; case ForumConstants.SORT_BY_USER_NAME_ASC: - sortingOrder = "user.lastName ASC, user.firstName ASC"; + sortingOrder = "user.last_name ASC, user.first_name ASC"; + sortOnMessage = false; break; case ForumConstants.SORT_BY_USER_NAME_DESC: - sortingOrder = "user.lastName DESC, user.firstName DESC"; + sortingOrder = "user.last_name DESC, user.first_name DESC"; + sortOnMessage = false; break; case ForumConstants.SORT_BY_LAST_POSTING_ASC: - sortingOrder = " MAX(message.updated) ASC"; + sortingOrder = " MAX(message.update_date) ASC"; + sortOnMessage = true; break; case ForumConstants.SORT_BY_LAST_POSTING_DESC: - sortingOrder = " MAX(message.updated) DESC"; + sortingOrder = " MAX(message.update_date) DESC"; + sortOnMessage = true; break; case ForumConstants.SORT_BY_NUMBER_OF_POSTS_ASC: - sortingOrder = " COUNT(message) ASC"; + sortingOrder = " COUNT(message.uid) ASC"; + sortOnMessage = true; break; case ForumConstants.SORT_BY_NUMBER_OF_POSTS_DESC: - sortingOrder = " COUNT(message) DESC"; + sortingOrder = " COUNT(message.uid) DESC"; + sortOnMessage = true; break; + case ForumConstants.SORT_BY_MARKED_ASC: + sortingOrder = " AVG(report.mark) ASC"; + sortOnMessage = true; + break; + case ForumConstants.SORT_BY_MARKED_DESC: + sortingOrder = " AVG(report.mark) DESC"; + sortOnMessage = true; + break; + case ForumConstants.SORT_BY_NO: + default: + sortingOrder = "user.uid"; + sortOnMessage = false; } - String filteredSearchString = buildNameSearch(searchString); + // If the session uses notebook, then get the SQL to join across to get the entries + String[] notebookEntryStrings = null; + if (getNotebookEntries) { + notebookEntryStrings = coreNotebookService.getNotebookEntrySQLStrings(sessionId.toString(), + ForumConstants.TOOL_SIGNATURE, "user.user_id"); + } - String queryText = null; - if (sorting == ForumConstants.SORT_BY_NUMBER_OF_POSTS_ASC - || sorting == ForumConstants.SORT_BY_NUMBER_OF_POSTS_DESC - || sorting == ForumConstants.SORT_BY_LAST_POSTING_ASC - || sorting == ForumConstants.SORT_BY_LAST_POSTING_DESC) { + // Basic select for the user records + StringBuilder queryText = new StringBuilder(); - queryText = "SELECT user FROM " - + Message.class.getName() + " as message " + " RIGHT JOIN message.createdBy as user " - + " WHERE user.session.sessionId=:sessionId " - + ( filteredSearchString != null ? filteredSearchString : "" ) - + " GROUP BY user.userId ORDER BY " + sortingOrder; + queryText.append("SELECT user.* "); + queryText.append(notebookEntryStrings != null ? notebookEntryStrings[0] : ", NULL notebookEntry"); + queryText.append(" FROM tl_lafrum11_forum_user user "); + queryText.append(" JOIN tl_lafrum11_tool_session session ON user.session_id = session.uid and session.session_id = :sessionId"); - } else { + if (sortOnMessage) { + queryText.append(" LEFT JOIN tl_lafrum11_message message ON message.create_by = user.uid"); + if (sorting == ForumConstants.SORT_BY_MARKED_ASC || sorting == ForumConstants.SORT_BY_MARKED_DESC) { + queryText.append(" LEFT JOIN tl_lafrum11_report report ON report.uid = message.report_id"); + } + } - queryText = "from user in class ForumUser " - + "where user.session.sessionId=:sessionId " - + ( filteredSearchString != null ? filteredSearchString : "" ) - + " ORDER BY " + sortingOrder; + // If using notebook, add the notebook join + if ( notebookEntryStrings != null ) + queryText.append(notebookEntryStrings[1]); + + // If filtering by name add a name based where clause + buildNameSearch(queryText, searchString); + + if (sortOnMessage) { + queryText.append(" GROUP BY user.user_id"); } - Query query = getSession().createQuery(queryText).setLong("sessionId", sessionId.longValue()).setFirstResult(page * size).setMaxResults(size); - return query.list(); + // Now specify the sort based on the switch statement above. + queryText.append(" ORDER BY " + sortingOrder); + SQLQuery query = getSession().createSQLQuery(queryText.toString()); + query.addEntity("user", ForumUser.class) + .addScalar("notebookEntry", StringType.INSTANCE) + .setLong("sessionId", sessionId.longValue()) + .setFirstResult(page * size) + .setMaxResults(size); + return query.list(); + } - - private String buildNameSearch(String searchString) { - String filteredSearchString = null; + + private void buildNameSearch(StringBuilder queryText, String searchString) { if (!StringUtils.isBlank(searchString)) { - StringBuilder searchStringBuilder = new StringBuilder(""); String[] tokens = searchString.trim().split("\\s+"); for (String token : tokens) { String escToken = StringEscapeUtils.escapeSql(token); - searchStringBuilder.append(" AND (user.firstName LIKE '%").append(escToken) - .append("%' OR user.lastName LIKE '%").append(escToken) - .append("%' OR user.loginName LIKE '%").append(escToken).append("%')"); + queryText.append(" AND (user.first_name LIKE '%").append(escToken) + .append("%' OR user.last_name LIKE '%").append(escToken) + .append("%' OR user.login_name LIKE '%").append(escToken).append("%')"); } - filteredSearchString = searchStringBuilder.toString(); } - return filteredSearchString; } @SuppressWarnings("rawtypes") public int getCountUsersBySession(final Long sessionId, String searchString) { - String filteredSearchString = buildNameSearch(searchString); - String queryText = "SELECT COUNT(*) from " - + ForumUser.class.getName() - + " as user where user.session.sessionId=:sessionId "; - if ( filteredSearchString != null ) - queryText += filteredSearchString; - - List list = getSession().createQuery(queryText).setLong("sessionId", sessionId.longValue()).list(); - + StringBuilder queryText = new StringBuilder("SELECT count(*) FROM tl_lafrum11_forum_user user "); + queryText.append(" JOIN tl_lafrum11_tool_session session ON user.session_id = session.uid and session.session_id = :sessionId"); + buildNameSearch(queryText, searchString); + + List list = getSession().createSQLQuery(queryText.toString()).setLong("sessionId", sessionId.longValue()).list(); if (list == null || list.size() == 0) { return 0; } Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumService.java =================================================================== diff -u -r2e5d858e9dd95ddc9aa092c307b2039c9cb62930 -rbec5d3437f63b02dcce242c16cddfe49b88daa8d --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumService.java (.../ForumService.java) (revision 2e5d858e9dd95ddc9aa092c307b2039c9cb62930) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumService.java (.../ForumService.java) (revision bec5d3437f63b02dcce242c16cddfe49b88daa8d) @@ -527,12 +527,13 @@ public ForumUser getUserByUserAndSession(Long userId, Long sessionId) { return forumUserDao.getByUserIdAndSessionId(userId, sessionId); } - + @Override - public List getUsersForTablesorter(final Long sessionId, int page, int size, int sorting, String searchString) { - return forumUserDao.getUsersForTablesorter(sessionId, page, size, sorting, searchString); + public List getUsersForTablesorter(final Long sessionId, int page, int size, int sorting, String searchString, + boolean getNotebookEntries) { + return forumUserDao.getUsersForTablesorter(sessionId, page, size, sorting, searchString, getNotebookEntries, coreNotebookService); } - + @Override public int getCountUsersBySession(Long sessionId, String searchString) { return forumUserDao.getCountUsersBySession(sessionId, searchString); Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/IForumService.java =================================================================== diff -u -r7593a8e2fd4aacb20168191679ffe6e723e08826 -rbec5d3437f63b02dcce242c16cddfe49b88daa8d --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/IForumService.java (.../IForumService.java) (revision 7593a8e2fd4aacb20168191679ffe6e723e08826) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/IForumService.java (.../IForumService.java) (revision bec5d3437f63b02dcce242c16cddfe49b88daa8d) @@ -30,6 +30,7 @@ import org.apache.struts.upload.FormFile; import org.lamsfoundation.lams.events.IEventNotificationService; import org.lamsfoundation.lams.notebook.model.NotebookEntry; +import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; import org.lamsfoundation.lams.tool.forum.dto.AverageRatingDTO; import org.lamsfoundation.lams.tool.forum.dto.MessageDTO; import org.lamsfoundation.lams.tool.forum.persistence.Attachment; @@ -85,7 +86,8 @@ */ Forum getForumByContentId(Long contentID) throws PersistenceException; - List getUsersForTablesorter(final Long sessionId, int page, int size, int sorting, String searchString); + List getUsersForTablesorter(final Long sessionId, int page, int size, int sorting, String searchString, + boolean getNotebookEntries); int getCountUsersBySession(Long sessionId, String searchString); Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/ForumConstants.java =================================================================== diff -u -r0c35cd201a360bd1cfa87cbf534b65c2006489e3 -rbec5d3437f63b02dcce242c16cddfe49b88daa8d --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/ForumConstants.java (.../ForumConstants.java) (revision 0c35cd201a360bd1cfa87cbf534b65c2006489e3) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/ForumConstants.java (.../ForumConstants.java) (revision bec5d3437f63b02dcce242c16cddfe49b88daa8d) @@ -41,6 +41,8 @@ public static final int SORT_BY_LAST_POSTING_DESC = 4; public static final int SORT_BY_NUMBER_OF_POSTS_ASC = 5; public static final int SORT_BY_NUMBER_OF_POSTS_DESC = 6; + public static final int SORT_BY_MARKED_ASC = 7; + public static final int SORT_BY_MARKED_DESC = 8; // See LDEV652 // For old style (Fiona's description): The oldest topic is at the top, does not depends the reply date etc. Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/actions/MonitoringAction.java =================================================================== diff -u -r7593a8e2fd4aacb20168191679ffe6e723e08826 -rbec5d3437f63b02dcce242c16cddfe49b88daa8d --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/actions/MonitoringAction.java (.../MonitoringAction.java) (revision 7593a8e2fd4aacb20168191679ffe6e723e08826) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/actions/MonitoringAction.java (.../MonitoringAction.java) (revision bec5d3437f63b02dcce242c16cddfe49b88daa8d) @@ -64,8 +64,6 @@ import org.apache.tomcat.util.json.JSONArray; import org.apache.tomcat.util.json.JSONException; import org.apache.tomcat.util.json.JSONObject; -import org.lamsfoundation.lams.notebook.model.NotebookEntry; -import org.lamsfoundation.lams.notebook.service.CoreNotebookConstants; import org.lamsfoundation.lams.tool.forum.dto.MessageDTO; import org.lamsfoundation.lams.tool.forum.dto.SessionDTO; import org.lamsfoundation.lams.tool.forum.persistence.Forum; @@ -78,7 +76,6 @@ import org.lamsfoundation.lams.tool.forum.util.ForumUserComparator; import org.lamsfoundation.lams.tool.forum.util.ForumWebUtils; import org.lamsfoundation.lams.tool.forum.util.MessageDTOByDateComparator; -import org.lamsfoundation.lams.tool.forum.util.MessageDtoComparator; import org.lamsfoundation.lams.tool.forum.util.SessionDTOComparator; import org.lamsfoundation.lams.tool.forum.web.forms.ForumForm; import org.lamsfoundation.lams.tool.forum.web.forms.MarkForm; @@ -255,6 +252,7 @@ Integer isSort1 = WebUtil.readIntParam(request, "column[0]", true); Integer isSort2 = WebUtil.readIntParam(request, "column[1]", true); Integer isSort3 = WebUtil.readIntParam(request, "column[2]", true); + Integer isSort4 = WebUtil.readIntParam(request, "column[3]", true); String searchString = request.getParameter("fcol[0]"); int sorting = ForumConstants.SORT_BY_NO; @@ -275,6 +273,12 @@ } else if ((isSort3 != null) && isSort3.equals(1)) { sorting = ForumConstants.SORT_BY_LAST_POSTING_DESC; + + } else if ((isSort4 != null) && isSort4.equals(0)) { + sorting = ForumConstants.SORT_BY_MARKED_ASC; + + } else if ((isSort4 != null) && isSort4.equals(1)) { + sorting = ForumConstants.SORT_BY_MARKED_DESC; } Set sessionDtos = (Set) sessionMap.get(ForumConstants.ATTR_SESSION_DTOS); @@ -287,16 +291,21 @@ } Map> topicsByUser = currentSessionDto.getTopicsByUser(); - List users = forumService.getUsersForTablesorter(sessionId, page, size, sorting, searchString); + Forum forum = (Forum) sessionMap.get("forum"); + List users = forumService.getUsersForTablesorter(sessionId, page, size, sorting, searchString, + forum.isReflectOnActivity()); JSONArray rows = new JSONArray(); JSONObject responcedata = new JSONObject(); responcedata.put("total_rows", forumService.getCountUsersBySession(sessionId, searchString)); - for (ForumUser user : users) { + for (Object[] userAndReflection : users) { JSONObject responseRow = new JSONObject(); + + ForumUser user = (ForumUser) userAndReflection[0]; + responseRow.put(ForumConstants.ATTR_USER_UID, user.getUid()); responseRow.put("userName", StringEscapeUtils.escapeHtml(user.getLastName() + " " + user.getFirstName())); @@ -327,15 +336,9 @@ responseRow.put("anyPostsMarked", isAnyPostsMarked); responseRow.put("numberOfPosts", numberOfPosts); - Forum forum = (Forum) sessionMap.get("forum"); - if (forum.isReflectOnActivity()) { - NotebookEntry notebookEntry = forumService.getEntry(sessionId, CoreNotebookConstants.NOTEBOOK_TOOL, - ForumConstants.TOOL_SIGNATURE, user.getUserId().intValue()); - - String reflection = (notebookEntry == null) ? null : notebookEntry.getEntry(); - responseRow.put("notebookEntry", StringEscapeUtils.escapeHtml(reflection)); + if ( userAndReflection.length > 1 && userAndReflection[1] != null) { + responseRow.put("notebookEntry", StringEscapeUtils.escapeHtml((String)userAndReflection[1])); } - rows.put(responseRow); } responcedata.put("rows", rows); Index: lams_tool_forum/web/jsps/monitoring/summary.jsp =================================================================== diff -u -r7593a8e2fd4aacb20168191679ffe6e723e08826 -rbec5d3437f63b02dcce242c16cddfe49b88daa8d --- lams_tool_forum/web/jsps/monitoring/summary.jsp (.../summary.jsp) (revision 7593a8e2fd4aacb20168191679ffe6e723e08826) +++ lams_tool_forum/web/jsps/monitoring/summary.jsp (.../summary.jsp) (revision bec5d3437f63b02dcce242c16cddfe49b88daa8d) @@ -87,7 +87,7 @@ $(".tablesorter").tablesorter({ theme: 'blue', - sortInitialOrder: 'desc', + sortInitialOrder: 'asc', sortList: [[0]], widgets: [ "resizable", "filter" ], headers: { 1: { filter: false}, 2: { filter: false}, 3: { filter: false}, 4: { filter: false} }, @@ -146,7 +146,7 @@ if (${forum.reflectOnActivity}) { rows += ''; - rows += (userData["notebookEntry"] == 'null') ? '-' : userData["notebookEntry"]; + rows += (userData["notebookEntry"]) ? userData["notebookEntry"] : '-' ; rows += ''; } @@ -206,23 +206,23 @@ - - -
+ + +