Index: lams_build/lib/lams/lams-monitoring.jar =================================================================== RCS file: /usr/local/cvsroot/lams_build/lib/lams/lams-monitoring.jar,v diff -u -r1.63.2.6 -r1.63.2.7 Binary files differ Index: lams_build/lib/lams/lams.jar =================================================================== RCS file: /usr/local/cvsroot/lams_build/lib/lams/lams.jar,v diff -u -r1.420.2.79 -r1.420.2.80 Binary files differ Index: lams_central/conf/language/lams/ApplicationResources.properties =================================================================== RCS file: /usr/local/cvsroot/lams_central/conf/language/lams/ApplicationResources.properties,v diff -u -r1.138.2.27 -r1.138.2.28 --- lams_central/conf/language/lams/ApplicationResources.properties 17 Jun 2016 11:19:03 -0000 1.138.2.27 +++ lams_central/conf/language/lams/ApplicationResources.properties 27 Jun 2016 10:01:31 -0000 1.138.2.28 @@ -430,7 +430,8 @@ label.course.groups.grouping.use.confirm =Are you sure you want to use grouping "[0]"? Groups will be created for this lesson and learners assigned to them. label.course.groups.locked =Some users in this group already used the grouping. The group is now locked: you can not remove it or move users to another group. label.course.groups.locked.transfer =Are you sure you want to move these users to a locked group? You will not be allowed to move them to another group later. -label.tab.advanced.field.restart =Learners always start from the first activity +label.tab.advanced.field.force.restart =Learners always start from the first activity +label.tab.advanced.field.allow.restart =Learners can restart the lesson error.firstname.invalid.characters =First name contains invalid characters error.lastname.invalid.characters =Last name contains invalid characters error.username.invalid.characters =Username can only contain alphanumeric characters and no spaces. Index: lams_central/src/java/org/lamsfoundation/lams/authoring/web/AuthoringAction.java =================================================================== RCS file: /usr/local/cvsroot/lams_central/src/java/org/lamsfoundation/lams/authoring/web/AuthoringAction.java,v diff -u -r1.53.2.17 -r1.53.2.18 --- lams_central/src/java/org/lamsfoundation/lams/authoring/web/AuthoringAction.java 2 Jun 2016 14:50:41 -0000 1.53.2.17 +++ lams_central/src/java/org/lamsfoundation/lams/authoring/web/AuthoringAction.java 27 Jun 2016 10:01:31 -0000 1.53.2.18 @@ -282,7 +282,7 @@ if (learningDesignID != null) { User user = (User) getUserManagementService().findById(User.class, userID); Lesson lesson = getMonitoringService().initializeLessonWithoutLDcopy(title, "", learningDesignID, user, - null, false, false, false, false, true, true, false, null, null); + null, false, false, false, false, true, true, false, false, null, null); Organisation organisation = getMonitoringService().getOrganisation(organisationID); List staffList = new LinkedList(); Index: lams_central/src/java/org/lamsfoundation/lams/web/HomeAction.java =================================================================== RCS file: /usr/local/cvsroot/lams_central/src/java/org/lamsfoundation/lams/web/HomeAction.java,v diff -u -r1.60.2.24 -r1.60.2.25 --- lams_central/src/java/org/lamsfoundation/lams/web/HomeAction.java 6 Jun 2016 08:44:20 -0000 1.60.2.24 +++ lams_central/src/java/org/lamsfoundation/lams/web/HomeAction.java 27 Jun 2016 10:01:31 -0000 1.60.2.25 @@ -177,7 +177,7 @@ return mapping.findForward("lessonIntro"); } - if (lesson.getLearnerRestart()) { + if (lesson.getForceLearnerRestart()) { // start the lesson from the beginning each time getLessonService().removeLearnerProgress(lessonId, user.getUserID()); } @@ -187,6 +187,7 @@ } req.setAttribute(AttributeNames.PARAM_LESSON_ID, String.valueOf(lessonId)); + req.setAttribute("allowRestart", lesson.getAllowLearnerRestart()); req.setAttribute(AttributeNames.PARAM_PRESENCE_ENABLED, String.valueOf(lesson.getLearnerPresenceAvailable())); req.setAttribute(AttributeNames.PARAM_PRESENCE_IM_ENABLED, String.valueOf(lesson.getLearnerImAvailable())); Index: lams_central/src/java/org/lamsfoundation/lams/webservice/xml/LessonJoinServlet.java =================================================================== RCS file: /usr/local/cvsroot/lams_central/src/java/org/lamsfoundation/lams/webservice/xml/LessonJoinServlet.java,v diff -u -r1.12.2.6 -r1.12.2.7 --- lams_central/src/java/org/lamsfoundation/lams/webservice/xml/LessonJoinServlet.java 11 May 2016 07:07:56 -0000 1.12.2.6 +++ lams_central/src/java/org/lamsfoundation/lams/webservice/xml/LessonJoinServlet.java 27 Jun 2016 10:01:31 -0000 1.12.2.7 @@ -20,7 +20,6 @@ * **************************************************************** */ - package org.lamsfoundation.lams.webservice.xml; import java.io.IOException; @@ -263,7 +262,8 @@ Boolean learnerImAvailable; Boolean liveEditEnabled; Boolean enableNotifications; - Boolean learnerRestart; + Boolean forceLearnerRestart; + Boolean allowLearnerRestart; Integer ownerUserId; Organisation org = (Organisation) LessonJoinServlet.userService.findById(Organisation.class, orgId); String learnerGroupName; @@ -283,7 +283,8 @@ learnerImAvailable = l.getLearnerImAvailable(); liveEditEnabled = l.getLiveEditEnabled(); enableNotifications = l.getEnableLessonNotifications(); - learnerRestart = l.getLearnerRestart(); + forceLearnerRestart = l.getForceLearnerRestart(); + allowLearnerRestart = l.getAllowLearnerRestart(); ownerUserId = l.getUser().getUserId(); learnerGroupName = l.getLessonClass().getLearnersGroup().getGroupName(); staffGroupName = l.getLessonClass().getStaffGroup().getGroupName(); @@ -299,7 +300,8 @@ learnerImAvailable = false; liveEditEnabled = false; enableNotifications = false; - learnerRestart = false; + forceLearnerRestart = false; + allowLearnerRestart = false; ownerUserId = ld.getUser().getUserId(); learnerGroupName = org.getName() + " learners"; staffGroupName = org.getName() + " staff"; @@ -308,7 +310,7 @@ } Lesson lesson = LessonJoinServlet.monitoringService.initializeLesson(lessonName, lessonDescription, ldId, orgId, ownerUserId, null, enableLessonIntro, displayDesignImage, learnerPresenceAvailable, learnerImAvailable, - liveEditEnabled, enableNotifications, learnerRestart, null, null); + liveEditEnabled, enableNotifications, forceLearnerRestart, allowLearnerRestart, null, null); LessonJoinServlet.monitoringService.createLessonClassForLesson(lesson.getLessonId().longValue(), org, learnerGroupName, learnerList, staffGroupName, staffList, ownerUserId); LessonJoinServlet.monitoringService.startLesson(lesson.getLessonId().longValue(), ownerUserId); Index: lams_central/src/java/org/lamsfoundation/lams/webservice/xml/LessonManagerServlet.java =================================================================== RCS file: /usr/local/cvsroot/lams_central/src/java/org/lamsfoundation/lams/webservice/xml/LessonManagerServlet.java,v diff -u -r1.48.2.15 -r1.48.2.16 --- lams_central/src/java/org/lamsfoundation/lams/webservice/xml/LessonManagerServlet.java 23 May 2016 09:05:33 -0000 1.48.2.15 +++ lams_central/src/java/org/lamsfoundation/lams/webservice/xml/LessonManagerServlet.java 27 Jun 2016 10:01:31 -0000 1.48.2.16 @@ -140,7 +140,8 @@ boolean presenceEnable = WebUtil.readBooleanParam(request, CentralConstants.PARAM_LEARNER_PRESENCE_ENABLE, false); boolean imEnable = WebUtil.readBooleanParam(request, CentralConstants.PARAM_LEARNER_IM_ENABLE, false); - boolean enableNotifications = WebUtil.readBooleanParam(request, CentralConstants.PARAM_ENABLE_NOTIFICATIONS, false); + boolean enableNotifications = WebUtil.readBooleanParam(request, CentralConstants.PARAM_ENABLE_NOTIFICATIONS, + false); Long ldId = null; Long lsId = null; @@ -341,7 +342,7 @@ // 1. init lesson Lesson lesson = LessonManagerServlet.monitoringService.initializeLesson(title, desc, ldId, organisation.getOrganisationId(), user.getUserId(), customCSV, false, false, presenceEnable, - imEnable, true, enableNotifications, false, null, null); + imEnable, true, enableNotifications, false, false, null, null); // 2. create lessonClass for lesson createLessonClass(lesson, organisation, user); // 3. start lesson @@ -368,7 +369,7 @@ // 1. init lesson Lesson lesson = LessonManagerServlet.monitoringService.initializeLesson(title, desc, ldId, orgMap.getOrganisation().getOrganisationId(), userMap.getUser().getUserId(), customCSV, false, - false, presenceEnable, imEnable, true, enableNotifications, false, null, null); + false, presenceEnable, imEnable, true, enableNotifications, false, false, null, null); // 2. create lessonClass for lesson createLessonClass(lesson, orgMap.getOrganisation(), userMap.getUser()); // 3. schedule lesson Index: lams_central/web/addLesson.jsp =================================================================== RCS file: /usr/local/cvsroot/lams_central/web/addLesson.jsp,v diff -u -r1.16.2.8 -r1.16.2.9 --- lams_central/web/addLesson.jsp 26 Feb 2016 06:50:57 -0000 1.16.2.8 +++ lams_central/web/addLesson.jsp 27 Jun 2016 10:01:31 -0000 1.16.2.9 @@ -190,7 +190,8 @@

-
+
+



Index: lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/lesson/Lesson.hbm.xml =================================================================== RCS file: /usr/local/cvsroot/lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/lesson/Lesson.hbm.xml,v diff -u -r1.47.2.5 -r1.47.2.6 --- lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/lesson/Lesson.hbm.xml 24 Feb 2016 12:35:46 -0000 1.47.2.5 +++ lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/lesson/Lesson.hbm.xml 27 Jun 2016 10:01:24 -0000 1.47.2.6 @@ -73,9 +73,12 @@ - + + + Index: lams_common/src/java/org/lamsfoundation/lams/dbupdates/patch2040064.sql =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/dbupdates/patch2040064.sql,v diff -u -r1.1.2.2 -r1.1.2.3 Binary files differ Index: lams_common/src/java/org/lamsfoundation/lams/lesson/Lesson.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/lesson/Lesson.java,v diff -u -r1.45.2.4 -r1.45.2.5 --- lams_common/src/java/org/lamsfoundation/lams/lesson/Lesson.java 11 May 2016 07:07:26 -0000 1.45.2.4 +++ lams_common/src/java/org/lamsfoundation/lams/lesson/Lesson.java 27 Jun 2016 10:01:24 -0000 1.45.2.5 @@ -157,10 +157,17 @@ /** * Should Learner start the lesson from the beginning each time he enters it. + * Content is not removed, LessonProgress is deleted, not archived. */ - private Boolean learnerRestart; + private Boolean forceLearnerRestart; /** + * Should Learners be allowed to restart the lesson after finishing it. + * Content is not removed, LessonProgress is archived and then deleted. + */ + private Boolean allowLearnerRestart; + + /** * For lesson conditional release */ private Set precedingLessons; @@ -181,11 +188,11 @@ Integer previousLessonStateId, LearningDesign learningDesign, Set learnerProgresses, Boolean enableLessonIntro, Boolean displayDesignImage, Boolean learnerPresenceAvailable, Boolean learnerImAvailable, Boolean liveEditEnabled, Boolean enableLessonNotifications, - Boolean learnerRestart, Integer scheduledNumberDaysTolessonFinish) { + Boolean forceLearnerRestart, Boolean allowLearnerRestart, Integer scheduledNumberDaysTolessonFinish) { this(null, name, description, createDateTime, null, null, user, lessonStateId, previousLessonStateId, enableLessonIntro, displayDesignImage, false, learningDesign, null, null, learnerProgresses, learnerPresenceAvailable, learnerImAvailable, liveEditEnabled, enableLessonNotifications, - learnerRestart, scheduledNumberDaysTolessonFinish); + forceLearnerRestart, allowLearnerRestart, scheduledNumberDaysTolessonFinish); } /** full constructor */ @@ -194,7 +201,7 @@ Boolean enableLessonIntro, Boolean displayDesignImage, Boolean lockedForEdit, LearningDesign learningDesign, LessonClass lessonClass, Organisation organisation, Set learnerProgresses, Boolean learnerPresenceAvailable, Boolean learnerImAvailable, Boolean liveEditEnabled, Boolean enableLessonNotifications, - Boolean learnerRestart, Integer scheduledNumberDaysToLessonFinish) { + Boolean forceLearnerRestart, Boolean allowLearnerRestart, Integer scheduledNumberDaysToLessonFinish) { this.lessonId = lessonId; this.lessonName = name; this.lessonDescription = description; @@ -215,7 +222,8 @@ this.learnerProgresses = learnerProgresses; this.liveEditEnabled = liveEditEnabled; this.enableLessonNotifications = enableLessonNotifications; - this.learnerRestart = learnerRestart; + this.forceLearnerRestart = forceLearnerRestart; + this.allowLearnerRestart = allowLearnerRestart; this.gradebookUserLessons = new HashSet(); this.marksReleased = false; this.scheduledNumberDaysToLessonFinish = scheduledNumberDaysToLessonFinish; @@ -234,11 +242,11 @@ public static Lesson createNewLessonWithoutClass(String lessonName, String lessonDescription, User user, LearningDesign ld, Boolean enableLessonIntro, Boolean displayDesignImage, Boolean learnerPresenceAvailable, Boolean learnerImAvailable, Boolean liveEditEnabled, Boolean enableLessonNotifications, - Boolean learnerRestart, Integer scheduledNumberDaysToLessonFinish) { + Boolean forceLearnerRestart, Boolean allowLearnerRestart, Integer scheduledNumberDaysToLessonFinish) { return new Lesson(lessonName, lessonDescription, new Date(System.currentTimeMillis()), user, Lesson.CREATED, null, ld, new HashSet(), enableLessonIntro, displayDesignImage, learnerPresenceAvailable, - learnerImAvailable, liveEditEnabled, enableLessonNotifications, learnerRestart, - scheduledNumberDaysToLessonFinish); + learnerImAvailable, liveEditEnabled, enableLessonNotifications, forceLearnerRestart, + allowLearnerRestart, scheduledNumberDaysToLessonFinish); } // --------------------------------------------------------------------- @@ -562,14 +570,22 @@ this.marksReleased = marksReleased; } - public Boolean getLearnerRestart() { - return learnerRestart; + public Boolean getForceLearnerRestart() { + return forceLearnerRestart; } - public void setLearnerRestart(Boolean learnerRestart) { - this.learnerRestart = learnerRestart; + public void setForceLearnerRestart(Boolean forceLearnerRestart) { + this.forceLearnerRestart = forceLearnerRestart; } + public Boolean getAllowLearnerRestart() { + return allowLearnerRestart; + } + + public void setAllowLearnerRestart(Boolean allowLearnerRestart) { + this.allowLearnerRestart = allowLearnerRestart; + } + public Set getPrecedingLessons() { return precedingLessons; } Index: lams_learning/conf/language/lams/ApplicationResources.properties =================================================================== RCS file: /usr/local/cvsroot/lams_learning/conf/language/lams/ApplicationResources.properties,v diff -u -r1.59.2.4 -r1.59.2.5 --- lams_learning/conf/language/lams/ApplicationResources.properties 21 Jun 2016 10:25:33 -0000 1.59.2.4 +++ lams_learning/conf/language/lams/ApplicationResources.properties 27 Jun 2016 10:02:06 -0000 1.59.2.5 @@ -104,6 +104,7 @@ label.learner.progress.support =Support Activities label.submit.button =Submit label.learner.progress.review.activity =Review activity +message.learner.progress.restart.confirm =Are you sure you want to start the lesson from the beginning? label.schedule.gate.reach =You have reached the gate on label.schedule.gate.offset.1 =The gate will only be opened label.schedule.gate.offset.2 =after. Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerServiceProxy.java =================================================================== RCS file: /usr/local/cvsroot/lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerServiceProxy.java,v diff -u -r1.8.16.3 -r1.8.16.4 --- lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerServiceProxy.java 21 Jun 2016 10:25:33 -0000 1.8.16.3 +++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerServiceProxy.java 27 Jun 2016 10:02:06 -0000 1.8.16.4 @@ -27,7 +27,7 @@ import javax.servlet.ServletContext; import org.lamsfoundation.lams.learning.web.util.ActivityMapping; -import org.lamsfoundation.lams.monitoring.service.IMonitoringService; +import org.lamsfoundation.lams.lesson.service.ILessonService; import org.lamsfoundation.lams.tool.service.ILamsToolService; import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; import org.springframework.web.context.WebApplicationContext; @@ -82,8 +82,8 @@ return (ILamsToolService) LearnerServiceProxy.getDomainService(serlvetContext, "lamsToolService"); } - public static final IMonitoringService getMonitoringService(ServletContext servletContext) { - return (IMonitoringService) LearnerServiceProxy.getDomainService(servletContext, "monitoringService"); + public static final ILessonService getLessonService(ServletContext servletContext) { + return (ILessonService) LearnerServiceProxy.getDomainService(servletContext, "lessonService"); } /** Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/CompleteActivityAction.java =================================================================== RCS file: /usr/local/cvsroot/lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/CompleteActivityAction.java,v diff -u -r1.17.12.6 -r1.17.12.7 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/CompleteActivityAction.java 21 Jun 2016 10:25:33 -0000 1.17.12.6 +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/CompleteActivityAction.java 27 Jun 2016 10:02:06 -0000 1.17.12.7 @@ -89,8 +89,10 @@ if (lessonFinishCallbackUrl != null) { request.setAttribute("lessonFinishUrl", lessonFinishCallbackUrl); } + if (progress.getLesson().getAllowLearnerRestart()) { request.setAttribute("lessonID", progress.getLesson().getLessonId()); } + } ActionForward forward = null; // Set activity as complete Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LearnerAction.java =================================================================== RCS file: /usr/local/cvsroot/lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LearnerAction.java,v diff -u -r1.52.2.12 -r1.52.2.13 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LearnerAction.java 21 Jun 2016 10:25:33 -0000 1.52.2.12 +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LearnerAction.java 27 Jun 2016 10:02:06 -0000 1.52.2.13 @@ -53,7 +53,7 @@ import org.lamsfoundation.lams.lesson.LearnerProgress; import org.lamsfoundation.lams.lesson.LearnerProgressArchive; import org.lamsfoundation.lams.lesson.Lesson; -import org.lamsfoundation.lams.monitoring.service.IMonitoringService; +import org.lamsfoundation.lams.lesson.service.ILessonService; import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; @@ -213,11 +213,9 @@ attemptID, attemptedActivities, completedActivities, learnerProgress.getCurrentActivity(), learnerProgress.getLessonComplete(), learnerProgress.getStartDate(), learnerProgress.getFinishDate()); - // move learner to the beginning of lesson the same way Monitor can - IMonitoringService monitoringService = LearnerServiceProxy - .getMonitoringService(getServlet().getServletContext()); - monitoringService.forceCompleteActivitiesByUser(userID, userID, lessonID, - learnerProgress.getLesson().getLearningDesign().getFirstActivity().getActivityId(), true); + // remove learner progress + ILessonService lessonService = LearnerServiceProxy.getLessonService(getServlet().getServletContext()); + lessonService.removeLearnerProgress(lessonID, userID); IUserManagementService userManagementService = LearnerServiceProxy .getUserManagementService(getServlet().getServletContext()); Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LessonCompleteActivityAction.java =================================================================== RCS file: /usr/local/cvsroot/lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LessonCompleteActivityAction.java,v diff -u -r1.7.2.5 -r1.7.2.6 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LessonCompleteActivityAction.java 21 Jun 2016 10:25:33 -0000 1.7.2.5 +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LessonCompleteActivityAction.java 27 Jun 2016 10:02:06 -0000 1.7.2.6 @@ -42,16 +42,6 @@ /** * Action class run when the learner finishes a lesson. - * - * XDoclet definition: - * - * - * - * - * - * - * - * */ public class LessonCompleteActivityAction extends ActivityAction { @@ -84,7 +74,9 @@ if (lessonFinishCallbackUrl != null) { request.setAttribute("lessonFinishUrl", lessonFinishCallbackUrl); } + if (learnerProgress.getLesson().getAllowLearnerRestart()) { request.setAttribute("lessonID", learnerProgress.getLesson().getLessonId()); + } return mapping.findForward("lessonComplete"); } Index: lams_learning/web/lessonComplete.jsp =================================================================== RCS file: /usr/local/cvsroot/lams_learning/web/lessonComplete.jsp,v diff -u -r1.26.2.3 -r1.26.2.4 --- lams_learning/web/lessonComplete.jsp 21 Jun 2016 10:25:33 -0000 1.26.2.3 +++ lams_learning/web/lessonComplete.jsp 27 Jun 2016 10:02:06 -0000 1.26.2.4 @@ -29,6 +29,14 @@ + + @@ -58,7 +66,7 @@ Index: lams_learning/web/main.jsp =================================================================== RCS file: /usr/local/cvsroot/lams_learning/web/main.jsp,v diff -u -r1.31.2.10 -r1.31.2.11 --- lams_learning/web/main.jsp 24 Feb 2016 12:35:28 -0000 1.31.2.10 +++ lams_learning/web/main.jsp 27 Jun 2016 10:02:06 -0000 1.31.2.11 @@ -35,7 +35,9 @@ TOSTART_ACTIVITY : '', - SUPPORT_ACTIVITY : '' + SUPPORT_ACTIVITY : '', + + CONFIRM_RESTART : '' }, parentURL = "${notifyCloseURL}", @@ -97,13 +99,22 @@
- + + +
+ - +
+ + + +
Index: lams_learning/web/css/main.css =================================================================== RCS file: /usr/local/cvsroot/lams_learning/web/css/main.css,v diff -u -r1.5.2.3 -r1.5.2.4 --- lams_learning/web/css/main.css 22 Jun 2016 03:03:19 -0000 1.5.2.3 +++ lams_learning/web/css/main.css 27 Jun 2016 10:02:06 -0000 1.5.2.4 @@ -51,6 +51,10 @@ width: 50px; } +td#restartButtonCell { + padding: 1px 2px 0px 0px; +} + div#lessonTitleRow { overflow: hidden; text-overflow:ellipsis; Index: lams_learning/web/includes/javascript/main.js =================================================================== RCS file: /usr/local/cvsroot/lams_learning/web/includes/javascript/main.js,v diff -u -r1.6.2.1 -r1.6.2.2 --- lams_learning/web/includes/javascript/main.js 24 Feb 2016 12:35:27 -0000 1.6.2.1 +++ lams_learning/web/includes/javascript/main.js 27 Jun 2016 10:02:06 -0000 1.6.2.2 @@ -1,5 +1,11 @@ // ----- CONTROL FRAME & WINDOW MANIPULATION ----- +function restartLesson(){ + if (confirm(LABELS.CONFIRM_RESTART)) { + $('#contentFrame').attr('src',APP_URL + 'learner.do?method=restartLesson&lessonID=' + lessonId); + } +} + function viewNotebookEntries(){ openPopUp(APP_URL + "notebook.do?method=viewAll&lessonID=" + lessonId, "Notebook", Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java =================================================================== RCS file: /usr/local/cvsroot/lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java,v diff -u -r1.110.2.15 -r1.110.2.16 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java 11 May 2016 07:14:44 -0000 1.110.2.15 +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java 27 Jun 2016 10:01:29 -0000 1.110.2.16 @@ -21,7 +21,6 @@ * **************************************************************** */ - package org.lamsfoundation.lams.monitoring.service; import java.io.IOException; @@ -62,7 +61,8 @@ Lesson initializeLessonWithoutLDcopy(String lessonName, String lessonDescription, long learningDesignID, User user, String customCSV, Boolean enableLessonIntro, Boolean displayDesignImage, Boolean learnerPresenceAvailable, Boolean learnerImAvailable, Boolean liveEditEnabled, Boolean enableLessonNotifications, - Boolean learnerRestart, Integer scheduledNumberDaysToLessonFinish, Lesson precedingLesson); + Boolean forceLearnerRestart, Boolean allowLearnerRestart, Integer scheduledNumberDaysToLessonFinish, + Lesson precedingLesson); /** *

@@ -108,8 +108,8 @@ Lesson initializeLesson(String lessonName, String lessonDescription, long learningDesignId, Integer organisationId, Integer userID, String customCSV, Boolean enableLessonIntro, Boolean displayDesignImage, Boolean learnerPresenceAvailable, Boolean learnerImAvailable, Boolean liveEditEnabled, - Boolean enableNotifications, Boolean learnerRestart, Integer numberDaysToLessonFinish, - Long precedingLessonId); + Boolean enableNotifications, Boolean forceLearnerRestart, Boolean allowLearnerRestart, + Integer numberDaysToLessonFinish, Long precedingLessonId); /** * Create new lesson according to the learning design specified by the user, but for a preview session rather than a Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java =================================================================== RCS file: /usr/local/cvsroot/lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java,v diff -u -r1.195.2.30 -r1.195.2.31 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java 21 Jun 2016 10:25:31 -0000 1.195.2.30 +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java 27 Jun 2016 10:01:29 -0000 1.195.2.31 @@ -21,7 +21,6 @@ * **************************************************************** */ - package org.lamsfoundation.lams.monitoring.service; import java.io.IOException; @@ -347,8 +346,8 @@ public Lesson initializeLesson(String lessonName, String lessonDescription, long learningDesignId, Integer organisationId, Integer userID, String customCSV, Boolean enableLessonIntro, Boolean displayDesignImage, Boolean learnerPresenceAvailable, Boolean learnerImAvailable, - Boolean liveEditEnabled, Boolean enableLessonNotifications, Boolean learnerRestart, - Integer scheduledNumberDaysToLessonFinish, Long precedingLessonId) { + Boolean liveEditEnabled, Boolean enableLessonNotifications, Boolean forceLearnerRestart, + Boolean allowLearnerRestart, Integer scheduledNumberDaysToLessonFinish, Long precedingLessonId) { securityService.isGroupMonitor(organisationId, userID, "intializeLesson", true); @@ -364,21 +363,21 @@ Organisation org = (Organisation) baseDAO.find(Organisation.class, organisationId); WorkspaceFolder runSeqFolder = null; int MAX_DEEP_LEVEL_FOLDER = 50; - for (int idx = 0; idx < MAX_DEEP_LEVEL_FOLDER; idx++) { - if ((org == null) || (runSeqFolder != null)) { - break; - } + for (int idx = 0; idx < MAX_DEEP_LEVEL_FOLDER; idx++) { + if ((org == null) || (runSeqFolder != null)) { + break; + } runSeqFolder = org.getRunSequencesFolder(); - if (runSeqFolder == null) { - org = org.getParentOrganisation(); - } + if (runSeqFolder == null) { + org = org.getParentOrganisation(); } + } User user = userID != null ? (User) baseDAO.find(User.class, userID) : null; Lesson initializedLesson = initializeLesson(lessonName, lessonDescription, originalLearningDesign, user, runSeqFolder, LearningDesign.COPY_TYPE_LESSON, customCSV, enableLessonIntro, displayDesignImage, learnerPresenceAvailable, learnerImAvailable, liveEditEnabled, enableLessonNotifications, - learnerRestart, scheduledNumberDaysToLessonFinish, precedingLesson); + forceLearnerRestart, allowLearnerRestart, scheduledNumberDaysToLessonFinish, precedingLesson); Long initializedLearningDesignId = initializedLesson.getLearningDesign().getLearningDesignId(); logEventService.logEvent(LogEvent.TYPE_TEACHER_LESSON_CREATE, userID, initializedLearningDesignId, @@ -400,23 +399,24 @@ return initializeLesson(lessonName, lessonDescription, originalLearningDesign, user, null, LearningDesign.COPY_TYPE_PREVIEW, customCSV, false, false, learnerPresenceAvailable, learnerImAvailable, - liveEditEnabled, true, false, null, null); + liveEditEnabled, true, false, false, null, null); } @Override public Lesson initializeLessonWithoutLDcopy(String lessonName, String lessonDescription, long learningDesignID, User user, String customCSV, Boolean enableLessonIntro, Boolean displayDesignImage, Boolean learnerPresenceAvailable, Boolean learnerImAvailable, Boolean liveEditEnabled, - Boolean enableLessonNotifications, Boolean learnerRestart, Integer scheduledNumberDaysToLessonFinish, - Lesson precedingLesson) { + Boolean enableLessonNotifications, Boolean forceLearnerRestart, Boolean allowLearnerRestart, + Integer scheduledNumberDaysToLessonFinish, Lesson precedingLesson) { LearningDesign learningDesign = authoringService.getLearningDesign(learningDesignID); if (learningDesign == null) { throw new MonitoringServiceException( "Learning design for id=" + learningDesignID + " is missing. Unable to initialize lesson."); } Lesson lesson = createNewLesson(lessonName, lessonDescription, user, learningDesign, enableLessonIntro, displayDesignImage, learnerPresenceAvailable, learnerImAvailable, liveEditEnabled, - enableLessonNotifications, learnerRestart, scheduledNumberDaysToLessonFinish, precedingLesson); + enableLessonNotifications, forceLearnerRestart, allowLearnerRestart, scheduledNumberDaysToLessonFinish, + precedingLesson); writeAuditLog(MonitoringService.AUDIT_LESSON_CREATED_KEY, new Object[] { lessonName, learningDesign.getTitle() }); return lesson; @@ -425,8 +425,8 @@ private Lesson initializeLesson(String lessonName, String lessonDescription, LearningDesign originalLearningDesign, User user, WorkspaceFolder workspaceFolder, int copyType, String customCSV, Boolean enableLessonIntro, Boolean displayDesignImage, Boolean learnerPresenceAvailable, Boolean learnerImAvailable, - Boolean liveEditEnabled, Boolean enableLessonNotifications, Boolean learnerRestart, - Integer scheduledNumberDaysToLessonFinish, Lesson precedingLesson) { + Boolean liveEditEnabled, Boolean enableLessonNotifications, Boolean forceLearnerRestart, + Boolean allowLearnerRestart, Integer scheduledNumberDaysToLessonFinish, Lesson precedingLesson) { // copy the current learning design LearningDesign copiedLearningDesign = authoringService.copyLearningDesign(originalLearningDesign, new Integer(copyType), user, workspaceFolder, true, null, customCSV); @@ -442,7 +442,8 @@ Lesson lesson = createNewLesson(title, lessonDescription, user, copiedLearningDesign, enableLessonIntro, displayDesignImage, learnerPresenceAvailable, learnerImAvailable, liveEditEnabled, - enableLessonNotifications, learnerRestart, scheduledNumberDaysToLessonFinish, precedingLesson); + enableLessonNotifications, forceLearnerRestart, allowLearnerRestart, scheduledNumberDaysToLessonFinish, + precedingLesson); writeAuditLog(MonitoringService.AUDIT_LESSON_CREATED_KEY, new Object[] { lessonName, copiedLearningDesign.getTitle() }); return lesson; @@ -1737,11 +1738,11 @@ private Lesson createNewLesson(String lessonName, String lessonDescription, User user, LearningDesign copiedLearningDesign, Boolean enableLessonIntro, Boolean displayDesignImage, Boolean learnerPresenceAvailable, Boolean learnerImAvailable, Boolean liveEditEnabled, - Boolean enableLessonNotifications, Boolean learnerRestart, Integer scheduledNumberDaysToLessonFinish, - Lesson precedingLesson) { + Boolean enableLessonNotifications, Boolean forceLearnerRestart, Boolean allowLearnerRestart, + Integer scheduledNumberDaysToLessonFinish, Lesson precedingLesson) { Lesson newLesson = Lesson.createNewLessonWithoutClass(lessonName, lessonDescription, user, copiedLearningDesign, enableLessonIntro, displayDesignImage, learnerPresenceAvailable, learnerImAvailable, liveEditEnabled, - enableLessonNotifications, learnerRestart, scheduledNumberDaysToLessonFinish); + enableLessonNotifications, forceLearnerRestart, allowLearnerRestart, scheduledNumberDaysToLessonFinish); if (precedingLesson != null) { HashSet precedingLessons = new HashSet(); precedingLessons.add(precedingLesson); @@ -2225,7 +2226,7 @@ lesson.isEnableLessonIntro(), lesson.isDisplayDesignImage(), lesson.getLearnerPresenceAvailable(), lesson.getLearnerImAvailable(), lesson.getLiveEditEnabled(), lesson.getEnableLessonNotifications(), - lesson.getLearnerRestart(), null, null); + lesson.getForceLearnerRestart(), lesson.getAllowLearnerRestart(), null, null); // save LessonClasses newLesson = this.createLessonClassForLesson(newLesson.getLessonId(), group, Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringAction.java =================================================================== RCS file: /usr/local/cvsroot/lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringAction.java,v diff -u -r1.118.2.42 -r1.118.2.43 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringAction.java 22 Jun 2016 04:18:54 -0000 1.118.2.42 +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringAction.java 27 Jun 2016 10:01:29 -0000 1.118.2.43 @@ -21,7 +21,6 @@ * **************************************************************** */ - package org.lamsfoundation.lams.monitoring.web; import java.io.IOException; @@ -98,11 +97,9 @@ import com.google.gson.GsonBuilder; /** - *

* The action servlet that provide all the monitoring functionalities. It interact with the teacher via JSP monitoring * interface. - *

- * + * * @author Jacky Fang */ public class MonitoringAction extends LamsDispatchAction { @@ -141,13 +138,13 @@ private ActionForward redirectToURL(ActionMapping mapping, HttpServletResponse response, String url) throws IOException { - if (url != null) { - String fullURL = WebUtil.convertToFullURL(url); - response.sendRedirect(response.encodeRedirectURL(fullURL)); - return null; - } else { + if (url == null) { return mapping.findForward(MonitoringAction.NOT_SUPPORTED_SCREEN); } + + String fullURL = WebUtil.convertToFullURL(url); + response.sendRedirect(response.encodeRedirectURL(fullURL)); + return null; } /** @@ -174,7 +171,8 @@ Boolean learnerPresenceAvailable = WebUtil.readBooleanParam(request, "learnerPresenceAvailable", false); Boolean learnerImAvailable = WebUtil.readBooleanParam(request, "learnerImAvailable", false); Boolean liveEditEnabled = WebUtil.readBooleanParam(request, "liveEditEnabled", false); - Boolean learnerRestart = WebUtil.readBooleanParam(request, "learnerRestart", false); + Boolean forceRestart = WebUtil.readBooleanParam(request, "forceRestart", false); + Boolean allowRestart = WebUtil.readBooleanParam(request, "allowRestart", false); Lesson newLesson = null; if ((copyType != null) && copyType.equals(LearningDesign.COPY_TYPE_PREVIEW)) { @@ -184,7 +182,7 @@ try { newLesson = getMonitoringService().initializeLesson(title, desc, ldId, organisationId, getUserId(), customCSV, false, false, learnerPresenceAvailable, learnerImAvailable, liveEditEnabled, false, - learnerRestart, null, null); + forceRestart, allowRestart, null, null); } catch (SecurityException e) { response.sendError(HttpServletResponse.SC_FORBIDDEN, "User is not a monitor in the organisation"); return null; @@ -281,7 +279,8 @@ Date schedulingDatetime = schedulingEnable ? MonitoringAction.LESSON_SCHEDULING_DATETIME_FORMAT.parse(request.getParameter("schedulingDatetime")) : null; - boolean learnerRestart = WebUtil.readBooleanParam(request, "learnerRestart", false); + boolean forceRestart = WebUtil.readBooleanParam(request, "forceRestart", false); + boolean allowRestart = WebUtil.readBooleanParam(request, "allowRestart", false); boolean precedingLessonEnable = WebUtil.readBooleanParam(request, "precedingLessonEnable", false); Long precedingLessonId = precedingLessonEnable ? WebUtil.readLongParam(request, "precedingLessonId", true) @@ -342,7 +341,7 @@ try { lesson = getMonitoringService().initializeLesson(lessonInstanceName, introDescription, ldId, organisationId, userId, null, introEnable, introImage, presenceEnable, imEnable, enableLiveEdit, - notificationsEnable, learnerRestart, timeLimitIndividual, precedingLessonId); + notificationsEnable, forceRestart, allowRestart, timeLimitIndividual, precedingLessonId); getMonitoringService().createLessonClassForLesson(lesson.getLessonId(), organisation, learnerGroupInstanceName, lessonInstanceLearners, staffGroupInstanceName, staff, userId); @@ -1080,10 +1079,8 @@ Activity parentActivity = activity.getParentActivity(); if (activity.isBranchingActivity()) { BranchingActivity ba = (BranchingActivity) monitoringService.getActivityById(activity.getActivityId()); - activityJSON.put("x", - MonitoringAction.getActivityCoordinate(ba.getStartXcoord())); - activityJSON.put("y", - MonitoringAction.getActivityCoordinate(ba.getStartYcoord())); + activityJSON.put("x", MonitoringAction.getActivityCoordinate(ba.getStartXcoord())); + activityJSON.put("y", MonitoringAction.getActivityCoordinate(ba.getStartYcoord())); } else if (activity.isOptionsWithSequencesActivity()) { activityJSON.put("x", MonitoringAction .getActivityCoordinate(((OptionsWithSequencesActivity) activity).getStartXcoord()));