Index: lams_tool_survey/db/sql/create_lams_tool_survey.sql =================================================================== diff -u -r7b79396263b36a933d66390fb9ab12821956d59d -rda3ab23df4afd600475db0e6f4886a0358f849aa --- lams_tool_survey/db/sql/create_lams_tool_survey.sql (.../create_lams_tool_survey.sql) (revision 7b79396263b36a933d66390fb9ab12821956d59d) +++ lams_tool_survey/db/sql/create_lams_tool_survey.sql (.../create_lams_tool_survey.sql) (revision da3ab23df4afd600475db0e6f4886a0358f849aa) @@ -16,6 +16,7 @@ instructions text, online_instructions text, offline_instructions text, +submission_deadline datetime, content_in_use smallint, define_later smallint, content_id bigint unique, Index: lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/SurveyConstants.java =================================================================== diff -u -rf0450cb2776a8eba5e274ec3e72f83a333f5d229 -rda3ab23df4afd600475db0e6f4886a0358f849aa --- lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/SurveyConstants.java (.../SurveyConstants.java) (revision f0450cb2776a8eba5e274ec3e72f83a333f5d229) +++ lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/SurveyConstants.java (.../SurveyConstants.java) (revision da3ab23df4afd600475db0e6f4886a0358f849aa) @@ -47,6 +47,12 @@ public static final String RUN_OFFLINE = "runOffline"; public static final String FORWARD_RESULT = "result"; + + // for submission deadline + + public static final String ATTR_SUBMISSION_DEADLINE = "submissionDeadline"; + + public static final String ATTR_IS_SUBMISSION_DEADLINE_PASSED = "isSubmissionDeadlinePassed"; // for parameters' name public static final String PARAM_FILE_VERSION_ID = "fileVersionId"; Index: lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/dbupdates/patch20110406_updateFrom235.sql =================================================================== diff -u --- lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/dbupdates/patch20110406_updateFrom235.sql (revision 0) +++ lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/dbupdates/patch20110406_updateFrom235.sql (revision da3ab23df4afd600475db0e6f4886a0358f849aa) @@ -0,0 +1,17 @@ +-- SQL statements to update to LAMS 2.3.6 + +-- Turn off autocommit, so nothing is committed if there is an error +SET AUTOCOMMIT = 0; + +----------------------Put all sql statements below here------------------------- + +-- LDEV-2657 +alter table tl_lasurv11_survey add column submission_deadline datetime default null; + +UPDATE lams_tool SET tool_version = "20110406" WHERE tool_signature = "lasurv11"; + +----------------------Put all sql statements above here------------------------- + +-- If there were no errors, commit and restore autocommit to on +COMMIT; +SET AUTOCOMMIT = 1; \ No newline at end of file Index: lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/model/Survey.java =================================================================== diff -u -r7b79396263b36a933d66390fb9ab12821956d59d -rda3ab23df4afd600475db0e6f4886a0358f849aa --- lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/model/Survey.java (.../Survey.java) (revision 7b79396263b36a933d66390fb9ab12821956d59d) +++ lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/model/Survey.java (.../Survey.java) (revision da3ab23df4afd600475db0e6f4886a0358f849aa) @@ -77,6 +77,7 @@ // general infomation private Date created; private Date updated; + private Date submissionDeadline; private SurveyUser createdBy; // survey Items @@ -539,4 +540,18 @@ public void setConditions(Set conditions) { this.conditions = conditions; } + + + + /** + * @hibernate.property column="submission_deadline" + * @return date submissionDeadline + */ + public Date getSubmissionDeadline() { + return submissionDeadline; + } + + public void setSubmissionDeadline(Date submissionDeadline) { + this.submissionDeadline = submissionDeadline; + } } Index: lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/web/action/LearningAction.java =================================================================== diff -u -re8cd25c0973abcdc239863c4314aab7dd1d9777f -rda3ab23df4afd600475db0e6f4886a0358f849aa --- lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/web/action/LearningAction.java (.../LearningAction.java) (revision e8cd25c0973abcdc239863c4314aab7dd1d9777f) +++ lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/web/action/LearningAction.java (.../LearningAction.java) (revision da3ab23df4afd600475db0e6f4886a0358f849aa) @@ -33,6 +33,7 @@ import java.util.Map; import java.util.SortedMap; import java.util.TreeMap; +import java.util.TimeZone; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; @@ -65,6 +66,7 @@ import org.lamsfoundation.lams.tool.survey.web.form.ReflectionForm; import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; +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; @@ -172,6 +174,9 @@ entryText = notebookEntry.getEntry(); } + // get session from shared session. + HttpSession ss = SessionManager.getSession(); + // basic information sessionMap.put(SurveyConstants.ATTR_TITLE, survey.getTitle()); sessionMap.put(SurveyConstants.ATTR_SURVEY_INSTRUCTION, survey.getInstructions()); @@ -205,6 +210,23 @@ sessionMap.put(SurveyConstants.PARAM_RUN_OFFLINE, false); } + // check if there is submission deadline + Date submissionDeadline = survey.getSubmissionDeadline(); + if (submissionDeadline != null) { + //store submission deadline to sessionMap + sessionMap.put(SurveyConstants.ATTR_SUBMISSION_DEADLINE, submissionDeadline); + + UserDTO learnerDto = (UserDTO) ss.getAttribute(AttributeNames.USER); + TimeZone learnerTimeZone = learnerDto.getTimeZone(); + Date tzSubmissionDeadline = DateUtil.convertToTimeZoneFromDefault(learnerTimeZone, submissionDeadline); + Date currentLearnerDate = DateUtil.convertToTimeZoneFromDefault(learnerTimeZone, new Date()); + + //calculate whether submission deadline has passed, and if so forward to "runOffline" + if (currentLearnerDate.after(tzSubmissionDeadline)) { + return mapping.findForward(SurveyConstants.RUN_OFFLINE); + } + } + // init survey item list SortedMap surveyItemList = getQuestionList(sessionMap); surveyItemList.clear(); Index: lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/web/action/MonitoringAction.java =================================================================== diff -u -rf0450cb2776a8eba5e274ec3e72f83a333f5d229 -rda3ab23df4afd600475db0e6f4886a0358f849aa --- lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/web/action/MonitoringAction.java (.../MonitoringAction.java) (revision f0450cb2776a8eba5e274ec3e72f83a333f5d229) +++ lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/web/action/MonitoringAction.java (.../MonitoringAction.java) (revision da3ab23df4afd600475db0e6f4886a0358f849aa) @@ -33,10 +33,13 @@ import java.util.SortedMap; import java.util.TreeMap; import java.util.Map.Entry; +import java.util.Date; +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; @@ -62,14 +65,19 @@ import org.lamsfoundation.lams.tool.survey.service.ISurveyService; import org.lamsfoundation.lams.tool.survey.util.SurveyUserComparator; import org.lamsfoundation.lams.tool.survey.util.SurveyWebUtils; +import org.lamsfoundation.lams.usermanagement.dto.UserDTO; import org.lamsfoundation.lams.util.MessageService; import org.lamsfoundation.lams.util.WebUtil; +import org.lamsfoundation.lams.util.DateUtil; import org.lamsfoundation.lams.web.util.AttributeNames; import org.lamsfoundation.lams.web.util.SessionMap; +import org.lamsfoundation.lams.web.session.SessionManager; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; public class MonitoringAction extends Action { + + public ISurveyService surveyService; private static final String MSG_LABEL_QUESTION = "label.question"; private static final String MSG_LABEL_OPEN_RESPONSE = "label.open.response"; private static final String MSG_LABEL_SESSION_NAME = "label.session.name"; @@ -102,6 +110,10 @@ if (param.equals("exportSurvey")) { return exportSurvey(mapping, form, request, response); } + + if (param.equals("setSubmissionDeadline")) { + return setSubmissionDeadline(mapping, form, request, response); + } return mapping.findForward(SurveyConstants.ERROR); } @@ -118,6 +130,10 @@ private ActionForward summary(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { + + // get session from shared session. + HttpSession ss = SessionManager.getSession(); + // initial Session Map SessionMap sessionMap = new SessionMap(); request.getSession().setAttribute(sessionMap.getSessionID(), sessionMap); @@ -153,6 +169,20 @@ sessionMap.put(SurveyConstants.ATTR_REFLECT_LIST, relectList); sessionMap.put(SurveyConstants.ATTR_IS_GROUPED_ACTIVITY, service.isGroupedActivity(contentId)); + // check if there is submission deadline + Date submissionDeadline = survey.getSubmissionDeadline(); + + if (submissionDeadline != null) { + + UserDTO learnerDto = (UserDTO) ss.getAttribute(AttributeNames.USER); + TimeZone learnerTimeZone = learnerDto.getTimeZone(); + Date tzSubmissionDeadline = DateUtil.convertToTimeZoneFromDefault(learnerTimeZone, submissionDeadline); + MonitoringAction.log.info("Time:" + tzSubmissionDeadline.getTime()); + //store submission deadline to sessionMap + sessionMap.put(SurveyConstants.ATTR_SUBMISSION_DEADLINE, tzSubmissionDeadline.getTime()); + + } + return mapping.findForward(SurveyConstants.SUCCESS); } @@ -434,6 +464,37 @@ } /** + * Set Submission Deadline + * + * @param mapping + * @param form + * @param request + * @param response + * @return + */ + public ActionForward setSubmissionDeadline(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse response) { + surveyService = getSurveyService(); + + Long contentID = WebUtil.readLongParam(request, AttributeNames.PARAM_TOOL_CONTENT_ID); + Survey survey = surveyService.getSurveyByContentId(contentID); + + Long dateParameter = WebUtil.readLongParam(request, SurveyConstants.ATTR_SUBMISSION_DEADLINE, true); + Date tzSubmissionDeadline = null; + if (dateParameter != null) { + Date submissionDeadline = new Date(dateParameter); + HttpSession ss = SessionManager.getSession(); + UserDTO teacher = (UserDTO) ss.getAttribute(AttributeNames.USER); + TimeZone teacherTimeZone = teacher.getTimeZone(); + tzSubmissionDeadline = DateUtil.convertFromTimeZoneToDefault(teacherTimeZone, submissionDeadline); + } + survey.setSubmissionDeadline(tzSubmissionDeadline); + surveyService.saveOrUpdateSurvey(survey); + + return null; + } + + /** * Removes all the html tags from a string * @param string * @return