Index: lams_build/lib/lams/lams.jar =================================================================== diff -u -r86f8f142891162680c6f7ed66a8c4edf574df991 -r5b633ecc884b7d321a5164af26bfe268629a2d3f Binary files differ Index: lams_common/src/java/org/lamsfoundation/lams/lesson/service/ILessonService.java =================================================================== diff -u -r7d898ea4d62e737512701712ddf4c5e1e0ac3021 -r5b633ecc884b7d321a5164af26bfe268629a2d3f --- lams_common/src/java/org/lamsfoundation/lams/lesson/service/ILessonService.java (.../ILessonService.java) (revision 7d898ea4d62e737512701712ddf4c5e1e0ac3021) +++ lams_common/src/java/org/lamsfoundation/lams/lesson/service/ILessonService.java (.../ILessonService.java) (revision 5b633ecc884b7d321a5164af26bfe268629a2d3f) @@ -434,4 +434,6 @@ * Find lessons which just got available after the given lesson has been completed. */ Set getReleasedSucceedingLessons(Long completedLessonId, Integer learnerId); + + void removeLearnerProgress(Long lessonId, Integer userId); } \ No newline at end of file Index: lams_common/src/java/org/lamsfoundation/lams/lesson/service/LessonService.java =================================================================== diff -u -r7d898ea4d62e737512701712ddf4c5e1e0ac3021 -r5b633ecc884b7d321a5164af26bfe268629a2d3f --- lams_common/src/java/org/lamsfoundation/lams/lesson/service/LessonService.java (.../LessonService.java) (revision 7d898ea4d62e737512701712ddf4c5e1e0ac3021) +++ lams_common/src/java/org/lamsfoundation/lams/lesson/service/LessonService.java (.../LessonService.java) (revision 5b633ecc884b7d321a5164af26bfe268629a2d3f) @@ -481,6 +481,17 @@ } } } + + /** + * Completely removes learner progress as if the user has not started the lesson yet. + */ + @Override + public void removeLearnerProgress(Long lessonId, Integer userId) { + LearnerProgress learnerProgress = getUserProgressForLesson(userId, lessonId); + if (learnerProgress != null) { + learnerProgressDAO.deleteLearnerProgress(learnerProgress); + } + } private boolean removeActivityReference(Activity activity, LearnerProgress progress) { Index: lams_monitoring/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -r0b52584c9a5d47733a54ba67cc7b9744902ef473 -r5b633ecc884b7d321a5164af26bfe268629a2d3f --- lams_monitoring/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 0b52584c9a5d47733a54ba67cc7b9744902ef473) +++ lams_monitoring/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 5b633ecc884b7d321a5164af26bfe268629a2d3f) @@ -303,6 +303,6 @@ lesson.copy.prompt =(now press Ctrl+C to copy to clipboard) learners.search.phrase.tooltip =You can use multiple keywords by separating them with ; learner.group.select.all =Select/Unselect all +learner.group.remove.progress =You are about to remove student(s) from a lesson. The student(s) will not have access to this lesson any longer. Do you also want to remove the student(s) progress? - #======= End labels: Exported 297 labels for en AU ===== Index: lams_monitoring/conf/language/lams/ApplicationResources_en_AU.properties =================================================================== diff -u -r0b52584c9a5d47733a54ba67cc7b9744902ef473 -r5b633ecc884b7d321a5164af26bfe268629a2d3f --- lams_monitoring/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision 0b52584c9a5d47733a54ba67cc7b9744902ef473) +++ lams_monitoring/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision 5b633ecc884b7d321a5164af26bfe268629a2d3f) @@ -303,6 +303,7 @@ lesson.copy.prompt =(now press Ctrl+C to copy to clipboard) learners.search.phrase.tooltip =You can use multiple keywords by separating them with ; learner.group.select.all =Select/Unselect all +learner.group.remove.progress =You are about to remove student(s) from a lesson. The student(s) will not have access to this lesson any longer. Do you also want to remove the student(s) progress? #======= End labels: Exported 297 labels for en AU ===== Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringAction.java =================================================================== diff -u -read7523690db517b9989035e1e1db8f0b2475376 -r5b633ecc884b7d321a5164af26bfe268629a2d3f --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringAction.java (.../MonitoringAction.java) (revision ead7523690db517b9989035e1e1db8f0b2475376) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringAction.java (.../MonitoringAction.java) (revision 5b633ecc884b7d321a5164af26bfe268629a2d3f) @@ -636,20 +636,23 @@ HttpServletResponse response) throws IOException, JSONException { long lessonId = WebUtil.readLongParam(request, AttributeNames.PARAM_LESSON_ID); Lesson lesson = getLessonService().getLesson(lessonId); - Organisation organisation = lesson.getOrganisation(); + // monitor user opted for removing lesson progress for following users + List removedLearners = parseUserList(request, "removedLearners"); + for (User removedLearner : removedLearners) { + getLessonService().removeLearnerProgress(lessonId, removedLearner.getUserId()); + if (LamsDispatchAction.log.isDebugEnabled()) { + LamsDispatchAction.log.debug("Removed progress for user ID: " + removedLearner.getUserId() + + " in lesson ID: " + lessonId); + } + } + List learners = parseUserList(request, "learners"); - String learnerGroupName = organisation.getName() + " learners"; + getLessonService().setLearners(lesson, learners); List staff = parseUserList(request, "monitors"); - // add the creator as staff, if not already done - String staffGroupName = organisation.getName() + " staff"; + getLessonService().setStaffMembers(lesson, staff); - IMonitoringService monitoringService = MonitoringServiceProxy.getMonitoringService(getServlet() - .getServletContext()); - monitoringService.createLessonClassForLesson(lessonId, organisation, learnerGroupName, learners, - staffGroupName, staff, getUserId()); - return null; } Index: lams_monitoring/web/includes/javascript/monitorLesson.js =================================================================== diff -u -r8d1618f811584b0b8ff05a2ad4de62fd08cc72df -r5b633ecc884b7d321a5164af26bfe268629a2d3f --- lams_monitoring/web/includes/javascript/monitorLesson.js (.../monitorLesson.js) (revision 8d1618f811584b0b8ff05a2ad4de62fd08cc72df) +++ lams_monitoring/web/includes/javascript/monitorLesson.js (.../monitorLesson.js) (revision 5b633ecc884b7d321a5164af26bfe268629a2d3f) @@ -146,27 +146,50 @@ sortDialogList('classMonitor'); colorDialogList('classLearner'); colorDialogList('classMonitor'); + + var selectedLearners = getSelectedClassUserList('classLearnerList'); + $(this).dialog('option', 'initSelectedLearners', selectedLearners); }, 'buttons' : [ { 'text' : 'Save', 'id' : 'classDialogSaveButton', 'click' : function() { - var dialog = $(this); - var learners = getSelectedClassUserList('classLearnerList'); - var monitors = getSelectedClassUserList('classMonitorList'); + var removedLearners = [], + dialog = $(this), + initSelectedLearners = dialog.dialog('option', 'initSelectedLearners'), + learners = getSelectedClassUserList('classLearnerList'), + monitors = getSelectedClassUserList('classMonitorList'); + + // check for learners removed from lesson + $.each(initSelectedLearners, function(index, selectedLearnerId){ + if ($.inArray(selectedLearnerId, learners) == -1) { + removedLearners.push(selectedLearnerId); + } + }); + + // check if monitoring user really wants to remove progress + if (removedLearners.length > 0 && !confirm(LEARNER_GROUP_REMOVE_PROGRESS)){ + removedLearners = []; + } + $.ajax({ url : LAMS_URL + 'monitoring/monitoring.do', cache : false, data : { - 'method' : 'updateLessonClass', - 'lessonID' : lessonId, - 'learners' : learners, - 'monitors' : monitors + 'method' : 'updateLessonClass', + 'lessonID' : lessonId, + 'learners' : learners.join(), + 'monitors' : monitors.join(), + 'removedLearners' : removedLearners.join() }, success : function() { dialog.dialog('close'); - refreshMonitor('lesson'); + if (removedLearners.length > 0) { + refreshMonitor(); + } else { + refreshMonitor('lesson'); + } } }); } @@ -413,10 +436,10 @@ * Stringifies user IDs who were selected in Edit Class dialog. */ function getSelectedClassUserList(containerId) { - var list = ''; + var list = []; $('#' + containerId).children('div.dialogListItem').each(function(){ if ($('input:checked', this).length > 0){ - list += $(this).attr('userId') + ','; + list.push($(this).attr('userId')); } }); return list; Index: lams_monitoring/web/monitor.jsp =================================================================== diff -u -rf0c497e4b524a399c17b4a2347989b50a0c41ec8 -r5b633ecc884b7d321a5164af26bfe268629a2d3f --- lams_monitoring/web/monitor.jsp (.../monitor.jsp) (revision f0c497e4b524a399c17b4a2347989b50a0c41ec8) +++ lams_monitoring/web/monitor.jsp (.../monitor.jsp) (revision 5b633ecc884b7d321a5164af26bfe268629a2d3f) @@ -41,6 +41,7 @@ var FORCE_COMPLETE_DROP_FAIL_LABEL = ''; var LEARNER_GROUP_COUNT_LABEL = ''; var LEARNER_GROUP_SHOW_LABEL = ''; + var LEARNER_GROUP_REMOVE_PROGRESS = ''; var LEARNER_GROUP_LIST_TITLE_LABEL = ''; var VIEW_LEARNER_BUTTON_LABEL = ''; var EMAIL_BUTTON_LABEL = '';