Index: lams_tool_survey/conf/xdoclet/struts-actions.xml =================================================================== diff -u -rb7ba7cccd2f8027169900a05b8799d3287429c4e -r6a41362120af150aeb786d5ed5df44246e99f3ff --- lams_tool_survey/conf/xdoclet/struts-actions.xml (.../struts-actions.xml) (revision b7ba7cccd2f8027169900a05b8799d3287429c4e) +++ lams_tool_survey/conf/xdoclet/struts-actions.xml (.../struts-actions.xml) (revision 6a41362120af150aeb786d5ed5df44246e99f3ff) @@ -271,10 +271,9 @@ parameter="listReflections"> - - + parameter="getReflectionsJSON"> getStatisticsBySession(final Long contentId); + List getStatisticsBySession(final Long contentId); + + List getUserReflectionsForTablesorter(final Long sessionId, int page, int size, int sorting, + String searchString, ICoreNotebookService coreNotebookService); } Index: lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/dao/hibernate/SurveyUserDAOHibernate.java =================================================================== diff -u -r42358e1c2782a06507ed19dd6c3ec87ced01d8ac -r6a41362120af150aeb786d5ed5df44246e99f3ff --- lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/dao/hibernate/SurveyUserDAOHibernate.java (.../SurveyUserDAOHibernate.java) (revision 42358e1c2782a06507ed19dd6c3ec87ced01d8ac) +++ lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/dao/hibernate/SurveyUserDAOHibernate.java (.../SurveyUserDAOHibernate.java) (revision 6a41362120af150aeb786d5ed5df44246e99f3ff) @@ -29,6 +29,7 @@ import org.apache.commons.lang.StringUtils; import org.hibernate.Hibernate; import org.hibernate.SQLQuery; +import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; import org.lamsfoundation.lams.tool.survey.SurveyConstants; import org.lamsfoundation.lams.tool.survey.dao.SurveyUserDAO; import org.lamsfoundation.lams.tool.survey.model.SurveySession; @@ -143,6 +144,50 @@ return ((Number) list.get(0)).intValue(); } + @SuppressWarnings("unchecked") + /** Will return List<[SurveyUser, String (notebook entry)], [SurveyUser, String (notebook entry)], ... , [SurveyUser, String (notebook entry)]> + */ + public List getUserReflectionsForTablesorter(final Long sessionId, int page, int size, int sorting, + String searchString, ICoreNotebookService coreNotebookService) { + String sortingOrder; + switch (sorting) { + case SurveyConstants.SORT_BY_NAME_ASC: + sortingOrder = "user.last_name ASC, user.first_name ASC"; + break; + case SurveyConstants.SORT_BY_NAME_DESC: + sortingOrder = "user.last_name DESC, user.first_name DESC"; + break; + default: + sortingOrder = "user.uid"; + } + + // If the session uses notebook, then get the sql to join across to get the entries + String[] notebookEntryStrings = coreNotebookService.getNotebookEntrySQLStrings(sessionId.toString(), + SurveyConstants.TOOL_SIGNATURE, "user.user_id"); + + // Basic select for the user records + StringBuilder queryText = new StringBuilder(); + queryText.append("SELECT user.* "); + queryText.append(notebookEntryStrings[0]); + queryText.append(" FROM tl_lasurv11_user user "); + queryText + .append(" JOIN tl_lasurv11_session session ON user.session_uid = session.uid and session.session_id = :sessionId "); + + // Add the notebook join + queryText.append(notebookEntryStrings[1]); + + // If filtering by name add a name based where clause + buildNameSearch(searchString, queryText); + + // Now specify the sort based on the switch statement above. + queryText.append(" ORDER BY " + sortingOrder); + + SQLQuery query = getSession().createSQLQuery(queryText.toString()); + query.addEntity("user", SurveyUser.class).addScalar("notebookEntry", Hibernate.STRING) + .setLong("sessionId", sessionId.longValue()).setFirstResult(page * size).setMaxResults(size); + return query.list(); + } + private static final String GET_STATISTICS = "SELECT session.*, COUNT(*) numUsers " + " FROM tl_lasurv11_session session, tl_lasurv11_survey survey, tl_lasurv11_user user " + " WHERE survey.content_id = :contentId and session.survey_uid = survey.uid and user.session_uid = session.uid " Index: lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/service/ISurveyService.java =================================================================== diff -u -rb7ba7cccd2f8027169900a05b8799d3287429c4e -r6a41362120af150aeb786d5ed5df44246e99f3ff --- lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/service/ISurveyService.java (.../ISurveyService.java) (revision b7ba7cccd2f8027169900a05b8799d3287429c4e) +++ lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/service/ISurveyService.java (.../ISurveyService.java) (revision 6a41362120af150aeb786d5ed5df44246e99f3ff) @@ -30,6 +30,7 @@ import java.util.SortedMap; import org.lamsfoundation.lams.notebook.model.NotebookEntry; +import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; import org.lamsfoundation.lams.tool.survey.dto.AnswerDTO; import org.lamsfoundation.lams.tool.survey.dto.ReflectDTO; import org.lamsfoundation.lams.tool.survey.model.Survey; @@ -280,16 +281,9 @@ */ Map> getReflectList(Long contentId, boolean setEntry); - /** - * Get Reflect DTO set for session. Called by getReflectList(contentId, setEntry) so has same - * effect as calling getReflectList(contentId, setEntry) - * and pulling out a single session. - * - * @param contentId - * @return - */ - Set getReflectList(Long sessionId, boolean setEntry, boolean hasReflection); - + List getUserReflectionsForTablesorter(final Long sessionId, int page, int size, int sorting, + String searchString); + void notifyTeachersOnAnswerSumbit(Long sessionId, SurveyUser surveyUser); /** Index: lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/service/SurveyServiceImpl.java =================================================================== diff -u -r42358e1c2782a06507ed19dd6c3ec87ced01d8ac -r6a41362120af150aeb786d5ed5df44246e99f3ff --- lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/service/SurveyServiceImpl.java (.../SurveyServiceImpl.java) (revision 42358e1c2782a06507ed19dd6c3ec87ced01d8ac) +++ lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/service/SurveyServiceImpl.java (.../SurveyServiceImpl.java) (revision 6a41362120af150aeb786d5ed5df44246e99f3ff) @@ -40,7 +40,6 @@ import java.util.TreeSet; import java.util.Vector; -import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.apache.tomcat.util.json.JSONArray; import org.apache.tomcat.util.json.JSONException; @@ -241,36 +240,35 @@ List sessionList = surveySessionDao.getByContentId(contentId); for (SurveySession session : sessionList) { Long sessionId = session.getSessionId(); - boolean hasReflection = session.getSurvey().isReflectOnActivity(); - Set list = getReflectList(sessionId, setEntry, hasReflection); + boolean hasRefection = session.getSurvey().isReflectOnActivity(); + Set list = new TreeSet(new ReflectDTOComparator()); + // get all users in this session + List users = surveyUserDao.getBySessionID(sessionId); + for (SurveyUser user : users) { + ReflectDTO ref = new ReflectDTO(user); + + if (setEntry) { + NotebookEntry entry = getEntry(sessionId, CoreNotebookConstants.NOTEBOOK_TOOL, + SurveyConstants.TOOL_SIGNATURE, user.getUserId().intValue()); + if (entry != null) { + ref.setReflect(entry.getEntry()); + } + } + + ref.setHasRefection(hasRefection); + list.add(ref); + } map.put(sessionId, list); } return map; } - @Override - public Set getReflectList(Long sessionId, boolean setEntry, boolean hasReflection) { - Set list = new TreeSet(new ReflectDTOComparator()); - // get all users in this session - List users = surveyUserDao.getBySessionID(sessionId); - for (SurveyUser user : users) { - ReflectDTO ref = new ReflectDTO(user); - - if (setEntry) { - NotebookEntry entry = getEntry(sessionId, CoreNotebookConstants.NOTEBOOK_TOOL, - SurveyConstants.TOOL_SIGNATURE, user.getUserId().intValue()); - if (entry != null) { - ref.setReflect(entry.getEntry()); - } - } - - ref.setHasRefection(hasReflection); - list.add(ref); - } - return list; + public List getUserReflectionsForTablesorter(final Long sessionId, int page, int size, int sorting, + String searchString) { + return surveyUserDao.getUserReflectionsForTablesorter(sessionId, page, size, sorting, searchString, coreNotebookService); } - + @Override public Long createNotebookEntry(Long sessionId, Integer notebookToolType, String toolSignature, Integer userId, String entryText) { Index: lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/web/action/MonitoringAction.java =================================================================== diff -u -rb7ba7cccd2f8027169900a05b8799d3287429c4e -r6a41362120af150aeb786d5ed5df44246e99f3ff --- lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/web/action/MonitoringAction.java (.../MonitoringAction.java) (revision b7ba7cccd2f8027169900a05b8799d3287429c4e) +++ lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/web/action/MonitoringAction.java (.../MonitoringAction.java) (revision 6a41362120af150aeb786d5ed5df44246e99f3ff) @@ -58,6 +58,7 @@ 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.notebook.service.ICoreNotebookService; import org.lamsfoundation.lams.tool.survey.SurveyConstants; import org.lamsfoundation.lams.tool.survey.dto.AnswerDTO; import org.lamsfoundation.lams.tool.survey.dto.ReflectDTO; @@ -108,8 +109,8 @@ if (param.equals("listReflections")) { return listReflections(mapping, form, request, response); } - if (param.equals("viewReflection")) { - return viewReflection(mapping, form, request, response); + if (param.equals("getReflectionsJSON")) { + return getReflectionsJSON(mapping, form, request, response); } if (param.equals("exportSurvey")) { @@ -222,18 +223,18 @@ JSONObject responsedata = new JSONObject(); responsedata.put("total_rows", service.getCountUsersBySession(sessionId, searchString)); - for (Object[] userAndReflection : users) { + for (Object[] userAndAnswers: users) { JSONObject responseRow = new JSONObject(); - SurveyUser user = (SurveyUser) userAndReflection[0]; + SurveyUser user = (SurveyUser) userAndAnswers[0]; responseRow.put(SurveyConstants.ATTR_USER_NAME, StringEscapeUtils.escapeHtml(user.getLastName() + " " + user.getFirstName())); - if ( userAndReflection.length > 1 && userAndReflection[1] != null) { - responseRow.put("choices", SurveyWebUtils.getChoiceList((String)userAndReflection[1])); + if ( userAndAnswers.length > 1 && userAndAnswers[1] != null) { + responseRow.put("choices", SurveyWebUtils.getChoiceList((String)userAndAnswers[1])); } - if ( userAndReflection.length > 2 && userAndReflection[2] != null) { - responseRow.put("answerText", StringEscapeUtils.escapeHtml((String)userAndReflection[2])); + if ( userAndAnswers.length > 2 && userAndAnswers[2] != null) { + responseRow.put("answerText", (String)userAndAnswers[2]); // was escaped before storing in database } rows.put(responseRow); } @@ -251,39 +252,53 @@ ISurveyService service = getSurveyService(); Survey survey = service.getSurveyBySessionId(sessionId); - Set reflectList = getSurveyService().getReflectList(sessionId, false, survey.isReflectOnActivity()); - request.setAttribute(SurveyConstants.ATTR_REFLECT_LIST, reflectList); request.setAttribute(AttributeNames.PARAM_TOOL_SESSION_ID, sessionId); return mapping.findForward(SurveyConstants.SUCCESS); } - private ActionForward viewReflection(ActionMapping mapping, ActionForm form, HttpServletRequest request, - HttpServletResponse response) { + private ActionForward getReflectionsJSON(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse response) throws JSONException, IOException { + + Long sessionId = WebUtil.readLongParam(request, AttributeNames.PARAM_TOOL_SESSION_ID); - Long uid = WebUtil.readLongParam(request, SurveyConstants.ATTR_USER_UID); - Long sessionID = WebUtil.readLongParam(request, AttributeNames.PARAM_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 = SurveyConstants.SORT_BY_DEAFAULT; + if ( sortByName != null ) + sorting = sortByName.equals(0) ? SurveyConstants.SORT_BY_NAME_ASC : SurveyConstants.SORT_BY_NAME_DESC; + //return user list according to the given sessionID ISurveyService service = getSurveyService(); - SurveyUser user = service.getUser(uid); - NotebookEntry notebookEntry = service.getEntry(sessionID, CoreNotebookConstants.NOTEBOOK_TOOL, - SurveyConstants.TOOL_SIGNATURE, user.getUserId().intValue()); + List users = service.getUserReflectionsForTablesorter(sessionId, page, size, sorting, searchString); + + JSONArray rows = new JSONArray(); + JSONObject responsedata = new JSONObject(); + responsedata.put("total_rows", service.getCountUsersBySession(sessionId, searchString)); - SurveySession session = service.getSurveySessionBySessionId(sessionID); + for (Object[] userAndReflection : users) { - ReflectDTO refDTO = new ReflectDTO(user); - if (notebookEntry == null) { - refDTO.setFinishReflection(false); - refDTO.setReflect(null); - } else { - refDTO.setFinishReflection(true); - refDTO.setReflect(notebookEntry.getEntry()); - } - refDTO.setReflectInstrctions(session.getSurvey().getReflectInstructions()); + JSONObject responseRow = new JSONObject(); + + SurveyUser user = (SurveyUser) userAndReflection[0]; + responseRow.put(SurveyConstants.ATTR_USER_NAME, StringEscapeUtils.escapeHtml(user.getLastName() + " " + user.getFirstName())); - request.setAttribute("userDTO", refDTO); - return mapping.findForward("success"); + if ( userAndReflection.length > 1 && userAndReflection[1] != null) { + String reflection = StringEscapeUtils.escapeHtml((String)userAndReflection[1]); + responseRow.put(SurveyConstants.ATTR_REFLECTION, 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; } - + /** * Export Excel format survey data. * Index: lams_tool_survey/web/pages/monitoring/listanswers.jsp =================================================================== diff -u -rb7ba7cccd2f8027169900a05b8799d3287429c4e -r6a41362120af150aeb786d5ed5df44246e99f3ff --- lams_tool_survey/web/pages/monitoring/listanswers.jsp (.../listanswers.jsp) (revision b7ba7cccd2f8027169900a05b8799d3287429c4e) +++ lams_tool_survey/web/pages/monitoring/listanswers.jsp (.../listanswers.jsp) (revision 6a41362120af150aeb786d5ed5df44246e99f3ff) @@ -84,7 +84,12 @@ rows += ''; - rows += userData["answerText"]; + if ( userData["answerText"] ) { + rows += userData["answerText"]; + } else { + rows += '-'; + } + rows += ''; @@ -114,7 +119,7 @@ }) - + Index: lams_tool_survey/web/pages/monitoring/listreflections.jsp =================================================================== diff -u -rb7ba7cccd2f8027169900a05b8799d3287429c4e -r6a41362120af150aeb786d5ed5df44246e99f3ff --- lams_tool_survey/web/pages/monitoring/listreflections.jsp (.../listreflections.jsp) (revision b7ba7cccd2f8027169900a05b8799d3287429c4e) +++ lams_tool_survey/web/pages/monitoring/listreflections.jsp (.../listreflections.jsp) (revision 6a41362120af150aeb786d5ed5df44246e99f3ff) @@ -7,41 +7,119 @@ <%@ include file="/common/header.jsp" %> + + + + + + + + - <%-- Reflection list --%> - - - - - - - + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + 10 + 20 + 30 + 40 + 50 + 100 + + + + + Fisheye: Tag 6a41362120af150aeb786d5ed5df44246e99f3ff refers to a dead (removed) revision in file `lams_tool_survey/web/pages/monitoring/notebook.jsp'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_tool_survey/web/pages/monitoring/summary.jsp =================================================================== diff -u -rb7ba7cccd2f8027169900a05b8799d3287429c4e -r6a41362120af150aeb786d5ed5df44246e99f3ff --- lams_tool_survey/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision b7ba7cccd2f8027169900a05b8799d3287429c4e) +++ lams_tool_survey/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision 6a41362120af150aeb786d5ed5df44246e99f3ff) @@ -157,7 +157,7 @@ - +