Index: lams_common/src/java/org/lamsfoundation/lams/learning/service/ILearnerService.java =================================================================== diff -u -r89350b37c57bdf618cc90c09d792ce7d865ad4da -r0e9494974eaff0acd6ae466566653dd2a2e7e8ba --- lams_common/src/java/org/lamsfoundation/lams/learning/service/ILearnerService.java (.../ILearnerService.java) (revision 89350b37c57bdf618cc90c09d792ce7d865ad4da) +++ lams_common/src/java/org/lamsfoundation/lams/learning/service/ILearnerService.java (.../ILearnerService.java) (revision 0e9494974eaff0acd6ae466566653dd2a2e7e8ba) @@ -184,6 +184,10 @@ */ GateActivityDTO knockGate(GateActivity gateActivity, User knocker, boolean forceGate, Object key); + boolean isNextGateActivityOpenByToolSessionId(int learnerId, long toolSessionId); + + boolean isNextGateActivityOpenByLessonId(int learnerId, long lessonId); + Set getGroupsForGate(GateActivity gate); /** Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/ConditionGateActivity.java =================================================================== diff -u -r47043f84205046a23497bf8c57060e2dcadf0c9a -r0e9494974eaff0acd6ae466566653dd2a2e7e8ba --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/ConditionGateActivity.java (.../ConditionGateActivity.java) (revision 47043f84205046a23497bf8c57060e2dcadf0c9a) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/ConditionGateActivity.java (.../ConditionGateActivity.java) (revision 0e9494974eaff0acd6ae466566653dd2a2e7e8ba) @@ -62,6 +62,7 @@ copyToNewActivity(newConditionGateActivity, uiidOffset); newConditionGateActivity.setGateOpen(false); newConditionGateActivity.setGateActivityLevelId(this.getGateActivityLevelId()); + newConditionGateActivity.setGateStopAtPrecedingActivity(this.isGateStopAtPrecedingActivity()); if ((this.getBranchActivityEntries() != null) && (this.getBranchActivityEntries().size() > 0)) { Iterator iter = this.getBranchActivityEntries().iterator(); Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/PermissionGateActivity.java =================================================================== diff -u -r47043f84205046a23497bf8c57060e2dcadf0c9a -r0e9494974eaff0acd6ae466566653dd2a2e7e8ba --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/PermissionGateActivity.java (.../PermissionGateActivity.java) (revision 47043f84205046a23497bf8c57060e2dcadf0c9a) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/PermissionGateActivity.java (.../PermissionGateActivity.java) (revision 0e9494974eaff0acd6ae466566653dd2a2e7e8ba) @@ -84,6 +84,7 @@ copyToNewActivity(newPermissionGateActivity, uiidOffset); newPermissionGateActivity.setGateOpen(false); newPermissionGateActivity.setGateActivityLevelId(this.getGateActivityLevelId()); + newPermissionGateActivity.setGateStopAtPrecedingActivity(this.isGateStopAtPrecedingActivity()); return newPermissionGateActivity; } Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/ScheduleGateActivity.java =================================================================== diff -u -r47043f84205046a23497bf8c57060e2dcadf0c9a -r0e9494974eaff0acd6ae466566653dd2a2e7e8ba --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/ScheduleGateActivity.java (.../ScheduleGateActivity.java) (revision 47043f84205046a23497bf8c57060e2dcadf0c9a) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/ScheduleGateActivity.java (.../ScheduleGateActivity.java) (revision 0e9494974eaff0acd6ae466566653dd2a2e7e8ba) @@ -99,6 +99,7 @@ newScheduleGateActivity.setGateEndTimeOffset(this.getGateEndTimeOffset()); newScheduleGateActivity.setGateStartTimeOffset(this.getGateStartTimeOffset()); newScheduleGateActivity.setGateActivityCompletionBased(this.getGateActivityCompletionBased()); + newScheduleGateActivity.setGateStopAtPrecedingActivity(this.isGateStopAtPrecedingActivity()); return newScheduleGateActivity; } Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java =================================================================== diff -u -r4f526e3455fe0ed91e6a838c833f1cd916844b98 -r0e9494974eaff0acd6ae466566653dd2a2e7e8ba --- lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision 4f526e3455fe0ed91e6a838c833f1cd916844b98) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision 0e9494974eaff0acd6ae466566653dd2a2e7e8ba) @@ -520,7 +520,6 @@ } catch (ProgressException e) { throw new LearnerServiceException(e.getMessage()); } - } @Override @@ -890,6 +889,46 @@ return new GateActivityDTO(gate, expectedLearnerCount, waitingLearnerCount, gateOpen); } + @Override + public boolean isNextGateActivityOpenByToolSessionId(int learnerId, long toolSessionId) { + ToolSession toolSession = lamsCoreToolService.getToolSessionById(toolSessionId); + return isNextGateActivityOpenByLessonId(learnerId, toolSession.getLesson().getLessonId()); + } + + @Override + public boolean isNextGateActivityOpenByLessonId(int learnerId, long lessonId) { + LearnerProgress learnerProgress = getProgress(learnerId, lessonId); + return isNextGateActivityOpen(learnerId, learnerProgress.getCurrentActivity()); + } + + private boolean isNextGateActivityOpen(int learnerId, Activity currentActivity) { + Activity nextActivity = null; + Transition transition = currentActivity.getTransitionFrom(); + if (transition != null) { + nextActivity = transition.getToActivity(); + } else if (currentActivity.getParentActivity() != null) { + currentActivity = currentActivity.getParentActivity(); + transition = currentActivity.getTransitionFrom(); + if (transition != null) { + nextActivity = transition.getToActivity(); + } + } + + if (nextActivity == null || !nextActivity.isGateActivity()) { + return true; + } + + GateActivity gateActivity = (GateActivity) activityDAO.getActivityByActivityId(nextActivity.getActivityId(), + GateActivity.class); + if (!gateActivity.isGateStopAtPrecedingActivity()) { + return true; + } + + User learner = userManagementService.getUserById(learnerId); + GateActivityDTO gateDto = knockGate(gateActivity, learner, false, null); + return gateDto.getAllowToPass(); + } + /** * Get all the groups of learners who may come through this gate. For a Group Based branch and the Teacher Grouped * branch, it is the group of users in the Branch's group. Otherwise we just get all learners in the lesson. Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/controller/LearnerController.java =================================================================== diff -u -r3beab6f893ac30158c537ee978af65f7d3df5129 -r0e9494974eaff0acd6ae466566653dd2a2e7e8ba --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/controller/LearnerController.java (.../LearnerController.java) (revision 3beab6f893ac30158c537ee978af65f7d3df5129) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/controller/LearnerController.java (.../LearnerController.java) (revision 0e9494974eaff0acd6ae466566653dd2a2e7e8ba) @@ -65,6 +65,7 @@ import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import com.fasterxml.jackson.databind.node.JsonNodeFactory; @@ -448,4 +449,20 @@ return responseJSON.toString(); } + + @RequestMapping("/isNextGateActivityOpen") + @ResponseBody + public String isNextGateActivityOpen(@RequestParam int userId, @RequestParam(required = false) Long toolSessionId, + @RequestParam(required = false) Long lessonId) { + Boolean isOpen = true; + if (toolSessionId != null) { + isOpen = learnerService.isNextGateActivityOpenByToolSessionId(userId, toolSessionId); + } else if (lessonId != null) { + isOpen = learnerService.isNextGateActivityOpenByLessonId(userId, lessonId); + } else { + throw new IllegalArgumentException("Either tool session ID or lesson ID has to be provided"); + } + + return isOpen.toString(); + } } \ No newline at end of file Index: lams_tool_assessment/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -rf20c1981776cd7c5a9adee3181f2379eec2c73fd -r0e9494974eaff0acd6ae466566653dd2a2e7e8ba --- lams_tool_assessment/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision f20c1981776cd7c5a9adee3181f2379eec2c73fd) +++ lams_tool_assessment/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 0e9494974eaff0acd6ae466566653dd2a2e7e8ba) @@ -441,3 +441,4 @@ label.authoring.advance.discussion = Enable discussion sentiment voting label.authoring.advance.discussion.tooltip = When enabled, in TBL monitoring, teachers are able to start instant polls for each question to assess the students' understanding. label.learning.draft.autosave.error = It seems that you have lost connection to the server. Check your internet connection and click OK. If this keeps happening, please inform your teacher. +label.learning.gate.closed = You may not continue to next activity yet. Wait for the teacher to open the gate. \ No newline at end of file Index: lams_tool_assessment/web/pages/learning/results.jsp =================================================================== diff -u -rf5bcf9323324eb4d5add901d9e7a23c33050533a -r0e9494974eaff0acd6ae466566653dd2a2e7e8ba --- lams_tool_assessment/web/pages/learning/results.jsp (.../results.jsp) (revision f5bcf9323324eb4d5add901d9e7a23c33050533a) +++ lams_tool_assessment/web/pages/learning/results.jsp (.../results.jsp) (revision 0e9494974eaff0acd6ae466566653dd2a2e7e8ba) @@ -62,13 +62,42 @@