Index: lams_common/src/java/org/lamsfoundation/lams/learning/service/ILearnerService.java =================================================================== diff -u -r58f8a894e785390508199bfb43acefd77ee63d0a -r2027920d8ebc25042b825f7ba175a93f725f15dc --- lams_common/src/java/org/lamsfoundation/lams/learning/service/ILearnerService.java (.../ILearnerService.java) (revision 58f8a894e785390508199bfb43acefd77ee63d0a) +++ lams_common/src/java/org/lamsfoundation/lams/learning/service/ILearnerService.java (.../ILearnerService.java) (revision 2027920d8ebc25042b825f7ba175a93f725f15dc) @@ -186,7 +186,7 @@ GateActivityDTO isNextGateActivityOpenByToolSessionId(int learnerId, long toolSessionId); - GateActivityDTO isNextGateActivityOpenByLessonId(int learnerId, long lessonId); + GateActivityDTO isNextGateActivityOpenByActivityId(int learnerId, long lessonId); Set getGroupsForGate(GateActivity gate); Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java =================================================================== diff -u -rabc97e23a8e15a2b946a0efde82a2f12e35e7834 -r2027920d8ebc25042b825f7ba175a93f725f15dc --- lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision abc97e23a8e15a2b946a0efde82a2f12e35e7834) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision 2027920d8ebc25042b825f7ba175a93f725f15dc) @@ -892,18 +892,26 @@ @Override public GateActivityDTO isNextGateActivityOpenByToolSessionId(int learnerId, long toolSessionId) { ToolSession toolSession = lamsCoreToolService.getToolSessionById(toolSessionId); - return isNextGateActivityOpenByLessonId(learnerId, toolSession.getLesson().getLessonId()); + return isNextGateActivityOpenByActivityId(learnerId, toolSession.getToolActivity().getActivityId()); } @Override - public GateActivityDTO isNextGateActivityOpenByLessonId(int learnerId, long lessonId) { - LearnerProgress learnerProgress = getProgress(learnerId, lessonId); + public GateActivityDTO isNextGateActivityOpenByActivityId(int learnerId, long currentActivityId) { + Activity currentActivity = activityDAO.getActivityByActivityId(currentActivityId, Activity.class); + + LearnerProgress learnerProgress = getProgress(learnerId, + currentActivity.getLearningDesign().getLessons().iterator().next().getLessonId()); if (learnerProgress.getLesson().getLearningDesign().getCopyTypeID() == LearningDesign.COPY_TYPE_PREVIEW) { // teacher can rush through preview lessons ignoring gates return null; } - - Activity currentActivity = learnerProgress.getCurrentActivity(); + + Activity parentActivity = currentActivity.getParentActivity(); + if (parentActivity != null && parentActivity.isOptionsActivity()) { + // it is the optional activity which controls gate flow, not the nested tool + return null; + } + Activity nextActivity = null; Transition transition = currentActivity.getTransitionFrom(); if (transition != null) { Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/controller/LearnerController.java =================================================================== diff -u -rfe0eeacb777596f33a8f05f06c36f95c4b473d8e -r2027920d8ebc25042b825f7ba175a93f725f15dc --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/controller/LearnerController.java (.../LearnerController.java) (revision fe0eeacb777596f33a8f05f06c36f95c4b473d8e) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/controller/LearnerController.java (.../LearnerController.java) (revision 2027920d8ebc25042b825f7ba175a93f725f15dc) @@ -461,7 +461,7 @@ @RequestMapping("/isNextGateActivityOpen") @ResponseBody public String isNextGateActivityOpen(@RequestParam(required = false) Long toolSessionId, - @RequestParam(required = false) Long lessonId, HttpSession session, Locale locale) { + @RequestParam(required = false) Long activityId, HttpSession session, Locale locale) { UserDTO userDto = (UserDTO) session.getAttribute(AttributeNames.USER); if (userDto == null) { @@ -472,10 +472,10 @@ GateActivityDTO gateDto = null; if (toolSessionId != null) { gateDto = learnerService.isNextGateActivityOpenByToolSessionId(userId, toolSessionId); - } else if (lessonId != null) { - gateDto = learnerService.isNextGateActivityOpenByLessonId(userId, lessonId); + } else if (activityId != null) { + gateDto = learnerService.isNextGateActivityOpenByActivityId(userId, activityId); } else { - throw new IllegalArgumentException("Either tool session ID or lesson ID has to be provided"); + throw new IllegalArgumentException("Either tool session ID or activity ID has to be provided"); } ObjectNode responseJSON = JsonNodeFactory.instance.objectNode(); Index: lams_learning/web/includes/javascript/gate-check.js =================================================================== diff -u -rfe0eeacb777596f33a8f05f06c36f95c4b473d8e -r2027920d8ebc25042b825f7ba175a93f725f15dc --- lams_learning/web/includes/javascript/gate-check.js (.../gate-check.js) (revision fe0eeacb777596f33a8f05f06c36f95c4b473d8e) +++ lams_learning/web/includes/javascript/gate-check.js (.../gate-check.js) (revision 2027920d8ebc25042b825f7ba175a93f725f15dc) @@ -1,4 +1,4 @@ -function checkNextGateActivity(finishButtonId, toolSessionId, lessonId, submitFunction){ +function checkNextGateActivity(finishButtonId, toolSessionId, activityId, submitFunction){ // we need bootstrap tooltip, not jQuery UI one // if it has not been isolated yet, try to do it now if (typeof $.fn.bootstrapTooltip != 'function') { @@ -28,7 +28,7 @@ // check if there is a gate after this activity // if so, check if learner can pass $.ajax({ - 'url' : '/lams/learning/learner/isNextGateActivityOpen.do?toolSessionId=' + toolSessionId + '&lessonId=' + lessonId, + 'url' : '/lams/learning/learner/isNextGateActivityOpen.do?toolSessionId=' + toolSessionId + '&activityId=' + activityId, 'cache' : false, 'dataType' : 'json', 'success' : function(response) {