Index: lams_tool_sbmt/conf/language/lams/ApplicationResources.properties =================================================================== RCS file: /usr/local/cvsroot/lams_tool_sbmt/conf/language/lams/ApplicationResources.properties,v diff -u -r1.34 -r1.35 --- lams_tool_sbmt/conf/language/lams/ApplicationResources.properties 14 Oct 2014 15:48:41 -0000 1.34 +++ lams_tool_sbmt/conf/language/lams/ApplicationResources.properties 29 Jan 2016 01:10:32 -0000 1.35 @@ -148,6 +148,6 @@ 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 142 labels for en AU ===== Index: lams_tool_sbmt/conf/language/lams/ApplicationResources_en_AU.properties =================================================================== RCS file: /usr/local/cvsroot/lams_tool_sbmt/conf/language/lams/ApplicationResources_en_AU.properties,v diff -u -r1.31 -r1.32 --- lams_tool_sbmt/conf/language/lams/ApplicationResources_en_AU.properties 14 Oct 2014 15:48:41 -0000 1.31 +++ lams_tool_sbmt/conf/language/lams/ApplicationResources_en_AU.properties 29 Jan 2016 01:10:32 -0000 1.32 @@ -148,6 +148,6 @@ 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 142 labels for en AU ===== Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/SubmitUser.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/SubmitUser.java,v diff -u -r1.5 -r1.6 --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/SubmitUser.java 19 May 2014 21:27:49 -0000 1.5 +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/SubmitUser.java 29 Jan 2016 01:10:32 -0000 1.6 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/dao/ISubmitUserDAO.java,v diff -u -r1.2 -r1.3 --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/dao/ISubmitUserDAO.java 17 Sep 2006 06:27:56 -0000 1.2 +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/dao/ISubmitUserDAO.java 29 Jan 2016 01:10:32 -0000 1.3 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/dao/hibernate/SubmitUserDAO.java,v diff -u -r1.2 -r1.3 --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/dao/hibernate/SubmitUserDAO.java 17 Sep 2006 06:27:54 -0000 1.2 +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/dao/hibernate/SubmitUserDAO.java 29 Jan 2016 01:10:32 -0000 1.3 @@ -25,12 +25,19 @@ package org.lamsfoundation.lams.tool.sbmt.dao.hibernate; -import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang.StringEscapeUtils; +import org.apache.commons.lang.StringUtils; +import org.hibernate.Hibernate; +import org.hibernate.SQLQuery; +import org.hibernate.transform.Transformers; import org.lamsfoundation.lams.dao.hibernate.BaseDAO; +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; public class SubmitUserDAO extends BaseDAO implements ISubmitUserDAO { private static final String FIND_BY_USER_ID_SESSION_ID = "from " + SubmitUser.class.getName() + @@ -69,5 +76,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", Hibernate.INTEGER) + .addScalar("numFilesMarked", Hibernate.INTEGER) + .addScalar("notebookEntry", Hibernate.STRING) + .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", Hibernate.LONG) + .addScalar("sessionName", Hibernate.STRING) + .addScalar("totalUploadedFiles", Hibernate.INTEGER) + .addScalar("markedCount", Hibernate.INTEGER) + .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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/dto/StatisticDTO.java,v diff -u -r1.3 -r1.4 --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/dto/StatisticDTO.java 17 Sep 2006 06:27:54 -0000 1.3 +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/dto/StatisticDTO.java 29 Jan 2016 01:10:32 -0000 1.4 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/dto/SubmitUserDTO.java,v diff -u -r1.5 -r1.6 --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/dto/SubmitUserDTO.java 13 May 2008 00:54:17 -0000 1.5 +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/dto/SubmitUserDTO.java 29 Jan 2016 01:10:32 -0000 1.6 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/ISubmitFilesService.java,v diff -u -r1.34 -r1.35 --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/ISubmitFilesService.java 10 Mar 2014 22:39:36 -0000 1.34 +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/ISubmitFilesService.java 29 Jan 2016 01:10:32 -0000 1.35 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesService.java,v diff -u -r1.99 -r1.100 --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesService.java 30 Dec 2015 19:08:27 -0000 1.99 +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesService.java 29 Jan 2016 01:10:32 -0000 1.100 @@ -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; @@ -980,6 +981,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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/util/SbmtConstants.java,v diff -u -r1.27 -r1.28 --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/util/SbmtConstants.java 17 Jan 2014 22:12:23 -0000 1.27 +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/util/SbmtConstants.java 29 Jan 2016 01:10:32 -0000 1.28 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/LearnerAction.java,v diff -u -r1.56 -r1.57 --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/LearnerAction.java 10 Mar 2014 22:39:37 -0000 1.56 +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/LearnerAction.java 29 Jan 2016 01:10:32 -0000 1.57 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/MonitoringAction.java,v diff -u -r1.52 -r1.53 --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/MonitoringAction.java 31 Dec 2011 17:17:32 -0000 1.52 +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/MonitoringAction.java 29 Jan 2016 01:10:32 -0000 1.53 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_sbmt/web/monitoring/mark/allmarks.jsp,v diff -u -r1.10 -r1.11 --- lams_tool_sbmt/web/monitoring/mark/allmarks.jsp 7 Apr 2014 23:22:17 -0000 1.10 +++ lams_tool_sbmt/web/monitoring/mark/allmarks.jsp 29 Jan 2016 01:10:32 -0000 1.11 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_sbmt/web/monitoring/mark/mark.jsp,v diff -u -r1.10 -r1.11 --- lams_tool_sbmt/web/monitoring/mark/mark.jsp 23 Jul 2009 04:45:52 -0000 1.10 +++ lams_tool_sbmt/web/monitoring/mark/mark.jsp 29 Jan 2016 01:10:32 -0000 1.11 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_sbmt/web/monitoring/parts/statisticpart.jsp,v diff -u -r1.4 -r1.5 --- lams_tool_sbmt/web/monitoring/parts/statisticpart.jsp 15 Aug 2012 10:59:22 -0000 1.4 +++ lams_tool_sbmt/web/monitoring/parts/statisticpart.jsp 29 Jan 2016 01:10:32 -0000 1.5 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_sbmt/web/monitoring/parts/summary.jsp,v diff -u -r1.23 -r1.24 --- lams_tool_sbmt/web/monitoring/parts/summary.jsp 4 May 2015 16:57:33 -0000 1.23 +++ lams_tool_sbmt/web/monitoring/parts/summary.jsp 29 Jan 2016 01:10:32 -0000 1.24 @@ -12,6 +12,8 @@ + + @@ -31,7 +33,96 @@ + + + + + +