Index: lams_tool_spreadsheet/conf/language/lams/ApplicationResources.properties
===================================================================
diff -u -r9dcdc46408a8664a0fb27f09ae58a340c15f5764 -re1a335ed6fa2072efc12776a3573856a386938dc
--- lams_tool_spreadsheet/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 9dcdc46408a8664a0fb27f09ae58a340c15f5764)
+++ lams_tool_spreadsheet/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision e1a335ed6fa2072efc12776a3573856a386938dc)
@@ -119,6 +119,6 @@
label.on =On
label.off =Off
label.submit =Finish
+label.search =Search...
-
#======= End labels: Exported 113 labels for en AU =====
Index: lams_tool_spreadsheet/conf/language/lams/ApplicationResources_en_AU.properties
===================================================================
diff -u -r9dcdc46408a8664a0fb27f09ae58a340c15f5764 -re1a335ed6fa2072efc12776a3573856a386938dc
--- lams_tool_spreadsheet/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision 9dcdc46408a8664a0fb27f09ae58a340c15f5764)
+++ lams_tool_spreadsheet/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision e1a335ed6fa2072efc12776a3573856a386938dc)
@@ -119,6 +119,6 @@
label.on =On
label.off =Off
label.submit =Finish
+label.search =Search...
-
#======= End labels: Exported 113 labels for en AU =====
Index: lams_tool_spreadsheet/conf/xdoclet/struts-actions.xml
===================================================================
diff -u -rbe07c35c372d904a65581d98660e73f3b13b69db -re1a335ed6fa2072efc12776a3573856a386938dc
--- lams_tool_spreadsheet/conf/xdoclet/struts-actions.xml (.../struts-actions.xml) (revision be07c35c372d904a65581d98660e73f3b13b69db)
+++ lams_tool_spreadsheet/conf/xdoclet/struts-actions.xml (.../struts-actions.xml) (revision e1a335ed6fa2072efc12776a3573856a386938dc)
@@ -102,6 +102,10 @@
parameter="summary" >
+
+
@@ -137,11 +141,6 @@
-
-
-
getBySessionID(Long sessionId);
+
+ List getUsersForTablesorter(final Long sessionId, int page, int size, int sorting, String searchString);
+
+ int getCountUsersBySession(final Long sessionId, String searchString);
}
Index: lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/dao/hibernate/SpreadsheetUserDAOHibernate.java
===================================================================
diff -u -r7f9f772433a7fd55c4475241d4e3bc0765f474e8 -re1a335ed6fa2072efc12776a3573856a386938dc
--- lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/dao/hibernate/SpreadsheetUserDAOHibernate.java (.../SpreadsheetUserDAOHibernate.java) (revision 7f9f772433a7fd55c4475241d4e3bc0765f474e8)
+++ lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/dao/hibernate/SpreadsheetUserDAOHibernate.java (.../SpreadsheetUserDAOHibernate.java) (revision e1a335ed6fa2072efc12776a3573856a386938dc)
@@ -25,6 +25,11 @@
import java.util.List;
+import org.apache.commons.lang.StringEscapeUtils;
+import org.apache.commons.lang.StringUtils;
+import org.hibernate.Hibernate;
+import org.lamsfoundation.lams.notebook.service.CoreNotebookConstants;
+import org.lamsfoundation.lams.tool.spreadsheet.SpreadsheetConstants;
import org.lamsfoundation.lams.tool.spreadsheet.dao.SpreadsheetUserDAO;
import org.lamsfoundation.lams.tool.spreadsheet.model.SpreadsheetUser;
@@ -53,5 +58,72 @@
return this.getHibernateTemplate().find(FIND_BY_SESSION_ID,sessionId);
}
+ @SuppressWarnings("unchecked")
+ public List getUsersForTablesorter(final Long sessionId, int page, int size, int sorting, String searchString) {
+ String sortingOrder;
+ switch (sorting) {
+ case SpreadsheetConstants.SORT_BY_USERNAME_ASC:
+ sortingOrder = "user.lastName ASC, user.firstName ASC";
+ break;
+ case SpreadsheetConstants.SORT_BY_USERNAME_DESC:
+ sortingOrder = "user.lastName DESC, user.firstName DESC";
+ break;
+ case SpreadsheetConstants.SORT_BY_MARKED_ASC:
+ sortingOrder = " mark.marks ASC";
+ break;
+ case SpreadsheetConstants.SORT_BY_MARKED_DESC:
+ sortingOrder = " mark.marks DESC";
+ break;
+ default:
+ sortingOrder = "user.lastName, user.firstName";
+ }
+ String filteredSearchString = buildNameSearch(searchString);
+ String queryText = "SELECT user FROM " + SpreadsheetUser.class.getName() + " as user ";
+ if (sorting == SpreadsheetConstants.SORT_BY_MARKED_ASC
+ || sorting == SpreadsheetConstants.SORT_BY_MARKED_DESC) {
+ queryText += " LEFT JOIN user.userModifiedSpreadsheet as ums "
+ + " LEFT JOIN ums.mark as mark ";
+ }
+
+ queryText+= " WHERE user.session.sessionId=:sessionId "
+ + ( filteredSearchString != null ? filteredSearchString : "" )
+ + " ORDER BY " + sortingOrder;
+
+ return getSession().createQuery(queryText).setLong("sessionId", sessionId.longValue()).setFirstResult(page * size).setMaxResults(size).list();
+ }
+
+ private String buildNameSearch(String searchString) {
+ String filteredSearchString = null;
+ if (!StringUtils.isBlank(searchString)) {
+ StringBuilder searchStringBuilder = new StringBuilder("");
+ String[] tokens = searchString.trim().split("\\s+");
+ for (String token : tokens) {
+ String escToken = StringEscapeUtils.escapeSql(token);
+ searchStringBuilder.append(" AND (user.firstName LIKE '%").append(escToken)
+ .append("%' OR user.lastName LIKE '%").append(escToken)
+ .append("%' OR user.loginName LIKE '%").append(escToken).append("%')");
+ }
+ filteredSearchString = searchStringBuilder.toString();
+ }
+ return filteredSearchString;
+ }
+
+ @SuppressWarnings("rawtypes")
+ public int getCountUsersBySession(final Long sessionId, String searchString) {
+
+ String filteredSearchString = buildNameSearch(searchString);
+ String queryText = "SELECT count(*) FROM " + SpreadsheetUser.class.getName() + " user WHERE user.session.sessionId=:sessionId ";
+ if ( filteredSearchString != null )
+ queryText += filteredSearchString;
+
+ List list = getSession().createQuery(queryText).setLong("sessionId", sessionId.longValue()).list();
+
+ if (list == null || list.size() == 0) {
+ return 0;
+ }
+ return ((Number) list.get(0)).intValue();
+ }
+
+
}
Index: lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/service/ISpreadsheetService.java
===================================================================
diff -u -rbe07c35c372d904a65581d98660e73f3b13b69db -re1a335ed6fa2072efc12776a3573856a386938dc
--- lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/service/ISpreadsheetService.java (.../ISpreadsheetService.java) (revision be07c35c372d904a65581d98660e73f3b13b69db)
+++ lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/service/ISpreadsheetService.java (.../ISpreadsheetService.java) (revision e1a335ed6fa2072efc12776a3573856a386938dc)
@@ -139,12 +139,25 @@
/**
* Return monitoring summary list. The return value is list of spreadsheet summaries for each groups.
+ * It does not return the users in each session as we now use paging.
* @param contentId
* @return
*/
List getSummary(Long contentId);
+
+ /**
+ * Get a paged, optionally sorted and filtered, list of users.
+ * @return
+ */
+ List getUsersForTablesorter(final Long sessionId, int page, int size, int sorting, String searchString);
/**
+ * 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);
+
+ /**
* Return monitoring statistic list. The return value is list of statistics for each groups.
* @param contentId
* @return
@@ -214,5 +227,7 @@
* @return
*/
boolean isGroupedActivity(long toolContentID);
+
+
}
Index: lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/service/SpreadsheetServiceImpl.java
===================================================================
diff -u -ra789c1395e0f8c1f0ded10147c464574c979b69c -re1a335ed6fa2072efc12776a3573856a386938dc
--- lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/service/SpreadsheetServiceImpl.java (.../SpreadsheetServiceImpl.java) (revision a789c1395e0f8c1f0ded10147c464574c979b69c)
+++ lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/service/SpreadsheetServiceImpl.java (.../SpreadsheetServiceImpl.java) (revision e1a335ed6fa2072efc12776a3573856a386938dc)
@@ -23,10 +23,6 @@
/* $$Id$$ */
package org.lamsfoundation.lams.tool.spreadsheet.service;
-import java.io.File;
-import java.io.FileFilter;
-import java.io.FileNotFoundException;
-import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
@@ -39,20 +35,7 @@
import java.util.TreeMap;
import java.util.TreeSet;
-import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
-import org.apache.struts.upload.FormFile;
-import org.lamsfoundation.lams.contentrepository.AccessDeniedException;
-import org.lamsfoundation.lams.contentrepository.ICredentials;
-import org.lamsfoundation.lams.contentrepository.ITicket;
-import org.lamsfoundation.lams.contentrepository.IVersionedNode;
-import org.lamsfoundation.lams.contentrepository.InvalidParameterException;
-import org.lamsfoundation.lams.contentrepository.LoginException;
-import org.lamsfoundation.lams.contentrepository.NodeKey;
-import org.lamsfoundation.lams.contentrepository.RepositoryCheckedException;
-import org.lamsfoundation.lams.contentrepository.WorkspaceNotFoundException;
-import org.lamsfoundation.lams.contentrepository.service.IRepositoryService;
-import org.lamsfoundation.lams.contentrepository.service.SimpleCredentials;
import org.lamsfoundation.lams.learning.service.ILearnerService;
import org.lamsfoundation.lams.learningdesign.service.ExportToolContentException;
import org.lamsfoundation.lams.learningdesign.service.IExportToolContentService;
@@ -90,7 +73,6 @@
import org.lamsfoundation.lams.usermanagement.dto.UserDTO;
import org.lamsfoundation.lams.usermanagement.service.IUserManagementService;
import org.lamsfoundation.lams.util.MessageService;
-import org.lamsfoundation.lams.util.audit.IAuditService;
/**
*
@@ -293,22 +275,34 @@
}
public List getSummary(Long contentId) {
+
Spreadsheet spreadsheet = spreadsheetDao.getByContentId(contentId);
List sessionList = spreadsheetSessionDao.getByContentId(contentId);
List summaryList = new ArrayList();
// create the user list of all whom were started this task
for (SpreadsheetSession session : sessionList) {
- List userList = spreadsheetUserDao.getBySessionID(session.getSessionId());
-
- Summary summary = new Summary(session, spreadsheet, userList);
+ // LDEV-3590 Monitoring is now paged so don't get the list of users
+ // List userList = spreadsheetUserDao.getBySessionID(session.getSessionId());
+ Summary summary = new Summary(session, spreadsheet, null);
summaryList.add(summary);
}
return summaryList;
}
+ @Override
+ public List getUsersForTablesorter(final Long sessionId, int page, int size, int sorting, String searchString) {
+ return spreadsheetUserDao.getUsersForTablesorter(sessionId, page, size, sorting, searchString);
+ }
+
+ @Override
+ public int getCountUsersBySession(Long sessionId, String searchString) {
+ return spreadsheetUserDao.getCountUsersBySession(sessionId, searchString);
+ }
+
+
public List getStatistics(Long contentId) {
List sessionList = spreadsheetSessionDao.getByContentId(contentId);
Index: lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/web/action/MonitoringAction.java
===================================================================
diff -u -rbe07c35c372d904a65581d98660e73f3b13b69db -re1a335ed6fa2072efc12776a3573856a386938dc
--- lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/web/action/MonitoringAction.java (.../MonitoringAction.java) (revision be07c35c372d904a65581d98660e73f3b13b69db)
+++ lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/web/action/MonitoringAction.java (.../MonitoringAction.java) (revision e1a335ed6fa2072efc12776a3573856a386938dc)
@@ -27,15 +27,20 @@
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
+import java.text.DateFormat;
import java.text.NumberFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.TreeSet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import org.apache.commons.lang.StringEscapeUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.math.NumberUtils;
import org.apache.log4j.Logger;
@@ -50,6 +55,9 @@
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
+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.spreadsheet.SpreadsheetConstants;
@@ -60,8 +68,10 @@
import org.lamsfoundation.lams.tool.spreadsheet.model.SpreadsheetMark;
import org.lamsfoundation.lams.tool.spreadsheet.model.SpreadsheetSession;
import org.lamsfoundation.lams.tool.spreadsheet.model.SpreadsheetUser;
+import org.lamsfoundation.lams.tool.spreadsheet.model.UserModifiedSpreadsheet;
import org.lamsfoundation.lams.tool.spreadsheet.service.ISpreadsheetService;
import org.lamsfoundation.lams.tool.spreadsheet.web.form.MarkForm;
+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;
@@ -73,14 +83,17 @@
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
- throws IOException, ServletException {
+ throws IOException, ServletException, JSONException {
String param = mapping.getParameter();
request.setAttribute("initialTabId", WebUtil.readLongParam(request, AttributeNames.PARAM_CURRENT_TAB, true));
if (param.equals("summary")) {
return summary(mapping, form, request, response);
}
+ if (param.equals("getUsers")) {
+ return getUsers(mapping, form, request, response);
+ }
if (param.equals("doStatistic")) {
return doStatistic(mapping, form, request, response);
}
@@ -99,11 +112,6 @@
if (param.equals("saveMark")) {
return saveMark(mapping, form, request, response);
}
-
- if (param.equals("viewReflection")) {
- return viewReflection(mapping, form, request, response);
- }
-
return mapping.findForward(SpreadsheetConstants.ERROR);
}
@@ -122,21 +130,77 @@
Spreadsheet spreadsheet = service.getSpreadsheetByContentId(contentId);
- Map> reflectList = service.getReflectList(contentId, false);
-
//cache into sessionMap
sessionMap.put(SpreadsheetConstants.ATTR_SUMMARY_LIST, summaryList);
sessionMap.put(SpreadsheetConstants.PAGE_EDITABLE, spreadsheet.isContentInUse());
sessionMap.put(SpreadsheetConstants.ATTR_RESOURCE, spreadsheet);
sessionMap.put(SpreadsheetConstants.ATTR_TOOL_CONTENT_ID, contentId);
- sessionMap.put(SpreadsheetConstants.ATTR_REFLECT_LIST, reflectList);
sessionMap.put(AttributeNames.PARAM_CONTENT_FOLDER_ID, WebUtil.readStrParam(request,
AttributeNames.PARAM_CONTENT_FOLDER_ID));
sessionMap.put(SpreadsheetConstants.ATTR_IS_GROUPED_ACTIVITY, service.isGroupedActivity(contentId));
return mapping.findForward(SpreadsheetConstants.SUCCESS);
}
+
+ private 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 sortByMarked = WebUtil.readIntParam(request, "column[1]", true);
+ String searchString = request.getParameter("fcol[0]");
+
+ int sorting = SpreadsheetConstants.SORT_BY_NO;
+ if ( sortByName != null ) {
+ sorting = sortByName.equals(0) ? SpreadsheetConstants.SORT_BY_USERNAME_ASC : SpreadsheetConstants.SORT_BY_USERNAME_DESC;
+ } else if ( sortByMarked !=null ) {
+ sorting = sortByMarked.equals(0) ? SpreadsheetConstants.SORT_BY_MARKED_ASC : SpreadsheetConstants.SORT_BY_MARKED_DESC;
+ }
+
+ //return user list according to the given sessionID
+ ISpreadsheetService service = getSpreadsheetService();
+ List users = service.getUsersForTablesorter(sessionID, page, size, sorting, searchString);
+
+ JSONArray rows = new JSONArray();
+ JSONObject responsedata = new JSONObject();
+ responsedata.put("total_rows", service.getCountUsersBySession(sessionID, searchString));
+
+ Spreadsheet spreadsheet = service.getSpreadsheetByContentId(contentId);
+ boolean reflect = spreadsheet.isReflectOnActivity();
+
+ for (SpreadsheetUser user : users) {
+
+ JSONObject responseRow = new JSONObject();
+ responseRow.put(SpreadsheetConstants.ATTR_USER_UID, user.getUid());
+ responseRow.put(SpreadsheetConstants.ATTR_USER_NAME, StringEscapeUtils.escapeHtml(user.getLastName() + " " + user.getFirstName()));
+ if ( user.getUserModifiedSpreadsheet() != null ) {
+ responseRow.put("userModifiedSpreadsheet", "true");
+ if ( user.getUserModifiedSpreadsheet().getMark() != null ) {
+ responseRow.put("mark", user.getUserModifiedSpreadsheet().getMark().getMarks());
+ }
+ }
+
+ if ( reflect ) {
+ NotebookEntry notebookEntry = service.getEntry(sessionID, CoreNotebookConstants.NOTEBOOK_TOOL,
+ SpreadsheetConstants.TOOL_SIGNATURE, user.getUserId().intValue());
+ if ( notebookEntry != null )
+ responseRow.put("reflection", notebookEntry.getEntry());
+ }
+
+ 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.
* @param mapping
@@ -367,67 +431,16 @@
getSpreadsheetService().saveOrUpdateUserModifiedSpreadsheet(user.getUserModifiedSpreadsheet());
}
- //update user data in sessionMap
- String sessionMapID = markForm.getSessionMapID();
- SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID);
- List summaryList = (List) sessionMap.get(SpreadsheetConstants.ATTR_SUMMARY_LIST);
- for (Summary summary : summaryList) {
- for (SpreadsheetUser sessionUser : summary.getUsers()) {
- if (sessionUser.getUid().equals(user.getUid())) {
- sessionUser.setUserModifiedSpreadsheet(user.getUserModifiedSpreadsheet());
- }
- }
- }
-
+ request.setAttribute("mark",markForm.getMarks());
+ request.setAttribute("userUid",userUid);
+
//set session map ID so that itemlist.jsp can get sessionMAP
request.setAttribute(SpreadsheetConstants.ATTR_SESSION_MAP_ID, markForm.getSessionMapID());
return mapping.findForward(SpreadsheetConstants.SUCCESS);
}
- // private ActionForward listuser(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {
- // Long sessionId = WebUtil.readLongParam(request, AttributeNames.PARAM_TOOL_SESSION_ID);
- // Long itemUid = WebUtil.readLongParam(request, SpreadsheetConstants.PARAM_RESOURCE_ITEM_UID);
- ////
- //// //get user list by given item uid
- // ISpreadsheetService service = getSpreadsheetService();
- // //TODO
- // List list = null;
- //// List list = service.getUserListBySessionItem(sessionId, itemUid);
- //
- // //set to request
- // request.setAttribute(SpreadsheetConstants.ATTR_USER_LIST, list);
- // return mapping.findForward(SpreadsheetConstants.SUCCESS);
- // }
- private ActionForward viewReflection(ActionMapping mapping, ActionForm form, HttpServletRequest request,
- HttpServletResponse response) {
-
- Long uid = WebUtil.readLongParam(request, SpreadsheetConstants.ATTR_USER_UID);
-
- ISpreadsheetService service = getSpreadsheetService();
- SpreadsheetUser user = service.getUser(uid);
- Long sessionID = user.getSession().getSessionId();
- NotebookEntry notebookEntry = service.getEntry(sessionID, CoreNotebookConstants.NOTEBOOK_TOOL,
- SpreadsheetConstants.TOOL_SIGNATURE, user.getUserId().intValue());
-
- SpreadsheetSession session = service.getSessionBySessionId(sessionID);
-
- ReflectDTO refDTO = new ReflectDTO(user);
- if (notebookEntry == null) {
- refDTO.setFinishReflection(false);
- refDTO.setReflect(null);
- }
- else {
- refDTO.setFinishReflection(true);
- refDTO.setReflect(notebookEntry.getEntry());
- }
- refDTO.setReflectInstructions(session.getSpreadsheet().getReflectInstructions());
-
- request.setAttribute("userDTO", refDTO);
- return mapping.findForward("success");
- }
-
// *************************************************************************************
// Private method
// *************************************************************************************