Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/controller/CompleteActivityController.java =================================================================== diff -u -r3a817bfe8c85ab09ac85d7f7c8594aaf66a8bae8 -r598df4e0799935ff45fbd855b6b388d7e0443248 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/controller/CompleteActivityController.java (.../CompleteActivityController.java) (revision 3a817bfe8c85ab09ac85d7f7c8594aaf66a8bae8) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/controller/CompleteActivityController.java (.../CompleteActivityController.java) (revision 598df4e0799935ff45fbd855b6b388d7e0443248) @@ -97,7 +97,7 @@ String lessonFinishCallbackUrl = null; if (progress.isComplete() || activity.isToolActivity()) { lessonFinishCallbackUrl = integrationService.getLessonFinishCallbackUrl(progress.getUser(), - progress.getLesson(), progress.isComplete() ? null : activityId); + progress.getLesson(), activityId); if (lessonFinishCallbackUrl != null) { // if user has already completed the lesson - we need to let non-LTI integrations server know to come and pick up // updated marks (as it won't happen at lessoncomplete.jsp page) @@ -111,6 +111,10 @@ // loadToolActivity.jsp will make an Ajax call to LTI Advantage servlet forward = WebUtil.appendParameterToURL(forward, "activityFinishUrl", URLEncoder.encode(lessonFinishCallbackUrl, "UTF8")); + if (progress.isComplete()) { + // so we can update the last activity score even on lesson finish + forward = WebUtil.appendParameterToURL(forward, "finishedActivityId", String.valueOf(activityId)); + } } return forward; Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/controller/LessonCompleteActivityController.java =================================================================== diff -u -r3a817bfe8c85ab09ac85d7f7c8594aaf66a8bae8 -r598df4e0799935ff45fbd855b6b388d7e0443248 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/controller/LessonCompleteActivityController.java (.../LessonCompleteActivityController.java) (revision 3a817bfe8c85ab09ac85d7f7c8594aaf66a8bae8) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/controller/LessonCompleteActivityController.java (.../LessonCompleteActivityController.java) (revision 598df4e0799935ff45fbd855b6b388d7e0443248) @@ -34,6 +34,7 @@ import org.lamsfoundation.lams.lesson.LearnerProgress; import org.lamsfoundation.lams.lesson.Lesson; import org.lamsfoundation.lams.lesson.service.ILessonService; +import org.lamsfoundation.lams.util.WebUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @@ -75,9 +76,11 @@ request.setAttribute(RELEASED_LESSONS_REQUEST_ATTRIBUTE, releasedLessonNames.toString()); } + // so LTI 1.3 can update last finished activity + Long finishedActivityId = WebUtil.readLongParam(request, "finishedActivityId", true); //let non-LTI integrations server know to come and pick up updated marks (it will happen at lessoncomplete.jsp page) String lessonFinishCallbackUrl = integrationService.getLessonFinishCallbackUrl(learnerProgress.getUser(), - lesson, null); + lesson, finishedActivityId); if (lessonFinishCallbackUrl != null) { request.setAttribute("lessonFinishUrl", lessonFinishCallbackUrl); } Index: lams_learning/web/requestURL.jsp =================================================================== diff -u -r9cbba0026b9584b2e4bcba57f0d5a8510bdb5846 -r598df4e0799935ff45fbd855b6b388d7e0443248 --- lams_learning/web/requestURL.jsp (.../requestURL.jsp) (revision 9cbba0026b9584b2e4bcba57f0d5a8510bdb5846) +++ lams_learning/web/requestURL.jsp (.../requestURL.jsp) (revision 598df4e0799935ff45fbd855b6b388d7e0443248) @@ -32,6 +32,9 @@ function doRedirect() { var myParent = parent; var url = decodeURIComponent(""); + + url += '&finishedActivityId=${param.finishedActivityId}'; + if ( myParent ) myParent.location.href = url; else