Index: lams_build/lib/lams/lams-monitoring.jar =================================================================== diff -u -r509cebe97fca335b7d517abc7e8d9af03d6eab2e -r444ce71d035a643eb6e6c50357a41d7d5c09c7cb Binary files differ Index: lams_central/src/java/org/lamsfoundation/lams/util/CentralConstants.java =================================================================== diff -u -r82f71b01ece6c901faf317fa94fb10edfdac4df7 -r444ce71d035a643eb6e6c50357a41d7d5c09c7cb --- lams_central/src/java/org/lamsfoundation/lams/util/CentralConstants.java (.../CentralConstants.java) (revision 82f71b01ece6c901faf317fa94fb10edfdac4df7) +++ lams_central/src/java/org/lamsfoundation/lams/util/CentralConstants.java (.../CentralConstants.java) (revision 444ce71d035a643eb6e6c50357a41d7d5c09c7cb) @@ -81,6 +81,8 @@ public static final String METHOD_SCHEDULE = "schedule"; + public static final String METHOD_CLONE = "clone"; + public static final String METHOD_DELETE = "delete"; public static final String METHOD_STUDENT_PROGRESS = "studentProgress"; Index: lams_central/src/java/org/lamsfoundation/lams/webservice/xml/LessonManagerServlet.java =================================================================== diff -u -r509cebe97fca335b7d517abc7e8d9af03d6eab2e -r444ce71d035a643eb6e6c50357a41d7d5c09c7cb --- lams_central/src/java/org/lamsfoundation/lams/webservice/xml/LessonManagerServlet.java (.../LessonManagerServlet.java) (revision 509cebe97fca335b7d517abc7e8d9af03d6eab2e) +++ lams_central/src/java/org/lamsfoundation/lams/webservice/xml/LessonManagerServlet.java (.../LessonManagerServlet.java) (revision 444ce71d035a643eb6e6c50357a41d7d5c09c7cb) @@ -183,6 +183,15 @@ element = document.createElement(CentralConstants.ELEM_LESSON); element.setAttribute(CentralConstants.ATTR_LESSON_ID, lessonId.toString()); + } else if (method.equals(CentralConstants.METHOD_CLONE)) { + + lsId = new Long(lsIdStr); + Long lessonId = cloneLesson(serverId, datetime, hashValue, username, lsId, courseId, country, lang); + + element = document.createElement(CentralConstants.ELEM_LESSON); + element.setAttribute(CentralConstants.ATTR_LESSON_ID, lessonId.toString()); + + } else if (method.equals(CentralConstants.METHOD_DELETE)) { lsId = new Long(lsIdStr); Boolean deleted = deleteLesson(serverId, datetime, hashValue, username, lsId); @@ -382,6 +391,35 @@ } } + private Long cloneLesson(String serverId, String datetime, String hashValue, String username, long lsId, + String courseId, String countryIsoCode, String langIsoCode) throws RemoteException { + try { + ExtServerOrgMap serverMap = LessonManagerServlet.integrationService.getExtServerOrgMap(serverId); + Authenticator.authenticate(serverMap, datetime, username, hashValue); + + ExtUserUseridMap userMap = LessonManagerServlet.integrationService.getExtUserUseridMap(serverMap, username); + Integer creatorId = userMap.getUser().getUserId(); + + ExtCourseClassMap orgMap = LessonManagerServlet.integrationService.getExtCourseClassMap(serverMap, userMap, + courseId, countryIsoCode, langIsoCode, null, LoginRequestDispatcher.METHOD_MONITOR); + if (orgMap == null) { + LessonManagerServlet.log.debug("No course exists for: " + courseId + ". Can't delete any lessons."); + throw new Exception("Course with courseId: " + courseId + " could not be found"); + } + Organisation organisation = orgMap.getOrganisation(); + + // clone lesson + Long newLessonId = LessonManagerServlet.monitoringService.cloneLesson(lsId, creatorId, true, true, null, + null, organisation); + // store information which extServer has started the lesson + LessonManagerServlet.integrationService.createExtServerLessonMap(newLessonId, serverMap); + + return newLessonId; + } catch (Exception e) { + throw new RemoteException(e.getMessage(), e); + } + } + @SuppressWarnings("unchecked") public Element getAllStudentProgress(Document document, String serverId, String datetime, String hashValue, String username, long lsId, String courseID) throws RemoteException { Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/monitoringApplicationContext.xml =================================================================== diff -u -ra09db88ffc7dee8fb92f83481015b0bc06270c19 -r444ce71d035a643eb6e6c50357a41d7d5c09c7cb --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/monitoringApplicationContext.xml (.../monitoringApplicationContext.xml) (revision a09db88ffc7dee8fb92f83481015b0bc06270c19) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/monitoringApplicationContext.xml (.../monitoringApplicationContext.xml) (revision 444ce71d035a643eb6e6c50357a41d7d5c09c7cb) @@ -75,6 +75,7 @@ PROPAGATION_REQUIRED PROPAGATION_REQUIRED PROPAGATION_REQUIRED,readOnly + PROPAGATION_REQUIRED PROPAGATION_REQUIRED PROPAGATION_REQUIRED Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java =================================================================== diff -u -r509cebe97fca335b7d517abc7e8d9af03d6eab2e -r444ce71d035a643eb6e6c50357a41d7d5c09c7cb --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java (.../IMonitoringService.java) (revision 509cebe97fca335b7d517abc7e8d9af03d6eab2e) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java (.../IMonitoringService.java) (revision 444ce71d035a643eb6e6c50357a41d7d5c09c7cb) @@ -636,6 +636,22 @@ String[] learnerIds, Organisation group) throws MonitoringServiceException; /** + * Same as cloneLessons method, except it clones only one lesson. + * + * @param lessonId + * @param creatorId + * @param addAllStaff + * @param addAllLearners + * @param staffIds + * @param learnerIds + * @param group + * @return + * @throws MonitoringServiceException + */ + Long cloneLesson(Long lessonId, Integer creatorId, Boolean addAllStaff, Boolean addAllLearners, String[] staffIds, + String[] learnerIds, Organisation group) throws MonitoringServiceException; + + /** * Get list of users who completed the given lesson. */ List getUsersCompletedLesson(Long lessonId, Integer limit, Integer offset, boolean orderAscending); Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java =================================================================== diff -u -r509cebe97fca335b7d517abc7e8d9af03d6eab2e -r444ce71d035a643eb6e6c50357a41d7d5c09c7cb --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java (.../MonitoringService.java) (revision 509cebe97fca335b7d517abc7e8d9af03d6eab2e) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java (.../MonitoringService.java) (revision 444ce71d035a643eb6e6c50357a41d7d5c09c7cb) @@ -2201,59 +2201,73 @@ public int cloneLessons(String[] lessonIds, Boolean addAllStaff, Boolean addAllLearners, String[] staffIds, String[] learnerIds, Organisation group) throws MonitoringServiceException { int result = 0; - for (String l : lessonIds) { - Lesson lesson = lessonService.getLesson(Long.valueOf(l)); - if (lesson != null) { - HttpSession ss = SessionManager.getSession(); - if (ss != null) { - UserDTO userDto = (UserDTO) ss.getAttribute(AttributeNames.USER); - if (userDto != null) { - if ((!addAllStaff && (staffIds.length > 0)) || addAllStaff) { - // create staff LessonClass - String staffGroupName = group.getName() + " staff"; - List staffUsers = createStaffGroup(group.getOrganisationId(), addAllStaff, staffIds); + HttpSession ss = SessionManager.getSession(); + if (ss != null) { + UserDTO userDto = (UserDTO) ss.getAttribute(AttributeNames.USER); + if (userDto != null) { + Integer creatorId = userDto.getUserID(); - if ((!addAllLearners && (learnerIds.length > 0)) || addAllLearners) { - // create learner LessonClass for lesson - String learnerGroupName = group.getName() + " learners"; - List learnerUsers = createLearnerGroup(group.getOrganisationId(), addAllLearners, - learnerIds); + for (String lessonIdStr : lessonIds) { + Long lessonId = Long.parseLong(lessonIdStr); - // init Lesson with user as creator - Lesson newLesson = this.initializeLesson(lesson.getLessonName(), - lesson.getLessonDescription(), lesson.getLearningDesign().getLearningDesignId(), - group.getOrganisationId(), userDto.getUserID(), null, - lesson.isEnableLessonIntro(), lesson.isDisplayDesignImage(), - lesson.getLearnerPresenceAvailable(), lesson.getLearnerImAvailable(), - lesson.getLiveEditEnabled(), lesson.getEnableLessonNotifications(), - lesson.getForceLearnerRestart(), lesson.getAllowLearnerRestart(), null, null); + cloneLesson(lessonId, creatorId, addAllStaff, addAllLearners, staffIds, learnerIds, group); + result++; + } + } else { + throw new MonitoringServiceException("No UserDTO in session, can't create any Lessons."); + } + } - // save LessonClasses - newLesson = this.createLessonClassForLesson(newLesson.getLessonId(), group, - learnerGroupName, learnerUsers, staffGroupName, staffUsers, - userDto.getUserID()); + return result; + } - // start Lessons - // TODO user-specified creator; must be someone in staff group - this.startLesson(newLesson.getLessonId(), staffUsers.get(0).getUserId()); + @Override + public Long cloneLesson(Long lessonId, Integer creatorId, Boolean addAllStaff, Boolean addAllLearners, + String[] staffIds, String[] learnerIds, Organisation group) throws MonitoringServiceException { + Lesson newLesson = null; - result++; - } else { - throw new MonitoringServiceException( - "No learners specified, can't create any Lessons."); - } - } else { - throw new MonitoringServiceException("No staff specified, can't create any Lessons."); - } - } else { - throw new MonitoringServiceException("No UserDTO in session, can't create any Lessons."); - } + securityService.isGroupMonitor(group.getOrganisationId(), creatorId, "cloneLesson", true); + + Lesson lesson = lessonService.getLesson(lessonId); + if (lesson != null) { + + if ((!addAllStaff && (staffIds.length > 0)) || addAllStaff) { + // create staff LessonClass + String staffGroupName = group.getName() + " Staff"; + List staffUsers = createStaffGroup(group.getOrganisationId(), addAllStaff, staffIds); + + if ((!addAllLearners && (learnerIds.length > 0)) || addAllLearners) { + // create learner LessonClass for lesson + String learnerGroupName = group.getName() + " Learners"; + List learnerUsers = createLearnerGroup(group.getOrganisationId(), addAllLearners, learnerIds); + + // init Lesson with user as creator + newLesson = this.initializeLesson(lesson.getLessonName(), lesson.getLessonDescription(), + lesson.getLearningDesign().getLearningDesignId(), group.getOrganisationId(), creatorId, + null, lesson.isEnableLessonIntro(), lesson.isDisplayDesignImage(), + lesson.getLearnerPresenceAvailable(), lesson.getLearnerImAvailable(), + lesson.getLiveEditEnabled(), lesson.getEnableLessonNotifications(), + lesson.getForceLearnerRestart(), lesson.getAllowLearnerRestart(), null, null); + + // save LessonClasses + newLesson = this.createLessonClassForLesson(newLesson.getLessonId(), group, learnerGroupName, + learnerUsers, staffGroupName, staffUsers, creatorId); + + // start Lessons + // TODO user-specified creator; must be someone in staff group + this.startLesson(newLesson.getLessonId(), staffUsers.get(0).getUserId()); + + } else { + throw new MonitoringServiceException("No learners specified, can't create any Lessons."); } } else { - throw new MonitoringServiceException("Couldn't find Lesson based on id=" + l); + throw new MonitoringServiceException("No staff specified, can't create any Lessons."); } + } else { + throw new MonitoringServiceException("Couldn't find Lesson based on id=" + lessonId); } - return result; + + return newLesson.getLessonId(); } /*