Index: lams_admin/src/java/org/lamsfoundation/lams/admin/web/controller/ExtServerManagementController.java =================================================================== diff -u -rc7c5d74f9c402bdab97bd3fd46436adbfa9202b8 -r366880f4a40fe21eb563db2ccd2eb0dad3dc8aca --- lams_admin/src/java/org/lamsfoundation/lams/admin/web/controller/ExtServerManagementController.java (.../ExtServerManagementController.java) (revision c7c5d74f9c402bdab97bd3fd46436adbfa9202b8) +++ lams_admin/src/java/org/lamsfoundation/lams/admin/web/controller/ExtServerManagementController.java (.../ExtServerManagementController.java) (revision 366880f4a40fe21eb563db2ccd2eb0dad3dc8aca) @@ -88,6 +88,9 @@ ExtServer map = integrationService.getExtServer(sid); BeanUtils.copyProperties(extServerForm, map); } + + integrationService.clearLessonFinishUrlCache(); + return "integration/servermaintain"; } @@ -170,6 +173,9 @@ "integrated server name: " + map.getServerid()); } integrationService.saveExtServer(map); + + integrationService.clearLessonFinishUrlCache(); + return "forward:/extserver/serverlist.do"; } else { request.setAttribute("errorMap", errorMap); @@ -186,6 +192,8 @@ map.setDisabled(true); integrationService.saveExtServer(map); + integrationService.clearLessonFinishUrlCache(); + AuditLogFilter.log(AuditLogFilter.INTEGRATED_SERVER_DISABLE_ACTION, "integrated server name: " + map.getServerid()); @@ -201,6 +209,8 @@ map.setDisabled(false); integrationService.saveExtServer(map); + integrationService.clearLessonFinishUrlCache(); + AuditLogFilter.log(AuditLogFilter.INTEGRATED_SERVER_ENABLE_ACTION, "integrated server name: " + map.getServerid()); @@ -218,6 +228,9 @@ "integrated server name: " + extServer.getServerid()); userManagementService.delete(extServer); + + integrationService.clearLessonFinishUrlCache(); + return "redirect:/extserver/serverlist.do"; } Index: lams_admin/src/java/org/lamsfoundation/lams/admin/web/controller/LtiConsumerManagementController.java =================================================================== diff -u -rc7c5d74f9c402bdab97bd3fd46436adbfa9202b8 -r366880f4a40fe21eb563db2ccd2eb0dad3dc8aca --- lams_admin/src/java/org/lamsfoundation/lams/admin/web/controller/LtiConsumerManagementController.java (.../LtiConsumerManagementController.java) (revision c7c5d74f9c402bdab97bd3fd46436adbfa9202b8) +++ lams_admin/src/java/org/lamsfoundation/lams/admin/web/controller/LtiConsumerManagementController.java (.../LtiConsumerManagementController.java) (revision 366880f4a40fe21eb563db2ccd2eb0dad3dc8aca) @@ -123,6 +123,8 @@ request.setAttribute("timezoneDtos", timezoneDtos); } + integrationService.clearLessonFinishUrlCache(); + return "integration/ltiConsumer"; } @@ -139,6 +141,8 @@ ltiConsumer.setDisabled(disable); integrationService.saveExtServer(ltiConsumer); + integrationService.clearLessonFinishUrlCache(); + AuditLogFilter.log(AuditLogFilter.LTI_INTEGRATED_SERVER_DISABLE_ACTION, "integrated server name: " + ltiConsumer.getServerid()); @@ -152,6 +156,8 @@ ltiConsumer.setDisabled(false); integrationService.saveExtServer(ltiConsumer); + integrationService.clearLessonFinishUrlCache(); + AuditLogFilter.log(AuditLogFilter.LTI_INTEGRATED_SERVER_ENABLE_ACTION, "LTI integrated server name: " + ltiConsumer.getServerid()); @@ -173,6 +179,8 @@ userManagementService.delete(extServer); + integrationService.clearLessonFinishUrlCache(); + return start(request); } @@ -262,6 +270,9 @@ ltiConsumer.setDefaultLocale(locale); integrationService.saveExtServer(ltiConsumer); + + integrationService.clearLessonFinishUrlCache(); + return start(request); } else { Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/controller/LoadToolActivityController.java =================================================================== diff -u -rf9f3f3fababd3ccbc84765f36d73be67c7655b46 -r366880f4a40fe21eb563db2ccd2eb0dad3dc8aca --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/controller/LoadToolActivityController.java (.../LoadToolActivityController.java) (revision f9f3f3fababd3ccbc84765f36d73be67c7655b46) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/controller/LoadToolActivityController.java (.../LoadToolActivityController.java) (revision 366880f4a40fe21eb563db2ccd2eb0dad3dc8aca) @@ -26,9 +26,11 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.hibernate.AssertionFailure; import org.lamsfoundation.lams.flux.FluxRegistry; +import org.lamsfoundation.lams.integration.service.IIntegrationService; import org.lamsfoundation.lams.learning.service.ILearnerFullService; import org.lamsfoundation.lams.learning.web.form.ActivityForm; import org.lamsfoundation.lams.learning.web.util.ActivityMapping; @@ -58,6 +60,8 @@ private ILearnerFullService learnerService; @Autowired private ActivityMapping activityMapping; + @Autowired + private IIntegrationService integrationService; public static final String PARAM_ACTIVITY_URL = "activityURL"; public static final String PARAM_IS_BRANCHING = "isBranching"; @@ -67,9 +71,20 @@ */ @RequestMapping("/LoadToolActivity") public String execute(@ModelAttribute ActivityForm form, HttpServletRequest request, HttpServletResponse response) { + long activityId = WebUtil.readLongParam(request, AttributeNames.PARAM_ACTIVITY_ID); + String activityFinishUrl = WebUtil.readStrParam(request, "activityFinishUrl", true); + if (StringUtils.isNotBlank(activityFinishUrl)) { + boolean activityFinishUrlValid = integrationService.isLessonFinishUrlValid(activityFinishUrl); + if (activityFinishUrlValid) { + request.setAttribute("activityFinishUrl", activityFinishUrl); + } else { + log.error("Illegal activityFinishUrl parameter: " + activityFinishUrl); + // do not finish processing so we do not break flow in some special cases + } + } + LearnerProgress learnerProgress = LearningWebUtil.getLearnerProgress(request, learnerService); - long activityId = WebUtil.readLongParam(request, AttributeNames.PARAM_ACTIVITY_ID); Activity activity = learnerService.getActivity(activityId); /*