Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/ICoreLearnerService.java =================================================================== diff -u -re76fd654d97033acef2c7bbe4c0def48e37f79f3 -r07d6aab3c681c1f2ecb8041756e99567ed639f31 --- lams_learning/src/java/org/lamsfoundation/lams/learning/service/ICoreLearnerService.java (.../ICoreLearnerService.java) (revision e76fd654d97033acef2c7bbe4c0def48e37f79f3) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/ICoreLearnerService.java (.../ICoreLearnerService.java) (revision 07d6aab3c681c1f2ecb8041756e99567ed639f31) @@ -114,9 +114,11 @@ * @param learnerId the Learner's userID * @param lessonId the Lesson to get progress from. * @param activity the activity being attempted. + * @param clearCompletedFlag If the lesson is completed but this activity is unstarted, should we mark it as incomplete? Used for branching and + * optional sequences for skipped sequences (e.g. force completed branching) * @return LearnerProgress */ - public LearnerProgress chooseActivity(Integer learnerId, Long lessonId, Activity activity); + public LearnerProgress chooseActivity(Integer learnerId, Long lessonId, Activity activity, Boolean clearCompletedFlag); /** Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java =================================================================== diff -u -re76fd654d97033acef2c7bbe4c0def48e37f79f3 -r07d6aab3c681c1f2ecb8041756e99567ed639f31 --- lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision e76fd654d97033acef2c7bbe4c0def48e37f79f3) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision 07d6aab3c681c1f2ecb8041756e99567ed639f31) @@ -361,9 +361,17 @@ /** * @see org.lamsfoundation.lams.learning.service.ICoreLearnerService#chooseActivity(org.lamsfoundation.lams.usermanagement.User, java.lang.Long, org.lamsfoundation.lams.learningdesign.Activity) */ - public LearnerProgress chooseActivity(Integer learnerId, Long lessonId, Activity activity) + public LearnerProgress chooseActivity(Integer learnerId, Long lessonId, Activity activity, Boolean clearCompletedFlag) { LearnerProgress progress = learnerProgressDAO.getLearnerProgressByLearner(learnerId, lessonId); + + // if we skip a sequence in an optional sequence, or have been force completed for branching / optional sequence + // and we go back to the sequence later, then the LessonComplete flag must be reset so that it will step through + // all the activities in the sequence - otherwise it will go to the "Completed" screen after the first activity in the sequence + if ( clearCompletedFlag && activity.getParentActivity() != null && activity.getParentActivity().isSequenceActivity() + && progress.isLessonComplete() && ! progress.getCompletedActivities().contains(activity) ) + progress.setLessonComplete(false); + progressEngine.setActivityAttempted(progress, activity); progress.setCurrentActivity(activity); progress.setNextActivity(activity); Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/BranchingActivityAction.java =================================================================== diff -u -r560c00149837e66be2b9f4cbcbff95ff23a4dc28 -r07d6aab3c681c1f2ecb8041756e99567ed639f31 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/BranchingActivityAction.java (.../BranchingActivityAction.java) (revision 560c00149837e66be2b9f4cbcbff95ff23a4dc28) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/BranchingActivityAction.java (.../BranchingActivityAction.java) (revision 07d6aab3c681c1f2ecb8041756e99567ed639f31) @@ -168,7 +168,7 @@ } // Set the branch as the current part of the sequence and display it - learnerProgress = learnerService.chooseActivity(learnerId, learnerProgress.getLesson().getLessonId(), branch); + learnerProgress = learnerService.chooseActivity(learnerId, learnerProgress.getLesson().getLessonId(), branch, true); forward = actionMappings.getActivityForward(branch, learnerProgress, true); LearningWebUtil.putLearnerProgressInRequest(request,learnerProgress); } @@ -221,7 +221,7 @@ } // Set the branch as the current part of the sequence and display it - learnerProgress = learnerService.chooseActivity(learnerId, learnerProgress.getLesson().getLessonId(), branch); + learnerProgress = learnerService.chooseActivity(learnerId, learnerProgress.getLesson().getLessonId(), branch, true); forward = actionMappings.getActivityForward(branch, learnerProgress, true); LearningWebUtil.putLearnerProgressInRequest(request,learnerProgress); } Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ChooseActivityAction.java =================================================================== diff -u -r5863520d75343b47f77b05ad3bd7045a9a39af49 -r07d6aab3c681c1f2ecb8041756e99567ed639f31 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ChooseActivityAction.java (.../ChooseActivityAction.java) (revision 5863520d75343b47f77b05ad3bd7045a9a39af49) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ChooseActivityAction.java (.../ChooseActivityAction.java) (revision 07d6aab3c681c1f2ecb8041756e99567ed639f31) @@ -79,7 +79,7 @@ Activity activity = LearningWebUtil.getActivityFromRequest(request, learnerService); if (activity != null) { - progress = learnerService.chooseActivity(learnerId, lesson.getLessonId(), activity); + progress = learnerService.chooseActivity(learnerId, lesson.getLessonId(), activity, false); } else { // Something has gone wrong - maybe due to Live Edit. Need to recalculate their current location. progress = learnerService.joinLesson(learnerId, lesson.getLessonId()); Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/SequenceActivityAction.java =================================================================== diff -u -r2c1bd1d2babb133e68dd1b56f41f2d06897084c4 -r07d6aab3c681c1f2ecb8041756e99567ed639f31 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/SequenceActivityAction.java (.../SequenceActivityAction.java) (revision 2c1bd1d2babb133e68dd1b56f41f2d06897084c4) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/SequenceActivityAction.java (.../SequenceActivityAction.java) (revision 07d6aab3c681c1f2ecb8041756e99567ed639f31) @@ -87,7 +87,7 @@ if ( firstActivityInSequence != null && ! firstActivityInSequence.isNull() ) { // Set the first activity as the current activity and display it - learnerProgress = learnerService.chooseActivity(learnerId, learnerProgress.getLesson().getLessonId(), firstActivityInSequence); + learnerProgress = learnerService.chooseActivity(learnerId, learnerProgress.getLesson().getLessonId(), firstActivityInSequence, true); forward = actionMappings.getActivityForward(firstActivityInSequence, learnerProgress, true); LearningWebUtil.putActivityInRequest(request, firstActivityInSequence, learnerService); LearningWebUtil.setupProgressInRequest(form, request, learnerProgress);