Index: lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsToolService.java =================================================================== diff -u -r6ff1966e270c9f86609b19a72f4906419f89670b -r7521e0cd5b5f4b01d188ca0ddad1e5f59d3bde27 --- lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsToolService.java (.../ILamsToolService.java) (revision 6ff1966e270c9f86609b19a72f4906419f89670b) +++ lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsToolService.java (.../ILamsToolService.java) (revision 7521e0cd5b5f4b01d188ca0ddad1e5f59d3bde27) @@ -251,5 +251,10 @@ */ boolean syncRatQuestions(long toolContentId, List newQuestionUids); + /** + * Delegates to ILearningDesignService#findMatchingRatActivity(long) + */ + Long findMatchingRatActivity(long toolContentId); + void assignGroupsForGalleryWalk(SortedMap> groups, int clusterSize); } \ No newline at end of file Index: lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsToolService.java =================================================================== diff -u -r6ff1966e270c9f86609b19a72f4906419f89670b -r7521e0cd5b5f4b01d188ca0ddad1e5f59d3bde27 --- lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsToolService.java (.../LamsToolService.java) (revision 6ff1966e270c9f86609b19a72f4906419f89670b) +++ lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsToolService.java (.../LamsToolService.java) (revision 7521e0cd5b5f4b01d188ca0ddad1e5f59d3bde27) @@ -566,12 +566,16 @@ return session.getLearners().size(); } + public Long findMatchingRatActivity(long toolContentId) { + return learningDesignService.findMatchingRatActivity(toolContentId); + } + /** * Updates TBL iRAT/tRAT activity with questions from matching tRAT/iRAT activity */ @Override public boolean syncRatQuestions(long toolContentId, List newQuestionUids) { - Long matchingRATActivityId = learningDesignService.findMatchingRatActivity(toolContentId); + Long matchingRATActivityId = findMatchingRatActivity(toolContentId); if (matchingRATActivityId == null) { return false; } Index: lams_tool_assessment/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -r13b9f60ae467a5926804ac7229154f390a81b793 -r7521e0cd5b5f4b01d188ca0ddad1e5f59d3bde27 --- lams_tool_assessment/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 13b9f60ae467a5926804ac7229154f390a81b793) +++ lams_tool_assessment/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 7521e0cd5b5f4b01d188ca0ddad1e5f59d3bde27) @@ -459,4 +459,5 @@ label.authoring.advance.question.distribution = Question distribution label.monitoring.user.summary.marker.comment = Comment label.monitoring.user.summary.marker = Marker -label.activity.monitoring = Activity details \ No newline at end of file +label.activity.monitoring = Activity details +message.authoring.rat.questions.sync = You have edited questions in this activity. Do you want to synchronise the changes with the corresponding TBL RAT activity? \ No newline at end of file Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/AssessmentConstants.java =================================================================== diff -u -r3949a1bbc3c7b576035600a88cda331703c12d9e -r7521e0cd5b5f4b01d188ca0ddad1e5f59d3bde27 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/AssessmentConstants.java (.../AssessmentConstants.java) (revision 3949a1bbc3c7b576035600a88cda331703c12d9e) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/AssessmentConstants.java (.../AssessmentConstants.java) (revision 7521e0cd5b5f4b01d188ca0ddad1e5f59d3bde27) @@ -219,6 +219,7 @@ public static final String CONFIG_KEY_AUTO_EXPAND_JUSTIFICATION = "autoexpandJustification"; public static final String ATTR_IS_QUESTION_ETHERPAD_ENABLED = "isQuestionEtherpadEnabled"; + public static final String ATTR_HAS_MATCHING_RAT_ACTIVITY = "hasMatchingRatActivity"; public static final String ATTR_CODE_STYLES = "codeStyles"; Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/controller/AuthoringController.java =================================================================== diff -u -rbca8248580df6c46e6a8462d80e4341598cd9f28 -r7521e0cd5b5f4b01d188ca0ddad1e5f59d3bde27 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/controller/AuthoringController.java (.../AuthoringController.java) (revision bca8248580df6c46e6a8462d80e4341598cd9f28) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/controller/AuthoringController.java (.../AuthoringController.java) (revision 7521e0cd5b5f4b01d188ca0ddad1e5f59d3bde27) @@ -23,31 +23,9 @@ package org.lamsfoundation.lams.tool.assessment.web.controller; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.math.BigInteger; -import java.net.URLDecoder; -import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.SortedSet; -import java.util.TreeSet; -import java.util.stream.Collectors; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.JsonNodeFactory; +import com.fasterxml.jackson.databind.node.ObjectNode; import org.apache.commons.beanutils.PropertyUtils; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.math.NumberUtils; @@ -90,9 +68,29 @@ import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.util.HtmlUtils; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.JsonNodeFactory; -import com.fasterxml.jackson.databind.node.ObjectNode; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.math.BigInteger; +import java.net.URLDecoder; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.SortedSet; +import java.util.TreeSet; +import java.util.stream.Collectors; /** * @author Andrey Balan @@ -208,6 +206,9 @@ boolean aiEnabled = Configuration.isLamsModuleAvailable(Configuration.AI_MODULE_CLASS); sessionMap.put(AttributeNames.ATTR_IS_AI_ENABLED, aiEnabled); + boolean hasMatchingRatActivity = lamsToolService.findMatchingRatActivity(contentId) != null; + sessionMap.put(AssessmentConstants.ATTR_HAS_MATCHING_RAT_ACTIVITY, hasMatchingRatActivity); + Hibernate.initialize(assessment.getSections()); return "pages/authoring/start"; @@ -238,7 +239,7 @@ @SuppressWarnings("unchecked") @RequestMapping(path = "/updateContent", method = RequestMethod.POST) public String updateContent(@ModelAttribute("assessmentForm") AssessmentForm assessmentForm, - HttpServletRequest request) throws Exception { + @RequestParam(required = false) boolean syncRatQuestions, HttpServletRequest request) throws Exception { // get back sessionMAP SessionMap sessionMap = (SessionMap) request.getSession() .getAttribute(assessmentForm.getSessionMapID()); @@ -427,9 +428,11 @@ } } - List newQuestionUids = assessmentPO.getQuestionReferences().stream() - .collect(Collectors.mapping(q -> q.getQuestion().getQbQuestion().getUid(), Collectors.toList())); - lamsToolService.syncRatQuestions(assessmentPO.getContentId(), newQuestionUids); + if (syncRatQuestions) { + List newQuestionUids = assessmentPO.getQuestionReferences().stream() + .collect(Collectors.mapping(q -> q.getQuestion().getQbQuestion().getUid(), Collectors.toList())); + lamsToolService.syncRatQuestions(assessmentPO.getContentId(), newQuestionUids); + } request.setAttribute(CommonConstants.LAMS_AUTHORING_SUCCESS_FLAG, Boolean.TRUE); request.setAttribute(AssessmentConstants.ATTR_SESSION_MAP_ID, sessionMap.getSessionID()); Index: lams_tool_assessment/web/pages/authoring/authoring.jsp =================================================================== diff -u -rcfd463431d2171b40403dcff2508408e72685c0e -r7521e0cd5b5f4b01d188ca0ddad1e5f59d3bde27 --- lams_tool_assessment/web/pages/authoring/authoring.jsp (.../authoring.jsp) (revision cfd463431d2171b40403dcff2508408e72685c0e) +++ lams_tool_assessment/web/pages/authoring/authoring.jsp (.../authoring.jsp) (revision 7521e0cd5b5f4b01d188ca0ddad1e5f59d3bde27) @@ -12,7 +12,10 @@ @@ -90,6 +96,7 @@ + @@ -133,4 +140,4 @@ - + \ No newline at end of file Index: lams_tool_scratchie/web/pages/authoring/basic.jsp =================================================================== diff -u -r79123cc650a4028c6dfa0e931d9a074b07234be3 -r7521e0cd5b5f4b01d188ca0ddad1e5f59d3bde27 --- lams_tool_scratchie/web/pages/authoring/basic.jsp (.../basic.jsp) (revision 79123cc650a4028c6dfa0e931d9a074b07234be3) +++ lams_tool_scratchie/web/pages/authoring/basic.jsp (.../basic.jsp) (revision 7521e0cd5b5f4b01d188ca0ddad1e5f59d3bde27) @@ -18,6 +18,7 @@ toolContentId: ${sessionMap.toolContentID} }, function() { + questionsEdited = true; $(this).removeClass("contains-nothing"); } ); @@ -29,6 +30,7 @@ var deletionConfirmed = confirm(""); if (deletionConfirmed) { + questionsEdited = true; var url = "?"; $(itemTargetDiv).load( url, @@ -48,6 +50,7 @@ if (oldQbQuestionUid == newQbQuestionUid) { return; } + questionsEdited = true; var url = ""; $(itemTargetDiv).load( @@ -75,6 +78,7 @@ } function initNewItemHref() { + questionsEdited = true; var itemTypeDropdown = document.getElementById("item-type"); var itemType = itemTypeDropdown.value; @@ -95,6 +99,7 @@ // this method is called by QTI questionChoice.jsp function saveQTI(formHTML, formName) { + questionsEdited = true; var form = $($.parseHTML(formHTML)); // first, save questions in the QB $.ajax({ @@ -180,4 +185,4 @@ - + \ No newline at end of file Index: lams_tool_scratchie/web/pages/authoring/parts/itemlist.jsp =================================================================== diff -u -r79123cc650a4028c6dfa0e931d9a074b07234be3 -r7521e0cd5b5f4b01d188ca0ddad1e5f59d3bde27 --- lams_tool_scratchie/web/pages/authoring/parts/itemlist.jsp (.../itemlist.jsp) (revision 79123cc650a4028c6dfa0e931d9a074b07234be3) +++ lams_tool_scratchie/web/pages/authoring/parts/itemlist.jsp (.../itemlist.jsp) (revision 7521e0cd5b5f4b01d188ca0ddad1e5f59d3bde27) @@ -37,6 +37,7 @@ break; } if (qbMessage) { + questionsEdited = true; alert(qbMessage); } @@ -50,6 +51,7 @@ direction: 'vertical', store: { set: function (sortable) { + questionsEdited = true; //update all sequenceIds for (var i = 0; i < sortable.el.rows.length; i++) { var tr = sortable.el.rows[i]; @@ -190,4 +192,4 @@ - + \ No newline at end of file