Index: lams_tool_doku/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -r13485eade3d9b1eee2857009492588790db63f53 -rce9fa36f0e318509e9d28299b844df9475e16e83 --- lams_tool_doku/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 13485eade3d9b1eee2857009492588790db63f53) +++ lams_tool_doku/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision ce9fa36f0e318509e9d28299b844df9475e16e83) @@ -183,4 +183,4 @@ label.monitoring.ai.review.all = AI review all label.monitoring.ai.review.tooltip = Have AI compare the given task and students' submissions. label.monitoring.ai.review.error = Error while requesting AI review -label.monitoring.ai.review.learning.outcomes = AI-extracted learning outcomes \ No newline at end of file +label.monitoring.ai.review.learning.outcomes = AI learning outcomes \ No newline at end of file Index: lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/dbupdates/patch20240116.sql =================================================================== diff -u -rc22dc7a368dcb33d2500603a3595a540bee1d695 -rce9fa36f0e318509e9d28299b844df9475e16e83 --- lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/dbupdates/patch20240116.sql (.../patch20240116.sql) (revision c22dc7a368dcb33d2500603a3595a540bee1d695) +++ lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/dbupdates/patch20240116.sql (.../patch20240116.sql) (revision ce9fa36f0e318509e9d28299b844df9475e16e83) @@ -3,8 +3,9 @@ SET FOREIGN_KEY_CHECKS=0; -- Put all sql statements below here --- LAI-9 Add column to store AI review +-- LAI-9 Add columns to store AI reviews and learning outcomes ALTER TABLE tl_ladoku11_session ADD COLUMN ai_review TEXT; +ALTER TABLE tl_ladoku11_dokumaran ADD COLUMN ai_learning_outcomes TEXT; -- Put all sql statements above here Index: lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/model/Dokumaran.java =================================================================== diff -u -r52a6369ce66a2ea70d38bfa2e627dfcde6354b10 -rce9fa36f0e318509e9d28299b844df9475e16e83 --- lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/model/Dokumaran.java (.../Dokumaran.java) (revision 52a6369ce66a2ea70d38bfa2e627dfcde6354b10) +++ lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/model/Dokumaran.java (.../Dokumaran.java) (revision ce9fa36f0e318509e9d28299b844df9475e16e83) @@ -130,6 +130,9 @@ @Column(name = "gallery_walk_instructions") private String galleryWalkInstructions; + @Column(name = "ai_learning_outcomes") + private String aiLearningOutcomes; + // general information @Column(name = "create_date") private Date created; @@ -142,6 +145,8 @@ @JoinColumn(name = "create_by") private DokumaranUser createdBy; + + // ********************************************************** // Function method for Dokumaran // ********************************************************** @@ -511,4 +516,12 @@ public void setGalleryWalkInstructions(String galleryWalkInstructions) { this.galleryWalkInstructions = galleryWalkInstructions; } + + public String getAiLearningOutcomes() { + return aiLearningOutcomes; + } + + public void setAiLearningOutcomes(String aiLearningOutcomes) { + this.aiLearningOutcomes = aiLearningOutcomes; + } } \ No newline at end of file Index: lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/web/controller/MonitoringController.java =================================================================== diff -u -r13485eade3d9b1eee2857009492588790db63f53 -rce9fa36f0e318509e9d28299b844df9475e16e83 --- lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/web/controller/MonitoringController.java (.../MonitoringController.java) (revision 13485eade3d9b1eee2857009492588790db63f53) +++ lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/web/controller/MonitoringController.java (.../MonitoringController.java) (revision ce9fa36f0e318509e9d28299b844df9475e16e83) @@ -646,6 +646,23 @@ dokumaranService.saveOrUpdate(session); } + @RequestMapping(path = "/saveAiLearningOutcomes", method = RequestMethod.POST) + @ResponseBody + @ResponseStatus(HttpStatus.OK) + public void saveAiLearningOutcomes(@RequestParam Long toolContentId, + @RequestParam(required = false) String learningOutcomes) { + boolean isAiEnabled = Configuration.isLamsModuleAvailable(Configuration.AI_MODULE_CLASS); + if (!isAiEnabled) { + throw new UnsupportedOperationException("AI module is not enabled"); + } + Dokumaran dokumaran = dokumaranService.getDokumaranByContentId(toolContentId); + if (StringUtils.isBlank(learningOutcomes)) { + learningOutcomes = null; + } + dokumaran.setAiLearningOutcomes(learningOutcomes); + dokumaranService.saveOrUpdate(dokumaran); + } + private ObjectNode getAiReviewPromptData(Dokumaran dokumaran) { ObjectNode responseJSON = JsonNodeFactory.instance.objectNode(); if (StringUtils.isNotBlank(dokumaran.getInstructions())) { Index: lams_tool_doku/web/pages/monitoring/summary.jsp =================================================================== diff -u -r13485eade3d9b1eee2857009492588790db63f53 -rce9fa36f0e318509e9d28299b844df9475e16e83 --- lams_tool_doku/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision 13485eade3d9b1eee2857009492588790db63f53) +++ lams_tool_doku/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision ce9fa36f0e318509e9d28299b844df9475e16e83) @@ -161,8 +161,10 @@ MIN_RATES = 0, LAMS_URL = '${lams}', COUNT_RATED_ITEMS = true, - ALLOW_RERATE = false; + ALLOW_RERATE = false, + savedAiLearningOutcomes = null; + $(document).ready(function () { // show etherpads only on Group expand $('#doku-monitoring-summary-${sessionMap.toolContentID} .etherpad-collapse').on('show.bs.collapse', function () { @@ -505,7 +507,7 @@ content = $('.ai-review-content', container).addClass('hidden').empty(); container.children('.ai-review-button-clearfix').remove(); - getAiLearningOutcomes(function(learningOutcomes) { + getAiLearningOutcomes(function() { $.ajax({ 'url': '', 'type': 'get', @@ -530,7 +532,7 @@ 'data': { 'promptKey': 'writing.task.review.prompt.criteria', 'promptParameters': [task, response.content, - learningOutcomes ? learningOutcomes : "No learning outcomes provided, skip this step"] + savedAiLearningOutcomes ? savedAiLearningOutcomes : "No learning outcomes provided, skip this step"] }, success: function (response) { content.html(response); @@ -586,8 +588,24 @@ let learningOutcomesTextarea = $('#ai-review-learning-outcomes'), learningOutcomes = learningOutcomesTextarea.val().trim(); if (learningOutcomes) { + + if (learningOutcomes != savedAiLearningOutcomes) { + if (savedAiLearningOutcomes !== null) { + $.ajax({ + 'url': '', + 'type': 'post', + 'dataType': 'text', + 'cache': 'false', + 'data': { + 'toolContentId': ${sessionMap.toolContentID}, + 'learningOutcomes': learningOutcomes + } + }); + } + savedAiLearningOutcomes = learningOutcomes; + } if (callback) { - callback(learningOutcomes); + callback(); } return; } @@ -624,9 +642,24 @@ success: function (response) { learningOutcomes = response.trim(); learningOutcomesTextarea.val(learningOutcomes); - if (callback) { - callback(learningOutcomes); - } + savedAiLearningOutcomes = learningOutcomes; + + $.ajax({ + 'url': '', + 'type': 'post', + 'dataType': 'text', + 'cache': 'false', + 'data': { + 'toolContentId': ${sessionMap.toolContentID}, + 'learningOutcomes': savedAiLearningOutcomes + }, + complete: function () { + if (callback) { + callback(); + } + } + }); + }, error: function () { learningOutcomesTextarea.text(''); @@ -784,11 +817,13 @@ style="margin-bottom: 1rem" onClick="javascript:aiReviewAll()">   -

- +