Index: lams_tool_forum/conf/language/lams/ApplicationResources.properties =================================================================== RCS file: /usr/local/cvsroot/lams_tool_forum/conf/language/lams/ApplicationResources.properties,v diff -u -r1.64 -r1.65 --- lams_tool_forum/conf/language/lams/ApplicationResources.properties 18 Mar 2015 11:24:44 -0000 1.64 +++ lams_tool_forum/conf/language/lams/ApplicationResources.properties 8 Nov 2015 23:36:18 -0000 1.65 @@ -244,5 +244,5 @@ message.complete.or.cancel.reply=Please complete or cancel the current reply before starting a new reply. message.complete.or.cancel.edit=Please complete or cancel the current edit before starting a new edit. error.cannot.redisplay.please.refresh=Your changes have been saved but cannot be redisplayed. Please select refresh to reload the forum messages. - +label.search=Search... #======= End labels: Exported 232 labels for en AU ===== Index: lams_tool_forum/conf/language/lams/ApplicationResources_en_AU.properties =================================================================== RCS file: /usr/local/cvsroot/lams_tool_forum/conf/language/lams/ApplicationResources_en_AU.properties,v diff -u -r1.59 -r1.60 --- lams_tool_forum/conf/language/lams/ApplicationResources_en_AU.properties 18 Mar 2015 11:24:44 -0000 1.59 +++ lams_tool_forum/conf/language/lams/ApplicationResources_en_AU.properties 8 Nov 2015 23:36:18 -0000 1.60 @@ -244,6 +244,6 @@ message.complete.or.cancel.reply=Please complete or cancel the current reply before starting a new reply. message.complete.or.cancel.edit=Please complete or cancel the current edit before starting a new edit. error.cannot.redisplay.please.refresh=Your changes have been saved but cannot be redisplayed. Please select refresh to reload the forum messages. +label.search=Search... - #======= End labels: Exported 232 labels for en AU ===== 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.13 -r1.14 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/ForumUserDao.java 21 Jan 2015 20:03:47 -0000 1.13 +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/ForumUserDao.java 8 Nov 2015 23:36:18 -0000 1.14 @@ -27,6 +27,9 @@ import java.util.List; +import org.apache.commons.lang.StringEscapeUtils; +import org.apache.commons.lang.StringUtils; +import org.hibernate.Query; import org.lamsfoundation.lams.tool.forum.util.ForumConstants; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; @@ -41,16 +44,7 @@ private static final String SQL_QUERY_FIND_BY_SESSION_ID = "from " + ForumUser.class.getName() + " as f " + " where f.session.sessionId=?"; - private static final String SQL_QUERY_FIND_BY_SESSION_AND_QUESTION_LIMIT = "from user in class ForumUser " - + "where user.session.sessionId=:sessionId order by "; - private static final String SQL_QUERY_FIND_BY_SESSION_LIMIT_ORDER_BY_NUM_POSTS = "SELECT user FROM " - + Message.class.getName() + " as message " + " RIGHT JOIN message.createdBy as user " - + " WHERE user.session.sessionId=:sessionId GROUP BY user.userId ORDER BY "; - - private static final String GET_COUNT_RESPONSES_FOR_SESSION_AND_QUESTION = "SELECT COUNT(*) from " - + ForumUser.class.getName() + " as user where user.session.sessionId=?"; - public List getBySessionId(Long sessionID) { return this.getHibernateTemplate().find(SQL_QUERY_FIND_BY_SESSION_ID, sessionID); } @@ -82,7 +76,8 @@ return (ForumUser) this.getHibernateTemplate().get(ForumUser.class, userUid); } - public List getUsersForTablesorter(final Long sessionId, int page, int size, int sorting) { + @SuppressWarnings("unchecked") + public List getUsersForTablesorter(final Long sessionId, int page, int size, int sorting, String searchString) { String sortingOrder = ""; switch (sorting) { case ForumConstants.SORT_BY_NO: @@ -108,31 +103,61 @@ break; } - if (sorting == ForumConstants.SORT_BY_NUMBER_OF_POSTS_ASC - || sorting == ForumConstants.SORT_BY_NUMBER_OF_POSTS_DESC) { + String filteredSearchString = buildNameSearch(searchString); - List list = getSession().createQuery(SQL_QUERY_FIND_BY_SESSION_LIMIT_ORDER_BY_NUM_POSTS + sortingOrder) - .setLong("sessionId", sessionId.longValue()).setFirstResult(page * size).setMaxResults(size).list(); - return list; - - } else if (sorting == ForumConstants.SORT_BY_LAST_POSTING_ASC + 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) { - List list = getSession().createQuery(SQL_QUERY_FIND_BY_SESSION_LIMIT_ORDER_BY_NUM_POSTS + sortingOrder) - .setLong("sessionId", sessionId.longValue()).setFirstResult(page * size).setMaxResults(size).list(); + 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; - return list; - } else { - return getSession().createQuery(SQL_QUERY_FIND_BY_SESSION_AND_QUESTION_LIMIT + sortingOrder) - .setLong("sessionId", sessionId.longValue()).setFirstResult(page * size).setMaxResults(size).list(); + queryText = "from user in class ForumUser " + + "where user.session.sessionId=:sessionId " + + ( filteredSearchString != null ? filteredSearchString : "" ) + + " ORDER BY " + sortingOrder; } + + Query query = getSession().createQuery(queryText).setLong("sessionId", sessionId.longValue()).setFirstResult(page * size).setMaxResults(size); + return query.list(); + } - public int getCountUsersBySession(final Long sessionId) { - List list = getHibernateTemplate().find(GET_COUNT_RESPONSES_FOR_SESSION_AND_QUESTION, - new Object[] { sessionId }); + private String buildNameSearch(String searchString) { + String filteredSearchString = null; + 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("%')"); + } + 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(); + 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.141 -r1.142 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumService.java 26 Jul 2015 12:44:37 -0000 1.141 +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumService.java 8 Nov 2015 23:36:18 -0000 1.142 @@ -517,13 +517,13 @@ } @Override - public List getUsersForTablesorter(final Long sessionId, int page, int size, int sorting) { - return forumUserDao.getUsersForTablesorter(sessionId, page, size, sorting); + public List getUsersForTablesorter(final Long sessionId, int page, int size, int sorting, String searchString) { + return forumUserDao.getUsersForTablesorter(sessionId, page, size, sorting, searchString); } @Override - public int getCountUsersBySession(Long sessionId) { - return forumUserDao.getCountUsersBySession(sessionId); + public int getCountUsersBySession(Long sessionId, String searchString) { + return forumUserDao.getCountUsersBySession(sessionId, searchString); } @Override 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.58 -r1.59 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/IForumService.java 18 Mar 2015 11:24:44 -0000 1.58 +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/IForumService.java 8 Nov 2015 23:36:18 -0000 1.59 @@ -85,9 +85,9 @@ */ Forum getForumByContentId(Long contentID) throws PersistenceException; - List getUsersForTablesorter(final Long sessionId, int page, int size, int sorting); + List getUsersForTablesorter(final Long sessionId, int page, int size, int sorting, String searchString); - int getCountUsersBySession(Long sessionId); + int getCountUsersBySession(Long sessionId, String searchString); // ************************************************************************************ // Topic Method 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.52 -r1.53 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/actions/MonitoringAction.java 21 Jan 2015 20:03:47 -0000 1.52 +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/actions/MonitoringAction.java 8 Nov 2015 23:36:18 -0000 1.53 @@ -255,7 +255,8 @@ Integer isSort1 = WebUtil.readIntParam(request, "column[0]", true); Integer isSort2 = WebUtil.readIntParam(request, "column[1]", true); Integer isSort3 = WebUtil.readIntParam(request, "column[2]", true); - + String searchString = request.getParameter("fcol[0]"); + int sorting = ForumConstants.SORT_BY_NO; if ((isSort1 != null) && isSort1.equals(0)) { sorting = ForumConstants.SORT_BY_USER_NAME_ASC; @@ -286,12 +287,12 @@ } Map> topicsByUser = currentSessionDto.getTopicsByUser(); - List users = forumService.getUsersForTablesorter(sessionId, page, size, sorting); + List users = forumService.getUsersForTablesorter(sessionId, page, size, sorting, searchString); JSONArray rows = new JSONArray(); JSONObject responcedata = new JSONObject(); - responcedata.put("total_rows", forumService.getCountUsersBySession(sessionId)); + responcedata.put("total_rows", forumService.getCountUsersBySession(sessionId, searchString)); for (ForumUser user : users) { 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.40 -r1.41 --- lams_tool_forum/web/jsps/monitoring/summary.jsp 4 May 2015 16:57:24 -0000 1.40 +++ lams_tool_forum/web/jsps/monitoring/summary.jsp 8 Nov 2015 23:36:18 -0000 1.41 @@ -89,16 +89,21 @@ theme: 'blue', sortInitialOrder: 'desc', sortList: [[0]], - widgets: [ "resizable" ], + widgets: [ "resizable", "filter" ], + headers: { 1: { filter: false}, 2: { filter: false}, 3: { filter: false}, 4: { filter: false} }, widgetOptions: { - resizable: true + resizable: true, + // include column filters + filter_columnFilters: true, + filter_placeholder: { search : '' }, + filter_searchDelay: 700 } }); $(".tablesorter").each(function() { $(this).tablesorterPager({ savePages: false, - ajaxUrl : "?sessionMapID=${sessionMapID}&page={page}&size={size}&{sortList:column}&sessionId=" + $(this).attr('data-session-id'), + ajaxUrl : "?sessionMapID=${sessionMapID}&page={page}&size={size}&{sortList:column}&{filterList:fcol}&sessionId=" + $(this).attr('data-session-id'), ajaxProcessing: function (data, table) { if (data && data.hasOwnProperty('rows')) { var rows = [],