Index: lams_learning/src/java/org/lamsfoundation/lams/learning/progress/ProgressBuilder.java =================================================================== diff -u -re4c92abe243b6367ad45115df3e1f5ecec5e5de7 -ra53a5e52a7bd24bf223708957166c92c8c32dd31 --- lams_learning/src/java/org/lamsfoundation/lams/learning/progress/ProgressBuilder.java (.../ProgressBuilder.java) (revision e4c92abe243b6367ad45115df3e1f5ecec5e5de7) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/progress/ProgressBuilder.java (.../ProgressBuilder.java) (revision a53a5e52a7bd24bf223708957166c92c8c32dd31) @@ -175,7 +175,7 @@ throw new LearningDesignProcessorException(error); } ActivityURL activityURL = LearningWebUtil.getActivityURL( activityMapping, progress, activity, false, isFloating); - if ( activityURL.getStatus() == LearnerProgress.ACTIVITY_NOT_ATTEMPTED && isFloating) { + if ( activityURL.getStatus() == LearnerProgress.ACTIVITY_NOT_ATTEMPTED) { activityURL.setUrl( (previewMode || isFloating) ? forceLearnerURL+activity.getActivityId() : null); } if (activity.isFloatingActivity()) { Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java =================================================================== diff -u -re4c92abe243b6367ad45115df3e1f5ecec5e5de7 -ra53a5e52a7bd24bf223708957166c92c8c32dd31 --- lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision e4c92abe243b6367ad45115df3e1f5ecec5e5de7) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision a53a5e52a7bd24bf223708957166c92c8c32dd31) @@ -410,6 +410,7 @@ } progressEngine.setActivityAttempted(progress, activity); + progress.setCurrentActivity(activity); progress.setNextActivity(activity); @@ -431,14 +432,17 @@ progress.setProgressState(fromActivity, LearnerProgress.ACTIVITY_ATTEMPTED, activityDAO); } - if (toActivity != null) { - progress.setProgressState(toActivity, LearnerProgress.ACTIVITY_ATTEMPTED, activityDAO); - if(!toActivity.isFloating()) - progress.setCurrentActivity(toActivity); - progress.setNextActivity(toActivity); + progress.setProgressState(toActivity, LearnerProgress.ACTIVITY_ATTEMPTED, activityDAO); + toActivity.setReadOnly(true); + + if(!toActivity.isFloating()) { + progress.setCurrentActivity(toActivity); + progress.setNextActivity(toActivity); } + learnerProgressDAO.updateLearnerProgress(progress); + activityDAO.update(toActivity); return progress; } Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LearnerAction.java =================================================================== diff -u -r0a50c865925ec0818895cbc9c4ce3b6e0beefa9c -ra53a5e52a7bd24bf223708957166c92c8c32dd31 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LearnerAction.java (.../LearnerAction.java) (revision 0a50c865925ec0818895cbc9c4ce3b6e0beefa9c) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LearnerAction.java (.../LearnerAction.java) (revision a53a5e52a7bd24bf223708957166c92c8c32dd31) @@ -531,7 +531,13 @@ Long lessonId = WebUtil.readLongParam(request,AttributeNames.PARAM_LESSON_ID); try { - forceMoveShared(request, learnerService,lessonId); + String url; + Activity targetActivity = forceMoveShared(request, learnerService, lessonId); + + if(!targetActivity.isFloating()) url = activityMapping.getDisplayActivityAction(null); + else url = activityMapping.getActivityURL(targetActivity); + + //TODO: update for moving to Floating Activity in Flash Learner flashMessage = new FlashMessage("forceMove", activityMapping.getDisplayActivityAction(null)); } catch (Exception e) { flashMessage = handleException(e, "forceMove", learnerService); @@ -568,8 +574,13 @@ Long lessonId = WebUtil.readLongParam(request,AttributeNames.PARAM_LESSON_ID); try { - forceMoveShared(request, learnerService,lessonId); - return redirectToURL(mapping, response, "/learning" + activityMapping.getDisplayActivityAction(lessonId)); + String url; + Activity targetActivity = forceMoveShared(request, learnerService,lessonId); + + if(!targetActivity.isFloating()) url = "/learning" + activityMapping.getDisplayActivityAction(lessonId); + else url = activityMapping.getActivityURL(targetActivity); + + return redirectToURL(mapping, response, url); } catch (Exception e) { log.error("Exception throw doing force move",e); throw new ServletException(e); @@ -578,9 +589,9 @@ /** * @param request - * @return + * @return targetActivity The activity we are moving to. */ - private void forceMoveShared(HttpServletRequest request, ICoreLearnerService learnerService, Long lessonId) { + private Activity forceMoveShared(HttpServletRequest request, ICoreLearnerService learnerService, Long lessonId) { //getting requested object according to coming parameters Integer learnerId = LearningWebUtil.getUserId(); @@ -614,12 +625,14 @@ if(toActivityId != null) toActivity = learnerService.getActivity(toActivityId); - + learnerService.moveToActivity(learnerId, lessonId, fromActivity, toActivity); if ( log.isDebugEnabled() ) { log.debug("Force move for learner "+learnerId+" lesson "+lessonId+". "); } + + return toActivity; } /**