Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/ICoreLearnerService.java =================================================================== RCS file: /usr/local/cvsroot/lams_learning/src/java/org/lamsfoundation/lams/learning/service/ICoreLearnerService.java,v diff -u -r1.12 -r1.13 --- lams_learning/src/java/org/lamsfoundation/lams/learning/service/ICoreLearnerService.java 8 Jan 2008 07:02:34 -0000 1.12 +++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/ICoreLearnerService.java 18 Feb 2008 05:17:31 -0000 1.13 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java,v diff -u -r1.73 -r1.74 --- lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java 8 Jan 2008 07:02:34 -0000 1.73 +++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java 18 Feb 2008 05:17:31 -0000 1.74 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/BranchingActivityAction.java,v diff -u -r1.6 -r1.7 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/BranchingActivityAction.java 27 Jul 2007 00:36:47 -0000 1.6 +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/BranchingActivityAction.java 18 Feb 2008 05:17:31 -0000 1.7 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ChooseActivityAction.java,v diff -u -r1.16 -r1.17 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ChooseActivityAction.java 12 Jul 2007 00:59:02 -0000 1.16 +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ChooseActivityAction.java 18 Feb 2008 05:17:31 -0000 1.17 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/SequenceActivityAction.java,v diff -u -r1.5 -r1.6 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/SequenceActivityAction.java 13 Nov 2007 11:50:18 -0000 1.5 +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/SequenceActivityAction.java 18 Feb 2008 05:17:31 -0000 1.6 @@ -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);