Index: lams_tool_doku/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -r6e27c5c2349b310d7259708c2b49314c91c01605 -r13485eade3d9b1eee2857009492588790db63f53 --- lams_tool_doku/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 6e27c5c2349b310d7259708c2b49314c91c01605) +++ lams_tool_doku/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 13485eade3d9b1eee2857009492588790db63f53) @@ -182,4 +182,5 @@ label.monitoring.ai.review = AI review 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 \ No newline at end of file +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 Index: lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/web/controller/MonitoringController.java =================================================================== diff -u -rc22dc7a368dcb33d2500603a3595a540bee1d695 -r13485eade3d9b1eee2857009492588790db63f53 --- lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/web/controller/MonitoringController.java (.../MonitoringController.java) (revision c22dc7a368dcb33d2500603a3595a540bee1d695) +++ lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/web/controller/MonitoringController.java (.../MonitoringController.java) (revision 13485eade3d9b1eee2857009492588790db63f53) @@ -45,6 +45,7 @@ import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; +import netscape.javascript.JSObject; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.lamsfoundation.lams.etherpad.EtherpadException; @@ -53,6 +54,9 @@ import org.lamsfoundation.lams.gradebook.service.IGradebookService; import org.lamsfoundation.lams.learningdesign.Group; import org.lamsfoundation.lams.learningdesign.Grouping; +import org.lamsfoundation.lams.learningdesign.LearningDesign; +import org.lamsfoundation.lams.lesson.Lesson; +import org.lamsfoundation.lams.lesson.service.ILessonService; import org.lamsfoundation.lams.security.ISecurityService; import org.lamsfoundation.lams.tool.ToolSession; import org.lamsfoundation.lams.tool.dokumaran.DokumaranConstants; @@ -119,6 +123,9 @@ private IGradebookService gradebookService; @Autowired + private ILessonService lessonService; + + @Autowired @Qualifier("lamsCoreToolService") private ILamsCoreToolService toolService; @@ -588,16 +595,7 @@ } DokumaranSession session = dokumaranService.getDokumaranSessionBySessionId(toolSessionId); Dokumaran dokumaran = session.getDokumaran(); - ObjectNode responseJSON = JsonNodeFactory.instance.objectNode(); - if (StringUtils.isNotBlank(dokumaran.getInstructions())) { - responseJSON.put("instructions", - new StringBuilder("\n").append(AI_REVIEW_TEMPLATE_INSTRUCTIONS).append("\n") - .append(dokumaran.getInstructions()).append("\n\n").toString()); - } - if (StringUtils.isNotBlank(dokumaran.getDescription())) { - responseJSON.put("description", new StringBuilder("\n").append(AI_REVIEW_TEMPLATE_DESCRIPTION).append("\n") - .append(dokumaran.getDescription()).append("\n\n").toString()); - } + ObjectNode responseJSON = getAiReviewPromptData(dokumaran); try { String padContent = dokumaranService.getPadText(toolSessionId); if (StringUtils.isNotBlank(padContent)) { @@ -610,6 +608,28 @@ return responseJSON.toString(); } + @RequestMapping(path = "/getAiLearningOutcomesPromptData", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) + @ResponseBody + public String getAiLearningOutcomesPromptData(@RequestParam Long toolContentId) { + boolean isAiEnabled = Configuration.isLamsModuleAvailable(Configuration.AI_MODULE_CLASS); + if (!isAiEnabled) { + throw new UnsupportedOperationException("AI module is not enabled"); + } + Dokumaran dokumaran = dokumaranService.getDokumaranByContentId(toolContentId); + ObjectNode responseJSON = getAiReviewPromptData(dokumaran); + + Lesson lesson = lessonService.getLessonByToolContentId(toolContentId); + LearningDesign learningDesign = lesson == null ? null : lesson.getLearningDesign(); + String lessonDescription = learningDesign != null && StringUtils.isNotBlank(learningDesign.getDescription()) + ? learningDesign.getDescription().strip() + : null; + if (lessonDescription != null) { + responseJSON.put("lessonDescription", lessonDescription); + } + + return responseJSON.toString(); + } + @RequestMapping(path = "/saveAiReview", method = RequestMethod.POST) @ResponseBody @ResponseStatus(HttpStatus.OK) @@ -626,6 +646,20 @@ dokumaranService.saveOrUpdate(session); } + private ObjectNode getAiReviewPromptData(Dokumaran dokumaran) { + ObjectNode responseJSON = JsonNodeFactory.instance.objectNode(); + if (StringUtils.isNotBlank(dokumaran.getInstructions())) { + responseJSON.put("instructions", + new StringBuilder("\n").append(AI_REVIEW_TEMPLATE_INSTRUCTIONS).append("\n") + .append(dokumaran.getInstructions()).append("\n\n").toString()); + } + if (StringUtils.isNotBlank(dokumaran.getDescription())) { + responseJSON.put("description", new StringBuilder("\n").append(AI_REVIEW_TEMPLATE_DESCRIPTION).append("\n") + .append(dokumaran.getDescription()).append("\n\n").toString()); + } + return responseJSON; + } + private Integer getUserId() { HttpSession ss = SessionManager.getSession(); UserDTO user = (UserDTO) ss.getAttribute(AttributeNames.USER); Index: lams_tool_doku/web/pages/monitoring/summary.jsp =================================================================== diff -u -rc22dc7a368dcb33d2500603a3595a540bee1d695 -r13485eade3d9b1eee2857009492588790db63f53 --- lams_tool_doku/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision c22dc7a368dcb33d2500603a3595a540bee1d695) +++ lams_tool_doku/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision 13485eade3d9b1eee2857009492588790db63f53) @@ -120,6 +120,10 @@ border: 1px #EEEEEE solid; border-radius: 5px; } + + .doku-monitoring-summary #ai-review-learning-outcomes { + margin-bottom: 1rem; + } @@ -704,11 +780,15 @@ - +
+