diff --git a/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/lms/impl/moodle/MoodleUtils.java b/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/lms/impl/moodle/MoodleUtils.java index 66b71da56..d6d83a39a 100644 --- a/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/lms/impl/moodle/MoodleUtils.java +++ b/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/lms/impl/moodle/MoodleUtils.java @@ -105,7 +105,7 @@ public static String getShortname(final String internalQuizId) { return shortName.equals(Constants.EMPTY_NOTE) ? null : unmaskShortName(shortName); } - public static final String getIdnumber(final String internalQuizId) { + public static String getIdnumber(final String internalQuizId) { if (StringUtils.isBlank(internalQuizId)) { return null; } @@ -118,6 +118,67 @@ public static final String getIdnumber(final String internalQuizId) { return idNumber.equals(Constants.EMPTY_NOTE) ? null : idNumber; } + public static String getDisplayName( + final String firstname, + final String lastname, + final String fullname, + final String sessionId) { + + if (StringUtils.isNotBlank(firstname) && StringUtils.isNotBlank(lastname)) { + return lastname + Constants.SPACE + firstname; + } else if (StringUtils.isNotBlank(lastname) && StringUtils.isNotBlank(fullname)) { + return lastname + Constants.SPACE + fullname; + } else if (StringUtils.isNotBlank(fullname)) { + return fullname; + } else { + return sessionId; + } + } + + public static Map getMoodleAccountDetails(final MoodleUserDetails[] userDetails) { + final Map additionalAttributes = new HashMap<>(); + if (userDetails[0].firstname != null) { + additionalAttributes.put("firstname", userDetails[0].firstname); + } + if (userDetails[0].lastname != null) { + additionalAttributes.put("lastname", userDetails[0].lastname); + } + if (userDetails[0].firstaccess != null) { + additionalAttributes.put("firstaccess", String.valueOf(userDetails[0].firstaccess)); + } + if (userDetails[0].lastaccess != null) { + additionalAttributes.put("lastaccess", String.valueOf(userDetails[0].lastaccess)); + } + if (userDetails[0].auth != null) { + additionalAttributes.put("auth", userDetails[0].auth); + } + if (userDetails[0].suspended != null) { + additionalAttributes.put("suspended", String.valueOf(userDetails[0].suspended)); + } + if (userDetails[0].confirmed != null) { + additionalAttributes.put("confirmed", String.valueOf(userDetails[0].confirmed)); + } + if (userDetails[0].lang != null) { + additionalAttributes.put("lang", userDetails[0].lang); + } + if (userDetails[0].theme != null) { + additionalAttributes.put("theme", userDetails[0].theme); + } + if (userDetails[0].timezone != null) { + additionalAttributes.put("timezone", userDetails[0].timezone); + } + if (userDetails[0].description != null) { + additionalAttributes.put("description", userDetails[0].description); + } + if (userDetails[0].mailformat != null) { + additionalAttributes.put("mailformat", String.valueOf(userDetails[0].mailformat)); + } + if (userDetails[0].descriptionformat != null) { + additionalAttributes.put("descriptionformat", String.valueOf(userDetails[0].descriptionformat)); + } + return additionalAttributes; + } + public static void logMoodleWarning( final Collection warnings, final String lmsSetupName, diff --git a/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/lms/impl/moodle/legacy/MoodleCourseAccess.java b/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/lms/impl/moodle/legacy/MoodleCourseAccess.java index f7a1d3605..f37e62e7d 100644 --- a/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/lms/impl/moodle/legacy/MoodleCourseAccess.java +++ b/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/lms/impl/moodle/legacy/MoodleCourseAccess.java @@ -403,24 +403,14 @@ public Result getExamineeAccountDetails(final String exa throw new RuntimeException("No user details on Moodle API request"); } - final Map additionalAttributes = new HashMap<>(); - additionalAttributes.put("firstname", userDetails[0].firstname); - additionalAttributes.put("lastname", userDetails[0].lastname); - additionalAttributes.put("department", userDetails[0].department); - additionalAttributes.put("firstaccess", String.valueOf(userDetails[0].firstaccess)); - additionalAttributes.put("lastaccess", String.valueOf(userDetails[0].lastaccess)); - additionalAttributes.put("auth", userDetails[0].auth); - additionalAttributes.put("suspended", String.valueOf(userDetails[0].suspended)); - additionalAttributes.put("confirmed", String.valueOf(userDetails[0].confirmed)); - additionalAttributes.put("lang", userDetails[0].lang); - additionalAttributes.put("theme", userDetails[0].theme); - additionalAttributes.put("timezone", userDetails[0].timezone); - additionalAttributes.put("description", userDetails[0].description); - additionalAttributes.put("mailformat", String.valueOf(userDetails[0].mailformat)); - additionalAttributes.put("descriptionformat", String.valueOf(userDetails[0].descriptionformat)); + final Map additionalAttributes = MoodleUtils.getMoodleAccountDetails(userDetails); return new ExamineeAccountDetails( userDetails[0].id, - userDetails[0].lastname + " " + userDetails[0].firstname, + MoodleUtils.getDisplayName( + userDetails[0].firstname, + userDetails[0].lastname, + userDetails[0].fullname, + examineeSessionId), userDetails[0].username, userDetails[0].email, additionalAttributes); diff --git a/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/lms/impl/moodle/plugin/MoodlePluginCourseAccess.java b/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/lms/impl/moodle/plugin/MoodlePluginCourseAccess.java index ae95c0348..c6bce011e 100644 --- a/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/lms/impl/moodle/plugin/MoodlePluginCourseAccess.java +++ b/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/lms/impl/moodle/plugin/MoodlePluginCourseAccess.java @@ -339,24 +339,14 @@ public Result getExamineeAccountDetails(final String exa throw new RuntimeException("No user details on Moodle API request"); } - final Map additionalAttributes = new HashMap<>(); - additionalAttributes.put("firstname", userDetails[0].firstname); - additionalAttributes.put("lastname", userDetails[0].lastname); - additionalAttributes.put("department", userDetails[0].department); - additionalAttributes.put("firstaccess", String.valueOf(userDetails[0].firstaccess)); - additionalAttributes.put("lastaccess", String.valueOf(userDetails[0].lastaccess)); - additionalAttributes.put("auth", userDetails[0].auth); - additionalAttributes.put("suspended", String.valueOf(userDetails[0].suspended)); - additionalAttributes.put("confirmed", String.valueOf(userDetails[0].confirmed)); - additionalAttributes.put("lang", userDetails[0].lang); - additionalAttributes.put("theme", userDetails[0].theme); - additionalAttributes.put("timezone", userDetails[0].timezone); - additionalAttributes.put("description", userDetails[0].description); - additionalAttributes.put("mailformat", String.valueOf(userDetails[0].mailformat)); - additionalAttributes.put("descriptionformat", String.valueOf(userDetails[0].descriptionformat)); + final Map additionalAttributes = MoodleUtils.getMoodleAccountDetails(userDetails); return new ExamineeAccountDetails( userDetails[0].id, - userDetails[0].lastname + " " + userDetails[0].firstname, + MoodleUtils.getDisplayName( + userDetails[0].firstname, + userDetails[0].lastname, + userDetails[0].fullname, + examineeSessionId), userDetails[0].username, userDetails[0].email, additionalAttributes); diff --git a/src/test/java/ch/ethz/seb/sebserver/webservice/servicelayer/lms/impl/moodle/legacy/MoodleCourseAccessTest.java b/src/test/java/ch/ethz/seb/sebserver/webservice/servicelayer/lms/impl/moodle/legacy/MoodleCourseAccessTest.java index 37705291b..10641e2d5 100644 --- a/src/test/java/ch/ethz/seb/sebserver/webservice/servicelayer/lms/impl/moodle/legacy/MoodleCourseAccessTest.java +++ b/src/test/java/ch/ethz/seb/sebserver/webservice/servicelayer/lms/impl/moodle/legacy/MoodleCourseAccessTest.java @@ -103,19 +103,18 @@ public void testGetExamineeAccountDetails() { assertEquals("user1 seb", userDetails.name); assertEquals("demo1@safeexambrowser.org", userDetails.email); assertEquals( - "{auth=manual, " - + "confirmed=true, " - + "department=, " - + "description=, " - + "descriptionformat=1, " - + "firstaccess=1523400731, " - + "firstname=seb, " - + "lang=en, " - + "lastaccess=1596457337, " - + "lastname=user1, " - + "mailformat=1, " - + "suspended=false, " - + "theme=, timezone=99}", + "{auth=manual, " + + "confirmed=true, " + + "description=, " + + "descriptionformat=1, " + + "firstaccess=1523400731, " + + "firstname=seb, " + + "lang=en, " + + "lastaccess=1596457337, " + + "lastname=user1, " + + "mailformat=1, " + + "suspended=false, " + + "theme=, timezone=99}", new TreeMap<>(userDetails.additionalAttributes).toString()); } diff --git a/src/test/java/ch/ethz/seb/sebserver/webservice/servicelayer/lms/impl/moodle/plugin/MoodlePluginCourseAccessTest.java b/src/test/java/ch/ethz/seb/sebserver/webservice/servicelayer/lms/impl/moodle/plugin/MoodlePluginCourseAccessTest.java index 392235570..d10caa9a5 100644 --- a/src/test/java/ch/ethz/seb/sebserver/webservice/servicelayer/lms/impl/moodle/plugin/MoodlePluginCourseAccessTest.java +++ b/src/test/java/ch/ethz/seb/sebserver/webservice/servicelayer/lms/impl/moodle/plugin/MoodlePluginCourseAccessTest.java @@ -252,8 +252,8 @@ public void testGetKnownUserDetails() { assertFalse(userDetailsResult.hasError()); final ExamineeAccountDetails examineeAccountDetails = userDetailsResult.get(); assertEquals( - "ExamineeAccountDetails [id=2, name=user test, username=testuser, email=text@user.mail, " - + "additionalAttributes={mailformat=null, firstname=test, auth=null, timezone=null, description=null, firstaccess=null, confirmed=null, suspended=null, lastname=user, lastaccess=null, theme=null, descriptionformat=null, department=null, lang=null}]", + "ExamineeAccountDetails [id=2, name=user test, username=testuser, email=text@user.mail, " + + "additionalAttributes={firstname=test, lastname=user}]", examineeAccountDetails.toString()); assertEquals(