Index: lams_common/src/java/org/lamsfoundation/lams/integration/service/IIntegrationService.java =================================================================== diff -u -rf685d0c3f89b3efd86c9fbdf22742425247f5e3a -r109a77d78a087aeb8b9418b2a49f943597097f06 --- lams_common/src/java/org/lamsfoundation/lams/integration/service/IIntegrationService.java (.../IIntegrationService.java) (revision f685d0c3f89b3efd86c9fbdf22742425247f5e3a) +++ lams_common/src/java/org/lamsfoundation/lams/integration/service/IIntegrationService.java (.../IIntegrationService.java) (revision 109a77d78a087aeb8b9418b2a49f943597097f06) @@ -23,13 +23,16 @@ package org.lamsfoundation.lams.integration.service; +import java.io.UnsupportedEncodingException; import java.util.List; import org.lamsfoundation.lams.integration.ExtCourseClassMap; import org.lamsfoundation.lams.integration.ExtServerOrgMap; import org.lamsfoundation.lams.integration.ExtServerToolAdapterMap; import org.lamsfoundation.lams.integration.ExtUserUseridMap; import org.lamsfoundation.lams.integration.UserInfoFetchException; +import org.lamsfoundation.lams.lesson.Lesson; +import org.lamsfoundation.lams.usermanagement.User; /** *
@@ -86,4 +89,14 @@
void saveExtServerToolAdapterMap(ExtServerToolAdapterMap map);
void deleteExtServerToolAdapterMap(ExtServerToolAdapterMap map);
+
+ /**
+ * Checks whether the lesson was created from extServer and returns lessonFinishCallbackUrl if it's not blank.
+ *
+ * @param user
+ * @param lesson
+ * @return
+ * @throws UnsupportedEncodingException
+ */
+ String getLessonFinishCallbackUrl(User user, Lesson lesson) throws UnsupportedEncodingException;
}
Index: lams_common/src/java/org/lamsfoundation/lams/integration/service/IntegrationService.java
===================================================================
diff -u -rd64f99e274c89f686642247169f37e3b0c731aaa -r109a77d78a087aeb8b9418b2a49f943597097f06
--- lams_common/src/java/org/lamsfoundation/lams/integration/service/IntegrationService.java (.../IntegrationService.java) (revision d64f99e274c89f686642247169f37e3b0c731aaa)
+++ lams_common/src/java/org/lamsfoundation/lams/integration/service/IntegrationService.java (.../IntegrationService.java) (revision 109a77d78a087aeb8b9418b2a49f943597097f06)
@@ -27,6 +27,7 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
@@ -41,12 +42,14 @@
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.lamsfoundation.lams.integration.ExtCourseClassMap;
+import org.lamsfoundation.lams.integration.ExtServerLessonMap;
import org.lamsfoundation.lams.integration.ExtServerOrgMap;
import org.lamsfoundation.lams.integration.ExtServerToolAdapterMap;
import org.lamsfoundation.lams.integration.ExtUserUseridMap;
import org.lamsfoundation.lams.integration.UserInfoFetchException;
import org.lamsfoundation.lams.integration.security.RandomPasswordGenerator;
import org.lamsfoundation.lams.integration.util.LoginRequestDispatcher;
+import org.lamsfoundation.lams.lesson.Lesson;
import org.lamsfoundation.lams.usermanagement.AuthenticationMethod;
import org.lamsfoundation.lams.usermanagement.Organisation;
import org.lamsfoundation.lams.usermanagement.OrganisationState;
@@ -413,4 +416,67 @@
public ExtServerOrgMap getExtServerOrgMap(Integer sid) {
return (ExtServerOrgMap) service.findById(ExtServerOrgMap.class, sid);
}
+
+ public void createExtServerLessonMap(Long lessonId, ExtServerOrgMap extServer) {
+ ExtServerLessonMap map = new ExtServerLessonMap();
+ map.setLessonId(lessonId);
+ map.setExtServer(extServer);
+ service.save(map);
+ }
+
+ public String getLessonFinishCallbackUrl(User user, Lesson lesson) throws UnsupportedEncodingException {
+ // the callback url must contain %username%, %lessonid%, %timestamp% and %hash% eg:
+ // "http://test100.ics.mq.edu.au/webapps/lams-plglamscontent-bb_bb60/UserData?uid=%username%&lessonid=%lessonid%&ts=%timestamp%&hash=%hash%";
+ // where %username%, %lessonid%, %timestamp% and %hash% will be replaced with their real values
+ String lessonFinishCallbackUrl = null;
+
+ if (lesson != null) {
+ Long lessonId = lesson.getLessonId();
+ ExtServerLessonMap extServerLesson = getExtServerLessonMap(lessonId);
+ // checks whether the lesson was created from extServer and whether it has lessonFinishCallbackUrl setting
+ if (extServerLesson != null && StringUtils.isNotBlank(extServerLesson.getExtServer().getLessonFinishUrl())) {
+ ExtServerOrgMap serverMap = extServerLesson.getExtServer();
+
+ ExtUserUseridMap extUserUseridMap = getExistingExtUserUseridMap(serverMap, user);
+ if (extUserUseridMap != null) {
+ String extUsername = extUserUseridMap.getExtUsername();
+
+ // construct real lessonFinishCallbackUrl
+ lessonFinishCallbackUrl = serverMap.getLessonFinishUrl();
+ String timestamp = Long.toString(new Date().getTime());
+ String hash = hash(serverMap, extUsername, timestamp);
+ String encodedExtUsername = URLEncoder.encode(extUsername, "UTF8");
+
+ // set the values for the parameters
+ lessonFinishCallbackUrl = lessonFinishCallbackUrl.replaceAll("%username%", encodedExtUsername)
+ .replaceAll("%lessonid%", lessonId.toString()).replaceAll("%timestamp%", timestamp)
+ .replaceAll("%hash%", hash);
+ log.debug(lessonFinishCallbackUrl);
+ }
+ }
+ }
+
+ return lessonFinishCallbackUrl;
+ }
+
+ private ExtServerLessonMap getExtServerLessonMap(Long lessonId) {
+ List list = service.findByProperty(ExtServerLessonMap.class, "lessonId", lessonId);
+ if (list == null || list.size() == 0) {
+ return null;
+ } else {
+ return (ExtServerLessonMap) list.get(0);
+ }
+ }
+
+ private ExtUserUseridMap getExistingExtUserUseridMap(ExtServerOrgMap serverMap, User user) {
+ Map