Index: lams_common/src/java/org/lamsfoundation/lams/dbupdates/patch20220503.sql =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/dbupdates/patch20220503.sql (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/dbupdates/patch20220503.sql (revision 5ea3989da5d464f07dbb65385929e7808dd15dca) @@ -0,0 +1,15 @@ +-- Turn off autocommit, so nothing is committed if there is an error +SET AUTOCOMMIT = 0; +SET FOREIGN_KEY_CHECKS=0; +-- Put all sql statements below here + +--LDEV-5277 Add ID for communication with LTI Advantage platform, which is not necessarily the same as external user ID + +ALTER TABLE lams_ext_user_userid_map ADD COLUMN lti_adv_username VARCHAR(250) AFTER external_username; + +-- Put all sql statements above here + +-- If there were no errors, commit and restore autocommit to on +COMMIT; +SET AUTOCOMMIT = 1; +SET FOREIGN_KEY_CHECKS=1; Index: lams_common/src/java/org/lamsfoundation/lams/integration/ExtUserUseridMap.java =================================================================== diff -u -r1ee503e3d0e0228ea8a45025fddf15d9623c0377 -r5ea3989da5d464f07dbb65385929e7808dd15dca --- lams_common/src/java/org/lamsfoundation/lams/integration/ExtUserUseridMap.java (.../ExtUserUseridMap.java) (revision 1ee503e3d0e0228ea8a45025fddf15d9623c0377) +++ lams_common/src/java/org/lamsfoundation/lams/integration/ExtUserUseridMap.java (.../ExtUserUseridMap.java) (revision 5ea3989da5d464f07dbb65385929e7808dd15dca) @@ -29,6 +29,9 @@ @Column(name = "external_username") private String extUsername; + @Column(name = "lti_adv_username") + private String ltiAdvUsername; + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "user_id") private User user; @@ -60,6 +63,14 @@ this.extUsername = extUsername; } + public String getLtiAdvUsername() { + return ltiAdvUsername; + } + + public void setLtiAdvUsername(String ltiAdvUsername) { + this.ltiAdvUsername = ltiAdvUsername; + } + public User getUser() { return this.user; } Index: lams_common/src/java/org/lamsfoundation/lams/integration/service/IntegrationService.java =================================================================== diff -u -r0adc81b1065c8209fd6ddc815c0af9822b5354cf -r5ea3989da5d464f07dbb65385929e7808dd15dca --- lams_common/src/java/org/lamsfoundation/lams/integration/service/IntegrationService.java (.../IntegrationService.java) (revision 0adc81b1065c8209fd6ddc815c0af9822b5354cf) +++ lams_common/src/java/org/lamsfoundation/lams/integration/service/IntegrationService.java (.../IntegrationService.java) (revision 5ea3989da5d464f07dbb65385929e7808dd15dca) @@ -478,30 +478,33 @@ + ", firstName:" + firstName + ", lastName:" + lastName); } - User user = new User(); - user.setLogin(login); - user.setPassword(password); - user.setSalt(salt); - user.setTitle(userData[0]); - user.setFirstName(userData[1]); - user.setLastName(userData[2]); - user.setAddressLine1(userData[3]); - user.setCity(userData[4]); - user.setState(userData[5]); - user.setPostcode(userData[6]); - user.setCountry(LanguageUtil.getSupportedCountry(userData[7])); - user.setDayPhone(userData[8]); - user.setMobilePhone(userData[9]); - user.setFax(userData[10]); - user.setEmail(userData[11]); - user.setAuthenticationMethod( - (AuthenticationMethod) service.findById(AuthenticationMethod.class, AuthenticationMethod.DB)); - user.setCreateDate(new Date()); - user.setDisabledFlag(false); - user.setLocale(LanguageUtil.getSupportedLocaleByNameOrLanguageCode(userData[12])); - user.setTimeZone(timezoneService.getServerTimezone().getTimezoneId()); - user.setTheme(service.getDefaultTheme()); - service.saveUser(user); + User user = service.getUserByLogin(login); + if (user == null) { + user = new User(); + user.setLogin(login); + user.setPassword(password); + user.setSalt(salt); + user.setTitle(userData[0]); + user.setFirstName(userData[1]); + user.setLastName(userData[2]); + user.setAddressLine1(userData[3]); + user.setCity(userData[4]); + user.setState(userData[5]); + user.setPostcode(userData[6]); + user.setCountry(LanguageUtil.getSupportedCountry(userData[7])); + user.setDayPhone(userData[8]); + user.setMobilePhone(userData[9]); + user.setFax(userData[10]); + user.setEmail(userData[11]); + user.setAuthenticationMethod( + (AuthenticationMethod) service.findById(AuthenticationMethod.class, AuthenticationMethod.DB)); + user.setCreateDate(new Date()); + user.setDisabledFlag(false); + user.setLocale(LanguageUtil.getSupportedLocaleByNameOrLanguageCode(userData[12])); + user.setTimeZone(timezoneService.getServerTimezone().getTimezoneId()); + user.setTheme(service.getDefaultTheme()); + service.saveUser(user); + } ExtUserUseridMap extUserUseridMap = new ExtUserUseridMap(); extUserUseridMap.setExtServer(extServer); extUserUseridMap.setExtUsername(extUsername); @@ -682,9 +685,8 @@ // checks whether the lesson was created from extServer and whether it has lessonFinishCallbackUrl setting if (extServerLesson != null && extUser != null && StringUtils.isNotBlank(lessonFinishCallbackUrl) - // fill parameters if it is not regular LTI call, i.e. plain integration or LTI Advantage - && (server.getServerTypeId().equals(ExtServer.INTEGRATION_SERVER_TYPE) - || lessonFinishCallbackUrl.contains("%activityId%"))) { + // fill parameters if it is not regular LTI call, i.e. plain integration or LTI Advantage + && (server.isIntegrationServer() || lessonFinishCallbackUrl.contains("%activityId%"))) { // construct real lessonFinishCallbackUrl String timestamp = Long.toString(new Date().getTime()); @@ -719,8 +721,7 @@ : getExtUserUseridMapByUserId(server, user.getUserId()); // checks whether the lesson was created from extServer and whether it's a LTI Tool Consumer - create a new thread to report score back to LMS (in order to do this task in parallel not to slow down later work) - if (extServerLesson != null && extUser != null - && server.getServerTypeId().equals(ExtServer.LTI_CONSUMER_SERVER_TYPE) + if (extServerLesson != null && extUser != null && server.isLtiConsumer() && StringUtils.isNotBlank(extServerLesson.getExtServer().getLessonFinishUrl()) // do not run for LTI Advantage as it does lesson score update in lessonComplete.jsp // and also teachers can pull score from LAMS to platform on demand