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();
}
/*