Index: lams_admin/src/java/org/lamsfoundation/lams/admin/web/controller/LtiConsumerManagementController.java =================================================================== diff -u -rcdfd865f5b09b49251732b2de7456ba7c09192bb -rca67d3227c5ace010da9afa104645a86c50a004f --- lams_admin/src/java/org/lamsfoundation/lams/admin/web/controller/LtiConsumerManagementController.java (.../LtiConsumerManagementController.java) (revision cdfd865f5b09b49251732b2de7456ba7c09192bb) +++ lams_admin/src/java/org/lamsfoundation/lams/admin/web/controller/LtiConsumerManagementController.java (.../LtiConsumerManagementController.java) (revision ca67d3227c5ace010da9afa104645a86c50a004f) @@ -2,6 +2,8 @@ import java.util.Collections; import java.util.List; +import java.util.TimeZone; +import java.util.TreeSet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -12,7 +14,13 @@ import org.lamsfoundation.lams.admin.web.form.LtiConsumerForm; import org.lamsfoundation.lams.integration.ExtServer; import org.lamsfoundation.lams.integration.service.IIntegrationService; +import org.lamsfoundation.lams.timezone.Timezone; +import org.lamsfoundation.lams.timezone.dto.TimezoneDTO; +import org.lamsfoundation.lams.timezone.service.ITimezoneService; +import org.lamsfoundation.lams.timezone.util.TimezoneIDComparator; +import org.lamsfoundation.lams.usermanagement.SupportedLocale; import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; +import org.lamsfoundation.lams.util.LanguageUtil; import org.lamsfoundation.lams.util.MessageService; import org.lamsfoundation.lams.util.WebUtil; import org.springframework.beans.factory.annotation.Autowired; @@ -31,12 +39,14 @@ @RequestMapping("/ltiConsumerManagement") public class LtiConsumerManagementController { private static Logger log = Logger.getLogger(LtiConsumerManagementController.class); - + @Autowired private IIntegrationService integrationService; @Autowired private IUserManagementService userManagementService; @Autowired + private ITimezoneService timezoneService; + @Autowired @Qualifier("adminMessageService") private MessageService messageService; @@ -63,10 +73,30 @@ if (sid != null) { ExtServer ltiConsumer = integrationService.getExtServer(sid); BeanUtils.copyProperties(ltiConsumerForm, ltiConsumer); + + SupportedLocale locale = ltiConsumer.getDefaultLocale(); + ltiConsumerForm.setDefaultLocaleId(locale.getLocaleId()); } else { // do nothing in case of creating a tool consumer } + List locales = userManagementService.findAll(SupportedLocale.class); + Collections.sort(locales); + request.setAttribute("locales", locales); + + request.setAttribute("countryCodes", LanguageUtil.getCountryCodes(false)); + + List availableTimeZones = timezoneService.getDefaultTimezones(); + TreeSet timezoneDtos = new TreeSet<>(new TimezoneIDComparator()); + for (Timezone availableTimeZone : availableTimeZones) { + String timezoneId = availableTimeZone.getTimezoneId(); + TimezoneDTO timezoneDto = new TimezoneDTO(); + timezoneDto.setTimeZoneId(timezoneId); + timezoneDto.setDisplayName(TimeZone.getTimeZone(timezoneId).getDisplayName()); + timezoneDtos.add(timezoneDto); + } + request.setAttribute("timezoneDtos", timezoneDtos); + return "integration/ltiConsumer"; } @@ -162,12 +192,17 @@ ltiConsumer.setSid(null); ltiConsumer.setServerTypeId(ExtServer.LTI_CONSUMER_SERVER_TYPE); ltiConsumer.setUserinfoUrl("blank"); - + } else { ltiConsumer = integrationService.getExtServer(sid); BeanUtils.copyProperties(ltiConsumer, ltiConsumerForm); } ltiConsumer.setTimeToLiveLoginRequestEnabled(false); + + SupportedLocale locale = (SupportedLocale) userManagementService.findById(SupportedLocale.class, + ltiConsumerForm.getDefaultLocaleId()); + ltiConsumer.setDefaultLocale(locale); + integrationService.saveExtServer(ltiConsumer); return start(request); Index: lams_admin/src/java/org/lamsfoundation/lams/admin/web/form/LtiConsumerForm.java =================================================================== diff -u -reedad9bd6fed8d844a97f9def3e8fd59e212fb6c -rca67d3227c5ace010da9afa104645a86c50a004f --- lams_admin/src/java/org/lamsfoundation/lams/admin/web/form/LtiConsumerForm.java (.../LtiConsumerForm.java) (revision eedad9bd6fed8d844a97f9def3e8fd59e212fb6c) +++ lams_admin/src/java/org/lamsfoundation/lams/admin/web/form/LtiConsumerForm.java (.../LtiConsumerForm.java) (revision ca67d3227c5ace010da9afa104645a86c50a004f) @@ -23,6 +23,7 @@ package org.lamsfoundation.lams.admin.web.form; import org.apache.commons.lang.StringUtils; +import org.lamsfoundation.lams.util.LanguageUtil; /** * Form for managing LTI tool consumers (ExtServer instances). @@ -35,6 +36,12 @@ private String userIdParameterName; + private String defaultCountry; + + private Integer defaultLocaleId; + + private String defaultTimeZone; + private boolean useCoursePrefix; private boolean userRegistrationEnabled; @@ -69,6 +76,9 @@ public LtiConsumerForm() { userIdParameterName = "user_id"; + defaultCountry = LanguageUtil.getDefaultCountry(); + defaultLocaleId = LanguageUtil.getDefaultLocale().getLocaleId(); + defaultTimeZone = LanguageUtil.getDefaultTimeZone().getID(); toolReregistrationEnabled = true; useCoursePrefix = true; userRegistrationEnabled = true; @@ -92,6 +102,30 @@ this.userIdParameterName = StringUtils.trim(userIdParameterName); } + public String getDefaultCountry() { + return defaultCountry; + } + + public void setDefaultCountry(String defaultCountry) { + this.defaultCountry = defaultCountry; + } + + public Integer getDefaultLocaleId() { + return defaultLocaleId; + } + + public void setDefaultLocaleId(Integer defaultLocaleId) { + this.defaultLocaleId = defaultLocaleId; + } + + public String getDefaultTimeZone() { + return defaultTimeZone; + } + + public void setDefaultTimeZone(String defaultTimeZone) { + this.defaultTimeZone = defaultTimeZone; + } + public boolean isUseCoursePrefix() { return useCoursePrefix; } Index: lams_admin/web/integration/ltiConsumer.jsp =================================================================== diff -u -reedad9bd6fed8d844a97f9def3e8fd59e212fb6c -rca67d3227c5ace010da9afa104645a86c50a004f --- lams_admin/web/integration/ltiConsumer.jsp (.../ltiConsumer.jsp) (revision eedad9bd6fed8d844a97f9def3e8fd59e212fb6c) +++ lams_admin/web/integration/ltiConsumer.jsp (.../ltiConsumer.jsp) (revision ca67d3227c5ace010da9afa104645a86c50a004f) @@ -121,6 +121,43 @@ + : + + + + + + ${countryCode.value} + + + + + + + : + + + + + + + + + + + + : + + + + + ${timezoneDto.timeZoneId} - ${timezoneDto.displayName} + + + + + + : Index: lams_common/src/java/org/lamsfoundation/lams/dbupdates/patch20220201.sql =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/dbupdates/patch20220201.sql (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/dbupdates/patch20220201.sql (revision ca67d3227c5ace010da9afa104645a86c50a004f) @@ -0,0 +1,17 @@ +-- 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 default country, locale and timezone to LTI consumer + +ALTER TABLE lams_ext_server_org_map ADD COLUMN default_country CHAR(2) AFTER user_id_parameter_name, + ADD COLUMN default_locale_id TINYINT UNSIGNED AFTER default_country, + ADD COLUMN default_timezone VARCHAR(255) AFTER default_locale_id; + +-- 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/ExtServer.java =================================================================== diff -u -reedad9bd6fed8d844a97f9def3e8fd59e212fb6c -rca67d3227c5ace010da9afa104645a86c50a004f --- lams_common/src/java/org/lamsfoundation/lams/integration/ExtServer.java (.../ExtServer.java) (revision eedad9bd6fed8d844a97f9def3e8fd59e212fb6c) +++ lams_common/src/java/org/lamsfoundation/lams/integration/ExtServer.java (.../ExtServer.java) (revision ca67d3227c5ace010da9afa104645a86c50a004f) @@ -6,13 +6,17 @@ import javax.persistence.Column; import javax.persistence.Entity; +import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.Table; import org.apache.commons.lang.builder.ToStringBuilder; +import org.lamsfoundation.lams.usermanagement.SupportedLocale; @Entity @Table(name = "lams_ext_server_org_map") @@ -122,6 +126,16 @@ @Column(name = "user_id_parameter_name") private String userIdParameterName; + @Column(name = "default_country") + private String defaultCountry; + + @ManyToOne(fetch = FetchType.EAGER) + @JoinColumn(name = "default_locale_id") + private SupportedLocale defaultLocale; + + @Column(name = "default_timezone") + private String defaultTimeZone; + /** * Options currently used by LTI Advantage, but eventually also used in SAML */ @@ -414,6 +428,30 @@ this.userIdParameterName = userIdParameterName; } + public String getDefaultCountry() { + return defaultCountry; + } + + public void setDefaultCountry(String defaultCountry) { + this.defaultCountry = defaultCountry; + } + + public SupportedLocale getDefaultLocale() { + return defaultLocale; + } + + public void setDefaultLocale(SupportedLocale defaultLocale) { + this.defaultLocale = defaultLocale; + } + + public String getDefaultTimeZone() { + return defaultTimeZone; + } + + public void setDefaultTimeZone(String defaultTimeZone) { + this.defaultTimeZone = defaultTimeZone; + } + public boolean isUseCoursePrefix() { return useCoursePrefix; } Index: lams_common/src/java/org/lamsfoundation/lams/integration/service/IntegrationService.java =================================================================== diff -u -r25789285b22f2b11797f61c46e176abeffb3b2cf -rca67d3227c5ace010da9afa104645a86c50a004f --- lams_common/src/java/org/lamsfoundation/lams/integration/service/IntegrationService.java (.../IntegrationService.java) (revision 25789285b22f2b11797f61c46e176abeffb3b2cf) +++ lams_common/src/java/org/lamsfoundation/lams/integration/service/IntegrationService.java (.../IntegrationService.java) (revision ca67d3227c5ace010da9afa104645a86c50a004f) @@ -319,14 +319,20 @@ ExtUserUseridMap extUserUseridMap = getExistingExtUserUseridMap(extServer, extUsername); if (extUserUseridMap == null) { - String defaultLocale = LanguageUtil.getDefaultLocale().getLocaleName(); - String defaultCountry = LanguageUtil.getDefaultCountry(); + String defaultLocale = extServer.getDefaultLocale() == null + ? LanguageUtil.getDefaultLocale().getLocaleName() + : extServer.getDefaultLocale().getLocaleName(); + String defaultCountry = extServer.getDefaultCountry() == null ? LanguageUtil.getDefaultCountry() + : extServer.getDefaultCountry(); String[] userData = { "", firstName, lastName, "", "", "", "", defaultCountry, "", "", "", email, defaultLocale }; - return createExtUserUseridMap(extServer, extUsername, password, salt, userData, false); - } else { - return extUserUseridMap; + extUserUseridMap = createExtUserUseridMap(extServer, extUsername, password, salt, userData, false); + if (extServer.getDefaultTimeZone() != null) { + extUserUseridMap.getUser().setTimeZone(extServer.getDefaultTimeZone()); + service.save(extUserUseridMap.getUser()); + } } + return extUserUseridMap; } @Override