Index: lams_tool_laqa/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -r8863457fc2621d80d41b032d3142555f35f6d384 -ra5ae87b5075d9aa1b5bec2b62758a76b16c3138a --- lams_tool_laqa/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 8863457fc2621d80d41b032d3142555f35f6d384) +++ lams_tool_laqa/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision a5ae87b5075d9aa1b5bec2b62758a76b16c3138a) @@ -283,6 +283,6 @@ warning.minimum.number.words =There is a minimum required number of words in a comment: {0}. So far you''ve entered {1} word(s). warning.comment.blank =Comment can not be blank. label.no.reedit.allowed =No re-edit allowed +label.search=Search... - #======= End labels: Exported 277 labels for en AU ===== Index: lams_tool_laqa/conf/language/lams/ApplicationResources_en_AU.properties =================================================================== diff -u -r8863457fc2621d80d41b032d3142555f35f6d384 -ra5ae87b5075d9aa1b5bec2b62758a76b16c3138a --- lams_tool_laqa/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision 8863457fc2621d80d41b032d3142555f35f6d384) +++ lams_tool_laqa/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision a5ae87b5075d9aa1b5bec2b62758a76b16c3138a) @@ -283,6 +283,7 @@ warning.minimum.number.words =There is a minimum required number of words in a comment: {0}. So far you''ve entered {1} word(s). warning.comment.blank =Comment can not be blank. label.no.reedit.allowed =No re-edit allowed +label.search=Search... #======= End labels: Exported 277 labels for en AU ===== Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/dao/IQaUsrRespDAO.java =================================================================== diff -u -refbaf6ddcc506fed7b594bc9b663b81a03b1283f -ra5ae87b5075d9aa1b5bec2b62758a76b16c3138a --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/dao/IQaUsrRespDAO.java (.../IQaUsrRespDAO.java) (revision efbaf6ddcc506fed7b594bc9b663b81a03b1283f) +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/dao/IQaUsrRespDAO.java (.../IQaUsrRespDAO.java) (revision a5ae87b5075d9aa1b5bec2b62758a76b16c3138a) @@ -49,7 +49,7 @@ List getResponseBySessionAndQuestion(final Long qaSessionId, final Long questionId); List getResponsesForTablesorter(final Long qaSessionId, final Long questionId, final Long userId, - int page, int size, int sorting); + int page, int size, int sorting, String searchString); - int getCountResponsesBySessionAndQuestion(final Long qaSessionId, final Long questionId, final Long excludeUserId); + int getCountResponsesBySessionAndQuestion(final Long qaSessionId, final Long questionId, final Long excludeUserId, String searchString); } Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/dao/hibernate/QaUsrRespDAO.java =================================================================== diff -u -rdd4087c8c38ddcf2e97af7fc2dda25a8c948bcf0 -ra5ae87b5075d9aa1b5bec2b62758a76b16c3138a --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/dao/hibernate/QaUsrRespDAO.java (.../QaUsrRespDAO.java) (revision dd4087c8c38ddcf2e97af7fc2dda25a8c948bcf0) +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/dao/hibernate/QaUsrRespDAO.java (.../QaUsrRespDAO.java) (revision a5ae87b5075d9aa1b5bec2b62758a76b16c3138a) @@ -25,34 +25,42 @@ import java.util.List; +import org.apache.log4j.Logger; import org.hibernate.FlushMode; import org.lamsfoundation.lams.tool.qa.QaAppConstants; import org.lamsfoundation.lams.tool.qa.QaUsrResp; import org.lamsfoundation.lams.tool.qa.dao.IQaUsrRespDAO; +import org.lamsfoundation.lams.tool.qa.web.QaLearningAction; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; /** * @author Ozgur Demirtas */ public class QaUsrRespDAO extends HibernateDaoSupport implements IQaUsrRespDAO { + + private static Logger logger = Logger.getLogger(QaUsrRespDAO.class.getName()); + private static final String LOAD_ATTEMPT_FOR_USER_AND_QUESTION = "from qaUsrResp in class QaUsrResp " - + "where qaUsrResp.qaQueUser.queUsrId=:queUsrId and qaUsrResp.qaQuestion.uid=:questionId"; + + " where qaUsrResp.qaQueUser.queUsrId=:queUsrId and qaUsrResp.qaQuestion.uid=:questionId"; private static final String LOAD_ATTEMPT_FOR_SESSION_AND_QUESTION = "from qaUsrResp in class QaUsrResp " + " where qaUsrResp.qaQueUser.qaSession.qaSessionId=:qaSessionId and qaUsrResp.qaQuestion.uid=:questionId"; - private static final String LOAD_ATTEMPT_FOR_SESSION_AND_QUESTION_LIMIT = "from qaUsrResp in class QaUsrResp " - + "where qaUsrResp.qaQueUser.qaSession.qaSessionId=:qaSessionId AND qaUsrResp.qaQuestion.uid=:questionId AND qaUsrResp.qaQueUser.queUsrId!=:excludeUserId order by "; - + private static final String LOAD_ATTEMPT_FOR_SESSION_AND_QUESTION_LIMIT_WITH_NAME_SEARCH = "from qaUsrResp in class QaUsrResp " + + " where qaUsrResp.qaQueUser.qaSession.qaSessionId=:qaSessionId AND qaUsrResp.qaQuestion.uid=:questionId AND qaUsrResp.qaQueUser.queUsrId!=:excludeUserId " + + " AND qaUsrResp.qaQueUser.fullname LIKE CONCAT('%', :searchString, '%') " + + " order by "; + private static final String LOAD_ATTEMPT_FOR_USER = "from qaUsrResp in class QaUsrResp " + "where qaUsrResp.qaQueUser.uid=:userUid order by qaUsrResp.qaQuestion.displayOrder asc"; private static final String GET_COUNT_RESPONSES_BY_QACONTENT = "SELECT COUNT(*) from " + QaUsrResp.class.getName() + " as r where r.qaQuestion.qaContent.qaContentId=?"; - private static final String GET_COUNT_RESPONSES_FOR_SESSION_AND_QUESTION = "SELECT COUNT(*) from " + private static final String GET_COUNT_RESPONSES_FOR_SESSION_AND_QUESTION_WITH_NAME_SEARCH = "SELECT COUNT(*) from " + QaUsrResp.class.getName() - + " as r where r.qaQueUser.qaSession.qaSessionId=? and r.qaQuestion.uid=? AND r.qaQueUser.queUsrId!=?"; + + " as r where r.qaQueUser.qaSession.qaSessionId=? and r.qaQuestion.uid=? AND r.qaQueUser.queUsrId!=?" + + " and r.qaQueUser.fullname LIKE CONCAT('%', ?, '%') "; public void createUserResponse(QaUsrResp qaUsrResp) { this.getSession().setFlushMode(FlushMode.AUTO); @@ -95,24 +103,28 @@ @Override public List getResponsesForTablesorter(final Long qaSessionId, final Long questionId, final Long excludeUserId, - int page, int size, int sorting) { + int page, int size, int sorting, String searchString) { String sortingOrder = ""; switch (sorting) { case QaAppConstants.SORT_BY_NO: sortingOrder = "qaUsrResp.attemptTime"; break; case QaAppConstants.SORT_BY_ANSWER_ASC: - sortingOrder = "answer ASC"; + sortingOrder = "qaUsrResp.qaQueUser.fullname ASC"; break; case QaAppConstants.SORT_BY_ANSWER_DESC: - sortingOrder = "answer DESC"; + sortingOrder = "qaUsrResp.qaQueUser.fullname DESC"; break; } - - return getSession().createQuery(LOAD_ATTEMPT_FOR_SESSION_AND_QUESTION_LIMIT + sortingOrder) + + String filter = searchString != null ? searchString.trim() : ""; + // TODO parse out special chars + return getSession().createQuery(LOAD_ATTEMPT_FOR_SESSION_AND_QUESTION_LIMIT_WITH_NAME_SEARCH + sortingOrder) .setLong("qaSessionId", qaSessionId.longValue()).setLong("questionId", questionId.longValue()) - .setLong("excludeUserId", excludeUserId.longValue()).setFirstResult(page * size).setMaxResults(size) + .setLong("excludeUserId", excludeUserId.longValue()).setString("searchString",filter) + .setFirstResult(page * size).setMaxResults(size) .list(); + } @Override @@ -131,10 +143,11 @@ return ((Number) list.get(0)).intValue(); } - public int getCountResponsesBySessionAndQuestion(final Long qaSessionId, final Long questionId, final Long excludeUserId) { + public int getCountResponsesBySessionAndQuestion(final Long qaSessionId, final Long questionId, final Long excludeUserId, String searchString) { - List list = getHibernateTemplate().find(GET_COUNT_RESPONSES_FOR_SESSION_AND_QUESTION, - new Object[] { qaSessionId, questionId, excludeUserId }); + String filter = searchString != null ? searchString.trim() : ""; + List list = getHibernateTemplate().find(GET_COUNT_RESPONSES_FOR_SESSION_AND_QUESTION_WITH_NAME_SEARCH, + new Object[] { qaSessionId, questionId, excludeUserId, filter }); if (list == null || list.size() == 0) { return 0; } Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/IQaService.java =================================================================== diff -u -rdd4087c8c38ddcf2e97af7fc2dda25a8c948bcf0 -ra5ae87b5075d9aa1b5bec2b62758a76b16c3138a --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/IQaService.java (.../IQaService.java) (revision dd4087c8c38ddcf2e97af7fc2dda25a8c948bcf0) +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/IQaService.java (.../IQaService.java) (revision a5ae87b5075d9aa1b5bec2b62758a76b16c3138a) @@ -109,9 +109,9 @@ List getResponseBySessionAndQuestion(final Long qaSessionId, final Long questionId); List getResponsesForTablesorter(final Long qaSessionId, final Long questionId, final Long excludeUserId, - int page, int size, int sorting); + int page, int size, int sorting, String searchString); - int getCountResponsesBySessionAndQuestion(final Long qaSessionId, final Long questionId, final Long excludeUserId); + int getCountResponsesBySessionAndQuestion(final Long qaSessionId, final Long questionId, final Long excludeUserId, String searchString); /** * Creates or updates response with answer submitted by user. @@ -345,4 +345,5 @@ */ void notifyTeachersOnResponseSubmit(Long sessionId); + } Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/QaServicePOJO.java =================================================================== diff -u -rc93c1eaabb8c79d6f2bb3f31872e262e52e271af -ra5ae87b5075d9aa1b5bec2b62758a76b16c3138a --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/QaServicePOJO.java (.../QaServicePOJO.java) (revision c93c1eaabb8c79d6f2bb3f31872e262e52e271af) +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/QaServicePOJO.java (.../QaServicePOJO.java) (revision a5ae87b5075d9aa1b5bec2b62758a76b16c3138a) @@ -308,14 +308,14 @@ @Override public List getResponsesForTablesorter(final Long qaSessionId, final Long questionId, - final Long excludeUserId, int page, int size, int sorting) { - return qaUsrRespDAO.getResponsesForTablesorter(qaSessionId, questionId, excludeUserId, page, size, sorting); + final Long excludeUserId, int page, int size, int sorting, String searchString) { + return qaUsrRespDAO.getResponsesForTablesorter(qaSessionId, questionId, excludeUserId, page, size, sorting, searchString); } @Override public int getCountResponsesBySessionAndQuestion(final Long qaSessionId, final Long questionId, - final Long excludeUserId) { - return qaUsrRespDAO.getCountResponsesBySessionAndQuestion(qaSessionId, questionId, excludeUserId); + final Long excludeUserId, String searchString) { + return qaUsrRespDAO.getCountResponsesBySessionAndQuestion(qaSessionId, questionId, excludeUserId, searchString); } @Override Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/QaLearningAction.java =================================================================== diff -u -r33a5ad24fad4e3e2d3d8f0c67d88ccb5167affe7 -ra5ae87b5075d9aa1b5bec2b62758a76b16c3138a --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/QaLearningAction.java (.../QaLearningAction.java) (revision 33a5ad24fad4e3e2d3d8f0c67d88ccb5167affe7) +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/QaLearningAction.java (.../QaLearningAction.java) (revision a5ae87b5075d9aa1b5bec2b62758a76b16c3138a) @@ -1043,6 +1043,8 @@ int size = WebUtil.readIntParam(request, "size"); int page = WebUtil.readIntParam(request, "page"); Integer isSort1 = WebUtil.readIntParam(request, "column[0]", true); + String searchString = request.getParameter("fcol[0]"); + log.debug("filter value "+searchString); int sorting = QaAppConstants.SORT_BY_NO; if (isSort1 != null && isSort1.equals(0)) { @@ -1052,12 +1054,12 @@ } List responses = qaService.getResponsesForTablesorter(qaSessionId, questionUid, userId, page, size, - sorting); + sorting, searchString); JSONObject responcedata = new JSONObject(); JSONArray rows = new JSONArray(); - responcedata.put("total_rows", qaService.getCountResponsesBySessionAndQuestion(qaSessionId, questionUid, userId)); + responcedata.put("total_rows", qaService.getCountResponsesBySessionAndQuestion(qaSessionId, questionUid, userId, searchString)); //handle rating criterias List itemRatingDtos = null; Index: lams_tool_laqa/web/monitoring/MonitoringMaincontent.jsp =================================================================== diff -u -rd038b7b5b6879abc60637c74af2110bb4d453275 -ra5ae87b5075d9aa1b5bec2b62758a76b16c3138a --- lams_tool_laqa/web/monitoring/MonitoringMaincontent.jsp (.../MonitoringMaincontent.jsp) (revision d038b7b5b6879abc60637c74af2110bb4d453275) +++ lams_tool_laqa/web/monitoring/MonitoringMaincontent.jsp (.../MonitoringMaincontent.jsp) (revision a5ae87b5075d9aa1b5bec2b62758a76b16c3138a) @@ -138,6 +138,7 @@ + @@ -148,15 +149,14 @@ $(".tablesorter").tablesorter({ theme: 'blue', widthFixed: true, - widgets: ['zebra'], - headers: { - 1: { - sorter: false - }, - 2: { - sorter: false - } - } + widgets: ["zebra", "filter"], + headers: { 1: { filter: false, sorter: false }, 2: { filter: false, sorter: false } }, + widgetOptions : { + // include column filters + filter_columnFilters: true, + filter_placeholder: { search : '' }, + filter_searchDelay: 700 + } }); $(".tablesorter").each(function() { @@ -169,7 +169,7 @@ // {sortList:col} adds the sortList to the url into a "col" array, and {filterList:fcol} adds // the filterList to the url into an "fcol" array. // So a sortList = [[2,0],[3,0]] becomes "&col[2]=0&col[3]=0" in the url - ajaxUrl : "?method=getResponses&page={page}&size={size}&{sortList:column}&isMonitoring=true&isAllowRateAnswers=${qaContent.allowRateAnswers}&qaContentId=${qaContent.qaContentId}&qaSessionId=" + $(this).attr('data-session-id') + "&questionUid=" + $(this).attr('data-question-uid') + "&userId=" + $("#userID").val() + "&reqID=" + (new Date()).getTime(), + ajaxUrl : "?method=getResponses&page={page}&size={size}&{sortList:column}&{filterList:fcol}&isMonitoring=true&isAllowRateAnswers=${qaContent.allowRateAnswers}&qaContentId=${qaContent.qaContentId}&qaSessionId=" + $(this).attr('data-session-id') + "&questionUid=" + $(this).attr('data-question-uid') + "&userId=" + $("#userID").val() + "&reqID=" + (new Date()).getTime(), ajaxProcessing: function (data) { if (data && data.hasOwnProperty('rows')) { var rows = [], @@ -262,6 +262,7 @@ }, container: $(this).next(".pager"), output: '{startRow} to {endRow} ({totalRows})', + //removeRows: false, // css class names of pager arrows cssNext: '.tablesorter-next', // next page arrow cssPrev: '.tablesorter-prev', // previous page arrow