Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/dao/hibernate/SubmitUserDAO.java =================================================================== diff -u -r1688016bbb43db756bca9b93361c2a3833089d12 -r309d4e79cd4ea1ee0b3e4cf0e070dd5243e73203 --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/dao/hibernate/SubmitUserDAO.java (.../SubmitUserDAO.java) (revision 1688016bbb43db756bca9b93361c2a3833089d12) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/dao/hibernate/SubmitUserDAO.java (.../SubmitUserDAO.java) (revision 309d4e79cd4ea1ee0b3e4cf0e070dd5243e73203) @@ -246,7 +246,7 @@ + " FROM tl_lasbmt11_submission_details detail, tl_lasbmt11_report report " + " WHERE detail.session_id = :sessionId " + " AND detail.submission_id = report.report_id " - + " AND detail.filePath = (SELECT filePath from tl_lasbmt11_submission_details " + + " AND detail.uuid = (SELECT uuid from tl_lasbmt11_submission_details " + " WHERE submission_id = :reportId); "; @Override Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/ISubmitFilesService.java =================================================================== diff -u -r1688016bbb43db756bca9b93361c2a3833089d12 -r309d4e79cd4ea1ee0b3e4cf0e070dd5243e73203 --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/ISubmitFilesService.java (.../ISubmitFilesService.java) (revision 1688016bbb43db756bca9b93361c2a3833089d12) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/ISubmitFilesService.java (.../ISubmitFilesService.java) (revision 309d4e79cd4ea1ee0b3e4cf0e070dd5243e73203) @@ -144,7 +144,7 @@ * @param markFileUUID * @param markFileVersionID */ - public void removeMarkFile(Long reportID, Long markFileUUID, Long markFileVersionID); + public void removeMarkFile(Long reportID, Long markFileUUID, Long markFileVersionID, Long sessionID); /** * Mark the original file uploaded by a learner as deleted. Does not delete the file Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesService.java =================================================================== diff -u -rd39b9df30d44b56c287b8a1d4409407e60692dc4 -r309d4e79cd4ea1ee0b3e4cf0e070dd5243e73203 --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesService.java (.../SubmitFilesService.java) (revision d39b9df30d44b56c287b8a1d4409407e60692dc4) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesService.java (.../SubmitFilesService.java) (revision 309d4e79cd4ea1ee0b3e4cf0e070dd5243e73203) @@ -262,23 +262,57 @@ @Override public void copyLearnerContent(SubmitUser fromUser, SubmitUser toUser) throws ToolException { - List leadersubmissions = submissionDetailsDAO.getBySessionAndLearner(fromUser.getSessionID(), + if ((fromUser == null) || (toUser == null) || fromUser.getUid().equals(toUser.getUid())) { + return; + } + + List leaderSubmissions = submissionDetailsDAO.getBySessionAndLearner(fromUser.getSessionID(), fromUser.getUserID()); - for (SubmissionDetails leadersubmission : leadersubmissions) { - if (leadersubmission.getSubmitFileSession().getSessionID().equals(toUser.getSessionID())) { - SubmissionDetails usersubmission = new SubmissionDetails(); - usersubmission.setLearner(toUser); - usersubmission.setDateOfSubmission(new Date()); - usersubmission.setFileDescription(leadersubmission.getFileDescription()); - usersubmission.setFilePath(leadersubmission.getFilePath()); - usersubmission.setSubmitFileSession(leadersubmission.getSubmitFileSession()); - usersubmission.setVersionID(leadersubmission.getVersionID()); - SubmitFilesReport report1 = new SubmitFilesReport(); - usersubmission.setReport(report1); - usersubmission.setRemoved(leadersubmission.isRemoved()); - usersubmission.setUuid(leadersubmission.getUuid()); - submissionDetailsDAO.save(usersubmission); + + List existingSubmissions = submissionDetailsDAO + .getBySessionAndLearner(toUser.getSessionID(), toUser.getUserID()); + + // Note: uuid never changes once a file is uploaded as this is the key from the content repository. + for (SubmissionDetails leadersubmission : leaderSubmissions) { + SubmissionDetails usersubmission = null; + for (SubmissionDetails exSubCheck : existingSubmissions) { + if (exSubCheck.getUuid().equals(leadersubmission.getUuid())) { + usersubmission = exSubCheck; + break; + } } + if (usersubmission == null) { + usersubmission = new SubmissionDetails(); + } + usersubmission.setLearner(toUser); + usersubmission.setDateOfSubmission(leadersubmission.getDateOfSubmission()); + usersubmission.setFileDescription(leadersubmission.getFileDescription()); + usersubmission.setFilePath(leadersubmission.getFilePath()); + usersubmission.setSubmitFileSession(leadersubmission.getSubmitFileSession()); + usersubmission.setUuid(leadersubmission.getUuid()); + usersubmission.setVersionID(leadersubmission.getVersionID()); + usersubmission.setRemoved(leadersubmission.isRemoved()); + // submissionID is set by Hibernate + + if (leadersubmission.getReport() != null) { + SubmitFilesReport leaderReport = leadersubmission.getReport(); + SubmitFilesReport userreport = usersubmission.getReport(); + if (userreport == null) { + userreport = new SubmitFilesReport(); + usersubmission.setReport(userreport); + } + userreport.setComments(leaderReport.getComments()); + userreport.setDateMarksReleased(leaderReport.getDateMarksReleased()); + userreport.setMarkFileName(leaderReport.getMarkFileName()); + userreport.setMarkFileUUID(leaderReport.getMarkFileUUID()); + userreport.setMarkFileVersionID(leaderReport.getMarkFileVersionID()); + userreport.setMarks(leaderReport.getMarks()); + // reportID is set by Hibernate to match submissionID + } else { + usersubmission.setReport(null); + } + + submissionDetailsDAO.save(usersubmission); } } @@ -663,6 +697,7 @@ return new ArrayList(details); } + @Override public SubmissionDetails getSubmissionDetail(Long detailId) { return submissionDetailsDAO.getSubmissionDetailsByID(detailId); @@ -728,6 +763,13 @@ SubmitFilesSession session = getSessionById(sessionID); SubmitFilesContent content = session.getContent(); if (content.isUseSelectLeaderToolOuput()) { + + // can share the mark file across users + NodeKey nodeKey = null; + if ((markFile != null) && !StringUtils.isEmpty(markFile.getFileName())) { + nodeKey = this.processFile(markFile); + } + List reportIDs = submitUserDAO.getReportsForGroup(sessionID, reportID); for (Long reportIDGroup : reportIDs) { @@ -738,7 +780,7 @@ report.setMarks(marks); // If there is a new file, delete the existing and add the mark file - if ((markFile != null) && !StringUtils.isEmpty(markFile.getFileName())) { + if ( nodeKey != null) { // Delete the existing if (report.getMarkFileUUID() != null) { @@ -748,11 +790,6 @@ report.setMarkFileVersionID(null); } - // Add the new file - NodeKey nodeKey = this.processFile(markFile); - // NodeKey nodeKey = toolContentHandler.uploadFile(marksFileInputStream, marksFileName, null, - // IToolContentHandler.TYPE_ONLINE); - report.setMarkFileName(markFile.getFileName()); report.setMarkFileUUID(nodeKey.getUuid()); report.setMarkFileVersionID(nodeKey.getVersion()); @@ -798,15 +835,35 @@ } @Override - public void removeMarkFile(Long reportID, Long markFileUUID, Long markFileVersionID) { - SubmitFilesReport report = submitFilesReportDAO.getReportByID(reportID); - if (report != null) { - deleteFromRepository(markFileUUID, markFileVersionID); - report.setMarkFileName(null); - report.setMarkFileUUID(null); - report.setMarkFileVersionID(null); - submitFilesReportDAO.update(report); + public void removeMarkFile(Long reportID, Long markFileUUID, Long markFileVersionID, Long sessionID) { + + SubmitFilesSession session = getSessionById(sessionID); + SubmitFilesContent content = session.getContent(); + + if (content.isUseSelectLeaderToolOuput()) { + List reportIDs = submitUserDAO.getReportsForGroup(sessionID, reportID); + for (Long reportIDGroup : reportIDs) { + SubmitFilesReport report = submitFilesReportDAO.getReportByID(reportIDGroup); + if (report != null) { + report.setMarkFileName(null); + report.setMarkFileUUID(null); + report.setMarkFileVersionID(null); + submitFilesReportDAO.update(report); + } + } + + } else { + SubmitFilesReport report = submitFilesReportDAO.getReportByID(reportID); + if (report != null) { + report.setMarkFileName(null); + report.setMarkFileUUID(null); + report.setMarkFileVersionID(null); + submitFilesReportDAO.update(report); + } } + + deleteFromRepository(markFileUUID, markFileVersionID); + } @Override Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/action/LearnerAction.java =================================================================== diff -u -rc2388b4c760cc0a05554b831b3205e4831f6e17b -r309d4e79cd4ea1ee0b3e4cf0e070dd5243e73203 --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/action/LearnerAction.java (.../LearnerAction.java) (revision c2388b4c760cc0a05554b831b3205e4831f6e17b) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/action/LearnerAction.java (.../LearnerAction.java) (revision 309d4e79cd4ea1ee0b3e4cf0e070dd5243e73203) @@ -208,56 +208,89 @@ SortedMap submittedFilesMap = submitFilesService.getFilesUploadedBySession(sessionID, request.getLocale()); // support for leader select feature - SubmitUser groupLeader = content.isUseSelectLeaderToolOuput() - ? submitFilesService.checkLeaderSelectToolForSessionLeader(learner, new Long(sessionID).longValue()) - : null; - + SubmitUser groupLeader = content.isUseSelectLeaderToolOuput() + ? submitFilesService.checkLeaderSelectToolForSessionLeader(learner, new Long(sessionID).longValue()) + : null; + if (content.isUseSelectLeaderToolOuput() && !mode.isTeacher()) { - - // forwards to the leaderSelection page + + // forwards to the leaderSelection page if (groupLeader == null) { List groupUsers = submitFilesService.getUsersBySession(new Long(sessionID).longValue()); request.setAttribute(SbmtConstants.ATTR_GROUP_USERS, groupUsers); request.setAttribute(SbmtConstants.ATTR_SUBMIT_FILES, submittedFilesMap); return mapping.findForward(SbmtConstants.WAIT_FOR_LEADER); } - + // forwards to the waitForLeader pages - boolean isNonLeader = !userID.equals(groupLeader.getUserID()); + boolean isNonLeader = !userID.equals(groupLeader.getUserID()); - if (isNonLeader && !learner.isFinished()) { - List filesUploadedByLeader = submitFilesService.getFilesUploadedByUser(groupLeader.getUserID(), sessionID, request.getLocale(), false); + if (isNonLeader && !learner.isFinished()) { + List filesUploadedByLeader = submitFilesService.getFilesUploadedByUser(groupLeader.getUserID(), + sessionID, request.getLocale(), false); - - if (filesUploadedByLeader == null ) { - request.setAttribute(SbmtConstants.PARAM_WAITING_MESSAGE_KEY, "label.waiting.for.leader.launch.time.limit"); - return mapping.findForward(SbmtConstants.WAIT_FOR_LEADER_TIME_LIMIT); - } - - //if the time is up and leader hasn't submitted response - show waitForLeaderFinish page - if ( !groupLeader.isFinished()) { - request.setAttribute(SbmtConstants.PARAM_WAITING_MESSAGE_KEY, "label.waiting.for.leader.finish"); - return mapping.findForward(SbmtConstants.WAIT_FOR_LEADER_TIME_LIMIT); - } - } - - // check if leader has submitted all answers - if (groupLeader.isFinished()) { - submitFilesService.copyLearnerContent(groupLeader,learner); - filesUploaded = submitFilesService.getFilesUploadedByUser(learner.getUserID(), learner.getSessionID(), request.getLocale(), false); - setLearnerDTO(request, sessionMap, learner, filesUploaded, mode); - } + if (filesUploadedByLeader == null) { + request.setAttribute(SbmtConstants.PARAM_WAITING_MESSAGE_KEY, + "label.waiting.for.leader.launch.time.limit"); + return mapping.findForward(SbmtConstants.WAIT_FOR_LEADER_TIME_LIMIT); + } + + //if the time is up and leader hasn't submitted response - show waitForLeaderFinish page + if (!groupLeader.isFinished()) { + request.setAttribute(SbmtConstants.PARAM_WAITING_MESSAGE_KEY, "label.waiting.for.leader.finish"); + return mapping.findForward(SbmtConstants.WAIT_FOR_LEADER_TIME_LIMIT); + } + } + + // check if leader has submitted all answers + if (groupLeader.isFinished()) { + submitFilesService.copyLearnerContent(groupLeader, learner); + filesUploaded = submitFilesService.getFilesUploadedByUser(learner.getUserID(), learner.getSessionID(), + request.getLocale(), false); + setLearnerDTO(request, sessionMap, learner, filesUploaded, mode); + } } - - sessionMap.put(SbmtConstants.ATTR_GROUP_LEADER, groupLeader); - boolean isUserLeader = submitFilesService.isUserGroupLeader(learner, sessionID); - sessionMap.put(SbmtConstants.ATTR_IS_USER_LEADER, isUserLeader); - - boolean hasEditRight = !content.isUseSelectLeaderToolOuput() - || content.isUseSelectLeaderToolOuput() && isUserLeader; - sessionMap.put(SbmtConstants.ATTR_HAS_EDIT_RIGHT, hasEditRight); + sessionMap.put(SbmtConstants.ATTR_GROUP_LEADER, groupLeader); + boolean isUserLeader = submitFilesService.isUserGroupLeader(learner, sessionID); + sessionMap.put(SbmtConstants.ATTR_IS_USER_LEADER, isUserLeader); + + boolean hasEditRight = !content.isUseSelectLeaderToolOuput() + || content.isUseSelectLeaderToolOuput() && isUserLeader; + sessionMap.put(SbmtConstants.ATTR_HAS_EDIT_RIGHT, hasEditRight); + + return mapping.findForward(SbmtConstants.SUCCESS); + } + + /** + * Loads the main learner page with the details currently in the session map + * + * @param mapping + * @param form + * @param request + * @param response + * @return + */ + public ActionForward refresh(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse response) { + String sessionMapID = WebUtil.readStrParam(request, SbmtConstants.ATTR_SESSION_MAP_ID); + SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); + ((LearnerForm) form).setSessionMapID(sessionMap.getSessionID()); + request.setAttribute(SbmtConstants.ATTR_SESSION_MAP_ID, sessionMapID); + // get session from shared session. + HttpSession ss = SessionManager.getSession(); + // get back login user DTO + UserDTO user = (UserDTO) ss.getAttribute(AttributeNames.USER); + Integer userID = user.getUserID(); + Long sessionID = (Long) sessionMap.get(AttributeNames.PARAM_TOOL_SESSION_ID); + + ISubmitFilesService submitFilesService = getService(); + List filesUploaded = submitFilesService.getFilesUploadedByUser(userID, sessionID, request.getLocale(), false); + SubmitUser learner = getCurrentLearner(sessionID, submitFilesService); + ToolAccessMode mode = (ToolAccessMode) sessionMap.get(AttributeNames.ATTR_MODE); + setLearnerDTO(request, sessionMap, learner, filesUploaded, mode); + return mapping.findForward(SbmtConstants.SUCCESS); } @@ -317,10 +350,7 @@ ISubmitFilesService submitFilesService = getService(); submitFilesService.uploadFileToSession(sessionID, uploadedFile, fileDescription, userID); - List filesUploaded = submitFilesService.getFilesUploadedByUser(userID, sessionID, request.getLocale(), false); SubmitUser learner = getCurrentLearner(sessionID, submitFilesService); - ToolAccessMode mode = (ToolAccessMode) sessionMap.get(AttributeNames.ATTR_MODE); - setLearnerDTO(request, sessionMap, learner, filesUploaded, mode); SubmitFilesContent content = submitFilesService.getSessionById(sessionID).getContent(); if (content.isNotifyTeachersOnFileSubmit()) { @@ -329,8 +359,9 @@ new Object[] { learner.getFullName() }); submitFilesService.getEventNotificationService().notifyLessonMonitors(sessionID, message, false); } - - return mapping.getInputForward(); + + request.setAttribute(SbmtConstants.ATTR_SESSION_MAP_ID, sessionMapID); + return mapping.findForward("uploadredirect"); } /** Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/action/MarkAction.java =================================================================== diff -u -r1688016bbb43db756bca9b93361c2a3833089d12 -r309d4e79cd4ea1ee0b3e4cf0e070dd5243e73203 --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/action/MarkAction.java (.../MarkAction.java) (revision 1688016bbb43db756bca9b93361c2a3833089d12) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/action/MarkAction.java (.../MarkAction.java) (revision 309d4e79cd4ea1ee0b3e4cf0e070dd5243e73203) @@ -193,7 +193,7 @@ } submitFilesService.removeMarkFile(markForm.getReportID(), markForm.getMarkFileUUID(), - markForm.getMarkFileVersionID()); + markForm.getMarkFileVersionID(), markForm.getToolSessionID()); FileDetailsDTO fileDetailsDTO = submitFilesService.getFileDetails(markForm.getDetailID(), request.getLocale()); updateMarkForm(markForm, fileDetailsDTO); Index: lams_tool_sbmt/web/WEB-INF/struts-config.xml =================================================================== diff -u -r1688016bbb43db756bca9b93361c2a3833089d12 -r309d4e79cd4ea1ee0b3e4cf0e070dd5243e73203 --- lams_tool_sbmt/web/WEB-INF/struts-config.xml (.../struts-config.xml) (revision 1688016bbb43db756bca9b93361c2a3833089d12) +++ lams_tool_sbmt/web/WEB-INF/struts-config.xml (.../struts-config.xml) (revision 309d4e79cd4ea1ee0b3e4cf0e070dd5243e73203) @@ -105,6 +105,11 @@ redirect="false" /> + +<%@ taglib uri="tags-bean" prefix="bean"%> +<%@ taglib uri="tags-html" prefix="html"%> +<%@ taglib uri="tags-core" prefix="c"%> +<%@ taglib uri="tags-fmt" prefix="fmt"%> +<%@ taglib uri="tags-lams" prefix="lams"%> + + + + + + +<%@ include file="/common/header.jsp"%> + + + + + +
+ +
+
+ + +
Index: lams_tool_sbmt/web/learner/sbmtlearner.jsp =================================================================== diff -u -r1688016bbb43db756bca9b93361c2a3833089d12 -r309d4e79cd4ea1ee0b3e4cf0e070dd5243e73203 --- lams_tool_sbmt/web/learner/sbmtlearner.jsp (.../sbmtlearner.jsp) (revision 1688016bbb43db756bca9b93361c2a3833089d12) +++ lams_tool_sbmt/web/learner/sbmtlearner.jsp (.../sbmtlearner.jsp) (revision 309d4e79cd4ea1ee0b3e4cf0e070dd5243e73203) @@ -99,8 +99,9 @@ } } - function deleteLearnerFile(detailId) { + function deleteLearnerFile(detailId, filename) { var msg = ''; + msg = msg.replace('{0}', filename); var answer = confirm(msg); if (answer) { $.ajax({ @@ -202,7 +203,7 @@ - + ">