Index: lams_central/src/java/org/lamsfoundation/lams/web/LoginRequestServlet.java =================================================================== diff -u -r9ba6bf0c302b06f8f8f7be51667054e680ad1e52 -r3b255feabeeae3729398d969d6ee4d76947777d3 --- lams_central/src/java/org/lamsfoundation/lams/web/LoginRequestServlet.java (.../LoginRequestServlet.java) (revision 9ba6bf0c302b06f8f8f7be51667054e680ad1e52) +++ lams_central/src/java/org/lamsfoundation/lams/web/LoginRequestServlet.java (.../LoginRequestServlet.java) (revision 3b255feabeeae3729398d969d6ee4d76947777d3) @@ -85,8 +85,8 @@ String timestamp = request.getParameter(LoginRequestDispatcher.PARAM_TIMESTAMP); String hash = request.getParameter(LoginRequestDispatcher.PARAM_HASH); String method = request.getParameter(LoginRequestDispatcher.PARAM_METHOD); - String countryIsoCode = request.getParameter(LoginRequestDispatcher.PARAM_COUNTRY); - String langIsoCode = request.getParameter(LoginRequestDispatcher.PARAM_LANGUAGE); + String country = request.getParameter(LoginRequestDispatcher.PARAM_COUNTRY); + String locale = request.getParameter(LoginRequestDispatcher.PARAM_LANGUAGE); String courseName = request.getParameter(CentralConstants.PARAM_COURSE_NAME); String usePrefix = request.getParameter(CentralConstants.PARAM_USE_PREFIX); boolean isUpdateUserDetails = WebUtil.readBooleanParam(request, @@ -111,17 +111,6 @@ } } - String[] localeParts = langIsoCode == null ? new String[0] : langIsoCode.split("_"); - // if langIsoCode is just 2 letters, then countryIsoCode stays the same and country will fall back to default - // if langIsoCode is en_AU, then it gets split to langIsoCode and countryIsoCode - // and the old value of countryIsoCode is considered country - String country = null; - if (localeParts.length == 2 && localeParts[0].length() == 2 && localeParts[1].length() == 2) { - country = countryIsoCode; - langIsoCode = localeParts[0]; - countryIsoCode = localeParts[1]; - } - ExtServer extServer = getIntegrationService().getExtServer(serverId); boolean prefix = (usePrefix == null) ? true : Boolean.parseBoolean(usePrefix); try { @@ -130,7 +119,7 @@ userMap = getIntegrationService().getExtUserUseridMap(extServer, extUsername, prefix); } else { userMap = getIntegrationService().getImplicitExtUserUseridMap(extServer, extUsername, firstName, - lastName, langIsoCode, countryIsoCode, country, email, prefix, isUpdateUserDetails); + lastName, locale, country, email, prefix, isUpdateUserDetails); } // in case of request for learner with strict authentication check cache should also contain lsid @@ -155,8 +144,8 @@ if (extCourseId != null) { // check if organisation, ExtCourseClassMap and user roles exist and up-to-date, and if not update them - getIntegrationService().getExtCourseClassMap(extServer, userMap, extCourseId, countryIsoCode, - langIsoCode, courseName, method, prefix); + getIntegrationService().getExtCourseClassMap(extServer, userMap, extCourseId, courseName, method, + prefix); } User user = userMap.getUser(); Index: lams_central/src/java/org/lamsfoundation/lams/webservice/xml/LearningDesignRepositoryServlet.java =================================================================== diff -u -reb06cf9300f02897c13bd577689deacb2cf4b5fc -r3b255feabeeae3729398d969d6ee4d76947777d3 --- lams_central/src/java/org/lamsfoundation/lams/webservice/xml/LearningDesignRepositoryServlet.java (.../LearningDesignRepositoryServlet.java) (revision eb06cf9300f02897c13bd577689deacb2cf4b5fc) +++ lams_central/src/java/org/lamsfoundation/lams/webservice/xml/LearningDesignRepositoryServlet.java (.../LearningDesignRepositoryServlet.java) (revision 3b255feabeeae3729398d969d6ee4d76947777d3) @@ -244,8 +244,8 @@ String username = request.getParameter(CentralConstants.PARAM_USERNAME); String courseId = request.getParameter(CentralConstants.PARAM_COURSE_ID); String courseName = request.getParameter(CentralConstants.PARAM_COURSE_NAME); - String countryIsoCode = request.getParameter(CentralConstants.PARAM_COUNTRY); - String langIsoCode = request.getParameter(CentralConstants.PARAM_LANG); + String country = request.getParameter(CentralConstants.PARAM_COUNTRY); + String locale = request.getParameter(CentralConstants.PARAM_LANG); Integer mode = WebUtil.readIntParam(request, CentralConstants.PARAM_MODE, true); String method = request.getParameter(CentralConstants.PARAM_METHOD); String usePrefix = request.getParameter(CentralConstants.PARAM_USE_PREFIX); @@ -256,7 +256,7 @@ String email = request.getParameter(LoginRequestDispatcher.PARAM_EMAIL); if ((serverId == null) || (datetime == null) || (hashValue == null) || (username == null) - || (courseId == null) || (countryIsoCode == null) || (langIsoCode == null)) { + || (courseId == null) || (country == null) || (locale == null)) { String msg = "Parameters missing"; LearningDesignRepositoryServlet.log.error(msg); response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Parameters missing"); @@ -278,14 +278,6 @@ // authenticate Authenticator.authenticate(extServer, datetime, username, hashValue); - String[] localeParts = langIsoCode.split("_"); - String country = null; - if (localeParts.length == 2 && localeParts[0].length() == 2 && localeParts[1].length() == 2) { - country = countryIsoCode; - langIsoCode = localeParts[0]; - countryIsoCode = localeParts[1]; - } - // get user map, user is created if this is their first use if ((method != null) && method.equals("exportLD")) { @@ -295,8 +287,8 @@ } else if ((method != null) && (method.equals("getLearningDesignsJSON") || method.equals("getPagedHomeLearningDesignsJSON"))) { - Integer userId = getUserId(username, courseId, courseName, countryIsoCode, langIsoCode, country, - usePrefix, isUpdateUserDetails, firstName, lastName, email, extServer); + Integer userId = getUserId(username, courseId, courseName, locale, country, usePrefix, + isUpdateUserDetails, firstName, lastName, email, extServer); boolean allowInvalidDesigns = WebUtil.readBooleanParam(request, "allowInvalidDesigns", false); @@ -323,8 +315,8 @@ } else if ((method != null) && method.equals("deleteLearningDesignJSON")) { - Integer userId = getUserId(username, courseId, courseName, countryIsoCode, langIsoCode, country, - usePrefix, isUpdateUserDetails, firstName, lastName, email, extServer); + Integer userId = getUserId(username, courseId, courseName, locale, country, usePrefix, + isUpdateUserDetails, firstName, lastName, email, extServer); Long learningDesignId = WebUtil.readLongParam(request, LearningDesignRepositoryServlet.PARAM_LEARING_DESIGN_ID); @@ -350,13 +342,12 @@ username, prefix); } else { userMap = LearningDesignRepositoryServlet.integrationService.getImplicitExtUserUseridMap(extServer, - username, firstName, lastName, langIsoCode, countryIsoCode, country, email, prefix, - isUpdateUserDetails); + username, firstName, lastName, locale, country, email, prefix, isUpdateUserDetails); } // create group for external course if necessary LearningDesignRepositoryServlet.integrationService.getExtCourseClassMap(extServer, userMap, courseId, - countryIsoCode, langIsoCode, courseName, LoginRequestDispatcher.METHOD_AUTHOR); + courseName, LoginRequestDispatcher.METHOD_AUTHOR); Integer userId = userMap.getUser().getUserId(); String contentTree = buildContentTree(userId, mode).toString(); @@ -392,9 +383,9 @@ } - private Integer getUserId(String username, String courseId, String courseName, String countryIsoCode, - String langIsoCode, String country, String usePrefix, final boolean isUpdateUserDetails, String firstName, - String lastName, String email, ExtServer extServer) + private Integer getUserId(String username, String courseId, String courseName, String locale, String country, + String usePrefix, final boolean isUpdateUserDetails, String firstName, String lastName, String email, + ExtServer extServer) throws UserInfoFetchException, UserInfoValidationException { ExtUserUseridMap userMap = null; boolean prefix = usePrefix == null ? true : Boolean.parseBoolean(usePrefix); @@ -403,13 +394,13 @@ prefix); } else { userMap = LearningDesignRepositoryServlet.integrationService.getImplicitExtUserUseridMap(extServer, - username, firstName, lastName, langIsoCode, countryIsoCode, country, email, prefix, + username, firstName, lastName, locale, country, email, prefix, isUpdateUserDetails); } // create group for external course if necessary LearningDesignRepositoryServlet.integrationService.getExtCourseClassMap(extServer, userMap, courseId, - countryIsoCode, langIsoCode, courseName, LoginRequestDispatcher.METHOD_AUTHOR); + courseName, LoginRequestDispatcher.METHOD_AUTHOR); Integer userId = userMap.getUser().getUserId(); return userId; } Index: lams_central/src/java/org/lamsfoundation/lams/webservice/xml/LessonManagerServlet.java =================================================================== diff -u -reb06cf9300f02897c13bd577689deacb2cf4b5fc -r3b255feabeeae3729398d969d6ee4d76947777d3 --- lams_central/src/java/org/lamsfoundation/lams/webservice/xml/LessonManagerServlet.java (.../LessonManagerServlet.java) (revision eb06cf9300f02897c13bd577689deacb2cf4b5fc) +++ lams_central/src/java/org/lamsfoundation/lams/webservice/xml/LessonManagerServlet.java (.../LessonManagerServlet.java) (revision 3b255feabeeae3729398d969d6ee4d76947777d3) @@ -124,11 +124,11 @@ String courseId = request.getParameter(CentralConstants.PARAM_COURSE_ID); String ldIdStr = request.getParameter(CentralConstants.PARAM_LEARNING_DESIGN_ID); String lsIdStr = request.getParameter(CentralConstants.PARAM_LESSON_ID); - String countryIsoCode = request.getParameter(CentralConstants.PARAM_COUNTRY); + String country = request.getParameter(CentralConstants.PARAM_COUNTRY); String title = request.getParameter(CentralConstants.PARAM_TITLE); String desc = request.getParameter(CentralConstants.PARAM_DESC); String startDate = request.getParameter(CentralConstants.PARAM_STARTDATE); - String langIsoCode = request.getParameter(CentralConstants.PARAM_LANG); + String locale = request.getParameter(CentralConstants.PARAM_LANG); String method = request.getParameter(CentralConstants.PARAM_METHOD); String filePath = request.getParameter(CentralConstants.PARAM_FILEPATH); String outputsUser = request.getParameter("outputsUser"); @@ -150,14 +150,6 @@ boolean enableNotifications = WebUtil.readBooleanParam(request, CentralConstants.PARAM_ENABLE_NOTIFICATIONS, false); - String[] localeParts = langIsoCode.split("_"); - String country = null; - if (localeParts.length == 2 && localeParts[0].length() == 2 && localeParts[1].length() == 2) { - country = countryIsoCode; - langIsoCode = localeParts[0]; - countryIsoCode = localeParts[1]; - } - Long ldId = null; Long lsId = null; ServletOutputStream outputStream = null; @@ -177,7 +169,7 @@ if (method.equals(CentralConstants.METHOD_START)) { ldId = new Long(ldIdStr); Long lessonId = LessonManagerServlet.startLesson(serverId, datetime, hashValue, username, ldId, - courseId, title, desc, countryIsoCode, langIsoCode, customCSV, presenceEnable, imEnable, + courseId, title, desc, country, locale, customCSV, presenceEnable, imEnable, enableNotifications); element = document.createElement(CentralConstants.ELEM_LESSON); @@ -186,15 +178,15 @@ } else if (method.equals(CentralConstants.METHOD_PREVIEW)) { ldId = new Long(ldIdStr); Long lessonId = startPreview(serverId, datetime, hashValue, username, ldId, courseId, title, desc, - countryIsoCode, langIsoCode, customCSV, presenceEnable, imEnable); + country, locale, customCSV, presenceEnable, imEnable); element = document.createElement(CentralConstants.ELEM_LESSON); element.setAttribute(CentralConstants.ATTR_LESSON_ID, lessonId.toString()); } else if (method.equals(CentralConstants.METHOD_SCHEDULE)) { ldId = new Long(ldIdStr); Long lessonId = scheduleLesson(serverId, datetime, hashValue, username, ldId, courseId, title, desc, - startDate, countryIsoCode, langIsoCode, customCSV, presenceEnable, imEnable, + startDate, country, locale, customCSV, presenceEnable, imEnable, enableNotifications); element = document.createElement(CentralConstants.ELEM_LESSON); @@ -203,8 +195,7 @@ } else if (method.equals(CentralConstants.METHOD_CLONE)) { lsId = new Long(lsIdStr); - Long lessonId = cloneLesson(serverId, datetime, hashValue, username, lsId, courseId, countryIsoCode, - langIsoCode); + Long lessonId = cloneLesson(serverId, datetime, hashValue, username, lsId, courseId); element = document.createElement(CentralConstants.ELEM_LESSON); element.setAttribute(CentralConstants.ATTR_LESSON_ID, lessonId.toString()); @@ -248,7 +239,7 @@ lsId = new Long(lsIdStr); element = getSingleStudentProgress(document, serverId, datetime, hashValue, username, firstName, - lastName, langIsoCode, countryIsoCode, country, email, lsId, courseId); + lastName, locale, country, email, lsId, courseId); } else if (method.equals(CentralConstants.METHOD_IMPORT)) { @@ -260,8 +251,7 @@ } else if (method.equals(CentralConstants.METHOD_JOIN_LESSON)) { Thread t = new Thread(new AddUsersToLessonThread(serverId, datetime, username, hashValue, lsIdStr, - courseId, countryIsoCode, langIsoCode, country, learnerIds, monitorIds, firstNames, lastNames, - emails, request)); + courseId, locale, country, learnerIds, monitorIds, firstNames, lastNames, emails, request)); t.start(); element = document.createElement(CentralConstants.ELEM_LESSON); @@ -312,7 +302,7 @@ } else if (method.equals(CentralConstants.METHOD_LIST_MONITOR)) { element = getLessonMonitorList(document, serverId, datetime, hashValue, username, courseId, - countryIsoCode, langIsoCode); + country, locale); } else { String msg = "Method :" + method + " is not recognised"; log.error(msg); @@ -385,8 +375,8 @@ ExtServer extServer = integrationService.getExtServer(serverId); Authenticator.authenticate(extServer, datetime, username, hashValue); ExtUserUseridMap userMap = integrationService.getExtUserUseridMap(extServer, username); - ExtCourseClassMap orgMap = integrationService.getExtCourseClassMap(extServer, userMap, courseId, - countryIsoCode, langIsoCode, null, LoginRequestDispatcher.METHOD_MONITOR); + ExtCourseClassMap orgMap = integrationService.getExtCourseClassMap(extServer, userMap, courseId, null, + LoginRequestDispatcher.METHOD_MONITOR); User user = userMap.getUser(); Organisation organisation = orgMap.getOrganisation(); @@ -415,8 +405,8 @@ ExtServer extServer = integrationService.getExtServer(serverId); Authenticator.authenticate(extServer, datetime, username, hashValue); ExtUserUseridMap userMap = integrationService.getExtUserUseridMap(extServer, username); - ExtCourseClassMap orgMap = integrationService.getExtCourseClassMap(extServer, userMap, courseId, - countryIsoCode, langIsoCode, null, LoginRequestDispatcher.METHOD_MONITOR); + ExtCourseClassMap orgMap = integrationService.getExtCourseClassMap(extServer, userMap, courseId, null, + LoginRequestDispatcher.METHOD_MONITOR); // 1. init lesson Lesson lesson = monitoringService.initializeLesson(title, desc, ldId, orgMap.getOrganisation().getOrganisationId(), userMap.getUser().getUserId(), customCSV, false, @@ -433,16 +423,16 @@ } private Long cloneLesson(String serverId, String datetime, String hashValue, String username, long lsId, - String courseId, String countryIsoCode, String langIsoCode) throws RemoteException { + String courseId) throws RemoteException { try { ExtServer extServer = integrationService.getExtServer(serverId); Authenticator.authenticate(extServer, datetime, username, hashValue); ExtUserUseridMap userMap = integrationService.getExtUserUseridMap(extServer, username); Integer creatorId = userMap.getUser().getUserId(); - ExtCourseClassMap orgMap = integrationService.getExtCourseClassMap(extServer, userMap, courseId, - countryIsoCode, langIsoCode, null, LoginRequestDispatcher.METHOD_MONITOR); + ExtCourseClassMap orgMap = integrationService.getExtCourseClassMap(extServer, userMap, courseId, null, + LoginRequestDispatcher.METHOD_MONITOR); if (orgMap == null) { log.debug("No course exists for: " + courseId + ". Can't delete any lessons."); throw new Exception("Course with courseId: " + courseId + " could not be found"); @@ -519,8 +509,8 @@ } private Element getSingleStudentProgress(Document document, String serverId, String datetime, String hashValue, - String username, String firstName, String lastName, String langIsoCode, String countryIsoCode, - String country, String email, long lsId, String courseID) throws RemoteException { + String username, String firstName, String lastName, String locale, String country, String email, long lsId, + String courseID) throws RemoteException { try { ExtServer extServer = integrationService.getExtServer(serverId); Authenticator.authenticate(extServer, datetime, username, hashValue); @@ -536,8 +526,7 @@ final boolean usePrefix = true; final boolean isUpdateUserDetails = false; ExtUserUseridMap userMap = integrationService.getImplicitExtUserUseridMap(extServer, username, - firstName, lastName, langIsoCode, countryIsoCode, country, email, usePrefix, - isUpdateUserDetails); + firstName, lastName, locale, country, email, usePrefix, isUpdateUserDetails); LearnerProgress learnProg = lessonService.getUserProgressForLesson(userMap.getUser().getUserId(), lsId); @@ -723,8 +712,8 @@ ExtServer extServer = integrationService.getExtServer(serverId); Authenticator.authenticate(extServer, datetime, username, hashValue); ExtUserUseridMap userMap = integrationService.getExtUserUseridMap(extServer, username); - ExtCourseClassMap orgMap = integrationService.getExtCourseClassMap(extServer, userMap, courseId, - countryIsoCode, langIsoCode, null, LoginRequestDispatcher.METHOD_MONITOR); + ExtCourseClassMap orgMap = integrationService.getExtCourseClassMap(extServer, userMap, courseId, null, + LoginRequestDispatcher.METHOD_MONITOR); Integer userId = userMap.getUser().getUserId(); // 1. init lesson @@ -844,8 +833,7 @@ private String hashValue; private String lsIdStr; private String courseId; - private String countryIsoCode; - private String langIsoCode; + private String locale; private String country; private String learnerIds; private String monitorIds; @@ -855,17 +843,15 @@ private HttpServletRequest request; public AddUsersToLessonThread(String serverId, String datetime, String username, String hashValue, - String lsIdStr, String courseId, String countryIsoCode, String langIsoCode, String country, - String learnerIds, String monitorIds, String firstNames, String lastNames, String emails, - HttpServletRequest request) { + String lsIdStr, String courseId, String locale, String country, String learnerIds, String monitorIds, + String firstNames, String lastNames, String emails, HttpServletRequest request) { this.serverId = serverId; this.datetime = datetime; this.username = username; this.hashValue = hashValue; this.lsIdStr = lsIdStr; this.courseId = courseId; - this.countryIsoCode = countryIsoCode; - this.langIsoCode = langIsoCode; + this.locale = locale; this.country = country; this.learnerIds = learnerIds; this.monitorIds = monitorIds; @@ -877,8 +863,8 @@ @Override public void run() { - addUsersToLesson(serverId, datetime, username, hashValue, lsIdStr, courseId, countryIsoCode, langIsoCode, - country, learnerIds, monitorIds, firstNames, lastNames, emails, request); + addUsersToLesson(serverId, datetime, username, hashValue, lsIdStr, courseId, locale, country, learnerIds, + monitorIds, firstNames, lastNames, emails, request); } /** @@ -895,9 +881,8 @@ * @return */ public Boolean addUsersToLesson(String serverId, String datetime, String requestorUsername, String hashValue, - String lsIdStr, String courseId, String countryIsoCode, String langIsoCode, String country, - String learnerIds, String monitorIds, String firstNames, String lastNames, String emails, - HttpServletRequest request) { + String lsIdStr, String courseId, String locale, String country, String learnerIds, String monitorIds, + String firstNames, String lastNames, String emails, HttpServletRequest request) { try { // get Server map @@ -941,7 +926,7 @@ if (StringUtils.isNotBlank(userName)) { addUserToLesson(request, extServer, LoginRequestDispatcher.METHOD_LEARNER, lsIdStr, userName, - firstName, lastName, email, courseId, countryIsoCode, langIsoCode, country); + firstName, lastName, email, courseId, locale, country); } i++; } @@ -959,7 +944,7 @@ if (StringUtils.isNotBlank(userName)) { addUserToLesson(request, extServer, LoginRequestDispatcher.METHOD_MONITOR, lsIdStr, userName, - firstName, lastName, email, courseId, countryIsoCode, langIsoCode, country); + firstName, lastName, email, courseId, locale, country); } i++; } @@ -978,9 +963,8 @@ } private void addUserToLesson(HttpServletRequest request, ExtServer extServer, String method, String lsIdStr, - String username, String firstName, String lastName, String email, String courseId, - String countryIsoCode, String langIsoCode, String country) - throws UserInfoFetchException, UserInfoValidationException { + String username, String firstName, String lastName, String email, String courseId, String locale, + String country) throws UserInfoFetchException, UserInfoValidationException { if (log.isDebugEnabled()) { log.debug("Adding user '" + username + "' as " + method + " to lesson with id '" + lsIdStr + "'."); @@ -993,14 +977,14 @@ final boolean usePrefix = true; final boolean isUpdateUserDetails = false; userMap = integrationService.getImplicitExtUserUseridMap(extServer, username, firstName, lastName, - langIsoCode, countryIsoCode, country, email, usePrefix, isUpdateUserDetails); + locale, country, email, usePrefix, isUpdateUserDetails); } // ExtUserUseridMap userMap = integrationService.getExtUserUseridMap(extServer, // username); // adds user to group - ExtCourseClassMap orgMap = integrationService.getExtCourseClassMap(extServer, userMap, courseId, - countryIsoCode, langIsoCode, null, method); + ExtCourseClassMap orgMap = integrationService.getExtCourseClassMap(extServer, userMap, courseId, null, + method); if (lessonService == null) { lessonService = (ILessonService) WebApplicationContextUtils @@ -1528,8 +1512,8 @@ Authenticator.authenticate(extServer, datetime, username, hashValue); ExtUserUseridMap userMap = integrationService.getExistingExtUserUseridMap(extServer, username); - ExtCourseClassMap orgMap = integrationService.getExtCourseClassMap(extServer, userMap, courseID, countryIsoCode, - langIsoCode, null, LoginRequestDispatcher.METHOD_MONITOR); + ExtCourseClassMap orgMap = integrationService.getExtCourseClassMap(extServer, userMap, courseID, null, + LoginRequestDispatcher.METHOD_MONITOR); Organisation organisation = orgMap.getOrganisation(); Map map = lessonService.getLessonsByOrgAndUserWithCompletedFlag( Index: lams_common/src/java/org/lamsfoundation/lams/integration/service/IIntegrationService.java =================================================================== diff -u -reb06cf9300f02897c13bd577689deacb2cf4b5fc -r3b255feabeeae3729398d969d6ee4d76947777d3 --- lams_common/src/java/org/lamsfoundation/lams/integration/service/IIntegrationService.java (.../IIntegrationService.java) (revision eb06cf9300f02897c13bd577689deacb2cf4b5fc) +++ lams_common/src/java/org/lamsfoundation/lams/integration/service/IIntegrationService.java (.../IIntegrationService.java) (revision 3b255feabeeae3729398d969d6ee4d76947777d3) @@ -47,16 +47,14 @@ public interface IIntegrationService { ExtCourseClassMap getExtCourseClassMap(ExtServer extServer, ExtUserUseridMap userMap, String extCourseId, - String countryIsoCode, String langIsoCode, String prettyCourseName, String method, Boolean prefix) - throws UserInfoValidationException; + String prettyCourseName, String method, Boolean prefix) throws UserInfoValidationException; ExtCourseClassMap getExtCourseClassMap(ExtServer extServer, ExtUserUseridMap userMap, String extCourseId, - String countryIsoCode, String langIsoCode, String prettyCourseName, String method) - throws UserInfoValidationException; + String prettyCourseName, String method) throws UserInfoValidationException; ExtCourseClassMap getExtCourseClassMap(ExtServer extServer, ExtUserUseridMap userMap, String extCourseId, - String extCourseName, String countryIsoCode, String langIsoCode, String parentOrgId, Boolean isTeacher, - Boolean prefix) throws UserInfoValidationException; + String extCourseName, String parentOrgId, Boolean isTeacher, Boolean prefix) + throws UserInfoValidationException; ExtUserUseridMap getExtUserUseridMap(ExtServer extServer, String extUsername, boolean prefix) throws UserInfoFetchException, UserInfoValidationException; @@ -137,8 +135,8 @@ * @param extUsername * @param firstName * @param lastName - * @param langIsoCode - * @param countryIsoCode + * @param locale + * @param country * @param email * @param prefix * @param isUpdateUserDetails @@ -147,9 +145,9 @@ * @throws UserInfoValidationException */ ExtUserUseridMap getImplicitExtUserUseridMap(ExtServer extServer, String extUsername, String firstName, - String lastName, String langIsoCode, String countryIsoCode, String country, String email, boolean prefix, boolean isUpdateUserDetails) + String lastName, String locale, String country, String email, boolean prefix, boolean isUpdateUserDetails) throws UserInfoValidationException; - + /** * Checks whether user was created via integrations. * @@ -230,6 +228,5 @@ * Creates an external org and normal org. It does not set roles for the creator. */ ExtCourseClassMap createExtCourseClassMap(ExtServer extServer, Integer userId, String extCourseId, - String extCourseName, String countryIsoCode, String langIsoCode, String parentOrgId, Boolean prefix) - throws UserInfoValidationException; + String extCourseName, String parentOrgId, Boolean prefix) throws UserInfoValidationException; } \ No newline at end of file Index: lams_common/src/java/org/lamsfoundation/lams/integration/service/IntegrationService.java =================================================================== diff -u -rd5b05f6e239a87908856f9f4251a487158ed9ca8 -r3b255feabeeae3729398d969d6ee4d76947777d3 --- lams_common/src/java/org/lamsfoundation/lams/integration/service/IntegrationService.java (.../IntegrationService.java) (revision d5b05f6e239a87908856f9f4251a487158ed9ca8) +++ lams_common/src/java/org/lamsfoundation/lams/integration/service/IntegrationService.java (.../IntegrationService.java) (revision 3b255feabeeae3729398d969d6ee4d76947777d3) @@ -36,7 +36,6 @@ import java.security.GeneralSecurityException; import java.text.ParseException; import java.util.ArrayList; -import java.util.Arrays; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -74,7 +73,6 @@ import org.lamsfoundation.lams.usermanagement.UserOrganisationRole; import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; import org.lamsfoundation.lams.util.CSVUtil; -import org.lamsfoundation.lams.util.CommonConstants; import org.lamsfoundation.lams.util.HashUtil; import org.lamsfoundation.lams.util.LanguageUtil; import org.lamsfoundation.lams.util.ValidationUtil; @@ -137,8 +135,7 @@ // wrapper method for compatibility with original integration modules @Override public ExtCourseClassMap getExtCourseClassMap(ExtServer extServer, ExtUserUseridMap userMap, String extCourseId, - String countryIsoCode, String langIsoCode, String prettyCourseName, String method, Boolean prefix) - throws UserInfoValidationException { + String prettyCourseName, String method, Boolean prefix) throws UserInfoValidationException { // Set the pretty course name if available, otherwise maintain the extCourseId String courseName = ""; @@ -150,33 +147,31 @@ Boolean isTeacher = (StringUtils.equals(method, LoginRequestDispatcher.METHOD_AUTHOR) || StringUtils.equals(method, LoginRequestDispatcher.METHOD_MONITOR)); - return getExtCourseClassMap(extServer, userMap, extCourseId, courseName, countryIsoCode, langIsoCode, + return getExtCourseClassMap(extServer, userMap, extCourseId, courseName, service.getRootOrganisation().getOrganisationId().toString(), isTeacher, prefix); } // wrapper method for compatibility with original integration modules @Override public ExtCourseClassMap getExtCourseClassMap(ExtServer extServer, ExtUserUseridMap userMap, String extCourseId, - String countryIsoCode, String langIsoCode, String prettyCourseName, String method) - throws UserInfoValidationException { - return getExtCourseClassMap(extServer, userMap, extCourseId, countryIsoCode, langIsoCode, prettyCourseName, - method, true); + String prettyCourseName, String method) throws UserInfoValidationException { + return getExtCourseClassMap(extServer, userMap, extCourseId, prettyCourseName, method, true); } // newer method which accepts course name, a parent org id, a flag for whether user should get // 'teacher' roles, and a flag for whether to use a prefix in the org's name @Override public ExtCourseClassMap getExtCourseClassMap(ExtServer extServer, ExtUserUseridMap userMap, String extCourseId, - String extCourseName, String countryIsoCode, String langIsoCode, String parentOrgId, Boolean isTeacher, - Boolean prefix) throws UserInfoValidationException { + String extCourseName, String parentOrgId, Boolean isTeacher, Boolean prefix) + throws UserInfoValidationException { Organisation org; User user = userMap.getUser(); ExtCourseClassMap extCourseClassMap = getExtCourseClassMap(extServer.getSid(), extCourseId); if (extCourseClassMap == null) { //create new ExtCourseClassMap extCourseClassMap = createExtCourseClassMap(extServer, user.getUserId(), extCourseId, extCourseName, - countryIsoCode, langIsoCode, parentOrgId, prefix); + parentOrgId, prefix); org = extCourseClassMap.getOrganisation(); } else { org = extCourseClassMap.getOrganisation(); @@ -204,11 +199,9 @@ @Override public ExtCourseClassMap createExtCourseClassMap(ExtServer extServer, Integer userId, String extCourseId, - String extCourseName, String countryIsoCode, String langIsoCode, String parentOrgId, Boolean prefix) - throws UserInfoValidationException { + String extCourseName, String parentOrgId, Boolean prefix) throws UserInfoValidationException { User user = (User) service.findById(User.class, userId); - Organisation org = createOrganisation(extServer, user, extCourseId, extCourseName, countryIsoCode, langIsoCode, - parentOrgId, prefix); + Organisation org = createOrganisation(extServer, user, extCourseId, extCourseName, parentOrgId, prefix); ExtCourseClassMap extCourseClassMap = new ExtCourseClassMap(); extCourseClassMap.setCourseid(extCourseId); extCourseClassMap.setExtServer(extServer); @@ -293,10 +286,10 @@ ExtUserUseridMap extUserUseridMap = getExistingExtUserUseridMap(extServer, extUsername); if (extUserUseridMap == null) { - String[] defaultLangCountry = LanguageUtil.getDefaultLangCountry(); - String country = LanguageUtil.getDefaultCountry(); - String[] userData = { "", firstName, lastName, "", "", "", "", country, "", "", "", email, - defaultLangCountry[1], defaultLangCountry[0] }; + String defaultLocale = LanguageUtil.getDefaultLocale().getLocaleName(); + String defaultCountry = LanguageUtil.getDefaultCountry(); + String[] userData = { "", firstName, lastName, "", "", "", "", defaultCountry, "", "", "", email, + defaultLocale }; return createExtUserUseridMap(extServer, extUsername, password, salt, userData, false); } else { return extUserUseridMap; @@ -305,15 +298,14 @@ @Override public ExtUserUseridMap getImplicitExtUserUseridMap(ExtServer extServer, String extUsername, String firstName, - String lastName, String langIsoCode, String countryIsoCode, String country, String email, boolean prefix, - boolean isUpdateUserDetails) throws UserInfoValidationException { + String lastName, String locale, String country, String email, boolean prefix, boolean isUpdateUserDetails) + throws UserInfoValidationException { ExtUserUseridMap extUserUseridMap = getExistingExtUserUseridMap(extServer, extUsername); //create new one if it doesn't exist yet if (extUserUseridMap == null) { - String[] userData = { "", firstName, lastName, "", "", "", "", country, "", "", "", email, countryIsoCode, - langIsoCode }; + String[] userData = { "", firstName, lastName, "", "", "", "", country, "", "", "", email, locale }; String salt = HashUtil.salt(); String password = HashUtil.sha256(RandomPasswordGenerator.nextPassword(10), salt); return createExtUserUseridMap(extServer, extUsername, password, salt, userData, prefix); @@ -346,11 +338,8 @@ user.setLastName(lastName); user.setEmail(email); user.setModifiedDate(new Date()); - user.setLocale(LanguageUtil.getSupportedLocale(langIsoCode, countryIsoCode)); - if (StringUtils.isBlank(country)) { - country = LanguageUtil.getDefaultCountry(); - } - user.setCountry(country); + user.setLocale(LanguageUtil.getSupportedLocaleByNameOrLanguageCode(locale)); + user.setCountry(LanguageUtil.getSupportedCountry(country)); service.saveUser(user); return extUserUseridMap; @@ -362,8 +351,7 @@ } private Organisation createOrganisation(ExtServer extServer, User user, String extCourseId, String extCourseName, - String countryIsoCode, String langIsoCode, String parentOrgId, Boolean prefix) - throws UserInfoValidationException { + String parentOrgId, Boolean prefix) throws UserInfoValidationException { Organisation org = new Organisation(); @@ -443,12 +431,6 @@ + ", firstName:" + firstName + ", lastName:" + lastName); } - //set user's country to default value if it wasn't provided or has a wrong value - String country = userData[7]; - if (StringUtils.isBlank(country) || !Arrays.asList(CommonConstants.COUNTRY_CODES).contains(country)) { - country = LanguageUtil.getDefaultCountry(); - } - User user = new User(); user.setLogin(login); user.setPassword(password); @@ -460,7 +442,7 @@ user.setCity(userData[4]); user.setState(userData[5]); user.setPostcode(userData[6]); - user.setCountry(country); + user.setCountry(LanguageUtil.getSupportedCountry(userData[7])); user.setDayPhone(userData[8]); user.setMobilePhone(userData[9]); user.setFax(userData[10]); @@ -469,7 +451,7 @@ (AuthenticationMethod) service.findById(AuthenticationMethod.class, AuthenticationMethod.DB)); user.setCreateDate(new Date()); user.setDisabledFlag(false); - user.setLocale(LanguageUtil.getSupportedLocale(userData[13], userData[12])); + user.setLocale(LanguageUtil.getSupportedLocaleByNameOrLanguageCode(userData[12])); user.setTimeZone(timezoneService.getServerTimezone().getTimezoneId()); user.setTheme(service.getDefaultTheme()); service.saveUser(user); @@ -820,10 +802,9 @@ //create extUserUseridMap if it's not available if (extUserUseridMap == null) { // User properties list format: ,<First name>,<Last name>,<Address>,<City>,<State>, - // <Postcode>,<Country>,<Day time number>,<Mobile number>,<Fax number>,<Email>,<Locale - // language>,<Locale country> - String[] userData = new String[14]; - for (int k = 1; k <= 14; k++) { + // <Postcode>,<Country ISO code>,<Day time number>,<Mobile number>,<Fax number>,<Email>,<Locale> + String[] userData = new String[13]; + for (int k = 1; k <= 13; k++) { String userProperty = jsonUser.getString("" + k); userData[k - 1] = userProperty; } Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/SupportedLocale.java =================================================================== diff -u -r5773f84ed608838de3521ecde87c52f3c72d478c -r3b255feabeeae3729398d969d6ee4d76947777d3 --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/SupportedLocale.java (.../SupportedLocale.java) (revision 5773f84ed608838de3521ecde87c52f3c72d478c) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/SupportedLocale.java (.../SupportedLocale.java) (revision 3b255feabeeae3729398d969d6ee4d76947777d3) @@ -42,6 +42,13 @@ /** default constructor */ public SupportedLocale() { } + + /** + * Return locale name in the format xx_XX, where xx - language ISO code and XX - country ISO code + */ + public String getLocaleName() { + return languageIsoCode + "_" + countryIsoCode; + } public Integer getLocaleId() { return this.localeId; Index: lams_common/src/java/org/lamsfoundation/lams/util/LanguageUtil.java =================================================================== diff -u -r098532cd2b5687da032408b04a1120dab668083b -r3b255feabeeae3729398d969d6ee4d76947777d3 --- lams_common/src/java/org/lamsfoundation/lams/util/LanguageUtil.java (.../LanguageUtil.java) (revision 098532cd2b5687da032408b04a1120dab668083b) +++ lams_common/src/java/org/lamsfoundation/lams/util/LanguageUtil.java (.../LanguageUtil.java) (revision 3b255feabeeae3729398d969d6ee4d76947777d3) @@ -23,6 +23,7 @@ package org.lamsfoundation.lams.util; +import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; @@ -110,7 +111,27 @@ return TimeZone.getDefault(); } + public static String getDefaultCountry() { + String serverCountry = Configuration.get(ConfigurationKeys.SERVER_COUNTRY); + return StringUtils.isBlank(serverCountry) ? LanguageUtil.DEFAULT_COUNTRY : serverCountry; + } + /** + * Checks whether specified country belongs to the list of allowed country codes. If positive return it, and if not + * - default country. + * + * @param input + * @return + */ + public static String getSupportedCountry(String input) { + String country = input == null ? null : input.toUpperCase(); + if (StringUtils.isBlank(country) || !Arrays.asList(CommonConstants.COUNTRY_CODES).contains(country)) { + country = LanguageUtil.getDefaultCountry(); + } + return country; + } + + /** * Returns server default locale; if invalid, uses en_AU. */ public static SupportedLocale getDefaultLocale() { @@ -133,11 +154,6 @@ return locale; } - public static String getDefaultCountry() { - String serverCountry = Configuration.get(ConfigurationKeys.SERVER_COUNTRY); - return StringUtils.isBlank(serverCountry) ? LanguageUtil.DEFAULT_COUNTRY : serverCountry; - } - /** * Searches for a locale based on language, then country, matching the single input string. Otherwise returns server * default locale. @@ -156,19 +172,52 @@ } /** - * Finds a locale based on language and/or country, use server locale if invalid. + * Searches for a supported locale based on the provided input, first assuming it has "xx_XX" format, then that the + * first two letters is a language ISO code. Otherwise returns server default locale. */ - public static SupportedLocale getSupportedLocale(String langIsoCode, String countryIsoCode) { + public static SupportedLocale getSupportedLocaleByNameOrLanguageCode(String input) { SupportedLocale locale = null; + if (StringUtils.isNotBlank(input)) { - locale = LanguageUtil.getSupportedLocaleOrNull(langIsoCode, countryIsoCode); + //check if input follows xx_XX format + if (input.length() == 5 && input.indexOf("_") == 2) { + String localeLanguage = input.substring(0, 2).toLowerCase(); + String localeCountry = input.substring(3).toUpperCase(); + locale = LanguageUtil.getSupportedLocaleOrNull(localeLanguage, localeCountry); + } + + //if exactly the same locale is not supported or input has another format - try to get the first available locale with requested language + if (locale == null && input.length() >= 2) { + String localeLanguage = input.substring(0, 2).toLowerCase(); + + List<SupportedLocale> list = LanguageUtil.getService().findByProperty(SupportedLocale.class, + "languageIsoCode", localeLanguage); + if ((list != null) && (list.size() > 0)) { + locale = list.get(0); + } + } + + } + if (locale == null) { locale = LanguageUtil.getDefaultLocale(); } return locale; } + /** + * Finds a locale based on language and/or country, use server locale if invalid. + */ + public static SupportedLocale getSupportedLocale(String langIsoCode, String countryIsoCode) { + SupportedLocale locale = LanguageUtil.getSupportedLocaleOrNull(langIsoCode, countryIsoCode); + if (locale == null) { + locale = LanguageUtil.getDefaultLocale(); + } + + return locale; + } + // Given langIsoCode and countryIsoCode, returns SupportedLocale (null if // doesn't exist) private static SupportedLocale getSupportedLocaleOrNull(String langIsoCode, String countryIsoCode) {