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 @@
-