Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/ICoreLearnerService.java =================================================================== diff -u -rc4bbe0b084234edffd2c0c43dce7d7b1fbf14863 -r5bead427a3cb053b6fb1f5cb506da28a1f9a9e70 --- lams_learning/src/java/org/lamsfoundation/lams/learning/service/ICoreLearnerService.java (.../ICoreLearnerService.java) (revision c4bbe0b084234edffd2c0c43dce7d7b1fbf14863) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/ICoreLearnerService.java (.../ICoreLearnerService.java) (revision 5bead427a3cb053b6fb1f5cb506da28a1f9a9e70) @@ -180,6 +180,14 @@ * @return the updated learner progress */ public LearnerProgress completeActivity(Integer learnerId, Activity activity, LearnerProgress progress); + + /** + * If specified activity is set to produce ToolOutput, calculates and stores mark to gradebook. + * + * @param toolActivity + * @param progress + */ + void updateGradebookMark(Activity activity, LearnerProgress progress); /** * Same as LearnerProgress completeActivity(Integer learnerId,Activity activity,LearnerProgress progress) except Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java =================================================================== diff -u -r73c1472c62db79b6ec21be7a5cba1d901f193013 -r5bead427a3cb053b6fb1f5cb506da28a1f9a9e70 --- lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision 73c1472c62db79b6ec21be7a5cba1d901f193013) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision 5bead427a3cb053b6fb1f5cb506da28a1f9a9e70) @@ -655,10 +655,7 @@ activity = getActivity(activity.getActivityId()); nextLearnerProgress = calculateProgress(activity, learnerId, progress); - ToolSession toolSession = lamsCoreToolService.getToolSessionByLearner(progress.getUser(), activity); - if ((activity instanceof ToolActivity) && (toolSession != null)) { - sendDataToGradebook((ToolActivity) activity, toolSession, progress); - } + updateGradebookMark(activity, progress); } // } logEventService.logEvent(LogEvent.TYPE_LEARNER_ACTIVITY_FINISH, learnerId, activity.getLearningDesign() @@ -678,42 +675,46 @@ return completeActivity(learnerId, activity, currentProgress); } - private void sendDataToGradebook(ToolActivity toolActivity, ToolSession toolSession, LearnerProgress progress) { - + @Override + public void updateGradebookMark(Activity activity, LearnerProgress progress) { User learner = progress.getUser(); Lesson lesson = progress.getLesson(); - if ((toolActivity != null) && (toolSession != null) && (learner != null) && (lesson != null)) { - if ((toolActivity.getActivityEvaluations() != null) && (toolActivity.getActivityEvaluations().size() > 0)) { + ToolSession toolSession = lamsCoreToolService.getToolSessionByLearner(learner, activity); - // Getting the first activity evaluation - ActivityEvaluation eval = toolActivity.getActivityEvaluations().iterator().next(); + if ((toolSession == null) || (toolSession == null) || (learner == null) || (lesson == null) + || (activity == null) || !(activity instanceof ToolActivity) + || (((ToolActivity) activity).getActivityEvaluations() == null) + || ((ToolActivity) activity).getActivityEvaluations().isEmpty()) { + return; + } + ToolActivity toolActivity = (ToolActivity) activity; - try { - ToolOutput toolOutput = lamsCoreToolService.getOutputFromTool(eval.getToolOutputDefinition(), - toolSession, learner.getUserId()); + // Getting the first activity evaluation + ActivityEvaluation eval = toolActivity.getActivityEvaluations().iterator().next(); - if (toolOutput != null) { - ToolOutputValue outputVal = toolOutput.getValue(); - if (outputVal != null) { - Double outputDouble = outputVal.getDouble(); + try { + ToolOutput toolOutput = lamsCoreToolService.getOutputFromTool(eval.getToolOutputDefinition(), toolSession, + learner.getUserId()); - GradebookUserActivity gradebookUserActivity = gradebookService.getGradebookUserActivity( - toolActivity.getActivityId(), learner.getUserId()); + if (toolOutput != null) { + ToolOutputValue outputVal = toolOutput.getValue(); + if (outputVal != null) { + Double outputDouble = outputVal.getDouble(); - // Only set the mark if it hasnt previously been set by a teacher - if ((gradebookUserActivity == null) || !gradebookUserActivity.getMarkedInGradebook()) { - gradebookService.updateUserActivityGradebookMark(lesson, learner, toolActivity, - outputDouble, false, false); - } - } - } + GradebookUserActivity gradebookUserActivity = gradebookService.getGradebookUserActivity( + toolActivity.getActivityId(), learner.getUserId()); - } catch (ToolException e) { - LearnerService.log.debug("Runtime exception when attempted to get outputs for activity: " - + toolActivity.getActivityId(), e); + // Only set the mark if it hasnt previously been set by a teacher + if ((gradebookUserActivity == null) || !gradebookUserActivity.getMarkedInGradebook()) { + gradebookService.updateUserActivityGradebookMark(lesson, learner, toolActivity, outputDouble, + false, false); + } } } + } catch (ToolException e) { + LearnerService.log.debug( + "Runtime exception when attempted to get outputs for activity: " + toolActivity.getActivityId(), e); } } Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/LearningWebUtil.java =================================================================== diff -u -r6053eef5820654b4d8198d704818b2f5185f46b7 -r5bead427a3cb053b6fb1f5cb506da28a1f9a9e70 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/LearningWebUtil.java (.../LearningWebUtil.java) (revision 6053eef5820654b4d8198d704818b2f5185f46b7) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/LearningWebUtil.java (.../LearningWebUtil.java) (revision 5bead427a3cb053b6fb1f5cb506da28a1f9a9e70) @@ -43,14 +43,14 @@ import org.lamsfoundation.lams.learning.web.form.ActivityForm; import org.lamsfoundation.lams.learningdesign.Activity; import org.lamsfoundation.lams.learningdesign.LearningDesign; +import org.lamsfoundation.lams.learningdesign.ToolActivity; import org.lamsfoundation.lams.lesson.LearnerProgress; import org.lamsfoundation.lams.lesson.Lesson; import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; import org.lamsfoundation.lams.util.WebUtil; import org.lamsfoundation.lams.web.session.SessionManager; import org.lamsfoundation.lams.web.util.AttributeNames; -import org.springframework.dao.CannotAcquireLockException; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; @@ -223,6 +223,10 @@ if (currentActivity == null) { progress = learnerService.joinLesson(learnerId, lesson.getLessonId()); } else if (progress.getCompletedActivities().containsKey(currentActivity)) { + + // recalculate activity mark and pass it to gradebook + learnerService.updateGradebookMark(currentActivity, progress); + return actionMappings.getCloseForward(currentActivity, lesson.getLessonId()); } else { progress = learnerService.completeActivity(learnerId, currentActivity, progress);