Index: lams_build/lib/lams/lams-monitoring.jar =================================================================== diff -u -r0d3db10064dce04801de82511dda34780ddccc52 -r1c1c6b24a18fffc7a7b2bccdee8fedb110d1669e Binary files differ Index: lams_build/lib/lams/lams.jar =================================================================== diff -u -r3ed103dc1c4ba8816d2ffbf0817c550adf156e12 -r1c1c6b24a18fffc7a7b2bccdee8fedb110d1669e Binary files differ Index: lams_central/src/java/org/lamsfoundation/lams/web/HomeAction.java =================================================================== diff -u -r4020e48e252d3a5a9ace181e62bb78900f05128b -r1c1c6b24a18fffc7a7b2bccdee8fedb110d1669e --- lams_central/src/java/org/lamsfoundation/lams/web/HomeAction.java (.../HomeAction.java) (revision 4020e48e252d3a5a9ace181e62bb78900f05128b) +++ lams_central/src/java/org/lamsfoundation/lams/web/HomeAction.java (.../HomeAction.java) (revision 1c1c6b24a18fffc7a7b2bccdee8fedb110d1669e) @@ -25,6 +25,7 @@ import java.io.IOException; import java.net.URLEncoder; +import java.util.Date; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; @@ -36,6 +37,8 @@ import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.actions.DispatchAction; +import org.lamsfoundation.lams.learningdesign.GroupUser; +import org.lamsfoundation.lams.learningdesign.dao.IGroupUserDAO; import org.lamsfoundation.lams.lesson.Lesson; import org.lamsfoundation.lams.lesson.service.ILessonService; import org.lamsfoundation.lams.usermanagement.Role; @@ -73,6 +76,7 @@ private static IUserManagementService service; private static ILessonService lessonService; + private static IGroupUserDAO groupUserDAO; private IUserManagementService getService() { if (service == null) { @@ -91,6 +95,15 @@ } return lessonService; } + + private IGroupUserDAO getGroupUserDAO() { + if (groupUserDAO == null) { + WebApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(getServlet() + .getServletContext()); + groupUserDAO = (IGroupUserDAO) ctx.getBean("groupUserDAO"); + } + return groupUserDAO; + } private UserDTO getUser() { HttpSession ss = SessionManager.getSession(); @@ -157,7 +170,18 @@ + " is not a learner in the requested lesson. Cannot access the lesson."); return displayMessage(mapping, req, "error.authorisation"); } + + //check if the lesson is scheduled to be finished to individual users + if (lesson.isScheduledToCloseForIndividuals()) { + GroupUser groupUser = getGroupUserDAO().getGroupUser(lesson, user.getUserID()); + if ((groupUser != null) && (groupUser.getScheduledLessonEndDate() != null) && groupUser.getScheduledLessonEndDate().before(new Date())) { + log.error("learner: User " + user.getLogin() + + " cannot access the lesson due to lesson end date has passed."); + return displayMessage(mapping, req, "error.finish.date.passed"); + } + } + if (mode != null) req.setAttribute(AttributeNames.PARAM_MODE, mode); Index: lams_central/src/java/org/lamsfoundation/lams/webservice/LessonManagerSoapBindingImpl.java =================================================================== diff -u -rf685d0c3f89b3efd86c9fbdf22742425247f5e3a -r1c1c6b24a18fffc7a7b2bccdee8fedb110d1669e --- lams_central/src/java/org/lamsfoundation/lams/webservice/LessonManagerSoapBindingImpl.java (.../LessonManagerSoapBindingImpl.java) (revision f685d0c3f89b3efd86c9fbdf22742425247f5e3a) +++ lams_central/src/java/org/lamsfoundation/lams/webservice/LessonManagerSoapBindingImpl.java (.../LessonManagerSoapBindingImpl.java) (revision 1c1c6b24a18fffc7a7b2bccdee8fedb110d1669e) @@ -76,7 +76,7 @@ countryIsoCode, langIsoCode, null, LoginRequestDispatcher.METHOD_MONITOR); // 1. init lesson Lesson lesson = monitoringService.initializeLesson(title, desc, Boolean.TRUE, ldId, orgMap - .getOrganisation().getOrganisationId(), userMap.getUser().getUserId(), customCSV, Boolean.FALSE, Boolean.FALSE, Boolean.FALSE); + .getOrganisation().getOrganisationId(), userMap.getUser().getUserId(), customCSV, Boolean.FALSE, Boolean.FALSE, Boolean.FALSE, null); // 2. create lessonClass for lesson createLessonClass(lesson, orgMap.getOrganisation(), userMap.getUser()); // 3. start lesson @@ -98,7 +98,7 @@ countryIsoCode, langIsoCode, null, LoginRequestDispatcher.METHOD_MONITOR); // 1. init lesson Lesson lesson = monitoringService.initializeLesson(title, desc, Boolean.TRUE, ldId, orgMap - .getOrganisation().getOrganisationId(), userMap.getUser().getUserId(), customCSV, Boolean.FALSE, Boolean.FALSE, Boolean.FALSE); + .getOrganisation().getOrganisationId(), userMap.getUser().getUserId(), customCSV, Boolean.FALSE, Boolean.FALSE, Boolean.FALSE, null); // 2. create lessonClass for lesson createLessonClass(lesson, orgMap.getOrganisation(), userMap.getUser()); // 3. schedule lesson Index: lams_central/src/java/org/lamsfoundation/lams/webservice/xml/LessonJoinServlet.java =================================================================== diff -u -r539537fbb7a5566f4d480340cc6ec9d3a20473d6 -r1c1c6b24a18fffc7a7b2bccdee8fedb110d1669e --- lams_central/src/java/org/lamsfoundation/lams/webservice/xml/LessonJoinServlet.java (.../LessonJoinServlet.java) (revision 539537fbb7a5566f4d480340cc6ec9d3a20473d6) +++ lams_central/src/java/org/lamsfoundation/lams/webservice/xml/LessonJoinServlet.java (.../LessonJoinServlet.java) (revision 1c1c6b24a18fffc7a7b2bccdee8fedb110d1669e) @@ -253,6 +253,7 @@ Boolean learnerPresenceAvailable; Boolean learnerImAvailable; Boolean liveEditEnabled; + Boolean enableNotifications; Integer ownerUserId; Organisation org = (Organisation)userService.findById(Organisation.class, orgId); String learnerGroupName; @@ -283,14 +284,15 @@ learnerPresenceAvailable = false; learnerImAvailable = false; liveEditEnabled = false; + enableNotifications = false; ownerUserId = ld.getUser().getUserId(); learnerGroupName = org.getName() + " Learners"; staffGroupName = org.getName() + " Staff"; Vector userDTOs = userService.getUsersFromOrganisationByRole(orgId, Role.MONITOR, false, false); staffList = getUsersFromDTOs(userDTOs); } Lesson lesson = monitoringService.initializeLesson(lessonName, lessonDescription, learnerExportAvailable, - ldId, orgId, ownerUserId, null, learnerPresenceAvailable, learnerImAvailable, liveEditEnabled); + ldId, orgId, ownerUserId, null, learnerPresenceAvailable, learnerImAvailable, liveEditEnabled, null); monitoringService.createLessonClassForLesson(lesson.getLessonId().longValue(), org, learnerGroupName, learnerList, staffGroupName, staffList, ownerUserId); monitoringService.startLesson(lesson.getLessonId().longValue(), ownerUserId); Index: lams_central/src/java/org/lamsfoundation/lams/webservice/xml/LessonManagerServlet.java =================================================================== diff -u -r83299df260ee318896700f2dc17a3f38c04c58f6 -r1c1c6b24a18fffc7a7b2bccdee8fedb110d1669e --- lams_central/src/java/org/lamsfoundation/lams/webservice/xml/LessonManagerServlet.java (.../LessonManagerServlet.java) (revision 83299df260ee318896700f2dc17a3f38c04c58f6) +++ lams_central/src/java/org/lamsfoundation/lams/webservice/xml/LessonManagerServlet.java (.../LessonManagerServlet.java) (revision 1c1c6b24a18fffc7a7b2bccdee8fedb110d1669e) @@ -306,7 +306,7 @@ // 1. init lesson Lesson lesson = LessonManagerServlet.monitoringService.initializeLesson(title, desc, Boolean.TRUE, ldId, organisation.getOrganisationId(), user.getUserId(), customCSV, Boolean.FALSE, Boolean.FALSE, - Boolean.FALSE); + Boolean.FALSE, null); // 2. create lessonClass for lesson createLessonClass(lesson, organisation, user); // 3. start lesson @@ -332,7 +332,7 @@ // 1. init lesson Lesson lesson = LessonManagerServlet.monitoringService.initializeLesson(title, desc, Boolean.TRUE, ldId, orgMap.getOrganisation().getOrganisationId(), userMap.getUser().getUserId(), customCSV, false, - false, false); + false, false, null); // 2. create lessonClass for lesson createLessonClass(lesson, orgMap.getOrganisation(), userMap.getUser()); // 3. schedule lesson Index: lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/learningdesign/GroupUser.hbm.xml =================================================================== diff -u -r72e01661ffe932634adbe4b229d9ee44d6928a45 -r1c1c6b24a18fffc7a7b2bccdee8fedb110d1669e --- lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/learningdesign/GroupUser.hbm.xml (.../GroupUser.hbm.xml) (revision 72e01661ffe932634adbe4b229d9ee44d6928a45) +++ lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/learningdesign/GroupUser.hbm.xml (.../GroupUser.hbm.xml) (revision 1c1c6b24a18fffc7a7b2bccdee8fedb110d1669e) @@ -13,5 +13,8 @@ + + @hibernate.property column="scheduled_lesson_end_date" length="19" + \ No newline at end of file Index: lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/lesson/Lesson.hbm.xml =================================================================== diff -u -r4020e48e252d3a5a9ace181e62bb78900f05128b -r1c1c6b24a18fffc7a7b2bccdee8fedb110d1669e --- lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/lesson/Lesson.hbm.xml (.../Lesson.hbm.xml) (revision 4020e48e252d3a5a9ace181e62bb78900f05128b) +++ lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/lesson/Lesson.hbm.xml (.../Lesson.hbm.xml) (revision 1c1c6b24a18fffc7a7b2bccdee8fedb110d1669e) @@ -49,6 +49,9 @@ + + Index: lams_common/db/sql/create_lams_11_tables.sql =================================================================== diff -u -r413a7a7d4d5415d45c4ec4ad549e5f15cfee3d44 -r1c1c6b24a18fffc7a7b2bccdee8fedb110d1669e --- lams_common/db/sql/create_lams_11_tables.sql (.../create_lams_11_tables.sql) (revision 413a7a7d4d5415d45c4ec4ad549e5f15cfee3d44) +++ lams_common/db/sql/create_lams_11_tables.sql (.../create_lams_11_tables.sql) (revision 1c1c6b24a18fffc7a7b2bccdee8fedb110d1669e) @@ -641,6 +641,7 @@ , class_grouping_id BIGINT(20) , lesson_state_id INT(3) NOT NULL , start_date_time DATETIME + , scheduled_number_days_to_lesson_finish INT(3) DEFAULT NULL , schedule_start_date_time DATETIME , end_date_time DATETIME , schedule_end_date_time DATETIME @@ -819,6 +820,7 @@ CREATE TABLE lams_user_group ( user_id BIGINT(20) NOT NULL , group_id BIGINT(20) NOT NULL + , scheduled_lesson_end_date DATETIME , PRIMARY KEY (user_id, group_id) , INDEX (user_id) , CONSTRAINT FK_lams_user_group_1 FOREIGN KEY (user_id) Index: lams_common/src/java/org/lamsfoundation/lams/commonContext.xml =================================================================== diff -u -rd5a281b774f24a41894aac08200627f18e2b25e2 -r1c1c6b24a18fffc7a7b2bccdee8fedb110d1669e --- lams_common/src/java/org/lamsfoundation/lams/commonContext.xml (.../commonContext.xml) (revision d5a281b774f24a41894aac08200627f18e2b25e2) +++ lams_common/src/java/org/lamsfoundation/lams/commonContext.xml (.../commonContext.xml) (revision 1c1c6b24a18fffc7a7b2bccdee8fedb110d1669e) @@ -556,6 +556,9 @@ + + + Index: lams_common/src/java/org/lamsfoundation/lams/dbupdates/patch02040006.sql =================================================================== diff -u -re3878ab18d10633a1f8ccff9a061f0c2f65d9137 -r1c1c6b24a18fffc7a7b2bccdee8fedb110d1669e --- lams_common/src/java/org/lamsfoundation/lams/dbupdates/patch02040006.sql (.../patch02040006.sql) (revision e3878ab18d10633a1f8ccff9a061f0c2f65d9137) +++ lams_common/src/java/org/lamsfoundation/lams/dbupdates/patch02040006.sql (.../patch02040006.sql) (revision 1c1c6b24a18fffc7a7b2bccdee8fedb110d1669e) @@ -161,6 +161,9 @@ ALTER TABLE lams_log_event DROP FOREIGN KEY FK_lams_event_log_3; ALTER TABLE lams_log_event ADD CONSTRAINT FK_lams_event_log_3 FOREIGN KEY (learning_design_id) REFERENCES lams_learning_design (learning_design_id ) ON DELETE CASCADE; +-- WVI-14 adding Lesson time limits ability +ALTER TABLE lams_lesson ADD COLUMN scheduled_number_days_to_lesson_finish INT(3) DEFAULT NULL; +ALTER TABLE lams_user_group ADD COLUMN scheduled_lesson_end_date DATETIME; COMMIT; SET AUTOCOMMIT = 1; Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/GroupUser.java =================================================================== diff -u -r2f21856ec2ab85b47c93cfcc3fa2c8769be65077 -r1c1c6b24a18fffc7a7b2bccdee8fedb110d1669e --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/GroupUser.java (.../GroupUser.java) (revision 2f21856ec2ab85b47c93cfcc3fa2c8769be65077) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/GroupUser.java (.../GroupUser.java) (revision 1c1c6b24a18fffc7a7b2bccdee8fedb110d1669e) @@ -24,6 +24,7 @@ package org.lamsfoundation.lams.learningdesign; import java.io.Serializable; +import java.util.Date; import org.lamsfoundation.lams.usermanagement.User; @@ -35,9 +36,12 @@ * @hibernate.class table="lams_user_group" */ public class GroupUser implements Serializable { + + private static final long serialVersionUID = 4680781848791310422L; private Group group; private User user; + private Date scheduledLessonEndDate; public GroupUser() { } @@ -67,4 +71,20 @@ public void setUser(User user) { this.user = user; } + + /** + * @hibernate.property type="java.sql.Timestamp" column="scheduled_lesson_end_date" length="19" + * + * @return Returns the scheduledLessonEndDate. + */ + public Date getScheduledLessonEndDate() { + return scheduledLessonEndDate; + } + + /** + * @param scheduledLessonEndDate The scheduledLessonEndDate to set. + */ + public void setScheduledLessonEndDate(Date scheduledLessonEndDate) { + this.scheduledLessonEndDate = scheduledLessonEndDate; + } } Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/dao/IGroupUserDAO.java =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/dao/IGroupUserDAO.java (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/dao/IGroupUserDAO.java (revision 1c1c6b24a18fffc7a7b2bccdee8fedb110d1669e) @@ -0,0 +1,40 @@ +/**************************************************************** + * 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 + * **************************************************************** + */ + +/* $Id$ */ +package org.lamsfoundation.lams.learningdesign.dao; + +import org.lamsfoundation.lams.dao.IBaseDAO; +import org.lamsfoundation.lams.learningdesign.Group; +import org.lamsfoundation.lams.learningdesign.GroupUser; +import org.lamsfoundation.lams.lesson.Lesson; + +/** + * @author Andrey Balan + */ +public interface IGroupUserDAO extends IBaseDAO { + + public GroupUser getGroupUser(Lesson lesson, Integer userId); + + public void saveGroupUser(GroupUser groupUser); + +} Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/dao/hibernate/GroupUserDAO.java =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/dao/hibernate/GroupUserDAO.java (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/dao/hibernate/GroupUserDAO.java (revision 1c1c6b24a18fffc7a7b2bccdee8fedb110d1669e) @@ -0,0 +1,56 @@ +/**************************************************************** + * 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 + * **************************************************************** + */ + +/* $Id$ */ +package org.lamsfoundation.lams.learningdesign.dao.hibernate; + +import java.util.HashMap; +import java.util.List; + +import org.lamsfoundation.lams.dao.hibernate.BaseDAO; +import org.lamsfoundation.lams.learningdesign.GroupUser; +import org.lamsfoundation.lams.learningdesign.dao.IGroupUserDAO; +import org.lamsfoundation.lams.lesson.Lesson; + +/** + * @author Andrey Balan + */ +public class GroupUserDAO extends BaseDAO implements IGroupUserDAO { + + public GroupUser getGroupUser(Lesson lesson, Integer userId) { + HashMap properties = new HashMap(); + properties.put("group.grouping.groupingId", lesson.getLessonClass().getGroupingId()); + properties.put("user.userId", userId); + List list = this.findByProperties(GroupUser.class, properties); + if (list == null || list.size() == 0) { + return null; + } else { + return list.get(0); + } + + } + + public void saveGroupUser(GroupUser groupUser) { + getHibernateTemplate().save(groupUser); + } + +} \ No newline at end of file Index: lams_common/src/java/org/lamsfoundation/lams/lesson/Lesson.java =================================================================== diff -u -rffafd64613340f1eff7781c7b138b805400df8cf -r1c1c6b24a18fffc7a7b2bccdee8fedb110d1669e --- lams_common/src/java/org/lamsfoundation/lams/lesson/Lesson.java (.../Lesson.java) (revision ffafd64613340f1eff7781c7b138b805400df8cf) +++ lams_common/src/java/org/lamsfoundation/lams/lesson/Lesson.java (.../Lesson.java) (revision 1c1c6b24a18fffc7a7b2bccdee8fedb110d1669e) @@ -98,8 +98,11 @@ private Date scheduleStartDate; /** nullable persistent field */ - private Date scheduleEndDate; + private Date scheduleEndDate; + /** nullable persistent field */ + private Integer scheduledNumberDaysToLessonFinish; + /** persistent field */ private User user; @@ -152,68 +155,73 @@ } /** - * Minimum constructor that initialize the lesson data. It doesn't include - * organization and class information. - * Cain constructor pattern implementation. + * Minimum constructor that initialize the lesson data. It doesn't include organization and class information. Cain + * constructor pattern implementation. */ - public Lesson(String name,String description,Date createDateTime, User user, Integer lessonStateId, - Integer previousLessonStateId, Boolean learnerExportAvailable, - LearningDesign learningDesign, Set learnerProgresses, Boolean learnerPresenceAvailable, Boolean learnerImAvailable, Boolean liveEditEnabled) - { - this(null,name,description,createDateTime,null,null,user,lessonStateId,previousLessonStateId, - learnerExportAvailable,false, learningDesign,null,null,learnerProgresses, learnerPresenceAvailable, learnerImAvailable, liveEditEnabled); - } + public Lesson(String name, String description, Date createDateTime, User user, Integer lessonStateId, + Integer previousLessonStateId, Boolean learnerExportAvailable, LearningDesign learningDesign, + Set learnerProgresses, Boolean learnerPresenceAvailable, Boolean learnerImAvailable, Boolean liveEditEnabled, Integer scheduledNumberDaysTolessonFinish) { + this(null, name, description, createDateTime, null, null, user, lessonStateId, previousLessonStateId, + learnerExportAvailable, false, learningDesign, null, null, learnerProgresses, learnerPresenceAvailable, + learnerImAvailable, liveEditEnabled, scheduledNumberDaysTolessonFinish); + } - /** - * Constructor that creates a new lesson with organization and class - * information. - * Chain construtor pattern implementation. + /** + * Constructor that creates a new lesson with organization and class information. Chain construtor pattern + * implementation. */ - public Lesson(String name,String description,Date createDateTime, User user, Integer lessonStateId, Integer previousLessonStateId, - Boolean learnerExportAvailable, LearningDesign learningDesign, LessonClass lessonClass, - Organisation organisation, Set learnerProgresses, Boolean learnerPresenceAvailable, Boolean learnerImAvailable, Boolean liveEditEnabled) - { - this(null,name,description,createDateTime,null,null,user,lessonStateId,previousLessonStateId, - learnerExportAvailable, false, learningDesign,lessonClass,organisation,learnerProgresses, learnerPresenceAvailable, learnerImAvailable, liveEditEnabled); - } + public Lesson(String name, String description, Date createDateTime, User user, Integer lessonStateId, + Integer previousLessonStateId, Boolean learnerExportAvailable, LearningDesign learningDesign, + LessonClass lessonClass, Organisation organisation, Set learnerProgresses, + Boolean learnerPresenceAvailable, Boolean learnerImAvailable, Boolean liveEditEnabled) { + this(null, name, description, createDateTime, null, null, user, lessonStateId, previousLessonStateId, + learnerExportAvailable, false, learningDesign, lessonClass, organisation, learnerProgresses, + learnerPresenceAvailable, learnerImAvailable, liveEditEnabled, null); + } /** full constructor */ - public Lesson(Long lessonId,String name,String description, Date createDateTime, Date startDateTime, Date endDateTime, User user, - Integer lessonStateId, Integer previousLessonStateId, Boolean learnerExportAvailable, Boolean lockedForEdit, - LearningDesign learningDesign, LessonClass lessonClass, - Organisation organisation, Set learnerProgresses, Boolean learnerPresenceAvailable, Boolean learnerImAvailable, Boolean liveEditEnabled) - { - this.lessonId = lessonId; - this.lessonName = name; - this.lessonDescription = description; - this.createDateTime = createDateTime; - this.startDateTime = startDateTime; - this.endDateTime = endDateTime; - this.user = user; - this.lessonStateId = lessonStateId; - this.previousLessonStateId = previousLessonStateId; - this.learnerExportAvailable = learnerExportAvailable != null ? learnerExportAvailable : Boolean.FALSE; - this.learnerPresenceAvailable = learnerPresenceAvailable != null ? learnerPresenceAvailable : Boolean.FALSE; - this.learnerImAvailable = learnerImAvailable != null ? learnerImAvailable : Boolean.FALSE; - this.lockedForEdit = false; - this.learningDesign = learningDesign; - this.lessonClass = lessonClass; - this.organisation = organisation; - this.learnerProgresses = learnerProgresses; - this.liveEditEnabled = liveEditEnabled; - this.gradebookUserLessons = new HashSet(); - this.marksReleased = false; + public Lesson(Long lessonId, String name, String description, Date createDateTime, Date startDateTime, + Date endDateTime, User user, Integer lessonStateId, Integer previousLessonStateId, + Boolean learnerExportAvailable, Boolean lockedForEdit, LearningDesign learningDesign, + LessonClass lessonClass, Organisation organisation, Set learnerProgresses, + Boolean learnerPresenceAvailable, Boolean learnerImAvailable, Boolean liveEditEnabled, + Integer scheduledNumberDaysToLessonFinish) { + this.lessonId = lessonId; + this.lessonName = name; + this.lessonDescription = description; + this.createDateTime = createDateTime; + this.startDateTime = startDateTime; + this.endDateTime = endDateTime; + this.user = user; + this.lessonStateId = lessonStateId; + this.previousLessonStateId = previousLessonStateId; + this.learnerExportAvailable = learnerExportAvailable != null ? learnerExportAvailable : Boolean.FALSE; + this.learnerPresenceAvailable = learnerPresenceAvailable != null ? learnerPresenceAvailable : Boolean.FALSE; + this.learnerImAvailable = learnerImAvailable != null ? learnerImAvailable : Boolean.FALSE; + this.lockedForEdit = false; + this.learningDesign = learningDesign; + this.lessonClass = lessonClass; + this.organisation = organisation; + this.learnerProgresses = learnerProgresses; + this.liveEditEnabled = liveEditEnabled; + this.gradebookUserLessons = new HashSet(); + this.marksReleased = false; + this.scheduledNumberDaysToLessonFinish = scheduledNumberDaysToLessonFinish; } + /** - * Factory method that create a new lesson. It initialized all necessary - * data for a new lesson with organization and lesson class information. - * It is designed for monitor side to create a lesson by teacher. + * Factory method that create a new lesson. It initialized all necessary data for a new lesson with organization and + * lesson class information. It is designed for monitor side to create a lesson by teacher. * - * @param user the teacher who created this lesson + * @param user + * the teacher who created this lesson * @pram learnerExportAvailable should the export portfolio option be made available to the learner? - * @param organisation the organisation associated with this lesson. - * @param ld the learning design associated with this lesson. - * @param newLessonClass the lesson class that will run this lesson. + * @param organisation + * the organisation associated with this lesson. + * @param ld + * the learning design associated with this lesson. + * @param newLessonClass + * the lesson class that will run this lesson. * @return the new lesson object. */ public static Lesson createNewLesson(String lessonName, @@ -261,7 +269,8 @@ LearningDesign ld, Boolean learnerPresenceAvailable, Boolean learnerImAvailable, - Boolean liveEditEnabled) + Boolean liveEditEnabled, + Integer scheduledNumberDaysToLessonFinish) { return new Lesson(lessonName, lessonDescription, @@ -274,7 +283,8 @@ new HashSet(), learnerPresenceAvailable, learnerImAvailable, - liveEditEnabled); + liveEditEnabled, + scheduledNumberDaysToLessonFinish); } //--------------------------------------------------------------------- // Getters and Setters @@ -389,7 +399,34 @@ { this.scheduleEndDate = scheduleEndDate; } + /** + * @return Returns whether there is an end date for individual user. + */ + public boolean isScheduledToCloseForIndividuals() { + return (scheduledNumberDaysToLessonFinish != null); + } + + /** + * @hibernate.property type="java.lang.Integer" column="scheduled_number_days_to_lesson_finish" length="3" + * + * @return Returns the number of days the lesson will be available to user since he starts it. (It's ON only if the + * lesson was scheduled to be finished and individual option was selected) + */ + public Integer getScheduledNumberDaysToLessonFinish() { + return scheduledNumberDaysToLessonFinish; + } + + /** + * @param scheduledNumberDaysToLessonFinish + * the number of days the lesson will be available to user since he starts it. (It's ON only if the lesson + * was scheduled to be finished and individual option was selected) + */ + public void setScheduledNumberDaysToLessonFinish(Integer scheduledNumberDaysToLessonFinish) { + this.scheduledNumberDaysToLessonFinish = scheduledNumberDaysToLessonFinish; + } + + /** * @hibernate.property type="java.sql.Timestamp" column="schedule_start_date_time" * length="19" * @return Returns the scheduleStartDate. Index: lams_common/test/java/org/lamsfoundation/lams/lesson/dao/TestLessonDAO.java =================================================================== diff -u -r68d2988cca350af15ba4087814f74e1527a71997 -r1c1c6b24a18fffc7a7b2bccdee8fedb110d1669e --- lams_common/test/java/org/lamsfoundation/lams/lesson/dao/TestLessonDAO.java (.../TestLessonDAO.java) (revision 68d2988cca350af15ba4087814f74e1527a71997) +++ lams_common/test/java/org/lamsfoundation/lams/lesson/dao/TestLessonDAO.java (.../TestLessonDAO.java) (revision 1c1c6b24a18fffc7a7b2bccdee8fedb110d1669e) @@ -123,7 +123,8 @@ testLearningDesign, false, false, - false); + false, + null); try { Index: lams_common/test/java/org/lamsfoundation/lams/lesson/service/TestLessonService.java =================================================================== diff -u -r68d2988cca350af15ba4087814f74e1527a71997 -r1c1c6b24a18fffc7a7b2bccdee8fedb110d1669e --- lams_common/test/java/org/lamsfoundation/lams/lesson/service/TestLessonService.java (.../TestLessonService.java) (revision 68d2988cca350af15ba4087814f74e1527a71997) +++ lams_common/test/java/org/lamsfoundation/lams/lesson/service/TestLessonService.java (.../TestLessonService.java) (revision 1c1c6b24a18fffc7a7b2bccdee8fedb110d1669e) @@ -79,7 +79,7 @@ User test1 = userManagementService.getUserByLogin(TEST1_USER_LOGIN); // this lesson isn't valid as it doesn't have a learning design - Lesson newLesson = Lesson.createNewLessonWithoutClass("test lesson", "test lesson", mmm, true, null, false, false, false); + Lesson newLesson = Lesson.createNewLessonWithoutClass("test lesson", "test lesson", mmm, true, null, false, false, false, null); lessonDAO.saveLesson(newLesson); Organisation organisation = (Organisation) baseDAO.find(Organisation.class, TEST_ORG_ID); Index: lams_learning/src/java/org/lamsfoundation/lams/learning/learningApplicationContext.xml =================================================================== diff -u -r8cbd631849cddfbfc7fb887e8a847894e5baaefa -r1c1c6b24a18fffc7a7b2bccdee8fedb110d1669e --- lams_learning/src/java/org/lamsfoundation/lams/learning/learningApplicationContext.xml (.../learningApplicationContext.xml) (revision 8cbd631849cddfbfc7fb887e8a847894e5baaefa) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/learningApplicationContext.xml (.../learningApplicationContext.xml) (revision 1c1c6b24a18fffc7a7b2bccdee8fedb110d1669e) @@ -33,6 +33,7 @@ + Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java =================================================================== diff -u -r8cbd631849cddfbfc7fb887e8a847894e5baaefa -r1c1c6b24a18fffc7a7b2bccdee8fedb110d1669e --- lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision 8cbd631849cddfbfc7fb887e8a847894e5baaefa) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision 1c1c6b24a18fffc7a7b2bccdee8fedb110d1669e) @@ -26,6 +26,7 @@ import java.sql.Timestamp; import java.util.ArrayList; +import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.Iterator; @@ -51,6 +52,7 @@ import org.lamsfoundation.lams.learningdesign.DataFlowObject; import org.lamsfoundation.lams.learningdesign.GateActivity; import org.lamsfoundation.lams.learningdesign.Group; +import org.lamsfoundation.lams.learningdesign.GroupUser; import org.lamsfoundation.lams.learningdesign.Grouping; import org.lamsfoundation.lams.learningdesign.GroupingActivity; import org.lamsfoundation.lams.learningdesign.LearnerChoiceGrouper; @@ -60,6 +62,7 @@ import org.lamsfoundation.lams.learningdesign.ToolBranchingActivity; import org.lamsfoundation.lams.learningdesign.dao.IActivityDAO; import org.lamsfoundation.lams.learningdesign.dao.IDataFlowDAO; +import org.lamsfoundation.lams.learningdesign.dao.IGroupUserDAO; import org.lamsfoundation.lams.learningdesign.dao.IGroupingDAO; import org.lamsfoundation.lams.lesson.LearnerProgress; import org.lamsfoundation.lams.lesson.Lesson; @@ -98,6 +101,7 @@ private ILessonDAO lessonDAO; private IActivityDAO activityDAO; private IGroupingDAO groupingDAO; + private IGroupUserDAO groupUserDAO; private ProgressEngine progressEngine; private IToolSessionDAO toolSessionDAO; private IDataFlowDAO dataFlowDAO; @@ -191,8 +195,23 @@ public void setGroupingDAO(IGroupingDAO groupingDAO) { this.groupingDAO = groupingDAO; } + + /** + * @return the groupUserDAO + */ + public IGroupUserDAO getGroupUserDAO() { + return groupUserDAO; + } /** + * @param groupUserDAO + * groupUserDAO + */ + public void setGroupUserDAO(IGroupUserDAO groupUserDAO) { + this.groupUserDAO = groupUserDAO; + } + + /** * @return the User Management Service */ public IUserManagementService getUserManagementService() { @@ -291,6 +310,18 @@ // Use TimeStamp rather than Date directly to keep consistent with Hibnerate persiste object. learnerProgress.setStartDate(new Timestamp(new Date().getTime())); learnerProgressDAO.saveLearnerProgress(learnerProgress); + + // check if lesson is set to be finished for individual users then store finish date + if (lesson.isScheduledToCloseForIndividuals()) { + GroupUser groupUser = groupUserDAO.getGroupUser(lesson, learnerId); + if (groupUser != null) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(learnerProgress.getStartDate()); + calendar.add(Calendar.DATE, lesson.getScheduledNumberDaysToLessonFinish()); + Date endDate = calendar.getTime(); + groupUser.setScheduledLessonEndDate(endDate); + } + } } else { Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/MonitoringConstants.java =================================================================== diff -u -racc8d2acf5b6b0002e0c8129947040a779ab4077 -r1c1c6b24a18fffc7a7b2bccdee8fedb110d1669e --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/MonitoringConstants.java (.../MonitoringConstants.java) (revision acc8d2acf5b6b0002e0c8129947040a779ab4077) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/MonitoringConstants.java (.../MonitoringConstants.java) (revision 1c1c6b24a18fffc7a7b2bccdee8fedb110d1669e) @@ -40,7 +40,7 @@ public static final String JOB_START_LESSON = "startScheduleLessonJob"; public static final String JOB_FINISH_LESSON = "finishScheduleLessonJob"; public static final String PARAM_LESSON_START_DATE = "lessonStartDate"; - public static final String PARAM_LESSON_FINISH_DATE = "lessonFinishDate"; + public static final String PARAM_SCHEDULED_NUMBER_DAYS_TO_LESSON_FINISH = "scheduledNumberDaysToLessonFinish"; public static final String PARAM_LEARNER_ID = "learnerID"; public static final String KEY_GROUPING_ACTIVITY = "groupingActivityID"; public static final String KEY_GROUPS = "groups"; Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/quartz/job/FinishScheduleLessonJob.java =================================================================== diff -u -r08950e1090443c3423a3d1c587416a2fccd8bbdf -r1c1c6b24a18fffc7a7b2bccdee8fedb110d1669e --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/quartz/job/FinishScheduleLessonJob.java (.../FinishScheduleLessonJob.java) (revision 08950e1090443c3423a3d1c587416a2fccd8bbdf) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/quartz/job/FinishScheduleLessonJob.java (.../FinishScheduleLessonJob.java) (revision 1c1c6b24a18fffc7a7b2bccdee8fedb110d1669e) @@ -46,12 +46,12 @@ long lessonId = ((Long)properties.get(MonitoringConstants.KEY_LESSON_ID)).longValue(); Integer userId = (Integer)properties.get(MonitoringConstants.KEY_USER_ID); if(log.isDebugEnabled()) - log.debug("Lesson ["+lessonId+"] is stopping..."); + log.debug("Lesson ["+lessonId+"] is suspending..."); - monitoringService.finishLesson(lessonId,userId); + monitoringService.suspendLesson(lessonId,userId); if(log.isDebugEnabled()) - log.debug("Lesson ["+lessonId+"] stopped"); + log.debug("Lesson ["+lessonId+"] suspended"); } } Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java =================================================================== diff -u -r009fbce36f45d0929f8007c4bbc798242f57d3af -r1c1c6b24a18fffc7a7b2bccdee8fedb110d1669e --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java (.../IMonitoringService.java) (revision 009fbce36f45d0929f8007c4bbc798242f57d3af) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java (.../IMonitoringService.java) (revision 1c1c6b24a18fffc7a7b2bccdee8fedb110d1669e) @@ -57,31 +57,33 @@ public MessageService getMessageService(); /** - * Initialize a new lesson so as to start the learning process. It needs to - * notify lams which learning design it belongs to. The initialize process - * doesn't involve the setup of lesson class and organization. + * Initialize a new lesson so as to start the learning process. It needs to notify lams which learning design it + * belongs to. The initialize process doesn't involve the setup of lesson class and organization. * * @param lessonName * the name of the lesson * @param lessonDescription * the description of the lesson. * @param learnerExportAvailable - * should the export portfolio option be made available to the - * learner? + * should the export portfolio option be made available to the learner? * @param learningDesignId * the selected learning design * @param organisationId - * the copied sequence will be put in the default runtime - * sequence folder for this org, if such a folder exists. + * the copied sequence will be put in the default runtime sequence folder for this org, if such a folder + * exists. * @param userId * the user who want to create this lesson. * @param customCSV * the custom comma separated values to be used by toolAdapters + * @param numberDaysToLessonFinish + * number of days the lesson will be available to user since he starts it. (lesson finish scheduling + * feature) * @return the lesson initialized. */ public Lesson initializeLesson(String lessonName, String lessonDescription, Boolean learnerExportAvailable, long learningDesignId, Integer organisationId, Integer userID, String customCSV, - Boolean learnerPresenceAvailable, Boolean learnerImAvailable, Boolean liveEditEnabled); + Boolean learnerPresenceAvailable, Boolean learnerImAvailable, Boolean liveEditEnabled, + Integer numberDaysToLessonFinish); /** * Initialize a new lesson so as to start the learning process for a normal @@ -220,11 +222,12 @@ * * @param lessonId * @param endDate - * the lesson end date and time. + * number of days since lesson start when the lesson should be closed. * @param userId * checks that the user is a staff member for this lesson */ - public void finishLessonOnSchedule(long lessonId, Date endDate, Integer userId) throws UserAccessDeniedException; + public void finishLessonOnSchedule(long lessonId, int scheduledNumberDaysToLessonFinish, Integer userId) + throws UserAccessDeniedException; /** * Finish a lesson.A Finished lesson can be viewed on the monitoring Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java =================================================================== diff -u -r4020e48e252d3a5a9ace181e62bb78900f05128b -r1c1c6b24a18fffc7a7b2bccdee8fedb110d1669e --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java (.../MonitoringService.java) (revision 4020e48e252d3a5a9ace181e62bb78900f05128b) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java (.../MonitoringService.java) (revision 1c1c6b24a18fffc7a7b2bccdee8fedb110d1669e) @@ -28,6 +28,7 @@ import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Calendar; import java.util.Comparator; import java.util.Date; import java.util.HashSet; @@ -386,24 +387,23 @@ /** *

- * Create new lesson according to the learning design specified by the user. - * This involves following major steps: + * Create new lesson according to the learning design specified by the user. This involves following major steps: *

* - *
  • 1. Make a runtime copy of static learning design defined in authoring - *
  • 2. Go through all the tool activities defined in the learning - * design, create a runtime copy of all tool's content.
  • + *
  • 1. Make a runtime copy of static learning design defined in authoring
  • 2. Go through all the tool + * activities defined in the learning design, create a runtime copy of all tool's content.
  • * *

    * As a runtime design, it is not copied into any folder. *

    * - * @see org.lamsfoundation.lams.monitoring.service.IMonitoringService#initializeLesson(String, - * String, long, Integer) + * @see org.lamsfoundation.lams.monitoring.service.IMonitoringService#initializeLesson(String, String, long, + * Integer) */ public Lesson initializeLesson(String lessonName, String lessonDescription, Boolean learnerExportAvailable, long learningDesignId, Integer organisationId, Integer userID, String customCSV, - Boolean learnerPresenceAvailable, Boolean learnerImAvailable, Boolean liveEditEnabled) { + Boolean learnerPresenceAvailable, Boolean learnerImAvailable, Boolean liveEditEnabled, + Integer scheduledNumberDaysToLessonFinish) { LearningDesign originalLearningDesign = authoringService.getLearningDesign(new Long(learningDesignId)); if (originalLearningDesign == null) { @@ -437,8 +437,9 @@ } User user = userID != null ? (User) baseDAO.find(User.class, userID) : null; - Lesson initializedLesson = initializeLesson(lessonName, lessonDescription, learnerExportAvailable, originalLearningDesign, user, - runSeqFolder, LearningDesign.COPY_TYPE_LESSON, customCSV, learnerPresenceAvailable, learnerImAvailable, liveEditEnabled); + Lesson initializedLesson = initializeLesson(lessonName, lessonDescription, learnerExportAvailable, + originalLearningDesign, user, runSeqFolder, LearningDesign.COPY_TYPE_LESSON, customCSV, + learnerPresenceAvailable, learnerImAvailable, liveEditEnabled, scheduledNumberDaysToLessonFinish); Long initializedLearningDesignId = initializedLesson.getLearningDesign().getLearningDesignId(); logEventService.logEvent(LogEvent.TYPE_TEACHER_LESSON_CREATE, userID, initializedLearningDesignId, initializedLesson.getLessonId(), null); @@ -461,12 +462,14 @@ User user = userID != null ? (User) baseDAO.find(User.class, userID) : null; return initializeLesson(lessonName, lessonDescription, Boolean.TRUE, originalLearningDesign, user, null, - LearningDesign.COPY_TYPE_PREVIEW, customCSV, learnerPresenceAvailable, learnerImAvailable, liveEditEnabled); + LearningDesign.COPY_TYPE_PREVIEW, customCSV, learnerPresenceAvailable, learnerImAvailable, + liveEditEnabled, null); } public Lesson initializeLesson(String lessonName, String lessonDescription, Boolean learnerExportAvailable, LearningDesign originalLearningDesign, User user, WorkspaceFolder workspaceFolder, int copyType, - String customCSV, Boolean learnerPresenceAvailable, Boolean learnerImAvailable, Boolean liveEditEnabled) { + String customCSV, Boolean learnerPresenceAvailable, Boolean learnerImAvailable, Boolean liveEditEnabled, + Integer scheduledNumberDaysToLessonFinish) { // copy the current learning design LearningDesign copiedLearningDesign = authoringService.copyLearningDesign(originalLearningDesign, new Integer( @@ -482,9 +485,9 @@ } Lesson lesson = createNewLesson(title, lessonDescription, user, learnerExportAvailable, copiedLearningDesign, - learnerPresenceAvailable, learnerImAvailable, liveEditEnabled); - auditAction(MonitoringService.AUDIT_LESSON_CREATED_KEY, new Object[] { lessonName, - copiedLearningDesign.getTitle(), learnerExportAvailable }); + learnerPresenceAvailable, learnerImAvailable, liveEditEnabled, scheduledNumberDaysToLessonFinish); + auditAction(MonitoringService.AUDIT_LESSON_CREATED_KEY, + new Object[] { lessonName, copiedLearningDesign.getTitle(), learnerExportAvailable }); return lesson; } @@ -513,6 +516,7 @@ boolean learnerImAvailable = WDDXProcessor.convertToBoolean("enableIm", table.get("enableIm")); boolean liveEditEnabled = WDDXProcessor.convertToBoolean("enableLiveEdit", table.get("enableLiveEdit")); String customCSV = WDDXProcessor.convertToString(WDDXTAGS.CUSTOM_CSV, table.get(WDDXTAGS.CUSTOM_CSV)); + Integer scheduledNumberDaysToLessonFinish = WDDXProcessor.convertToInteger("scheduledNumberDaysToLessonFinish", table.get("scheduledNumberDaysToLessonFinish")); // initialize lesson @@ -523,7 +527,8 @@ learnerPresenceAvailable, learnerImAvailable, liveEditEnabled); } else { newLesson = initializeLesson(title, desc, learnerExportAvailable, ldId, organisationId, creatorUserId, - customCSV, learnerPresenceAvailable, learnerImAvailable, liveEditEnabled); + customCSV, learnerPresenceAvailable, learnerImAvailable, liveEditEnabled, + scheduledNumberDaysToLessonFinish); } if (newLesson != null) { @@ -774,13 +779,23 @@ * @see org.lamsfoundation.lams.monitoring.service.IMonitoringService#finishLessonOnSchedule(long * , Date , User) */ - public void finishLessonOnSchedule(long lessonId, Date endDate, Integer userId) { + public void finishLessonOnSchedule(long lessonId, int scheduledNumberDaysToLessonFinish, Integer userId) { // we get the lesson want to finish Lesson requestedLesson = lessonDAO.getLesson(new Long(lessonId)); if (requestedLesson == null) { throw new MonitoringServiceException("Lesson for id=" + lessonId + " is missing. Unable to start lesson."); } checkOwnerOrStaffMember(userId, requestedLesson, "finish lesson on schedule"); + + //calculate finish date + Date startDate = (requestedLesson.getStartDateTime() != null) ? requestedLesson.getStartDateTime() : requestedLesson.getScheduleStartDate(); + if (startDate == null) { + throw new MonitoringServiceException("Lesson with id=" + lessonId + " neither has been started nor scheduled to start. Unable to schedule lesson's finish."); + } + Calendar calendar = Calendar.getInstance(); + calendar.setTime(startDate); + calendar.add(Calendar.DATE, scheduledNumberDaysToLessonFinish); + Date endDate = calendar.getTime(); JobDetail finishLessonJob = getFinishScheduleLessonJob(); // setup the message for scheduling job @@ -795,6 +810,7 @@ // start the scheduling job try { requestedLesson.setScheduleEndDate(endDate); + lessonDAO.updateLesson(requestedLesson); scheduler.scheduleJob(finishLessonJob, finishLessonTrigger); } catch (SchedulerException e) { throw new MonitoringServiceException("Error occurred at " @@ -2029,9 +2045,9 @@ */ private Lesson createNewLesson(String lessonName, String lessonDescription, User user, Boolean learnerExportAvailable, LearningDesign copiedLearningDesign, Boolean learnerPresenceAvailable, - Boolean learnerImAvailable, Boolean liveEditEnabled) { + Boolean learnerImAvailable, Boolean liveEditEnabled, Integer scheduledNumberDaysToLessonFinish) { Lesson newLesson = Lesson.createNewLessonWithoutClass(lessonName, lessonDescription, user, - learnerExportAvailable, copiedLearningDesign, learnerPresenceAvailable, learnerImAvailable, liveEditEnabled); + learnerExportAvailable, copiedLearningDesign, learnerPresenceAvailable, learnerImAvailable, liveEditEnabled, scheduledNumberDaysToLessonFinish); lessonDAO.saveLesson(newLesson); return newLesson; } @@ -2786,13 +2802,14 @@ String customCSV = WDDXProcessor.convertToString(WDDXTAGS.CUSTOM_CSV, table.get(WDDXTAGS.CUSTOM_CSV)); boolean liveEditEnabled = WDDXProcessor.convertToBoolean("enableLiveEdit", table.get("enableLiveEdit")); int numLessons = WDDXProcessor.convertToInt("numberLessonsSplit", table.get("numberLessonsSplit")); + Integer scheduledNumberDaysToLessonFinish = WDDXProcessor.convertToInteger("scheduledNumberDaysToLessonFinish", table.get("scheduledNumberDaysToLessonFinish")); // initialise multiple lessons if (numLessons > 0) { for (int i = 1; i <= numLessons; i++) { Lesson newLesson = initializeLesson(title + " " + i, desc, learnerExportAvailable, ldId, - organisationId, creatorUserId, customCSV, learnerPresenceAvailable, learnerImAvailable, liveEditEnabled); + organisationId, creatorUserId, customCSV, learnerPresenceAvailable, learnerImAvailable, liveEditEnabled, scheduledNumberDaysToLessonFinish); lessonIds.add(newLesson.getLessonId()); } } @@ -2958,7 +2975,7 @@ .getLessonDescription(), lesson.getLearnerExportAvailable(), lesson .getLearningDesign().getLearningDesignId(), group.getOrganisationId(), userDto .getUserID(), null, lesson.getLearnerPresenceAvailable(), lesson - .getLearnerImAvailable(), lesson.getLiveEditEnabled()); + .getLearnerImAvailable(), lesson.getLiveEditEnabled(), null); // save LessonClasses newLesson = this Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringAction.java =================================================================== diff -u -r009fbce36f45d0929f8007c4bbc798242f57d3af -r1c1c6b24a18fffc7a7b2bccdee8fedb110d1669e --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringAction.java (.../MonitoringAction.java) (revision 009fbce36f45d0929f8007c4bbc798242f57d3af) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringAction.java (.../MonitoringAction.java) (revision 1c1c6b24a18fffc7a7b2bccdee8fedb110d1669e) @@ -67,18 +67,18 @@ /** - *

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

    + *

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

    * * @author Jacky Fang - * @since 2005-4-15 + * @since 2005-4-15 * @version 1.1 * * ----------------XDoclet Tags-------------------- * - * @struts:action path="/monitoring" - * parameter="method" - * validate="false" + * @struts:action path="/monitoring" parameter="method" validate="false" * @struts.action-forward name = "previewdeleted" path = "/previewdeleted.jsp" * @struts.action-forward name = "notsupported" path = ".notsupported" * @struts.action-forward name = "timeChart" path = "/timeChart.jsp" @@ -194,7 +194,7 @@ Boolean learnerPresenceAvailable = WebUtil.readBooleanParam(request, "learnerPresenceAvailable", false); Boolean learnerImAvailable = WebUtil.readBooleanParam(request, "learnerImAvailable", false); Boolean liveEditEnabled = WebUtil.readBooleanParam(request, "liveEditEnabled", false); - Lesson newLesson = monitoringService.initializeLesson(title,desc,learnerExportAvailable,ldId,organisationId,getUserId(), null, learnerPresenceAvailable, learnerImAvailable, liveEditEnabled); + Lesson newLesson = monitoringService.initializeLesson(title,desc,learnerExportAvailable,ldId,organisationId,getUserId(), null, learnerPresenceAvailable, learnerImAvailable, liveEditEnabled, null); flashMessage = new FlashMessage("initializeLesson",newLesson.getLessonId()); } catch (Exception e) { @@ -328,9 +328,8 @@ try { long lessonId = WebUtil.readLongParam(request, AttributeNames.PARAM_LESSON_ID); - String dateStr = WebUtil.readStrParam(request, MonitoringConstants.PARAM_LESSON_FINISH_DATE); - Date finishDate = DateFormat.getInstance().parse(dateStr); - monitoringService.finishLessonOnSchedule(lessonId,finishDate,getUserId()); + int scheduledNumberDaysToLessonFinish = WebUtil.readIntParam(request, MonitoringConstants.PARAM_SCHEDULED_NUMBER_DAYS_TO_LESSON_FINISH); + monitoringService.finishLessonOnSchedule(lessonId,scheduledNumberDaysToLessonFinish,getUserId()); flashMessage = new FlashMessage("finishOnScheduleLesson",Boolean.TRUE); }catch (Exception e) { flashMessage = handleException(e, "finishOnScheduleLesson", monitoringService); @@ -732,6 +731,9 @@ languageCollection.add(new String("add.now.button.label")); languageCollection.add(new String("advanced.tab.form.advanced.options.label")); languageCollection.add(new String("advanced.tab.form.enable.im.label")); + languageCollection.add(new String("advanced.tab.form.time.limits.label")); + languageCollection.add(new String("advanced.tab.form.enter.number.days.label")); + languageCollection.add(new String("advanced.tab.form.individual.not.entire.group.label")); languageCollection.add(new String("advanced.tab.form.scheduling.label")); languageCollection.add(new String("advanced.tab.form.enable.label")); languageCollection.add(new String("advanced.tab.form.validation.no.learners.error")); Index: lams_monitoring/test/java/org/lamsfoundation/lams/monitoring/service/TestMonitoringService.java =================================================================== diff -u -r126d84999e520648cb187e465cb4aaa3baad222e -r1c1c6b24a18fffc7a7b2bccdee8fedb110d1669e --- lams_monitoring/test/java/org/lamsfoundation/lams/monitoring/service/TestMonitoringService.java (.../TestMonitoringService.java) (revision 126d84999e520648cb187e465cb4aaa3baad222e) +++ lams_monitoring/test/java/org/lamsfoundation/lams/monitoring/service/TestMonitoringService.java (.../TestMonitoringService.java) (revision 1c1c6b24a18fffc7a7b2bccdee8fedb110d1669e) @@ -157,7 +157,7 @@ long previousLDId = getMaxId(lamsLearningDesignTableName, idName); Lesson testLesson = monitoringService.initializeLesson("Test_Lesson", "Test_Description", Boolean.TRUE, - TEST_LEARNING_DESIGN_ID, null, testUser.getUserId(), null, false, false, false); + TEST_LEARNING_DESIGN_ID, null, testUser.getUserId(), null, false, false, false, null); TestMonitoringService.TEST_LESSON_ID = testLesson.getLessonId(); Lesson createdLesson = lessonDao.getLesson(TestMonitoringService.TEST_LESSON_ID); assertNotNull(createdLesson);