Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/ForumUserDao.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/ForumUserDao.java,v diff -u -r1.14 -r1.15 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/ForumUserDao.java 8 Nov 2015 23:36:18 -0000 1.14 +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/ForumUserDao.java 25 Nov 2015 02:36:20 -0000 1.15 @@ -29,7 +29,9 @@ import org.apache.commons.lang.StringEscapeUtils; import org.apache.commons.lang.StringUtils; -import org.hibernate.Query; +import org.hibernate.Hibernate; +import org.hibernate.SQLQuery; +import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; import org.lamsfoundation.lams.tool.forum.util.ForumConstants; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; @@ -77,87 +79,118 @@ } @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", Hibernate.STRING) + .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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumService.java,v diff -u -r1.143 -r1.144 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumService.java 23 Nov 2015 11:45:35 -0000 1.143 +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumService.java 25 Nov 2015 02:36:20 -0000 1.144 @@ -517,10 +517,11 @@ } @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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/IForumService.java,v diff -u -r1.59 -r1.60 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/IForumService.java 8 Nov 2015 23:36:18 -0000 1.59 +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/IForumService.java 25 Nov 2015 02:36:20 -0000 1.60 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/ForumConstants.java,v diff -u -r1.68 -r1.69 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/ForumConstants.java 14 Mar 2015 10:48:00 -0000 1.68 +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/ForumConstants.java 25 Nov 2015 02:36:20 -0000 1.69 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/actions/MonitoringAction.java,v diff -u -r1.53 -r1.54 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/actions/MonitoringAction.java 8 Nov 2015 23:36:18 -0000 1.53 +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/actions/MonitoringAction.java 25 Nov 2015 02:36:20 -0000 1.54 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_forum/web/jsps/monitoring/summary.jsp,v diff -u -r1.41 -r1.42 --- lams_tool_forum/web/jsps/monitoring/summary.jsp 8 Nov 2015 23:36:18 -0000 1.41 +++ lams_tool_forum/web/jsps/monitoring/summary.jsp 25 Nov 2015 02:36:20 -0000 1.42 @@ -146,7 +146,7 @@ if (${forum.reflectOnActivity}) { rows += ''; - rows += (userData["notebookEntry"] == 'null') ? '-' : userData["notebookEntry"]; + rows += (userData["notebookEntry"]) ? userData["notebookEntry"] : '-' ; rows += ''; } @@ -206,23 +206,23 @@ - - -
+ + +