Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/PeerreviewConstants.java =================================================================== diff -u -r3b619df5e7e11dab1dc49859d23399a4b179c16f -re755d63f41781aa02a1fb97ae349019d01a58782 --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/PeerreviewConstants.java (.../PeerreviewConstants.java) (revision 3b619df5e7e11dab1dc49859d23399a4b179c16f) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/PeerreviewConstants.java (.../PeerreviewConstants.java) (revision e755d63f41781aa02a1fb97ae349019d01a58782) @@ -37,6 +37,8 @@ public static final int SORT_BY_USERNAME_DESC = 2; public static final int SORT_BY_AVERAGE_RESULT_ASC = 3; public static final int SORT_BY_AVERAGE_RESULT_DESC = 4; + public static final int SORT_BY_NOTEBOOK_ENTRY_ASC = 5; + public static final int SORT_BY_NOTEBOOK_ENTRY_DESC = 6; public static final int GET_RESULTS_FOR_ALL_USERS_BY_THIS_USER = 0; // used for the edit screens public static final int GET_RESULTS_FOR_ALL_USERS_BY_ALL_USERS = 1; // used for "everyone's results" on the results screen @@ -66,6 +68,7 @@ public static final String PARAM_SEARCH_STRING = "searchString"; public static final String PARAM_SORT_NAME = "itemDescription"; public static final String PARAM_SORT_RATING = "rating"; + public static final String PARAM_SORT_NOTEBOOK = "notebook"; public static final String PARAM_TIME_TAKEN = "timeTaken"; public static final String PARAM_AVG_TIME_TAKEN = "avgTimeTaken"; public static final String PARAM_AVG_MARK = "avgMark"; Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/dao/PeerreviewUserDAO.java =================================================================== diff -u -r3b619df5e7e11dab1dc49859d23399a4b179c16f -re755d63f41781aa02a1fb97ae349019d01a58782 --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/dao/PeerreviewUserDAO.java (.../PeerreviewUserDAO.java) (revision 3b619df5e7e11dab1dc49859d23399a4b179c16f) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/dao/PeerreviewUserDAO.java (.../PeerreviewUserDAO.java) (revision e755d63f41781aa02a1fb97ae349019d01a58782) @@ -25,6 +25,7 @@ import java.util.List; +import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; import org.lamsfoundation.lams.rating.model.RatingCriteria; import org.lamsfoundation.lams.rating.service.IRatingService; import org.lamsfoundation.lams.tool.peerreview.model.PeerreviewSession; @@ -59,5 +60,6 @@ int createUsersForSession(PeerreviewSession session); - + List getUserNotebookEntriesForTablesorter(final Long toolSessionId, int page, int size, int sorting, + ICoreNotebookService coreNotebookService); } Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/dao/hibernate/PeerreviewUserDAOHibernate.java =================================================================== diff -u -r3b619df5e7e11dab1dc49859d23399a4b179c16f -re755d63f41781aa02a1fb97ae349019d01a58782 --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/dao/hibernate/PeerreviewUserDAOHibernate.java (.../PeerreviewUserDAOHibernate.java) (revision 3b619df5e7e11dab1dc49859d23399a4b179c16f) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/dao/hibernate/PeerreviewUserDAOHibernate.java (.../PeerreviewUserDAOHibernate.java) (revision e755d63f41781aa02a1fb97ae349019d01a58782) @@ -25,9 +25,16 @@ import java.util.List; +import org.apache.commons.lang.StringEscapeUtils; +import org.apache.commons.lang.StringUtils; import org.hibernate.Query; import org.hibernate.SQLQuery; +import org.hibernate.type.DateType; +import org.hibernate.type.IntegerType; +import org.hibernate.type.StringType; +import org.hibernate.type.TimestampType; import org.lamsfoundation.lams.dao.hibernate.LAMSBaseDAO; +import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; import org.lamsfoundation.lams.rating.model.RatingCriteria; import org.lamsfoundation.lams.rating.service.IRatingService; import org.lamsfoundation.lams.tool.peerreview.PeerreviewConstants; @@ -272,4 +279,58 @@ return (List) query.list(); } + @Override + @SuppressWarnings("unchecked") + /** + * Will return List<[user.user_id, user.first_name, user.last_name, notebook entry, notebook date]> + */ + public List getUserNotebookEntriesForTablesorter(final Long toolSessionId, int page, int size, int sorting, + ICoreNotebookService coreNotebookService) { + + String sortingOrder; + switch (sorting) { + case PeerreviewConstants.SORT_BY_USERNAME_ASC: + sortingOrder = " ORDER BY user.first_name ASC"; + break; + case PeerreviewConstants.SORT_BY_USERNAME_DESC: + sortingOrder = " ORDER BY user.first_name DESC"; + break; + case PeerreviewConstants.SORT_BY_NOTEBOOK_ENTRY_ASC: + sortingOrder = " ORDER BY notebookEntry ASC"; + break; + case PeerreviewConstants.SORT_BY_NOTEBOOK_ENTRY_DESC: + sortingOrder = " ORDER BY notebookEntry DESC"; + break; + case PeerreviewConstants.SORT_BY_NO: + default: + sortingOrder = " ORDER BY user.user_id"; + } + + String[] notebookEntryStrings = coreNotebookService.getNotebookEntrySQLStrings(toolSessionId.toString(), + PeerreviewConstants.TOOL_SIGNATURE, "user.user_id", true); + + // Basic select for the user records + StringBuilder queryText = new StringBuilder(); + + queryText.append("SELECT user.user_id, user.first_name, user.last_name ") + .append(notebookEntryStrings[0]) + .append(" FROM tl_laprev11_user user ") + .append(" JOIN tl_laprev11_session session ON session.session_id = :toolSessionId AND user.session_uid = session.uid"); + + queryText.append(notebookEntryStrings[1]); + + // Now specify the sort based on the switch statement above. + queryText.append(sortingOrder); + + SQLQuery query = getSession().createSQLQuery(queryText.toString()); + query.addScalar("user_id", IntegerType.INSTANCE) + .addScalar("first_name", StringType.INSTANCE) + .addScalar("last_name", StringType.INSTANCE) + .addScalar("notebookEntry", StringType.INSTANCE) + .addScalar("notebookModifiedDate", TimestampType.INSTANCE) + .setLong("toolSessionId", toolSessionId.longValue()) + .setFirstResult(page * size).setMaxResults(size); + return query.list(); + + } } Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/IPeerreviewService.java =================================================================== diff -u -rf059acd48464d2785b1ab003d64cc21747bba49d -re755d63f41781aa02a1fb97ae349019d01a58782 --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/IPeerreviewService.java (.../IPeerreviewService.java) (revision f059acd48464d2785b1ab003d64cc21747bba49d) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/IPeerreviewService.java (.../IPeerreviewService.java) (revision e755d63f41781aa02a1fb97ae349019d01a58782) @@ -30,6 +30,7 @@ import org.apache.tomcat.util.json.JSONArray; import org.apache.tomcat.util.json.JSONException; import org.lamsfoundation.lams.notebook.model.NotebookEntry; +import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; import org.lamsfoundation.lams.rating.ToolRatingManager; import org.lamsfoundation.lams.rating.dto.ItemRatingDTO; import org.lamsfoundation.lams.rating.dto.StyledCriteriaRatingDTO; @@ -184,14 +185,6 @@ void updateEntry(NotebookEntry notebookEntry); /** - * Get Reflect DTO list. - * - * @param contentId - * @return - */ - List getReflectList(Long contentId, Long sessionId); - - /** * Get user by UID * * @param uid @@ -276,4 +269,9 @@ /** Get the monitoring statistics */ List getStatistics(Long toolContentId); + + /** Get all the notebook entries for a session + * Will return List<[user.user_id, user.first_name, user.first_name + user.last_name, notebook entry, notebook date]> + */ + List getUserNotebookEntriesForTablesorter(Long toolSessionId, int page, int size, int sorting); } Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/PeerreviewServiceImpl.java =================================================================== diff -u -rf059acd48464d2785b1ab003d64cc21747bba49d -re755d63f41781aa02a1fb97ae349019d01a58782 --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/PeerreviewServiceImpl.java (.../PeerreviewServiceImpl.java) (revision f059acd48464d2785b1ab003d64cc21747bba49d) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/PeerreviewServiceImpl.java (.../PeerreviewServiceImpl.java) (revision e755d63f41781aa02a1fb97ae349019d01a58782) @@ -241,30 +241,6 @@ } @Override - public List getReflectList(Long contentId, Long sessionId) { - - List reflections = new LinkedList(); - - List users = peerreviewUserDao.getBySessionID(sessionId); - for (PeerreviewUser user : users) { - - NotebookEntry entry = getEntry(sessionId, CoreNotebookConstants.NOTEBOOK_TOOL, - PeerreviewConstants.TOOL_SIGNATURE, user.getUserId().intValue()); - if (entry != null) { - ReflectDTO ref = new ReflectDTO(user); - ref.setReflect(entry.getEntry()); - Date postedDate = (entry.getLastModified() != null) ? entry.getLastModified() - : entry.getCreateDate(); - ref.setDate(postedDate); - reflections.add(ref); - } - - } - - return reflections; - } - - @Override public List getUsersForTablesorter(final Long toolSessionId, final Long excludeUserId, int page, int size, int sorting) { return peerreviewUserDao.getUsersForTablesorter(toolSessionId, excludeUserId, page, size, sorting); @@ -450,6 +426,18 @@ return peerreviewDao.getStatistics(toolContentId); } + public List getUserNotebookEntriesForTablesorter(Long toolSessionId, int page, int size, int sorting) { + List rawData = peerreviewUserDao.getUserNotebookEntriesForTablesorter(toolSessionId, + page, size, sorting, coreNotebookService); + + for ( Object[] raw : rawData ) { + StringBuilder description = new StringBuilder((String)raw[1] ).append(" ").append((String)raw[2]); + raw[2] = (Object) StringEscapeUtils.escapeCsv(description.toString()); + } + + return rawData; + } + // ***************************************************************************** // private methods // ***************************************************************************** Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/web/action/MonitoringAction.java =================================================================== diff -u -rf059acd48464d2785b1ab003d64cc21747bba49d -re755d63f41781aa02a1fb97ae349019d01a58782 --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/web/action/MonitoringAction.java (.../MonitoringAction.java) (revision f059acd48464d2785b1ab003d64cc21747bba49d) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/web/action/MonitoringAction.java (.../MonitoringAction.java) (revision e755d63f41781aa02a1fb97ae349019d01a58782) @@ -25,9 +25,12 @@ package org.lamsfoundation.lams.tool.peerreview.web.action; import java.io.IOException; -import java.math.BigInteger; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; import java.util.HashMap; import java.util.List; +import java.util.TimeZone; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; @@ -42,20 +45,13 @@ 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.rating.dto.ItemRatingCriteriaDTO; -import org.lamsfoundation.lams.rating.dto.ItemRatingDTO; -import org.lamsfoundation.lams.rating.dto.RatingCommentDTO; -import org.lamsfoundation.lams.rating.dto.RatingDTO; -import org.lamsfoundation.lams.rating.dto.StyledCriteriaRatingDTO; -import org.lamsfoundation.lams.rating.dto.StyledRatingDTO; import org.lamsfoundation.lams.rating.model.RatingCriteria; import org.lamsfoundation.lams.tool.peerreview.PeerreviewConstants; import org.lamsfoundation.lams.tool.peerreview.dto.GroupSummary; -import org.lamsfoundation.lams.tool.peerreview.dto.PeerreviewStatisticsDTO; -import org.lamsfoundation.lams.tool.peerreview.dto.ReflectDTO; import org.lamsfoundation.lams.tool.peerreview.model.Peerreview; import org.lamsfoundation.lams.tool.peerreview.model.PeerreviewUser; import org.lamsfoundation.lams.tool.peerreview.service.IPeerreviewService; +import org.lamsfoundation.lams.util.DateUtil; import org.lamsfoundation.lams.util.WebUtil; import org.lamsfoundation.lams.web.util.AttributeNames; import org.lamsfoundation.lams.web.util.SessionMap; @@ -91,6 +87,9 @@ if (param.equals("reflections")) { return reflections(mapping, form, request, response); } + if (param.equals("getReflections")) { + return getReflections(mapping, form, request, response); + } return mapping.findForward(PeerreviewConstants.ERROR); } @@ -354,20 +353,101 @@ .getAttribute(sessionMapID); request.setAttribute(PeerreviewConstants.ATTR_SESSION_MAP_ID, sessionMap.getSessionID()); + Long toolSessionId = WebUtil.readLongParam(request, "toolSessionId"); + request.setAttribute("toolSessionId", toolSessionId); + + return mapping.findForward(PeerreviewConstants.SUCCESS); + } + + private ActionForward getReflections(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse response) throws JSONException, IOException { + + String sessionMapID = request.getParameter(PeerreviewConstants.ATTR_SESSION_MAP_ID); + SessionMap sessionMap = (SessionMap) request.getSession() + .getAttribute(sessionMapID); + request.setAttribute(PeerreviewConstants.ATTR_SESSION_MAP_ID, sessionMap.getSessionID()); + Long contentId = (Long) sessionMap.get(PeerreviewConstants.ATTR_TOOL_CONTENT_ID); Long toolSessionId = WebUtil.readLongParam(request, "toolSessionId"); + // Getting the params passed in from the jqGrid + int page = WebUtil.readIntParam(request, PeerreviewConstants.PARAM_PAGE) - 1; + int size = WebUtil.readIntParam(request, PeerreviewConstants.PARAM_ROWS); + String sortOrder = WebUtil.readStrParam(request, PeerreviewConstants.PARAM_SORD); + String sortBy = WebUtil.readStrParam(request, PeerreviewConstants.PARAM_SIDX, true); + + int sorting = PeerreviewConstants.SORT_BY_USERNAME_ASC; + + if (sortBy != null && sortBy.equals(PeerreviewConstants.PARAM_SORT_NAME)) { + if (sortOrder != null && sortOrder.equals(PeerreviewConstants.SORT_DESC)) { + sorting = PeerreviewConstants.SORT_BY_USERNAME_DESC; + } else { + sorting = PeerreviewConstants.SORT_BY_USERNAME_ASC; + } + } else if (sortBy != null && sortBy.equals(PeerreviewConstants.PARAM_SORT_NOTEBOOK)) { + if (sortOrder != null && sortOrder.equals(PeerreviewConstants.SORT_DESC)) { + sorting = PeerreviewConstants.SORT_BY_NOTEBOOK_ENTRY_DESC; + } else { + sorting = PeerreviewConstants.SORT_BY_NOTEBOOK_ENTRY_ASC; + } + } + + // setting date format to ISO8601 for jquery.timeago + DateFormat dateFormatterTimeAgo = new SimpleDateFormat(DateUtil.ISO8601_FORMAT); + dateFormatterTimeAgo.setTimeZone(TimeZone.getTimeZone("GMT")); + + Long dummyUserId = -1L; + + JSONObject responcedata = new JSONObject(); + IPeerreviewService service = getPeerreviewService(); + + responcedata.put("page", page + 1); + responcedata.put("total", Math.ceil((float) service.getCountUsersBySession(toolSessionId, dummyUserId) / size)); + responcedata.put("records", service.getCountUsersBySession(toolSessionId, dummyUserId)); + + List nbEntryList = service.getUserNotebookEntriesForTablesorter(toolSessionId, + page, size, sorting); - Peerreview peerreview = service.getPeerreviewByContentId(contentId); - List relectList = service.getReflectList(contentId, toolSessionId); - request.setAttribute(PeerreviewConstants.ATTR_REFLECT_LIST, relectList); - request.setAttribute("toolSessionId", toolSessionId); + // processed data from db is user.user_id, user.first_name, escaped( first_name + last_name), notebook entry, notebook date + // if no rating or comment, then the entries will be null and not an empty string + JSONArray rows = new JSONArray(); + int i = 0; - return mapping.findForward(PeerreviewConstants.SUCCESS); - } + for (Object[] nbEntry : nbEntryList) { + JSONArray userData = new JSONArray(); + userData.put(nbEntry[0]); + Date entryTime = (Date) nbEntry[4]; + if ( entryTime == null ) { + userData.put((String)nbEntry[2]); + } else { + StringBuilder nameField = new StringBuilder((String)nbEntry[2]) + .append("
") + .append(""); + userData.put(nameField.toString()); + } + + userData.put(StringEscapeUtils.escapeHtml((String)nbEntry[3])); + JSONObject userRow = new JSONObject(); + userRow.put("id", i++); + userRow.put("cell", userData); + + rows.put(userRow); + } + + responcedata.put("rows", rows); + + response.setContentType("application/json;charset=utf-8"); + response.getWriter().write(responcedata.toString()); + return null; + } + // ************************************************************************************* // Private method Index: lams_tool_preview/web/WEB-INF/struts-config.xml =================================================================== diff -u -rf059acd48464d2785b1ab003d64cc21747bba49d -re755d63f41781aa02a1fb97ae349019d01a58782 --- lams_tool_preview/web/WEB-INF/struts-config.xml (.../struts-config.xml) (revision f059acd48464d2785b1ab003d64cc21747bba49d) +++ lams_tool_preview/web/WEB-INF/struts-config.xml (.../struts-config.xml) (revision e755d63f41781aa02a1fb97ae349019d01a58782) @@ -189,6 +189,10 @@ parameter="reflections" > + + Index: lams_tool_preview/web/pages/monitoring/reflections.jsp =================================================================== diff -u -rf059acd48464d2785b1ab003d64cc21747bba49d -re755d63f41781aa02a1fb97ae349019d01a58782 --- lams_tool_preview/web/pages/monitoring/reflections.jsp (.../reflections.jsp) (revision f059acd48464d2785b1ab003d64cc21747bba49d) +++ lams_tool_preview/web/pages/monitoring/reflections.jsp (.../reflections.jsp) (revision e755d63f41781aa02a1fb97ae349019d01a58782) @@ -3,13 +3,79 @@ + <fmt:message key="label.learning.title" /> <%@ include file="/common/header.jsp"%> + + + + + + + + + + + @@ -23,24 +89,9 @@ - - - - - +
+
- - - - - -
- - - -
- - -