Index: lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/service/DokumaranService.java =================================================================== diff -u -rc22dc7a368dcb33d2500603a3595a540bee1d695 -rbd603dafabe8f7b1e80efd5d6d7aaf47b7f41773 --- lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/service/DokumaranService.java (.../DokumaranService.java) (revision c22dc7a368dcb33d2500603a3595a540bee1d695) +++ lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/service/DokumaranService.java (.../DokumaranService.java) (revision bd603dafabe8f7b1e80efd5d6d7aaf47b7f41773) @@ -438,18 +438,14 @@ user.setSessionFinished(true); dokumaranUserDao.saveObject(user); - // DokumaranSession session = dokumaranSessionDao.getSessionBySessionId(toolSessionId); - // session.setStatus(DokumaranConstants.COMPLETED); - // dokumaranSessionDao.saveObject(session); + DokumaranSession session = dokumaranSessionDao.getSessionBySessionId(toolSessionId); //finish Etherpad session. Encapsulate it in try-catch block as we don't want it to affect regular LAMS workflow. try { EPLiteClient client = etherpadService.getClient(); - - DokumaranSession session = dokumaranSessionDao.getSessionBySessionId(toolSessionId); String groupId = session.getEtherpadGroupId(); - String userName = user.getFirstName() + " " + user.getLastName(); + String userName = user.getFullName(); Map map = client.createAuthorIfNotExistsFor(user.getUserId().toString(), userName); String authorId = map.get("authorID"); @@ -467,6 +463,11 @@ log.debug(e1.getMessage()); } + Dokumaran dokumaran = session.getDokumaran(); + if (dokumaran.getTimeLimitAdjustments().containsKey(userId.intValue())) { + FluxRegistry.emit(DokumaranConstants.TIME_LIMIT_PANEL_UPDATE_SINK_NAME, dokumaran.getContentId()); + } + String nextUrl = null; try { nextUrl = this.leaveToolSession(toolSessionId, userId); @@ -1066,8 +1067,7 @@ public void createEtherpadCookieForMonitor(UserDTO user, Long contentId, HttpServletResponse response) throws EtherpadException { - String authorId = etherpadService.createAuthor(user.getUserID(), - user.getFirstName() + " " + user.getLastName()); + String authorId = etherpadService.createAuthor(user.getUserID(), user.getFullName()); List sessionList = dokumaranSessionDao.getByContentId(contentId); if (sessionList.isEmpty()) { Index: lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/web/controller/MonitoringController.java =================================================================== diff -u -rce9fa36f0e318509e9d28299b844df9475e16e83 -rbd603dafabe8f7b1e80efd5d6d7aaf47b7f41773 --- lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/web/controller/MonitoringController.java (.../MonitoringController.java) (revision ce9fa36f0e318509e9d28299b844df9475e16e83) +++ lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/web/controller/MonitoringController.java (.../MonitoringController.java) (revision bd603dafabe8f7b1e80efd5d6d7aaf47b7f41773) @@ -102,17 +102,12 @@ public static Logger log = Logger.getLogger(MonitoringController.class); - public static final int LEARNER_MARKS_SORTING_FIRST_NAME_ASC = 0; - public static final int LEARNER_MARKS_SORTING_FIRST_NAME_DESC = 1; - public static final int LEARNER_MARKS_SORTING_LAST_NAME_ASC = 2; - public static final int LEARNER_MARKS_SORTING_LAST_NAME_DESC = 3; + public static final int LEARNER_MARKS_SORTING_FULL_NAME_ASC = 0; + public static final int LEARNER_MARKS_SORTING_FULL_NAME_DESC = 1; private static final String AI_REVIEW_TEMPLATE_INSTRUCTIONS = "The instructions are:"; private static final String AI_REVIEW_TEMPLATE_DESCRIPTION = "The answer they are writing should address the following:"; - private static final Comparator USER_NAME_COMPARATOR = Comparator.comparing(User::getFirstName) - .thenComparing(User::getLastName).thenComparing(User::getLogin); - @Autowired private IDokumaranService dokumaranService; @@ -213,19 +208,12 @@ // paging parameters of tablesorter int size = WebUtil.readIntParam(request, "size"); int page = WebUtil.readIntParam(request, "page"); - Integer isSortFirstName = WebUtil.readIntParam(request, "column[0]", true); - Integer isSortLastName = WebUtil.readIntParam(request, "column[1]", true); + Integer isSortFullName = WebUtil.readIntParam(request, "column[0]", true); // identify sorting type - int sorting = LEARNER_MARKS_SORTING_FIRST_NAME_ASC; - if (isSortFirstName != null) { - sorting = isSortFirstName.equals(1) - ? LEARNER_MARKS_SORTING_FIRST_NAME_DESC - : LEARNER_MARKS_SORTING_FIRST_NAME_ASC; - } else if (isSortLastName != null) { - sorting = isSortLastName.equals(1) - ? LEARNER_MARKS_SORTING_LAST_NAME_DESC - : LEARNER_MARKS_SORTING_LAST_NAME_ASC; + int sorting = LEARNER_MARKS_SORTING_FULL_NAME_ASC; + if (isSortFullName != null && isSortFullName.equals(1)) { + sorting = LEARNER_MARKS_SORTING_FULL_NAME_DESC; } // get all session users and sort them according to the parameter from tablesorter @@ -236,7 +224,7 @@ ObjectNode responsedata = JsonNodeFactory.instance.objectNode(); if (!users.isEmpty()) { // reverse if sorting is descending - if (sorting == LEARNER_MARKS_SORTING_FIRST_NAME_DESC || sorting == LEARNER_MARKS_SORTING_LAST_NAME_DESC) { + if (sorting == LEARNER_MARKS_SORTING_FULL_NAME_DESC) { Collections.reverse(users); } @@ -459,7 +447,7 @@ ObjectNode userJSON = JsonNodeFactory.instance.objectNode(); userJSON.put("value", "user-" + user.getUserId()); - String name = user.getFirstName() + " " + user.getLastName() + " (" + user.getLogin() + ")"; + String name = user.getFullName() + " (" + user.getLogin() + ")"; if (grouping != null) { Group group = grouping.getGroupBy(user); if (group != null && !group.isNull()) { @@ -483,8 +471,7 @@ Grouping grouping = dokumaranService.getGrouping(toolContentId); // find User objects based on their userIDs and sort by name List users = timeLimitAdjustments.keySet().stream() - .map(userId -> userManagementService.getUserById(userId)).sorted(USER_NAME_COMPARATOR) - .collect(Collectors.toList()); + .map(userId -> userManagementService.getUserById(userId)).sorted().collect(Collectors.toList()); if (grouping != null) { // Make a map group -> its users who have a time limit set @@ -493,7 +480,7 @@ .collect(Collectors.toMap(Group::getGroupName, group -> { return group.getUsers().stream() .filter(user -> timeLimitAdjustments.containsKey(user.getUserId())) - .collect(Collectors.toCollection(() -> new TreeSet<>(USER_NAME_COMPARATOR))); + .collect(Collectors.toCollection(() -> new TreeSet<>())); }, (s1, s2) -> { s1.addAll(s2); return s1; @@ -512,7 +499,7 @@ userJSON.put("userId", user.getUserId()); userJSON.put("adjustment", timeLimitAdjustments.get(user.getUserId().intValue())); - String name = user.getFirstName() + " " + user.getLastName() + " (" + user.getLogin() + ")"; + String name = user.getFullName() + " (" + user.getLogin() + ")"; if (grouping != null) { Group group = grouping.getGroupBy(user); if (group != null && !group.isNull()) { @@ -521,6 +508,10 @@ } userJSON.put("name", name); + DokumaranUser dokumaranUser = dokumaranService.getLearnerByIDAndContent(user.getUserId().longValue(), + toolContentId); + userJSON.put("finished", dokumaranUser != null && dokumaranUser.isSessionFinished()); + responseJSON.add(userJSON); } return responseJSON.toString(); Index: lams_tool_doku/web/pages/monitoring/summary.jsp =================================================================== diff -u -r3340a9fb8b4f086b2aa82aa121a2c597d863e8b9 -rbd603dafabe8f7b1e80efd5d6d7aaf47b7f41773 --- lams_tool_doku/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision 3340a9fb8b4f086b2aa82aa121a2c597d863e8b9) +++ lams_tool_doku/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision bd603dafabe8f7b1e80efd5d6d7aaf47b7f41773) @@ -113,6 +113,42 @@ .doku-monitoring-summary .marks-container .marks-header { line-height: 1.7; } + + + .doku-monitoring-summary .ai-review-content { + padding: 1rem; + margin: 1rem; + border: 1px #EEEEEE solid; + border-radius: 5px; + } + + .doku-monitoring-summary #ai-review-learning-outcomes { + margin-bottom: 1rem; + } + + .doku-monitoring-summary #ai-review-comparison table { + margin-top: 3rem; + margin-bottom: 3rem; + } + + .doku-monitoring-summary #ai-review-comparison table th:first-child { + min-width: 12rem; + } + + .doku-monitoring-summary #ai-review-comparison table th[scope="col"] { + vertical-align: top; + } + + .doku-monitoring-summary #ai-review-comparison table th[scope="row"] { + text-align: left; + font-weight: bold; + } + + .doku-monitoring-summary #ai-review-comparison table td, + .doku-monitoring-summary #ai-review-comparison table th[scope="col"]:not(:first-child) { + text-align: center; + } + + + + + + @@ -616,6 +681,25 @@ + + +

+ +

+
+ + +

+ +

+
+
+
@@ -628,7 +712,8 @@ @@ -686,6 +771,25 @@ + + +
+ + +
+
+

+ +

+
+
+
+
Index: lams_tool_doku/web/pages/monitoring/summary5.jsp =================================================================== diff -u -r3340a9fb8b4f086b2aa82aa121a2c597d863e8b9 -rbd603dafabe8f7b1e80efd5d6d7aaf47b7f41773 --- lams_tool_doku/web/pages/monitoring/summary5.jsp (.../summary5.jsp) (revision 3340a9fb8b4f086b2aa82aa121a2c597d863e8b9) +++ lams_tool_doku/web/pages/monitoring/summary5.jsp (.../summary5.jsp) (revision bd603dafabe8f7b1e80efd5d6d7aaf47b7f41773) @@ -97,6 +97,48 @@ border: black; background: white; } + + .doku-monitoring-summary #accordionSessions .accordion-item { + border: var(--bs-border-color) 2px solid; + } + + + .doku-monitoring-summary .ai-review-content { + padding: 1rem; + margin: 1rem; + border: 1px #EEEEEE solid; + border-radius: 5px; + } + + .doku-monitoring-summary #ai-review-learning-outcomes { + margin-bottom: 1rem; + } + + .doku-monitoring-summary #ai-review-comparison table { + margin-top: 3rem; + margin-bottom: 3rem; + } + + .doku-monitoring-summary #ai-review-comparison table th:first-child { + min-width: 12rem; + } + + .doku-monitoring-summary #ai-review-comparison table th[scope="col"] { + vertical-align: top; + font-weight: normal; + font-style: italic; + } + + .doku-monitoring-summary #ai-review-comparison table th[scope="row"] { + text-align: left; + font-weight: bold; + } + + .doku-monitoring-summary #ai-review-comparison table td, + .doku-monitoring-summary #ai-review-comparison table th[scope="col"]:not(:first-child) { + text-align: center; + } + @@ -118,9 +160,33 @@ MAX_RATES = 0, MIN_RATES = 0, LAMS_URL = '${lams}', + TOOL_URL = '', COUNT_RATED_ITEMS = true, - ALLOW_RERATE = false; + ALLOW_RERATE = false, + toolContentId = ; + + + var AI_REVIEW_ERROR = '', + AI_REVIEW_GROUPS_HEADER = '', + AI_REVIEW_CRITERIA_1 = '', + AI_REVIEW_CRITERIA_2 = '', + AI_REVIEW_CRITERIA_3 = '', + AI_REVIEW_SCORE_HEADER = '', + AI_REVIEW_LEARNING_OUTCOMES_HEADER = '', + AI_REVIEW_GOOD_HEADER = '', + AI_REVIEW_BAD_HEADER = '', + savedAiReviews = { + + + ${groupSummary.sessionId}: ${groupSummary.aiReview}, + + + // so that the last comma is not a problem + 'dummy': 'dummy' + }; + + $(document).ready(function(){ // show etherpads only on Group expand $('#doku-monitoring-summary-${sessionMap.toolContentID} .etherpad-collapse').on('show.bs.collapse', function(){ @@ -173,7 +239,8 @@ }); // marks table for each group - var tablesorters = $("#doku-monitoring-summary-${sessionMap.toolContentID} .tablesorter"); + var tablesorters = $("#doku-monitoring-summary-${sessionMap.toolContentID} .tablesorter"), + maxMark = ${dokumaran.maxMark}; // intialise tablesorter tables tablesorters.tablesorter({ theme: 'bootstrap', @@ -217,9 +284,8 @@ toolSessionId = +$this.closest('.tablesorter').attr('toolSessionId'), userId = +$this.closest('tr').attr('userId'); - // max mark is 100 - if (mark > 100) { - mark = 100; + if (mark > maxMark) { + mark = maxMark; $this.text(mark); } @@ -233,6 +299,11 @@ '' : '' }, type: 'post', + success: function () { + $this.closest('.marks-container').find('.copy-mark-button') + .data('mark', mark).show() + .find('.copy-mark-value').text(mark); + }, error: function (request, status, error) { alert(''); } @@ -277,7 +348,7 @@ rows += ''; rows += ''; - rows += userData['mark']; + rows += (userData['mark'] == '' ? '0.0' : userData['mark']); rows += ''; rows += ''; @@ -419,6 +490,11 @@ } + + + + + @@ -557,19 +633,38 @@
+ + +

+ +

+
+ + +

+ +

+
+
+
-
+

+ +
+
+

+ +

+
+ +

+
@@ -633,7 +758,6 @@
- ${ !sessionMap.isGroupedActivity || ! status.last ? '
 
' : ''}