Index: lams_tool_sbmt/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -red84afe5b317b35b156848df66a1a9332af0f4b1 -r1fdab2d1df4835bf09b88e2bb34e4016c43af73a --- lams_tool_sbmt/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision ed84afe5b317b35b156848df66a1a9332af0f4b1) +++ lams_tool_sbmt/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 1fdab2d1df4835bf09b88e2bb34e4016c43af73a) @@ -147,6 +147,7 @@ monitoring.user.submittedFiles =Submitted files output.desc.submitted.items.output.definition.sbmt =Files submitted in the Submit Files tool button.submit =Finish +label.monitoring.file.delete =Delete +label.search =Search... - -#======= End labels: Exported 141 labels for en AU ===== +#======= End labels: Exported 142 labels for en AU ===== Index: lams_tool_sbmt/conf/language/lams/ApplicationResources_en_AU.properties =================================================================== diff -u -red84afe5b317b35b156848df66a1a9332af0f4b1 -r1fdab2d1df4835bf09b88e2bb34e4016c43af73a --- lams_tool_sbmt/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision ed84afe5b317b35b156848df66a1a9332af0f4b1) +++ lams_tool_sbmt/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision 1fdab2d1df4835bf09b88e2bb34e4016c43af73a) @@ -147,6 +147,7 @@ monitoring.user.submittedFiles =Submitted files output.desc.submitted.items.output.definition.sbmt =Files submitted in the Submit Files tool button.submit =Finish +label.monitoring.file.delete =Delete +label.search =Search... - -#======= End labels: Exported 141 labels for en AU ===== +#======= End labels: Exported 142 labels for en AU ===== Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/SubmitUser.java =================================================================== diff -u -r767fd29b0456340736521c9a22c54ad6aa7b02e0 -r1fdab2d1df4835bf09b88e2bb34e4016c43af73a --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/SubmitUser.java (.../SubmitUser.java) (revision 767fd29b0456340736521c9a22c54ad6aa7b02e0) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/SubmitUser.java (.../SubmitUser.java) (revision 1fdab2d1df4835bf09b88e2bb34e4016c43af73a) @@ -180,4 +180,8 @@ public void setContentID(Long contentID) { this.contentID = contentID; } + + public String getFullName() { + return new StringBuilder(getLastName()).append(" ").append(getFirstName()).toString(); + } } Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/dao/ISubmitUserDAO.java =================================================================== diff -u -r08950e1090443c3423a3d1c587416a2fccd8bbdf -r1fdab2d1df4835bf09b88e2bb34e4016c43af73a --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/dao/ISubmitUserDAO.java (.../ISubmitUserDAO.java) (revision 08950e1090443c3423a3d1c587416a2fccd8bbdf) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/dao/ISubmitUserDAO.java (.../ISubmitUserDAO.java) (revision 1fdab2d1df4835bf09b88e2bb34e4016c43af73a) @@ -28,7 +28,9 @@ import java.util.List; import org.lamsfoundation.lams.dao.IBaseDAO; +import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; import org.lamsfoundation.lams.tool.sbmt.SubmitUser; +import org.lamsfoundation.lams.tool.sbmt.dto.StatisticDTO; public interface ISubmitUserDAO extends IBaseDAO { @@ -45,5 +47,10 @@ public void saveOrUpdateUser(SubmitUser user); + List getUsersForTablesorter(final Long sessionId, int page, int size, int sorting, String searchString, + boolean getNotebookEntries, ICoreNotebookService coreNotebookService ); + + int getCountUsersBySession(final Long sessionId, String searchString); + List getStatisticsBySession(final Long contentId); } Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/dao/hibernate/SubmitUserDAO.java =================================================================== diff -u -r272f64ea6312bb9336a3165186e2c294d714f340 -r1fdab2d1df4835bf09b88e2bb34e4016c43af73a --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/dao/hibernate/SubmitUserDAO.java (.../SubmitUserDAO.java) (revision 272f64ea6312bb9336a3165186e2c294d714f340) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/dao/hibernate/SubmitUserDAO.java (.../SubmitUserDAO.java) (revision 1fdab2d1df4835bf09b88e2bb34e4016c43af73a) @@ -27,9 +27,19 @@ import java.util.List; +import org.apache.commons.lang.StringEscapeUtils; +import org.apache.commons.lang.StringUtils; +import org.hibernate.SQLQuery; +import org.hibernate.transform.Transformers; +import org.hibernate.type.IntegerType; +import org.hibernate.type.LongType; +import org.hibernate.type.StringType; import org.lamsfoundation.lams.dao.hibernate.LAMSBaseDAO; +import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; import org.lamsfoundation.lams.tool.sbmt.SubmitUser; import org.lamsfoundation.lams.tool.sbmt.dao.ISubmitUserDAO; +import org.lamsfoundation.lams.tool.sbmt.dto.StatisticDTO; +import org.lamsfoundation.lams.tool.sbmt.util.SbmtConstants; import org.springframework.stereotype.Repository; @Repository @@ -71,5 +81,126 @@ this.insertOrUpdate(learner); } + @SuppressWarnings("unchecked") + /** Will return List<[SubmitUser, Integer1, Integer2, String], [SubmitUser, Integer1, Integer2, String], ... , [SubmitUser, Integer1, Integer2, String]> + * where Integer1 is the number of files uploaded, Integer2 is the number of files marked + * and String is the notebook entry. No notebook entries needed? Will return null in their place. + */ + public List getUsersForTablesorter(final Long sessionId, int page, int size, int sorting, String searchString, + boolean getNotebookEntries, ICoreNotebookService coreNotebookService) { + String sortingOrder; + switch (sorting) { + case SbmtConstants.SORT_BY_USERNAME_ASC: + sortingOrder = "user.last_name ASC, user.first_name ASC"; + break; + case SbmtConstants.SORT_BY_USERNAME_DESC: + sortingOrder = "user.last_name DESC, user.first_name DESC"; + break; + case SbmtConstants.SORT_BY_NUM_FILES_ASC: + sortingOrder = " numFiles ASC"; + break; + case SbmtConstants.SORT_BY_NUM_FILES_DESC: + sortingOrder = " numFiles DESC"; + break; + // when sorting by number marked, keep the "can be marked" ones together, to make it easier for marking time + case SbmtConstants.SORT_BY_MARKED_ASC: + sortingOrder = " numFilesMarked ASC, numFiles ASC"; + break; + case SbmtConstants.SORT_BY_MARKED_DESC: + sortingOrder = " numFilesMarked DESC, numFiles DESC"; + break; + default: + sortingOrder = "user.last_name, user.first_name"; + } + // If the session uses notebook, then get the sql to join across to get the entries + String[] notebookEntryStrings = null; + if ( getNotebookEntries ) { + notebookEntryStrings = coreNotebookService.getNotebookEntrySQLStrings(sessionId.toString(),SbmtConstants.TOOL_SIGNATURE,"user.user_id" ); + } + + // Basic select for the user records + StringBuilder queryText = new StringBuilder(); + queryText.append("SELECT user.*, COUNT(details.submission_id) numFiles, count(report.marks) numFilesMarked "); + queryText.append(notebookEntryStrings != null ? notebookEntryStrings[0] : ", NULL notebookEntry"); + queryText.append(" FROM tl_lasbmt11_user user "); + queryText.append(" LEFT JOIN tl_lasbmt11_submission_details details ON user.uid = details.learner_id "); + queryText.append(" LEFT JOIN tl_lasbmt11_report report ON details.submission_id = report.report_id "); + + // If using notebook, add the notebook join + if ( notebookEntryStrings != null ) + queryText.append(notebookEntryStrings[1]); + + queryText.append(" WHERE user.session_id = :sessionId "); + + // If filtering by name add a name based where clause + buildNameSearch(searchString, queryText); + + // finally group by user for the file counts + queryText.append(" GROUP BY user.uid"); + + // Now specify the sort based on the switch statement above. + queryText.append(" ORDER BY " + sortingOrder); + + SQLQuery query = getSession().createSQLQuery(queryText.toString()); + query.addEntity("user", SubmitUser.class) + .addScalar("numFiles", IntegerType.INSTANCE) + .addScalar("numFilesMarked", IntegerType.INSTANCE) + .addScalar("notebookEntry", StringType.INSTANCE) + .setLong("sessionId", sessionId.longValue()) + .setFirstResult(page * size) + .setMaxResults(size); + return query.list(); + } + + private void buildNameSearch(String searchString, StringBuilder sqlBuilder) { + if (!StringUtils.isBlank(searchString)) { + String[] tokens = searchString.trim().split("\\s+"); + for (String token : tokens) { + String escToken = StringEscapeUtils.escapeSql(token); + sqlBuilder.append(" AND (user.first_name LIKE '%").append(escToken) + .append("%' OR user.last_name LIKE '%").append(escToken) + .append("%' OR user.login_name LIKE '%").append(escToken).append("%') "); + } + } + } + + @SuppressWarnings("rawtypes") + public int getCountUsersBySession(final Long sessionId, String searchString) { + + StringBuilder queryText = new StringBuilder("SELECT count(*) FROM tl_lasbmt11_user user WHERE user.session_id = :sessionId "); + buildNameSearch(searchString, queryText); + + List list = getSession().createSQLQuery(queryText.toString()).setLong("sessionId", sessionId).list(); + if (list == null || list.size() == 0) { + return 0; + } + return ((Number) list.get(0)).intValue(); + } + + private static final String GET_STATISTICS = "SELECT session.session_id sessionId, session.session_name sessionName, " + + " COUNT(detail.submission_id) totalUploadedFiles, COUNT(report.marks) markedCount" + + " FROM tl_lasbmt11_session session, tl_lasbmt11_submission_details detail, tl_lasbmt11_report report " + + " WHERE session.content_id = :contentId and detail.session_id = session.session_id " + + " AND detail.submission_id = report.report_id " + + " GROUP BY session.session_id"; + + @SuppressWarnings("unchecked") + public List getStatisticsBySession(final Long contentId) { + + SQLQuery query = getSession().createSQLQuery(GET_STATISTICS); + query.addScalar("sessionId", LongType.INSTANCE) + .addScalar("sessionName", StringType.INSTANCE) + .addScalar("totalUploadedFiles", IntegerType.INSTANCE) + .addScalar("markedCount", IntegerType.INSTANCE) + .setLong("contentId", contentId) + .setResultTransformer(Transformers.aliasToBean(StatisticDTO.class)); + + List list = query.list(); + for (StatisticDTO dto: list) { + dto.setNotMarkedCount(dto.getTotalUploadedFiles() - dto.getMarkedCount()); + } + return list; + } + } Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/dto/StatisticDTO.java =================================================================== diff -u -r08950e1090443c3423a3d1c587416a2fccd8bbdf -r1fdab2d1df4835bf09b88e2bb34e4016c43af73a --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/dto/StatisticDTO.java (.../StatisticDTO.java) (revision 08950e1090443c3423a3d1c587416a2fccd8bbdf) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/dto/StatisticDTO.java (.../StatisticDTO.java) (revision 1fdab2d1df4835bf09b88e2bb34e4016c43af73a) @@ -30,6 +30,8 @@ */ public class StatisticDTO { + private long sessionId; + private String sessionName; private int notMarkedCount; private int markedCount; private int totalUploadedFiles; @@ -52,4 +54,16 @@ public void setTotalUploadedFiles(int totalUploadedFiles) { this.totalUploadedFiles = totalUploadedFiles; } + public String getSessionName() { + return sessionName; + } + public void setSessionName(String sessionName) { + this.sessionName = sessionName; + } + public long getSessionId() { + return sessionId; + } + public void setSessionId(long sessionId) { + this.sessionId = sessionId; + } } Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/dto/SubmitUserDTO.java =================================================================== diff -u -r5442c61bdf4d3ddafc69c7ff497be6c1a9a40db5 -r1fdab2d1df4835bf09b88e2bb34e4016c43af73a --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/dto/SubmitUserDTO.java (.../SubmitUserDTO.java) (revision 5442c61bdf4d3ddafc69c7ff497be6c1a9a40db5) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/dto/SubmitUserDTO.java (.../SubmitUserDTO.java) (revision 1fdab2d1df4835bf09b88e2bb34e4016c43af73a) @@ -244,4 +244,7 @@ public void setAnyFilesMarked(boolean anyFilesMarked) { this.anyFilesMarked = anyFilesMarked; } + public String getFullName() { + return new StringBuilder(getLastName()).append(" ").append(getFirstName()).toString(); + } } Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/ISubmitFilesService.java =================================================================== diff -u -rbb597b8155375e6ac4dfe280f630d323b6e5e575 -r1fdab2d1df4835bf09b88e2bb34e4016c43af73a --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/ISubmitFilesService.java (.../ISubmitFilesService.java) (revision bb597b8155375e6ac4dfe280f630d323b6e5e575) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/ISubmitFilesService.java (.../ISubmitFilesService.java) (revision 1fdab2d1df4835bf09b88e2bb34e4016c43af73a) @@ -40,6 +40,7 @@ import org.lamsfoundation.lams.tool.sbmt.SubmitFilesSession; import org.lamsfoundation.lams.tool.sbmt.SubmitUser; import org.lamsfoundation.lams.tool.sbmt.dto.FileDetailsDTO; +import org.lamsfoundation.lams.tool.sbmt.dto.StatisticDTO; import org.lamsfoundation.lams.tool.sbmt.exception.SubmitFilesException; import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; @@ -268,6 +269,29 @@ */ public SubmitUser getUserByUid(Long uid); + /** + * Get a paged, optionally sorted and filtered, list of users. + * Will return List<[SubmitUser, Integer1, Integer2, String], [SubmitUser, Integer1, Integer2, String], ... , [SubmitUser, Integer1, Integer2, String]> + * where Integer1 is the number of files uploaded, Integer2 is the number of files marked + * and String is the notebook entry. No notebook entries needed? Will return null in their place. + * @return + */ + List getUsersForTablesorter(final Long sessionId, int page, int size, int sorting, String searchString, boolean getNotebookEntries); + + /** + * Get the number of users that would be returned by getUsersForTablesorter() if it was not paged. Supports filtering. + * @return + */ + int getCountUsersBySession(Long sessionId, String searchString); + + /** + * Get the basic statistics for all the sessions for one activity. + * @param contentId + * @return + */ + List getStatisticsBySession(final Long contentId); + + public IEventNotificationService getEventNotificationService(); /** Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesService.java =================================================================== diff -u -r708bd4d049ae0a59d70c964ef2f864d2b7a352e6 -r1fdab2d1df4835bf09b88e2bb34e4016c43af73a --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesService.java (.../SubmitFilesService.java) (revision 708bd4d049ae0a59d70c964ef2f864d2b7a352e6) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesService.java (.../SubmitFilesService.java) (revision 1fdab2d1df4835bf09b88e2bb34e4016c43af73a) @@ -91,6 +91,7 @@ import org.lamsfoundation.lams.tool.sbmt.dao.ISubmitFilesSessionDAO; import org.lamsfoundation.lams.tool.sbmt.dao.ISubmitUserDAO; import org.lamsfoundation.lams.tool.sbmt.dto.FileDetailsDTO; +import org.lamsfoundation.lams.tool.sbmt.dto.StatisticDTO; import org.lamsfoundation.lams.tool.sbmt.dto.SubmitUserDTO; import org.lamsfoundation.lams.tool.sbmt.exception.SubmitFilesException; import org.lamsfoundation.lams.tool.sbmt.util.SbmtConstants; @@ -535,7 +536,7 @@ @Override public void forceCompleteUser(Long toolSessionId, User user) { - //no actions required + // no actions required } @Override @@ -992,6 +993,23 @@ return submitUserDAO.getLearner(sessionID, userID); } + @Override + public List getUsersForTablesorter(final Long sessionId, int page, int size, int sorting, + String searchString, boolean getNotebookEntries) { + return submitUserDAO.getUsersForTablesorter(sessionId, page, size, sorting, searchString, + getNotebookEntries, coreNotebookService); + } + + @Override + public int getCountUsersBySession(Long sessionId, String searchString) { + return submitUserDAO.getCountUsersBySession(sessionId, searchString); + } + + @Override + public List getStatisticsBySession(final Long contentId) { + return submitUserDAO.getStatisticsBySession(contentId); + } + public SubmitUser createContentUser(Integer userId, String firstName, String lastName, String loginName, Long contentId) { SubmitUser author = submitUserDAO.getContentUser(contentId, userId); Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/util/SbmtConstants.java =================================================================== diff -u -rbe07c35c372d904a65581d98660e73f3b13b69db -r1fdab2d1df4835bf09b88e2bb34e4016c43af73a --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/util/SbmtConstants.java (.../SbmtConstants.java) (revision be07c35c372d904a65581d98660e73f3b13b69db) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/util/SbmtConstants.java (.../SbmtConstants.java) (revision 1fdab2d1df4835bf09b88e2bb34e4016c43af73a) @@ -45,6 +45,14 @@ public static final String ATTR_USER_UID = "userUid"; + public static final String ATTR_USER_FULLNAME = "fullName"; + + public static final String ATTR_USER_REFLECTION = "reflection"; + + public static final String ATTR_USER_NUM_FILE = "numFiles"; + + public static final String ATTR_USER_FILE_MARKED = "marked"; + public static final String SUCCESS = "success"; public static final String ATTR_FINISH_LOCK = "finishLock"; @@ -82,4 +90,13 @@ public static final String EVENT_NAME_NOTIFY_LEARNERS_ON_MARKED_FILE = "notify_learners_on_marked_file"; public static final String SUBMITTED_ITEMS_DEFINITION_NAME = "submitted.items.output.definition.sbmt"; + + public static final int SORT_BY_NO = 1; + public static final int SORT_BY_USERNAME_ASC = 2; + public static final int SORT_BY_USERNAME_DESC = 3; + public static final int SORT_BY_MARKED_ASC = 4; + public static final int SORT_BY_MARKED_DESC = 5; + public static final int SORT_BY_NUM_FILES_ASC = 6; + public static final int SORT_BY_NUM_FILES_DESC = 7; + } Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/LearnerAction.java =================================================================== diff -u -rbb597b8155375e6ac4dfe280f630d323b6e5e575 -r1fdab2d1df4835bf09b88e2bb34e4016c43af73a --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/LearnerAction.java (.../LearnerAction.java) (revision bb597b8155375e6ac4dfe280f630d323b6e5e575) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/LearnerAction.java (.../LearnerAction.java) (revision 1fdab2d1df4835bf09b88e2bb34e4016c43af73a) @@ -269,9 +269,8 @@ SubmitFilesContent content = submitFilesService.getSessionById(sessionID).getContent(); if (content.isNotifyTeachersOnFileSubmit()) { - String fullName = learner.getLastName() + " " + learner.getFirstName(); String message = submitFilesService - .getLocalisedMessage("event.file.submit.body", new Object[] { fullName }); + .getLocalisedMessage("event.file.submit.body", new Object[] { learner.getFullName() }); submitFilesService.getEventNotificationService().notifyLessonMonitors(sessionID, message, false); } Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/MonitoringAction.java =================================================================== diff -u -r73149d23324882824f079e6e4642a9e25a303a30 -r1fdab2d1df4835bf09b88e2bb34e4016c43af73a --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/MonitoringAction.java (.../MonitoringAction.java) (revision 73149d23324882824f079e6e4642a9e25a303a30) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/MonitoringAction.java (.../MonitoringAction.java) (revision 1fdab2d1df4835bf09b88e2bb34e4016c43af73a) @@ -28,19 +28,21 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.PrintWriter; -import java.util.ArrayList; import java.util.Comparator; import java.util.Date; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.SortedSet; import java.util.TimeZone; import java.util.TreeMap; +import java.util.TreeSet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; +import org.apache.commons.lang.StringEscapeUtils; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; @@ -50,6 +52,9 @@ import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionMessage; import org.apache.struts.action.DynaActionForm; +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.notebook.model.NotebookEntry; import org.lamsfoundation.lams.notebook.service.CoreNotebookConstants; import org.lamsfoundation.lams.tool.sbmt.SubmitFilesContent; @@ -103,6 +108,18 @@ } } + private class StatisticComparator implements Comparator { + public int compare(StatisticDTO o1, StatisticDTO o2) { + if (o1 != null && o2 != null) { + return o1.getSessionName().compareTo(o2.getSessionName()); + } else if (o1 != null) { + return 1; + } else { + return -1; + } + } + } + /** * Default ActionForward for Monitor */ @@ -115,10 +132,9 @@ request.setAttribute(AttributeNames.PARAM_CONTENT_FOLDER_ID, contentFolderID); - // List userList = submitFilesService.getUsers(sessionID); List submitFilesSessionList = submitFilesService.getSubmitFilesSessionByContentID(contentID); summary(request, submitFilesSessionList); - statistic(request, submitFilesSessionList); + statistic(request, contentID); // instruction SubmitFilesContent persistContent = submitFilesService.getSubmitFilesContent(contentID); @@ -129,6 +145,7 @@ request.setAttribute(SbmtConstants.AUTHORING_DTO, authorDto); request.setAttribute(SbmtConstants.PAGE_EDITABLE, persistContent.isContentInUse()); request.setAttribute(SbmtConstants.ATTR_IS_GROUPED_ACTIVITY, submitFilesService.isGroupedActivity(contentID)); + request.setAttribute(SbmtConstants.ATTR_REFLECTION_ON, persistContent.isReflectOnActivity()); //set SubmissionDeadline, if any if (persistContent.getSubmissionDeadline() != null) { @@ -146,6 +163,70 @@ return mapping.findForward("success"); } + /** Ajax call to populate the tablesorter */ + public ActionForward getUsers(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) + throws JSONException, IOException { + + Long sessionID = new Long(WebUtil.readLongParam(request, AttributeNames.PARAM_TOOL_SESSION_ID)); + Long contentId = WebUtil.readLongParam(request, AttributeNames.PARAM_TOOL_CONTENT_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); + Integer sortByNumFiles = WebUtil.readIntParam(request, "column[1]", true); + Integer sortByMarked = WebUtil.readIntParam(request, "column[2]", true); + String searchString = request.getParameter("fcol[0]"); + + int sorting = SbmtConstants.SORT_BY_NO; + if ( sortByName != null ) { + sorting = sortByName.equals(0) ? SbmtConstants.SORT_BY_USERNAME_ASC : SbmtConstants.SORT_BY_USERNAME_DESC; + } else if ( sortByNumFiles !=null ) { + sorting = sortByNumFiles.equals(0) ? SbmtConstants.SORT_BY_NUM_FILES_ASC : SbmtConstants.SORT_BY_NUM_FILES_DESC; + } else if ( sortByMarked !=null ) { + sorting = sortByMarked.equals(0) ? SbmtConstants.SORT_BY_MARKED_ASC : SbmtConstants.SORT_BY_MARKED_DESC; + } + + //return user list according to the given sessionID + ISubmitFilesService service = getSubmitFilesService(); + SubmitFilesContent spreadsheet = service.getSubmitFilesContent(contentId); + List users = service.getUsersForTablesorter(sessionID, page, size, sorting, searchString, spreadsheet.isReflectOnActivity()); + + JSONArray rows = new JSONArray(); + JSONObject responsedata = new JSONObject(); + responsedata.put("total_rows", service.getCountUsersBySession(sessionID, searchString)); + + for (Object[] userAndReflection : users) { + + JSONObject responseRow = new JSONObject(); + + SubmitUser user = (SubmitUser) userAndReflection[0]; + responseRow.put(SbmtConstants.ATTR_USER_UID, user.getUid()); + responseRow.put(SbmtConstants.USER_ID, user.getUserID()); + responseRow.put(SbmtConstants.ATTR_USER_FULLNAME, StringEscapeUtils.escapeHtml(user.getFullName())); + + if ( userAndReflection.length > 1 ) { + responseRow.put(SbmtConstants.ATTR_USER_NUM_FILE, userAndReflection[1]); + } + + if ( userAndReflection.length > 2 ) { + responseRow.put(SbmtConstants.ATTR_USER_FILE_MARKED, (Integer)userAndReflection[2] > 0); + } + + if ( userAndReflection.length > 3 ) { + responseRow.put(SbmtConstants.ATTR_USER_REFLECTION, userAndReflection[3]); + } + + rows.put(responseRow); + } + + responsedata.put("rows", rows); + response.setContentType("application/json;charset=utf-8"); + response.getWriter().print(new String(responsedata.toString())); + return null; + + } + /** * AJAX call to refresh statistic page. * @@ -157,17 +238,21 @@ */ public ActionForward doStatistic(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { + Long contentID = new Long(WebUtil.readLongParam(request, AttributeNames.PARAM_TOOL_CONTENT_ID)); submitFilesService = getSubmitFilesService(); - - // List userList = submitFilesService.getUsers(sessionID); - List submitFilesSessionList = submitFilesService.getSubmitFilesSessionByContentID(contentID); - statistic(request, submitFilesSessionList); - + statistic(request, contentID); + request.setAttribute(SbmtConstants.ATTR_IS_GROUPED_ACTIVITY, submitFilesService.isGroupedActivity(contentID)); return mapping.findForward("statistic"); + } + private void statistic(HttpServletRequest request, Long contentID) { + SortedSet statistics = new TreeSet(new StatisticComparator()); + statistics.addAll(submitFilesService.getStatisticsBySession(contentID)); + request.setAttribute("statisticList", statistics); } + /** * Release mark * @@ -255,7 +340,7 @@ int count = 0; cell = row.createCell(count++); - cell.setCellValue(dto.getOwner().getFirstName() + " " + dto.getOwner().getLastName()); + cell.setCellValue(dto.getOwner().getFullName()); ++count; @@ -419,63 +504,13 @@ } /** - * Save statistic information into request - * - * @param request - * @param submitFilesSessionList - */ - private void statistic(HttpServletRequest request, List submitFilesSessionList) { - Iterator it; - Map sessionStatisticMap = new TreeMap( - this.new SessionComparator()); - - // build a map with all users in the submitFilesSessionList - it = submitFilesSessionList.iterator(); - while (it.hasNext()) { - - SubmitFilesSession sfs = (SubmitFilesSession) it.next(); - Long sessionID = sfs.getSessionID(); - String sessionName = sfs.getSessionName(); - - // return FileDetailsDTO list according to the given sessionID - Map userFilesMap = submitFilesService.getFilesUploadedBySession(sessionID, request.getLocale()); - Iterator iter = userFilesMap.values().iterator(); - Iterator dtoIter; - int notMarkedCount = 0; - int markedCount = 0; - while (iter.hasNext()) { - List list = (List) iter.next(); - dtoIter = list.iterator(); - while (dtoIter.hasNext()) { - FileDetailsDTO dto = (FileDetailsDTO) dtoIter.next(); - if (dto.getMarks() == null) { - notMarkedCount++; - } else { - markedCount++; - } - } - } - StatisticDTO statisticDto = new StatisticDTO(); - SessionDTO sessionDto = new SessionDTO(); - statisticDto.setMarkedCount(markedCount); - statisticDto.setNotMarkedCount(notMarkedCount); - statisticDto.setTotalUploadedFiles(markedCount + notMarkedCount); - sessionDto.setSessionID(sessionID); - sessionDto.setSessionName(sessionName); - sessionStatisticMap.put(sessionDto, statisticDto); - } - - request.setAttribute("statisticList", sessionStatisticMap); - } - - /** * Save Summary information into HttpRequest. * * @param request * @param submitFilesSessionList */ private void summary(HttpServletRequest request, List submitFilesSessionList) { - Map sessionUserMap = new TreeMap(this.new SessionComparator()); + SortedSet sessions = new TreeSet(this.new SessionComparator()); // build a map with all users in the submitFilesSessionList Iterator it = submitFilesSessionList.iterator(); @@ -486,38 +521,11 @@ Long sessionID = sfs.getSessionID(); sessionDto.setSessionID(sessionID); sessionDto.setSessionName(sfs.getSessionName()); - - boolean hasReflect = sfs.getContent().isReflectOnActivity(); - Map userFilesMap = submitFilesService.getFilesUploadedBySession(sessionID, - request.getLocale()); - - // construct LearnerDTO list - List userList = submitFilesService.getUsersBySession(sessionID); - List learnerList = new ArrayList(); - for (SubmitUser user : userList) { - SubmitUserDTO learnerDto = new SubmitUserDTO(user); - learnerDto.setHasRefection(hasReflect); - - learnerDto.setAnyFilesMarked(false); - List files = (List) userFilesMap.get(user); - if (files != null && files.size() > 0) { - // LDEV-2194 showing number of uploaded files - learnerDto.setFilesUploaded(files); - for (FileDetailsDTO file : files) { - if (file.getMarks() != null && file.getMarks().trim().length() > 0) { - learnerDto.setAnyFilesMarked(true); - break; - } - } - } - - learnerList.add(learnerDto); - } - sessionUserMap.put(sessionDto, learnerList); + sessions.add(sessionDto); } // request.setAttribute(AttributeNames.PARAM_TOOL_SESSION_ID,sessionID); - request.setAttribute("sessionUserMap", sessionUserMap); + request.setAttribute("sessions", sessions); } public ActionForward viewReflection(ActionMapping mapping, ActionForm form, HttpServletRequest request, Index: lams_tool_sbmt/web/monitoring/mark/allmarks.jsp =================================================================== diff -u -r223502c7884deaf414065ca1b3695fb6e56b6e8a -r1fdab2d1df4835bf09b88e2bb34e4016c43af73a --- lams_tool_sbmt/web/monitoring/mark/allmarks.jsp (.../allmarks.jsp) (revision 223502c7884deaf414065ca1b3695fb6e56b6e8a) +++ lams_tool_sbmt/web/monitoring/mark/allmarks.jsp (.../allmarks.jsp) (revision 1fdab2d1df4835bf09b88e2bb34e4016c43af73a) @@ -11,10 +11,6 @@ function updateMark(detailId,reportId,sessionId,userId){ location.href="mark.do?method=newMark&updateMode=listAllMarks&userID="+userId+"&toolSessionID="+sessionId+"&detailID="+detailId+"&reportID="+reportId; } - function closeAndRefreshParentMonitoringWindow() { - refreshParentMonitoringWindow(); - window.close(); - } @@ -32,7 +28,7 @@ - + Index: lams_tool_sbmt/web/monitoring/mark/mark.jsp =================================================================== diff -u -r02696b4b5a761a0fcc9f72a677d3599656ffb725 -r1fdab2d1df4835bf09b88e2bb34e4016c43af73a --- lams_tool_sbmt/web/monitoring/mark/mark.jsp (.../mark.jsp) (revision 02696b4b5a761a0fcc9f72a677d3599656ffb725) +++ lams_tool_sbmt/web/monitoring/mark/mark.jsp (.../mark.jsp) (revision 1fdab2d1df4835bf09b88e2bb34e4016c43af73a) @@ -15,10 +15,6 @@ function updateMark(detailId,reportId,sessionId,userId){ location.href="mark.do?method=newMark&updateMode=listMark&userID="+userId+"&toolSessionID="+sessionId+"&detailID="+detailId+"&reportID="+reportId; } - function closeAndRefreshParentMonitoringWindow() { - refreshParentMonitoringWindow(); - window.close(); - } @@ -32,7 +28,7 @@ - + Index: lams_tool_sbmt/web/monitoring/parts/statisticpart.jsp =================================================================== diff -u -rbf1c66f82afbc349f5702f29a0c6ab6ff9add34a -r1fdab2d1df4835bf09b88e2bb34e4016c43af73a --- lams_tool_sbmt/web/monitoring/parts/statisticpart.jsp (.../statisticpart.jsp) (revision bf1c66f82afbc349f5702f29a0c6ab6ff9add34a) +++ lams_tool_sbmt/web/monitoring/parts/statisticpart.jsp (.../statisticpart.jsp) (revision 1fdab2d1df4835bf09b88e2bb34e4016c43af73a) @@ -3,18 +3,20 @@ <%-- If you change this file, remember to update the copy made for CNG-12 --%> - - - - - - - - - - + + + + + + + +

+ : + +

+
+ +
- : -
Index: lams_tool_sbmt/web/monitoring/parts/summary.jsp =================================================================== diff -u -r732f77a31113c5838d0704829b99418d90053471 -r1fdab2d1df4835bf09b88e2bb34e4016c43af73a --- lams_tool_sbmt/web/monitoring/parts/summary.jsp (.../summary.jsp) (revision 732f77a31113c5838d0704829b99418d90053471) +++ lams_tool_sbmt/web/monitoring/parts/summary.jsp (.../summary.jsp) (revision 1fdab2d1df4835bf09b88e2bb34e4016c43af73a) @@ -12,6 +12,8 @@ + + @@ -31,7 +33,96 @@ + + + + + +