Index: lams_build/lib/lams/lams.jar =================================================================== diff -u -r9349bab097150a4a15cf4c6c10b7946400c3fbd0 -re4625a3ec2ff39bfe424a857788a54497ff64b7a Binary files differ Index: lams_common/src/java/org/lamsfoundation/lams/util/FileValidatorUtil.java =================================================================== diff -u -rca4af9a9cc1dfb336267955e3d78cf4da3989c32 -re4625a3ec2ff39bfe424a857788a54497ff64b7a --- lams_common/src/java/org/lamsfoundation/lams/util/FileValidatorUtil.java (.../FileValidatorUtil.java) (revision ca4af9a9cc1dfb336267955e3d78cf4da3989c32) +++ lams_common/src/java/org/lamsfoundation/lams/util/FileValidatorUtil.java (.../FileValidatorUtil.java) (revision e4625a3ec2ff39bfe424a857788a54497ff64b7a) @@ -103,9 +103,31 @@ * @param errors * @return Be careful, if the file size is under maximum size, return TRUE. Otherwise, return false. */ + public static boolean validateFileSize(FormFile file, boolean largeFile, ActionMessages errors) { + return FileValidatorUtil.validateFileSize(file, largeFile, ActionMessages.GLOBAL_MESSAGE, errors); + + } + public static boolean validateFileSize(FormFile file, boolean largeFile, Errors errors) { - return FileValidatorUtil.validateFileSize(file, largeFile, errors); + int fileSize = 0; + try { + fileSize = file.getFileSize(); + } catch (Exception e) { + //skip, do nothing + return true; + } + float maxFileSize = largeFile ? Configuration.getAsInt(ConfigurationKeys.UPLOAD_FILE_LARGE_MAX_SIZE) + : Configuration.getAsInt(ConfigurationKeys.UPLOAD_FILE_MAX_SIZE); + if (fileSize > maxFileSize) { + String maxSize = FileValidatorUtil.formatSize(maxFileSize); + + // set error message + errors.reject(MSG_KEY, new Object[] { maxSize }, null); + return false; + } + return true; + } /** @@ -181,4 +203,4 @@ format.setMaximumFractionDigits(1); return format.format(size) + unit; } -} +} \ No newline at end of file Index: lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/TaskListConstants.java =================================================================== diff -u -rc6ad8493ef2064430e8783b28258cc9f223a3844 -re4625a3ec2ff39bfe424a857788a54497ff64b7a --- lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/TaskListConstants.java (.../TaskListConstants.java) (revision c6ad8493ef2064430e8783b28258cc9f223a3844) +++ lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/TaskListConstants.java (.../TaskListConstants.java) (revision e4625a3ec2ff39bfe424a857788a54497ff64b7a) @@ -23,7 +23,7 @@ package org.lamsfoundation.lams.tool.taskList; -public class TaskListConstants { +public interface TaskListConstants { public static final String TOOL_SIGNATURE = "latask10"; public static final String TASKLIST_SERVICE = "lataskTaskListService"; public static final String TOOL_CONTENT_HANDLER_NAME = "lataskTaskListToolContentHandler"; Index: lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/web/controller/AuthoringController.java =================================================================== diff -u -rcad516bd852b193b61c821c5177cecacf3e5d016 -re4625a3ec2ff39bfe424a857788a54497ff64b7a --- lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/web/controller/AuthoringController.java (.../AuthoringController.java) (revision cad516bd852b193b61c821c5177cecacf3e5d016) +++ lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/web/controller/AuthoringController.java (.../AuthoringController.java) (revision e4625a3ec2ff39bfe424a857788a54497ff64b7a) @@ -67,9 +67,7 @@ import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Controller; import org.springframework.validation.Errors; -import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; /** @@ -275,8 +273,7 @@ * @throws ServletException */ @RequestMapping("/init") - public String initPage(@ModelAttribute TaskListForm startForm, HttpServletRequest request) - throws ServletException { + public String initPage(@ModelAttribute TaskListForm startForm, HttpServletRequest request) throws ServletException { String sessionMapID = WebUtil.readStrParam(request, TaskListConstants.ATTR_SESSION_MAP_ID); SessionMap sessionMap = (SessionMap) request.getSession() @@ -516,7 +513,7 @@ if (errors.hasErrors()) { return "pages/authoring/parts/addtask"; } -// + try { extractFormToTaskListItem(request, taskListItemForm); } catch (Exception e) { @@ -710,7 +707,8 @@ * @param form * @param request */ - private void populateItemToForm(int itemIdx, TaskListItem item, TaskListItemForm taskListItemForm, HttpServletRequest request) { + private void populateItemToForm(int itemIdx, TaskListItem item, TaskListItemForm taskListItemForm, + HttpServletRequest request) { taskListItemForm.setDescription(item.getDescription()); taskListItemForm.setTitle(item.getTitle()); if (itemIdx >= 0) { Index: lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/web/controller/ClearSessionController.java =================================================================== diff -u -rca4af9a9cc1dfb336267955e3d78cf4da3989c32 -re4625a3ec2ff39bfe424a857788a54497ff64b7a --- lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/web/controller/ClearSessionController.java (.../ClearSessionController.java) (revision ca4af9a9cc1dfb336267955e3d78cf4da3989c32) +++ lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/web/controller/ClearSessionController.java (.../ClearSessionController.java) (revision e4625a3ec2ff39bfe424a857788a54497ff64b7a) @@ -21,33 +21,50 @@ * **************************************************************** */ - package org.lamsfoundation.lams.tool.taskList.web.controller; +import java.io.IOException; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; -import org.lamsfoundation.lams.authoring.web.LamsAuthoringFinishAction; +import org.apache.log4j.Logger; +import org.lamsfoundation.lams.authoring.web.AuthoringConstants; +import org.lamsfoundation.lams.authoring.web.LamsAuthoringFinishController; import org.lamsfoundation.lams.tool.ToolAccessMode; +import org.lamsfoundation.lams.tool.taskList.TaskListConstants; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.context.WebApplicationContext; /** * This class give a chance to clear HttpSession when user save/close authoring page. - * + * * @author Steve.Ni * * @version $Revision$ */ @Controller -public class ClearSessionController { +public class ClearSessionController extends LamsAuthoringFinishController implements TaskListConstants { + private static Logger logger = Logger.getLogger(ClearSessionController.class.getName()); + @Autowired + private WebApplicationContext applicationContext; + @RequestMapping("/clearsession") + public void execute(HttpServletRequest request, HttpServletResponse response) throws IOException { + super.execute(request, response, applicationContext); + } + + @Override public void clearSession(String customiseSessionID, HttpSession session, ToolAccessMode mode) { + session.removeAttribute(AuthoringConstants.LAMS_AUTHORING_SUCCESS_FLAG); if (mode.isAuthor()) { + ClearSessionController.logger.debug("In Author mode"); session.removeAttribute(customiseSessionID); } } - } Index: lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/web/controller/LearningController.java =================================================================== diff -u -rca4af9a9cc1dfb336267955e3d78cf4da3989c32 -re4625a3ec2ff39bfe424a857788a54497ff64b7a --- lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/web/controller/LearningController.java (.../LearningController.java) (revision ca4af9a9cc1dfb336267955e3d78cf4da3989c32) +++ lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/web/controller/LearningController.java (.../LearningController.java) (revision e4625a3ec2ff39bfe424a857788a54497ff64b7a) @@ -37,9 +37,6 @@ import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionMessage; -import org.apache.struts.action.ActionMessages; import org.apache.struts.upload.FormFile; import org.lamsfoundation.lams.learning.web.bean.ActivityPositionDTO; import org.lamsfoundation.lams.learning.web.util.LearningWebUtil; @@ -75,6 +72,7 @@ import org.springframework.validation.Errors; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.context.WebApplicationContext; /** * @@ -83,11 +81,14 @@ @Controller @RequestMapping("/learning") -public class LearningController { +public class LearningController implements TaskListConstants{ private static Logger log = Logger.getLogger(LearningController.class); @Autowired + private WebApplicationContext applicationContext; + + @Autowired @Qualifier("lataskTaskListService") private ITaskListService taskListService; @@ -108,7 +109,7 @@ // save toolContentID into HTTPSession ToolAccessMode mode = WebUtil.readToolAccessModeParam(request, AttributeNames.PARAM_MODE, true); - Long sessionId = new Long(request.getParameter(TaskListConstants.PARAM_TOOL_SESSION_ID)); + Long sessionId = Long.valueOf(request.getParameter(TaskListConstants.PARAM_TOOL_SESSION_ID)); request.setAttribute(TaskListConstants.ATTR_SESSION_MAP_ID, sessionMap.getSessionID()); request.setAttribute(AttributeNames.ATTR_MODE, mode); @@ -296,9 +297,9 @@ taskList.setDefineLater(false); taskListService.saveOrUpdateTaskList(taskList); -// ActivityPositionDTO activityPosition = LearningWebUtil.putActivityPositionInRequestByToolSessionId(sessionId, -// request, getServlet().getServletContext()); -// sessionMap.put(AttributeNames.ATTR_ACTIVITY_POSITION, activityPosition); + ActivityPositionDTO activityPosition = LearningWebUtil.putActivityPositionInRequestByToolSessionId(sessionId, + request, applicationContext.getServletContext()); + sessionMap.put(AttributeNames.ATTR_ACTIVITY_POSITION, activityPosition); // check if there is submission deadline Date submissionDeadline = taskList.getSubmissionDeadline(); @@ -357,7 +358,7 @@ * @return */ @RequestMapping("/finish") - public String finish(HttpServletRequest request, HttpServletResponse response) { + public String finish(@ModelAttribute ReflectionForm reflectionForm, Errors errors, HttpServletRequest request, HttpServletResponse response) { // get back SessionMap String sessionMapID = request.getParameter(TaskListConstants.ATTR_SESSION_MAP_ID); @@ -378,8 +379,8 @@ request.setAttribute(TaskListConstants.ATTR_RUN_AUTO, false); } - if (!validateBeforeFinish(request, sessionMapID)) { - return "forward:/"; + if (!validateBeforeFinish(request, sessionMapID, errors)) { + return "redirect:/"; // getInputForward } @@ -532,8 +533,8 @@ * @throws UploadTaskListFileException */ @RequestMapping("/uploadFile") - public String uploadFile(@ModelAttribute TaskListItemForm taskListItemForm, Errors errors, HttpServletRequest request) - throws UploadTaskListFileException { + public String uploadFile(@ModelAttribute TaskListItemForm taskListItemForm, Errors errors, + HttpServletRequest request) throws UploadTaskListFileException { String mode = request.getParameter(AttributeNames.ATTR_MODE); SessionMap sessionMap = (SessionMap) request.getSession() @@ -548,14 +549,15 @@ } // validate file size -// FileValidatorUtil.validateFileSize(file, false); -// if (errors.hasErrors()) { -// return "pages/learning/learning"; -// } + FileValidatorUtil.validateFileSize(file, false, errors); + if (errors.hasErrors()) { + return "pages/learning/learning"; + } // upload to repository UserDTO user = (UserDTO) SessionManager.getSession().getAttribute(AttributeNames.USER); - TaskListUser taskListUser = taskListService.getUserByIDAndSession(new Long(user.getUserID().intValue()), sessionId); + TaskListUser taskListUser = taskListService.getUserByIDAndSession(new Long(user.getUserID().intValue()), + sessionId); TaskListItemAttachment att = taskListService.uploadTaskListItemFile(file, taskListUser); // persist TaskListItem changes in DB @@ -587,12 +589,12 @@ */ @RequestMapping("/newReflection") public String newReflection(@ModelAttribute ReflectionForm reflectionForm, HttpServletRequest request, - HttpServletResponse response) { + Errors errors, HttpServletResponse response) { // get session value String sessionMapID = WebUtil.readStrParam(request, TaskListConstants.ATTR_SESSION_MAP_ID); - if (!validateBeforeFinish(request, sessionMapID)) { + if (!validateBeforeFinish(request, sessionMapID, errors)) { return "pages/learning/learning"; } @@ -626,8 +628,8 @@ * @return */ @RequestMapping("/submitReflection") - public String submitReflection(@ModelAttribute ReflectionForm reflectionForm, HttpServletRequest request, - HttpServletResponse response) { + public String submitReflection(@ModelAttribute ReflectionForm reflectionForm, Errors errors, + HttpServletRequest request, HttpServletResponse response) { Integer userId = reflectionForm.getUserID(); @@ -651,7 +653,7 @@ taskListService.updateEntry(entry); } - return finish(request, response); + return finish(reflectionForm, errors, request, response); } // ************************************************************************************* @@ -692,7 +694,7 @@ } } - private boolean validateBeforeFinish(HttpServletRequest request, String sessionMapID) { + private boolean validateBeforeFinish(HttpServletRequest request, String sessionMapID, Errors errors) { SessionMap sessionMap = (SessionMap) request.getSession() .getAttribute(sessionMapID); Long sessionId = (Long) sessionMap.get(AttributeNames.PARAM_TOOL_SESSION_ID); @@ -705,10 +707,8 @@ int minimumNumberTasks = taskListService.getTaskListBySessionId(sessionId).getMinimumNumberTasks(); // if current user view less than reqired view count number, then just return error message. if ((minimumNumberTasks - numberCompletedTasks) > 0) { -// ActionErrors errors = new ActionErrors(); -// errors.add(ActionMessages.GLOBAL_MESSAGE, -// new ActionMessage("lable.learning.minimum.view.number", minimumNumberTasks, numberCompletedTasks)); -// this.addErrors(request, errors); + errors.reject("lable.learning.minimum.view.number", + new Object[] { minimumNumberTasks, numberCompletedTasks }, null); return false; } Fisheye: Tag e4625a3ec2ff39bfe424a857788a54497ff64b7a refers to a dead (removed) revision in file `lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/web/controller/MonitoringAction.java'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/web/controller/MonitoringController.java =================================================================== diff -u --- lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/web/controller/MonitoringController.java (revision 0) +++ lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/web/controller/MonitoringController.java (revision e4625a3ec2ff39bfe424a857788a54497ff64b7a) @@ -0,0 +1,441 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + +package org.lamsfoundation.lams.tool.taskList.web.controller; + +import java.io.IOException; +import java.io.PrintWriter; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Date; +import java.util.List; +import java.util.Set; +import java.util.TimeZone; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +import org.apache.commons.lang.StringUtils; +import org.apache.log4j.Logger; +import org.lamsfoundation.lams.tool.taskList.TaskListConstants; +import org.lamsfoundation.lams.tool.taskList.dto.ReflectDTO; +import org.lamsfoundation.lams.tool.taskList.dto.SessionDTO; +import org.lamsfoundation.lams.tool.taskList.dto.TaskListUserDTO; +import org.lamsfoundation.lams.tool.taskList.model.TaskList; +import org.lamsfoundation.lams.tool.taskList.model.TaskListItem; +import org.lamsfoundation.lams.tool.taskList.model.TaskListItemAttachment; +import org.lamsfoundation.lams.tool.taskList.model.TaskListItemComment; +import org.lamsfoundation.lams.tool.taskList.model.TaskListSession; +import org.lamsfoundation.lams.tool.taskList.model.TaskListUser; +import org.lamsfoundation.lams.tool.taskList.service.ITaskListService; +import org.lamsfoundation.lams.usermanagement.dto.UserDTO; +import org.lamsfoundation.lams.util.Configuration; +import org.lamsfoundation.lams.util.ConfigurationKeys; +import org.lamsfoundation.lams.util.DateUtil; +import org.lamsfoundation.lams.util.WebUtil; +import org.lamsfoundation.lams.web.session.SessionManager; +import org.lamsfoundation.lams.web.util.AttributeNames; +import org.lamsfoundation.lams.web.util.SessionMap; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.util.HtmlUtils; + +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.JsonNodeFactory; +import com.fasterxml.jackson.databind.node.ObjectNode; + +@Controller +@RequestMapping("/monitoring") +public class MonitoringController { + + public static Logger log = Logger.getLogger(MonitoringController.class); + private static String TOOL_URL = Configuration.get(ConfigurationKeys.SERVER_URL) + "/tool/" + + TaskListConstants.TOOL_SIGNATURE + "/"; + + @Autowired + @Qualifier("lataskTaskListService") + private ITaskListService taskListService; + + @RequestMapping("/summary") + public String summary(HttpServletRequest request) { + + // initial Session Map + SessionMap sessionMap = new SessionMap<>(); + request.getSession().setAttribute(sessionMap.getSessionID(), sessionMap); + + request.setAttribute(TaskListConstants.ATTR_SESSION_MAP_ID, sessionMap.getSessionID()); + request.setAttribute("initialTabId", WebUtil.readLongParam(request, AttributeNames.PARAM_CURRENT_TAB, true)); + Long contentId = WebUtil.readLongParam(request, AttributeNames.PARAM_TOOL_CONTENT_ID); + request.setAttribute(AttributeNames.PARAM_TOOL_CONTENT_ID, contentId); + + TaskList taskList = taskListService.getTaskListByContentId(contentId); + + List sessionDtos = taskListService.getSummary(contentId); + + // cache into sessionMap + sessionMap.put(TaskListConstants.ATTR_SESSION_DTOS, sessionDtos); + sessionMap.put(TaskListConstants.ATTR_MONITOR_VERIFICATION_REQUIRED, taskList.isMonitorVerificationRequired()); + sessionMap.put(TaskListConstants.PAGE_EDITABLE, taskList.isContentInUse()); + sessionMap.put(TaskListConstants.ATTR_TASKLIST, taskList); + sessionMap.put(TaskListConstants.ATTR_TOOL_CONTENT_ID, contentId); + sessionMap.put(AttributeNames.PARAM_CONTENT_FOLDER_ID, + WebUtil.readStrParam(request, AttributeNames.PARAM_CONTENT_FOLDER_ID)); + sessionMap.put(TaskListConstants.ATTR_IS_GROUPED_ACTIVITY, taskListService.isGroupedActivity(contentId)); + + if (taskList.getSubmissionDeadline() != null) { + Date submissionDeadline = taskList.getSubmissionDeadline(); + HttpSession ss = SessionManager.getSession(); + UserDTO teacher = (UserDTO) ss.getAttribute(AttributeNames.USER); + TimeZone teacherTimeZone = teacher.getTimeZone(); + Date tzSubmissionDeadline = DateUtil.convertToTimeZoneFromDefault(teacherTimeZone, submissionDeadline); + sessionMap.put(TaskListConstants.ATTR_SUBMISSION_DEADLINE, tzSubmissionDeadline.getTime()); + sessionMap.put(TaskListConstants.ATTR_SUBMISSION_DEADLINE_DATESTRING, + DateUtil.convertToStringForJSON(submissionDeadline, request.getLocale())); + } + + // Create reflectList if reflection is enabled. + if (taskList.isReflectOnActivity()) { + List reflectList = taskListService.getReflectList(taskList.getContentId()); + // Add reflectList to sessionMap + sessionMap.put(TaskListConstants.ATTR_REFLECT_LIST, reflectList); + } + + return "pages/monitoring/monitoring"; + } + + @RequestMapping("/itemSummary") + public String itemSummary(HttpServletRequest request) { + + String sessionMapID = request.getParameter(TaskListConstants.ATTR_SESSION_MAP_ID); + SessionMap sessionMap = (SessionMap) request.getSession() + .getAttribute(sessionMapID); + request.setAttribute(TaskListConstants.ATTR_SESSION_MAP_ID, sessionMapID); + + Long contentId = WebUtil.readLongParam(request, AttributeNames.PARAM_TOOL_CONTENT_ID); + Long itemUid = WebUtil.readLongParam(request, TaskListConstants.PARAM_ITEM_UID); + + TaskListItem item = taskListService.getTaskListItemByUid(itemUid); + + // create sessionList depending on whether the item was created by author or by learner + List sessionDtos = new ArrayList<>(); + if (item.isCreateByAuthor()) { + List sessionList = taskListService.getSessionsByContentId(contentId); + for (TaskListSession session : sessionList) { + SessionDTO sessionDto = new SessionDTO(session); + sessionDtos.add(sessionDto); + } + + } else { + TaskListSession userSession = item.getCreateBy().getSession(); + SessionDTO sessionDto = new SessionDTO(userSession); + sessionDtos.add(sessionDto); + } + + request.setAttribute(TaskListConstants.ATTR_SESSION_DTOS, sessionDtos); + request.setAttribute(TaskListConstants.ATTR_TASK_LIST_ITEM, item); + + return "pages/monitoring/itemsummary"; + } + + /** + * Refreshes user list. + */ + @RequestMapping(path = "/getPagedUsers", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) + @ResponseBody + public String getPagedUsers(HttpServletRequest request, HttpServletResponse res) { + + String sessionMapID = request.getParameter(TaskListConstants.ATTR_SESSION_MAP_ID); + SessionMap sessionMap = (SessionMap) request.getSession() + .getAttribute(sessionMapID); + TaskList tasklist = (TaskList) sessionMap.get(TaskListConstants.ATTR_TASKLIST); + Long sessionId = WebUtil.readLongParam(request, AttributeNames.PARAM_TOOL_SESSION_ID); + List sessionDtos = (List) sessionMap.get(TaskListConstants.ATTR_SESSION_DTOS); + + //find according sessionDto + SessionDTO sessionDto = null; + for (SessionDTO sessionDtoIter : sessionDtos) { + if (sessionDtoIter.getSessionId().equals(sessionId)) { + sessionDto = sessionDtoIter; + } + } + List items = sessionDto.getTaskListItems(); + + // Getting the params passed in from the jqGrid + int page = WebUtil.readIntParam(request, AttributeNames.PARAM_PAGE); + int rowLimit = WebUtil.readIntParam(request, AttributeNames.PARAM_ROWS); + String sortOrder = WebUtil.readStrParam(request, AttributeNames.PARAM_SORD); + String sortBy = WebUtil.readStrParam(request, AttributeNames.PARAM_SIDX, true); + if (StringUtils.isEmpty(sortBy)) { + sortBy = "userName"; + } + String searchString = WebUtil.readStrParam(request, "userName", true); + + // Get the user list from the db + Collection userDtos = taskListService.getPagedUsersBySession(sessionId, page - 1, rowLimit, + sortBy, sortOrder, searchString); + int countSessionUsers = taskListService.getCountPagedUsersBySession(sessionId, searchString); + + int totalPages = new Double( + Math.ceil(new Integer(countSessionUsers).doubleValue() / new Integer(rowLimit).doubleValue())) + .intValue(); + + ArrayNode rows = JsonNodeFactory.instance.arrayNode(); + int i = 1; + for (TaskListUserDTO userDto : userDtos) { + + ArrayNode userData = JsonNodeFactory.instance.arrayNode(); + userData.add(userDto.getUserId()); + String fullName = HtmlUtils.htmlEscape(userDto.getFullName()); + userData.add(fullName); + + Set completedTaskUids = userDto.getCompletedTaskUids(); + for (TaskListItem item : items) { + String completionImage = completedTaskUids.contains(item.getUid()) ? "" + : ""; + userData.add(completionImage); + } + + if (tasklist.isMonitorVerificationRequired()) { + String label = HtmlUtils.htmlEscape(taskListService.getMessage("label.confirm")); + + String verificationStatus = userDto.isVerifiedByMonitor() ? "" + : "" + label + ""; + userData.add(verificationStatus); + } + + userData.add(userDto.getPortraitId()); + + ObjectNode userRow = JsonNodeFactory.instance.objectNode(); + userRow.put("id", i++); + userRow.put("cell", userData); + + rows.add(userRow); + } + + ObjectNode responseJSON = JsonNodeFactory.instance.objectNode(); + responseJSON.put("total", totalPages); + responseJSON.put("page", page); + responseJSON.put("records", countSessionUsers); + responseJSON.set("rows", rows); + + return responseJSON.toString(); + } + + /** + * Refreshes user list. + */ + @RequestMapping(path = "/getPagedUsersByItem", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) + @ResponseBody + public String getPagedUsersByItem(HttpServletRequest request) { + + Long sessionId = WebUtil.readLongParam(request, AttributeNames.PARAM_TOOL_SESSION_ID); + Long itemUid = WebUtil.readLongParam(request, TaskListConstants.PARAM_ITEM_UID); + + // Getting the params passed in from the jqGrid + int page = WebUtil.readIntParam(request, AttributeNames.PARAM_PAGE); + int rowLimit = WebUtil.readIntParam(request, AttributeNames.PARAM_ROWS); + String sortOrder = WebUtil.readStrParam(request, AttributeNames.PARAM_SORD); + String sortBy = WebUtil.readStrParam(request, AttributeNames.PARAM_SIDX, true); + if (StringUtils.isEmpty(sortBy)) { + sortBy = "userName"; + } + String searchString = WebUtil.readStrParam(request, "userName", true); + + // Get the user list from the db + Collection userDtos = taskListService.getPagedUsersBySessionAndItem(sessionId, itemUid, + page - 1, rowLimit, sortBy, sortOrder, searchString); + int countSessionUsers = taskListService.getCountPagedUsersBySession(sessionId, searchString); + + int totalPages = new Double( + Math.ceil(new Integer(countSessionUsers).doubleValue() / new Integer(rowLimit).doubleValue())) + .intValue(); + + //date formatters + DateFormat dateFormatter = new SimpleDateFormat("d-MMM-yyyy h:mm a"); + HttpSession ss = SessionManager.getSession(); + UserDTO monitorDto = (UserDTO) ss.getAttribute(AttributeNames.USER); + TimeZone monitorTimeZone = monitorDto.getTimeZone(); + + //get all comments and attachments + TaskListItem item = taskListService.getTaskListItemByUid(itemUid); + Set itemComments = item.getComments(); + Set itemAttachments = item.getAttachments(); + String label = HtmlUtils.htmlEscape(taskListService.getMessage("label.download")); + + int i = 0; + ArrayNode rows = JsonNodeFactory.instance.arrayNode(); + for (TaskListUserDTO userDto : userDtos) { + + ArrayNode userData = JsonNodeFactory.instance.arrayNode(); + String fullName = HtmlUtils.htmlEscape(userDto.getFullName()); + userData.add(fullName); + + String completionImage = userDto.isCompleted() ? "" + : ""; + userData.add(completionImage); + + String accessDate = (userDto.getAccessDate() == null) ? "" + : dateFormatter + .format(DateUtil.convertToTimeZoneFromDefault(monitorTimeZone, userDto.getAccessDate())); + userData.add(accessDate); + + // fill up with comments and attachments made by this user + if (item.isCommentsAllowed() || item.isFilesAllowed()) { + String commentsFiles = "
    "; + + ArrayList userComments = new ArrayList<>(); + for (TaskListItemComment comment : itemComments) { + if (userDto.getUserId().equals(comment.getCreateBy().getUserId())) { + userComments.add(comment.getComment()); + } + } + if (!userComments.isEmpty()) { + commentsFiles += "
  • "; + for (String userComment : userComments) { + commentsFiles += HtmlUtils.htmlEscape(userComment); + } + commentsFiles += "
  • "; + } + + ArrayList userAttachments = new ArrayList<>(); + for (TaskListItemAttachment attachment : itemAttachments) { + if (userDto.getUserId().equals(attachment.getCreateBy().getUserId())) { + userAttachments.add(attachment); + } + } + if (!userAttachments.isEmpty()) { + commentsFiles += "
  • "; + for (TaskListItemAttachment userAttachment : userAttachments) { + commentsFiles += HtmlUtils.htmlEscape(userAttachment.getFileName()) + " "; + commentsFiles += "" + label + + ""; + } + commentsFiles += "
  • "; + } + + commentsFiles += "
"; + +// +// +//
  • +// +// +// +// +// +// +// +// +// +//
  • +//
    + userData.add(commentsFiles); + } + + ObjectNode userRow = JsonNodeFactory.instance.objectNode(); + userRow.put("id", i++); + userRow.set("cell", userData); + + rows.add(userRow); + } + + ObjectNode responseJSON = JsonNodeFactory.instance.objectNode(); + responseJSON.put("total", totalPages); + responseJSON.put("page", page); + responseJSON.put("records", countSessionUsers); + responseJSON.set("rows", rows); + + return responseJSON.toString(); + } + + /** + * Mark taskList user as verified. + * + * @param mapping + * @param form + * @param request + * @param response + * @return + * @throws IOException + */ + @RequestMapping("/setVerifiedByMonitor") + public String setVerifiedByMonitor(HttpServletRequest request, HttpServletResponse response) throws IOException { + + Long userUid = WebUtil.readLongParam(request, TaskListConstants.ATTR_USER_UID); + TaskListUser user = taskListService.getUser(userUid); + user.setVerifiedByMonitor(true); + taskListService.createUser(user); + + response.setContentType("text/html"); + PrintWriter out = response.getWriter(); + out.write(userUid.toString()); + out.flush(); + out.close(); + return "redirect:/monitoring/summary.do"; + } + + /** + * Set Submission Deadline + * + * @param mapping + * @param form + * @param request + * @param response + * @return + */ + @RequestMapping(path = "/setSubmissionDeadline", produces = MediaType.TEXT_PLAIN_VALUE) + @ResponseBody + public String setSubmissionDeadline(HttpServletRequest request) { + + Long contentID = WebUtil.readLongParam(request, AttributeNames.PARAM_TOOL_CONTENT_ID); + TaskList taskList = taskListService.getTaskListByContentId(contentID); + + Long dateParameter = WebUtil.readLongParam(request, TaskListConstants.ATTR_SUBMISSION_DEADLINE, true); + Date tzSubmissionDeadline = null; + String formattedDate = ""; + if (dateParameter != null) { + Date submissionDeadline = new Date(dateParameter); + HttpSession ss = SessionManager.getSession(); + org.lamsfoundation.lams.usermanagement.dto.UserDTO teacher = (org.lamsfoundation.lams.usermanagement.dto.UserDTO) ss + .getAttribute(AttributeNames.USER); + TimeZone teacherTimeZone = teacher.getTimeZone(); + tzSubmissionDeadline = DateUtil.convertFromTimeZoneToDefault(teacherTimeZone, submissionDeadline); + formattedDate = DateUtil.convertToStringForJSON(tzSubmissionDeadline, request.getLocale()); + } + taskList.setSubmissionDeadline(tzSubmissionDeadline); + taskListService.saveOrUpdateTaskList(taskList); + return formattedDate; + } + +} Index: lams_tool_task/web/pages/authoring/authoring.jsp =================================================================== diff -u -rca4af9a9cc1dfb336267955e3d78cf4da3989c32 -re4625a3ec2ff39bfe424a857788a54497ff64b7a --- lams_tool_task/web/pages/authoring/authoring.jsp (.../authoring.jsp) (revision ca4af9a9cc1dfb336267955e3d78cf4da3989c32) +++ lams_tool_task/web/pages/authoring/authoring.jsp (.../authoring.jsp) (revision e4625a3ec2ff39bfe424a857788a54497ff64b7a) @@ -108,7 +108,7 @@ Index: lams_tool_task/web/pages/learning/learning.jsp =================================================================== diff -u -r20d56e5a580f9c44979e40663e21cd981f75dc80 -re4625a3ec2ff39bfe424a857788a54497ff64b7a --- lams_tool_task/web/pages/learning/learning.jsp (.../learning.jsp) (revision 20d56e5a580f9c44979e40663e21cd981f75dc80) +++ lams_tool_task/web/pages/learning/learning.jsp (.../learning.jsp) (revision e4625a3ec2ff39bfe424a857788a54497ff64b7a) @@ -165,8 +165,8 @@

    -

    @@ -177,7 +177,7 @@

    -

    @@ -217,10 +217,10 @@ - + @@ -248,10 +248,10 @@ - + Index: lams_tool_task/web/pages/learning/parts/addtask.jsp =================================================================== diff -u -rca4af9a9cc1dfb336267955e3d78cf4da3989c32 -re4625a3ec2ff39bfe424a857788a54497ff64b7a --- lams_tool_task/web/pages/learning/parts/addtask.jsp (.../addtask.jsp) (revision ca4af9a9cc1dfb336267955e3d78cf4da3989c32) +++ lams_tool_task/web/pages/learning/parts/addtask.jsp (.../addtask.jsp) (revision e4625a3ec2ff39bfe424a857788a54497ff64b7a) @@ -41,20 +41,21 @@ - +

    - +
    - -
    Index: lams_tool_task/web/pages/learning/parts/filelist.jsp =================================================================== diff -u -rca4af9a9cc1dfb336267955e3d78cf4da3989c32 -re4625a3ec2ff39bfe424a857788a54497ff64b7a --- lams_tool_task/web/pages/learning/parts/filelist.jsp (.../filelist.jsp) (revision ca4af9a9cc1dfb336267955e3d78cf4da3989c32) +++ lams_tool_task/web/pages/learning/parts/filelist.jsp (.../filelist.jsp) (revision e4625a3ec2ff39bfe424a857788a54497ff64b7a) @@ -15,10 +15,8 @@
  • [] - "download/?uuid=${file.fileUuid}&versionID=${file.fileVersionId}&preferDownload=true" - - -
  • + download/?uuid=${file.fileUuid}&versionID=${file.fileVersionId}&preferDownload=true +
    Index: lams_tool_task/web/pages/learning/parts/itemdetails.jsp =================================================================== diff -u -rca4af9a9cc1dfb336267955e3d78cf4da3989c32 -re4625a3ec2ff39bfe424a857788a54497ff64b7a --- lams_tool_task/web/pages/learning/parts/itemdetails.jsp (.../itemdetails.jsp) (revision ca4af9a9cc1dfb336267955e3d78cf4da3989c32) +++ lams_tool_task/web/pages/learning/parts/itemdetails.jsp (.../itemdetails.jsp) (revision e4625a3ec2ff39bfe424a857788a54497ff64b7a) @@ -15,7 +15,7 @@
    - +
    Index: lams_tool_task/web/pages/learning/parts/notebook.jsp =================================================================== diff -u -rca4af9a9cc1dfb336267955e3d78cf4da3989c32 -re4625a3ec2ff39bfe424a857788a54497ff64b7a --- lams_tool_task/web/pages/learning/parts/notebook.jsp (.../notebook.jsp) (revision ca4af9a9cc1dfb336267955e3d78cf4da3989c32) +++ lams_tool_task/web/pages/learning/parts/notebook.jsp (.../notebook.jsp) (revision e4625a3ec2ff39bfe424a857788a54497ff64b7a) @@ -19,8 +19,8 @@ - - + + @@ -30,7 +30,7 @@

    - +
    - - + +
    @@ -68,14 +68,14 @@
    - + - + Index: lams_tool_task/web/pages/monitoring/editactivity.jsp =================================================================== diff -u -r58448aa728e808e025d15546ea5375e6db321ff3 -re4625a3ec2ff39bfe424a857788a54497ff64b7a --- lams_tool_task/web/pages/monitoring/editactivity.jsp (.../editactivity.jsp) (revision 58448aa728e808e025d15546ea5375e6db321ff3) +++ lams_tool_task/web/pages/monitoring/editactivity.jsp (.../editactivity.jsp) (revision e4625a3ec2ff39bfe424a857788a54497ff64b7a) @@ -34,6 +34,6 @@ - + - + Index: lams_tool_task/web/pages/monitoring/parts/daterestriction.jsp =================================================================== diff -u -rd6dcae53cbe27a85aedf62b8545ee3193ec55220 -re4625a3ec2ff39bfe424a857788a54497ff64b7a --- lams_tool_task/web/pages/monitoring/parts/daterestriction.jsp (.../daterestriction.jsp) (revision d6dcae53cbe27a85aedf62b8545ee3193ec55220) +++ lams_tool_task/web/pages/monitoring/parts/daterestriction.jsp (.../daterestriction.jsp) (revision e4625a3ec2ff39bfe424a857788a54497ff64b7a) @@ -10,9 +10,9 @@ - + - +
    @@ -21,9 +21,9 @@ - + - +