Index: lams_common/src/java/org/lamsfoundation/lams/learning/service/ILearnerService.java =================================================================== diff -u -ra61b6ad192148c0ae514f37a9b488c3a15535ee9 -ra05bb8ff92c659cc340b037de664fd0d9b103c96 --- lams_common/src/java/org/lamsfoundation/lams/learning/service/ILearnerService.java (.../ILearnerService.java) (revision a61b6ad192148c0ae514f37a9b488c3a15535ee9) +++ lams_common/src/java/org/lamsfoundation/lams/learning/service/ILearnerService.java (.../ILearnerService.java) (revision a05bb8ff92c659cc340b037de664fd0d9b103c96) @@ -144,8 +144,8 @@ * the activity is being run. * @return the updated learner progress */ - String completeActivity(LearnerProgress progress, Activity currentActivity, Integer learnerId, - boolean redirect) throws UnsupportedEncodingException; + String completeActivity(LearnerProgress progress, Activity currentActivity, Integer learnerId, boolean redirect) + throws UnsupportedEncodingException; /** * Retrieve all lessons that has been started, suspended or finished. All finished but archived lesson should not be @@ -178,8 +178,8 @@ * the learner who wants to go through the gate. * @param forceGate * if forceGate==true and the lesson is a preview lesson then the gate is opened straight away. - * @param key - * additional information provided by user to open gate, for example password + * @param key + * additional information provided by user to open gate, for example password * @return Updated gate details */ GateActivityDTO knockGate(GateActivity gateActivity, User knocker, boolean forceGate, Object key); @@ -199,4 +199,6 @@ void createCommandForLearner(Long lessonId, String userName, String jsonCommand); void createCommandForLearners(Long toolContentId, Collection userIds, String jsonCommand); + + boolean isLearnerStartedLessonByContentId(int userId, long toolContentId); } \ No newline at end of file Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java =================================================================== diff -u -rb8e54021b464f3abf023581e819cee4d4a54f26e -ra05bb8ff92c659cc340b037de664fd0d9b103c96 --- lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision b8e54021b464f3abf023581e819cee4d4a54f26e) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision a05bb8ff92c659cc340b037de664fd0d9b103c96) @@ -1658,4 +1658,9 @@ return kumalive == null || kumalive.getFinished(); } + @Override + public boolean isLearnerStartedLessonByContentId(int userId, long toolContentId) { + Lesson lesson = lessonService.getLessonByToolContentId(toolContentId); + return lesson != null && getProgress(userId, lesson.getLessonId()) != null; + } } \ No newline at end of file Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/scratchieApplicationContext.xml =================================================================== diff -u -r646ad3f8f14c7577e5a1e863f31dacca0c38e860 -ra05bb8ff92c659cc340b037de664fd0d9b103c96 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/scratchieApplicationContext.xml (.../scratchieApplicationContext.xml) (revision 646ad3f8f14c7577e5a1e863f31dacca0c38e860) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/scratchieApplicationContext.xml (.../scratchieApplicationContext.xml) (revision a05bb8ff92c659cc340b037de664fd0d9b103c96) @@ -117,6 +117,9 @@ + + + Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/IScratchieService.java =================================================================== diff -u -re743566518bd5c53d6574987565cfb8581a92c66 -ra05bb8ff92c659cc340b037de664fd0d9b103c96 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/IScratchieService.java (.../IScratchieService.java) (revision e743566518bd5c53d6574987565cfb8581a92c66) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/IScratchieService.java (.../IScratchieService.java) (revision a05bb8ff92c659cc340b037de664fd0d9b103c96) @@ -326,7 +326,8 @@ * whether it should include questions that don't have any burning questions * @return */ - List getBurningQuestionDtos(Scratchie scratchie, Long sessionId, boolean includeEmptyItems, boolean prepareForHTML); + List getBurningQuestionDtos(Scratchie scratchie, Long sessionId, boolean includeEmptyItems, + boolean prepareForHTML); boolean addLike(Long burningQuestionUid, Long sessionId); @@ -449,4 +450,6 @@ LeaderResultsDTO getLeaderResultsDTOForLeaders(Long contentId); Map prepareStudentChoicesData(Scratchie scratchie); + + boolean isLearnerEligibleForMark(long learnerId, long toolContentId); } Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieOutputFactory.java =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -ra05bb8ff92c659cc340b037de664fd0d9b103c96 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieOutputFactory.java (.../ScratchieOutputFactory.java) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieOutputFactory.java (.../ScratchieOutputFactory.java) (revision a05bb8ff92c659cc340b037de664fd0d9b103c96) @@ -57,7 +57,7 @@ */ public SortedMap getToolOutputDefinitions(IScratchieService scratchieService, Object toolContentObject, int definitionType) throws ToolException { - TreeMap definitionMap = new TreeMap(); + TreeMap definitionMap = new TreeMap<>(); if (toolContentObject != null) { Scratchie scratchie = (Scratchie) toolContentObject; @@ -81,9 +81,9 @@ public SortedMap getToolOutput(List names, IScratchieService scratchieService, Long toolSessionId, Long learnerId) { - TreeMap outputs = new TreeMap(); + TreeMap outputs = new TreeMap<>(); // tool output cache - TreeMap baseOutputs = new TreeMap(); + TreeMap baseOutputs = new TreeMap<>(); if (names == null || names.contains(ScratchieConstants.LEARNER_MARK)) { outputs.put(ScratchieConstants.LEARNER_MARK, getToolOutput(ScratchieConstants.LEARNER_MARK, scratchieService, toolSessionId, learnerId)); @@ -106,9 +106,11 @@ * Get the mark scored by user. Will always return a ToolOutput object. */ private ToolOutput getUserMark(IScratchieService scratchieService, Long toolSessionId, Long learnerId) { - ScratchieSession session = scratchieService.getScratchieSessionBySessionId(toolSessionId); - int userMark = session.getMark(); + int userMark = 0; + if (scratchieService.isLearnerEligibleForMark(learnerId.intValue(), session.getScratchie().getContentId())) { + userMark = session.getMark(); + } return new ToolOutput(ScratchieConstants.LEARNER_MARK, getI18NText(ScratchieConstants.LEARNER_MARK, true), userMark); Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java =================================================================== diff -u -r27668cbcc1bcd249037fe5de60f81bc69df61bab -ra05bb8ff92c659cc340b037de664fd0d9b103c96 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision 27668cbcc1bcd249037fe5de60f81bc69df61bab) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision a05bb8ff92c659cc340b037de664fd0d9b103c96) @@ -33,7 +33,6 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; -import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.List; import java.util.Locale; @@ -54,6 +53,7 @@ import org.lamsfoundation.lams.confidencelevel.VsaAnswerDTO; import org.lamsfoundation.lams.contentrepository.client.IToolContentHandler; import org.lamsfoundation.lams.events.IEventNotificationService; +import org.lamsfoundation.lams.learning.service.ILearnerService; import org.lamsfoundation.lams.learningdesign.ToolActivity; import org.lamsfoundation.lams.learningdesign.service.ExportToolContentException; import org.lamsfoundation.lams.learningdesign.service.IExportToolContentService; @@ -161,6 +161,8 @@ private IQbService qbService; + private ILearnerService learnerService; + private ScratchieOutputFactory scratchieOutputFactory; // ******************************************************************************* @@ -337,7 +339,7 @@ // create new user in a DB if (leader == null) { log.debug("creating new user with userId: " + leaderUserId); - User leaderDto = (User) getUserManagementService().findById(User.class, leaderUserId.intValue()); + User leaderDto = (User) userManagementService.findById(User.class, leaderUserId.intValue()); leader = new ScratchieUser(leaderDto.getUserDTO(), scratchieSession); this.createUser(leader); } @@ -505,7 +507,11 @@ if (isPropagateToGradebook) { List users = getUsersBySession(sessionId); for (ScratchieUser user : users) { - toolService.updateActivityMark(Double.valueOf(mark), null, user.getUserId().intValue(), + Double userMark = 0.0; + if (isLearnerEligibleForMark(user.getUserId(), scratchie.getContentId())) { + userMark = Double.valueOf(mark); + } + toolService.updateActivityMark(userMark, null, user.getUserId().intValue(), user.getSession().getSessionId(), false); } } @@ -2011,6 +2017,11 @@ return model; } + @Override + public boolean isLearnerEligibleForMark(long learnerId, long toolContentId) { + return learnerService.isLearnerStartedLessonByContentId(Long.valueOf(learnerId).intValue(), toolContentId); + } + // ***************************************************************************** // private methods // ***************************************************************************** @@ -2368,7 +2379,7 @@ throw new ToolException(e); } } - return getScratchieOutputFactory().getToolOutputDefinitions(this, content, definitionType); + return scratchieOutputFactory.getToolOutputDefinitions(this, content, definitionType); } @Override @@ -2523,12 +2534,12 @@ @Override public SortedMap getToolOutput(List names, Long toolSessionId, Long learnerId) { - return getScratchieOutputFactory().getToolOutput(names, this, toolSessionId, learnerId); + return scratchieOutputFactory.getToolOutput(names, this, toolSessionId, learnerId); } @Override public ToolOutput getToolOutput(String name, Long toolSessionId, Long learnerId) { - return getScratchieOutputFactory().getToolOutput(name, this, toolSessionId, learnerId); + return scratchieOutputFactory.getToolOutput(name, this, toolSessionId, learnerId); } @Override @@ -2579,10 +2590,6 @@ /* =================================================================================== */ - public IExportToolContentService getExportContentService() { - return exportContentService; - } - public void setExportContentService(IExportToolContentService exportContentService) { this.exportContentService = exportContentService; } @@ -2591,18 +2598,10 @@ this.logEventService = logEventService; } - public IUserManagementService getUserManagementService() { - return userManagementService; - } - public void setUserManagementService(IUserManagementService userManagementService) { this.userManagementService = userManagementService; } - public ICoreNotebookService getCoreNotebookService() { - return coreNotebookService; - } - public void setCoreNotebookService(ICoreNotebookService coreNotebookService) { this.coreNotebookService = coreNotebookService; } @@ -2634,17 +2633,17 @@ @Override public Class[] getSupportedToolOutputDefinitionClasses(int definitionType) { - return getScratchieOutputFactory().getSupportedDefinitionClasses(definitionType); + return scratchieOutputFactory.getSupportedDefinitionClasses(definitionType); } - public ScratchieOutputFactory getScratchieOutputFactory() { - return scratchieOutputFactory; - } - public void setScratchieOutputFactory(ScratchieOutputFactory scratchieOutputFactory) { this.scratchieOutputFactory = scratchieOutputFactory; } + public void setLearnerService(ILearnerService learnerService) { + this.learnerService = learnerService; + } + @Override public ToolCompletionStatus getCompletionStatus(Long learnerId, Long toolSessionId) { // db doesn't have a start/finish date for learner, and session start/finish is null