Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/dao/IQaQueUsrDAO.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/dao/IQaQueUsrDAO.java,v diff -u -r1.18.2.1 -r1.18.2.2 --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/dao/IQaQueUsrDAO.java 12 Sep 2014 22:43:06 -0000 1.18.2.1 +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/dao/IQaQueUsrDAO.java 23 Feb 2016 10:47:32 -0000 1.18.2.2 @@ -25,7 +25,7 @@ import java.util.List; -import org.lamsfoundation.lams.tool.qa.QaContent; +import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; import org.lamsfoundation.lams.tool.qa.QaQueUsr; import org.lamsfoundation.lams.tool.qa.QaSession; @@ -45,4 +45,10 @@ int countSessionUser(QaSession qaSession); List getUserBySessionOnly(final QaSession qaSession); + + // Used for the user reflections tablesorter + List getUserReflectionsForTablesorter(final Long toolSessionId, int page, int size, int sorting, + String searchString, ICoreNotebookService coreNotebookService); + int getCountUsersBySessionWithSearch(final Long toolSessionId, String searchString); + } Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/dao/hibernate/QaQueUsrDAO.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/dao/hibernate/QaQueUsrDAO.java,v diff -u -r1.26.2.4 -r1.26.2.5 --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/dao/hibernate/QaQueUsrDAO.java 25 Sep 2015 13:28:15 -0000 1.26.2.4 +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/dao/hibernate/QaQueUsrDAO.java 23 Feb 2016 10:47:32 -0000 1.26.2.5 @@ -26,8 +26,16 @@ import java.util.List; +import org.apache.commons.lang.StringEscapeUtils; +import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; +import org.hibernate.FlushMode; +import org.hibernate.Hibernate; +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.qa.QaAppConstants; import org.lamsfoundation.lams.tool.qa.QaQueUsr; import org.lamsfoundation.lams.tool.qa.QaSession; import org.lamsfoundation.lams.tool.qa.dao.IQaQueUsrDAO; @@ -78,4 +86,82 @@ getSession().delete(qaQueUsr); } + private void buildNameSearch(StringBuilder queryText, String searchString) { + String filteredSearchString = null; + if (!StringUtils.isBlank(searchString)) { + String[] tokens = searchString.trim().split("\\s+"); + for (String token : tokens) { + String escToken = StringEscapeUtils.escapeSql(token); + queryText.append(" WHERE (fullname LIKE '%").append(escToken) + .append("%' OR username LIKE '%").append(escToken).append("%') "); + } + } + } + + @SuppressWarnings("unchecked") + /** + * Will return List<[username (String), fullname(String), String (notebook entry)]> + * Takes the tool session id as the main input. + */ + public List getUserReflectionsForTablesorter(final Long toolSessionId, int page, int size, int sorting, + String searchString, ICoreNotebookService coreNotebookService) { + String sortingOrder; + switch (sorting) { + case QaAppConstants.SORT_BY_USERNAME_ASC: + sortingOrder = "fullname ASC"; + break; + case QaAppConstants.SORT_BY_USERNAME_DESC: + sortingOrder = "fullname DESC"; + break; + default: + sortingOrder = "username"; + } + + // Get the sql to join across to get the entries + String[] notebookEntryStrings = coreNotebookService.getNotebookEntrySQLStrings("session.qa_session_id", + QaAppConstants.MY_SIGNATURE, "user.que_usr_id"); + + // Basic select for the user records + StringBuilder queryText = new StringBuilder(); + queryText.append("SELECT user.username username, user.fullname fullname "); + queryText.append(notebookEntryStrings[0]); + queryText.append(" FROM tl_laqa11_que_usr user "); + queryText.append(" JOIN tl_laqa11_session session ON user.qa_session_id = session.uid AND session.qa_session_id = :toolSessionId "); + + // Add the notebook join + queryText.append(notebookEntryStrings[1]); + + // If filtering by name add a name based where clause + buildNameSearch(queryText, searchString); + + // Now specify the sort based on the switch statement above. + queryText.append(" ORDER BY " + sortingOrder); + + SQLQuery query = getSession().createSQLQuery(queryText.toString()); + query.addScalar("username", StringType.INSTANCE) + .addScalar("fullname", StringType.INSTANCE) + .addScalar("notebookEntry", StringType.INSTANCE) + .setLong("toolSessionId", toolSessionId.longValue()) + .setFirstResult(page * size).setMaxResults(size); + + return query.list(); + } + + private static final String GET_COUNT_USERS_FOR_SESSION_AND_QUESTION_WITH_NAME_SEARCH = "SELECT COUNT(*) FROM tl_laqa11_que_usr user " + +" JOIN tl_laqa11_session session ON user.qa_session_id = session.uid AND session.qa_session_id = :toolSessionId "; + + public int getCountUsersBySessionWithSearch(final Long toolSessionId, String searchString) { + + StringBuilder queryText = new StringBuilder(GET_COUNT_USERS_FOR_SESSION_AND_QUESTION_WITH_NAME_SEARCH); + buildNameSearch(queryText, searchString); + + SQLQuery query = getSession().createSQLQuery(queryText.toString()); + query.setLong("toolSessionId", toolSessionId); + List list = query.list(); + + if (list == null || list.size() == 0) { + return 0; + } + return ((Number) list.get(0)).intValue(); + } } \ No newline at end of file Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/IQaService.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/IQaService.java,v diff -u -r1.66.2.5 -r1.66.2.6 --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/IQaService.java 3 Nov 2015 02:49:58 -0000 1.66.2.5 +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/IQaService.java 23 Feb 2016 10:47:32 -0000 1.66.2.6 @@ -318,15 +318,31 @@ String getLearnerContentFolder(Long toolSessionId, Long userId); /** - * Return reflection data for all sessions. + * Return reflection data for all sessions. Used for Export Portfolio. For monitoring use getUserReflectionsForTablesorter * * @param content * @param userID * @return */ List getReflectList(QaContent content, String userID); + /** + * + * Takes the tool session id as the main input. + */ + /** + * Return username and reflections for a sessions. Paged. Used for monitoring. + * Will return List<[username (String), fullname(String), String (notebook entry)]> + * + * @param content + * @param userID + * @return + */ + List getUserReflectionsForTablesorter(Long toolSessionId, int page, int size, int sorting, String searchString); + int getCountUsersBySessionWithSearch(Long toolSessionId, String searchString); + + /** * ends up populating the attempt history for all the users of all the tool sessions for a content * * User id is needed if isUserNamesVisible is false && is learnerRequest = true, as it is required to work out if @@ -344,4 +360,5 @@ */ void notifyTeachersOnResponseSubmit(Long sessionId); + } Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/QaServicePOJO.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/QaServicePOJO.java,v diff -u -r1.111.2.18 -r1.111.2.19 --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/QaServicePOJO.java 18 Feb 2016 15:45:23 -0000 1.111.2.18 +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/QaServicePOJO.java 23 Feb 2016 10:47:32 -0000 1.111.2.19 @@ -662,6 +662,14 @@ return reflectionDTOs; } + public List getUserReflectionsForTablesorter(Long toolSessionId, int page, int size, int sorting, String searchString) { + return qaQueUsrDAO.getUserReflectionsForTablesorter(toolSessionId, page, size, sorting, searchString, getCoreNotebookService()); + } + public int getCountUsersBySessionWithSearch(Long toolSessionId, String searchString) { + return qaQueUsrDAO.getCountUsersBySessionWithSearch(toolSessionId, searchString); + } + + @Override public List exportLearner(QaContent qaContent, boolean isUserNamesVisible, boolean isLearnerRequest, String sessionId, String userId) { Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/QaMonitoringAction.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/QaMonitoringAction.java,v diff -u -r1.80 -r1.80.2.1 --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/QaMonitoringAction.java 3 Jun 2014 16:22:21 -0000 1.80 +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/QaMonitoringAction.java 23 Feb 2016 10:47:32 -0000 1.80.2.1 @@ -25,17 +25,22 @@ import java.io.IOException; import java.util.Date; +import java.util.List; import java.util.TimeZone; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; +import org.apache.commons.lang.StringEscapeUtils; import org.apache.log4j.Logger; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; +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.tool.exception.ToolException; import org.lamsfoundation.lams.tool.qa.QaAppConstants; import org.lamsfoundation.lams.tool.qa.QaContent; @@ -129,4 +134,51 @@ return QaServiceProxy.getQaService(getServlet().getServletContext()); } + /** + * Get Paged Reflections + * + * @param mapping + * @param form + * @param request + * @param response + * @return + */ + public ActionForward getReflectionsJSON(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse response) throws IOException, ServletException, ToolException, JSONException { + + Long toolSessionId = WebUtil.readLongParam(request, QaAppConstants.TOOL_SESSION_ID); + + // paging parameters of tablesorter + int size = WebUtil.readIntParam(request, "size"); + int page = WebUtil.readIntParam(request, "page"); + Integer sortByName = WebUtil.readIntParam(request, "column[0]", true); + String searchString = request.getParameter("fcol[0]"); + + int sorting = QaAppConstants.SORT_BY_NO; + if ( sortByName != null ) + sorting = sortByName.equals(0) ? QaAppConstants.SORT_BY_USERNAME_ASC : QaAppConstants.SORT_BY_USERNAME_DESC; + + //return user list according to the given sessionID + IQaService qaService = getQAService(); + List users = qaService.getUserReflectionsForTablesorter(toolSessionId, page, size, sorting, searchString); + + JSONArray rows = new JSONArray(); + JSONObject responsedata = new JSONObject(); + responsedata.put("total_rows", qaService.getCountUsersBySessionWithSearch(toolSessionId, searchString)); + + for (Object[] userAndReflection: users) { + JSONObject responseRow = new JSONObject(); + responseRow.put("username", StringEscapeUtils.escapeHtml((String) userAndReflection[1])); + if ( userAndReflection.length > 2 && userAndReflection[2] != null) { + String reflection = StringEscapeUtils.escapeHtml((String)userAndReflection[2]); + responseRow.put(QaAppConstants.NOTEBOOK, reflection.replaceAll("\n", "
")); + } + rows.put(responseRow); + } + responsedata.put("rows", rows); + response.setContentType("application/json;charset=utf-8"); + response.getWriter().print(new String(responsedata.toString())); + return null; + } + } \ No newline at end of file Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/QaMonitoringStarterAction.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/QaMonitoringStarterAction.java,v diff -u -r1.68.2.2 -r1.68.2.3 --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/QaMonitoringStarterAction.java 15 Jun 2015 22:24:55 -0000 1.68.2.2 +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/QaMonitoringStarterAction.java 23 Feb 2016 10:47:32 -0000 1.68.2.3 @@ -143,11 +143,6 @@ } request.setAttribute(LIST_ALL_GROUPS_DTO, groupDTOs); - if (qaContent.isReflect()) { - List reflectionDTOs = qaService.getReflectList(qaContent, null); - request.setAttribute(QaAppConstants.REFLECTIONS_CONTAINER_DTO, reflectionDTOs); - } - // setting up the advanced summary for LDEV-1662 request.setAttribute(QaAppConstants.ATTR_CONTENT, qaContent); Index: lams_tool_laqa/web/monitoring/Reflections.jsp =================================================================== RCS file: /usr/local/cvsroot/lams_tool_laqa/web/monitoring/Reflections.jsp,v diff -u -r1.10 -r1.10.2.1 --- lams_tool_laqa/web/monitoring/Reflections.jsp 13 Apr 2014 16:36:04 -0000 1.10 +++ lams_tool_laqa/web/monitoring/Reflections.jsp 23 Feb 2016 10:47:43 -0000 1.10.2.1 @@ -1,22 +1,134 @@ + <%@ include file="/common/taglibs.jsp"%> + - - - - - - - - - - - + <fmt:message key="label.view.reflection"/> -
- -
- - -
- + + <%@ include file="/common/header.jsp"%> -
+ + + + + + + + + + + + + + + + + +
+ +

+ +
+ + + + + + + + + +
+ + +
+
+ + + + + + +
+
+
+ +
+ + +
Index: lams_tool_laqa/web/monitoring/SummaryContent.jsp =================================================================== RCS file: /usr/local/cvsroot/lams_tool_laqa/web/monitoring/SummaryContent.jsp,v diff -u -r1.46.2.2 -r1.46.2.3 --- lams_tool_laqa/web/monitoring/SummaryContent.jsp 15 Jun 2015 22:24:56 -0000 1.46.2.2 +++ lams_tool_laqa/web/monitoring/SummaryContent.jsp 23 Feb 2016 10:47:43 -0000 1.46.2.3 @@ -26,6 +26,15 @@ + +

+ /monitoring/Reflections.jsp?toolSessionID=${groupDto.sessionId} + + + +

+
+
@@ -80,13 +89,9 @@
- + - - - - <%@include file="AdvanceOptions.jsp"%> <%@include file="dateRestriction.jsp"%>