Index: lams_common/src/java/org/lamsfoundation/lams/dbupdates/patch20190722.sql =================================================================== diff -u -r4e7112f26061bd5120444ea3eb1517acd1c3b88a -r9b18dabfc4198e4a842adda25a39957b6c4be92e --- lams_common/src/java/org/lamsfoundation/lams/dbupdates/patch20190722.sql (.../patch20190722.sql) (revision 4e7112f26061bd5120444ea3eb1517acd1c3b88a) +++ lams_common/src/java/org/lamsfoundation/lams/dbupdates/patch20190722.sql (.../patch20190722.sql) (revision 9b18dabfc4198e4a842adda25a39957b6c4be92e) @@ -616,7 +616,7 @@ -- fill table with options matching unique QB questions inserted above INSERT INTO lams_qb_option (qb_question_uid, display_order, name, matching_pair, numerical_option, max_mark, accepted_error, feedback) SELECT q.uid, o.sequence_id, IFNULL(o.option_string, ''), o.question, o.option_float, - o.grade, o.accepted_error, o.feedback + IF(o.correct = 1, 1, o.grade), o.accepted_error, o.feedback FROM tl_laasse10_question_option AS o JOIN lams_qb_question AS q ON o.question_uid = q.tmp_question_id Index: lams_common/src/java/org/lamsfoundation/lams/qb/model/QbQuestion.java =================================================================== diff -u -r45f55e8dd35ae8841dbc8db3f38a41d9d52fd2ca -r9b18dabfc4198e4a842adda25a39957b6c4be92e --- lams_common/src/java/org/lamsfoundation/lams/qb/model/QbQuestion.java (.../QbQuestion.java) (revision 45f55e8dd35ae8841dbc8db3f38a41d9d52fd2ca) +++ lams_common/src/java/org/lamsfoundation/lams/qb/model/QbQuestion.java (.../QbQuestion.java) (revision 9b18dabfc4198e4a842adda25a39957b6c4be92e) @@ -50,7 +50,7 @@ @Column @GeneratedValue(strategy = GenerationType.IDENTITY) private Long uid; - + @Column private UUID uuid; @@ -135,11 +135,11 @@ @Column(name = "hedging_justification_enabled") private boolean hedgingJustificationEnabled; - @OneToMany(mappedBy = "qbQuestion", fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true) + @OneToMany(mappedBy = "qbQuestion", fetch = FetchType.EAGER, cascade = CascadeType.ALL) @Fetch(FetchMode.SUBSELECT) private List qbOptions = new ArrayList<>(); - @OneToMany(mappedBy = "qbQuestion", fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true) + @OneToMany(mappedBy = "qbQuestion", fetch = FetchType.EAGER, cascade = CascadeType.ALL) @Fetch(FetchMode.SUBSELECT) private List units = new ArrayList<>(); @@ -248,7 +248,7 @@ public Long getUid() { return uid; } - + public UUID getUuid() { return uuid; } Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentImportContentVersionFilter.java =================================================================== diff -u -r846fd5c0307ebedc923d937f6dbe9a614b746e2e -r9b18dabfc4198e4a842adda25a39957b6c4be92e --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentImportContentVersionFilter.java (.../AssessmentImportContentVersionFilter.java) (revision 846fd5c0307ebedc923d937f6dbe9a614b746e2e) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentImportContentVersionFilter.java (.../AssessmentImportContentVersionFilter.java) (revision 9b18dabfc4198e4a842adda25a39957b6c4be92e) @@ -169,6 +169,9 @@ XMLUtil.rewriteTextElement(assessmentQuestion, qbQuestion, "hedgingJustificationEnabled", "hedgingJustificationEnabled", "false", false, true); + // get rid of junk + XMLUtil.removeElement(assessmentQuestion, "questionHash"); + // now it's time for options NodeList assessmentOptions = assessmentQuestion .getElementsByTagName("org.lamsfoundation.lams.tool.assessment.model.AssessmentQuestionOption"); @@ -205,15 +208,49 @@ sequenceId++; } XMLUtil.rewriteTextElement(assessmentOption, qbOption, "sequenceId", "displayOrder", - String.valueOf(sequenceId), false, true); - XMLUtil.rewriteTextElement(assessmentOption, qbOption, "grade", "maxMark", "1", false, true); - XMLUtil.rewriteTextElement(assessmentOption, qbOption, "optionString", "name", null, false, true, + String.valueOf(sequenceId)); + String correct = XMLUtil.getChildElementValue(assessmentOption, "correct", "false"); + if (Boolean.TRUE.toString().equalsIgnoreCase(correct)) { + XMLUtil.addTextElement(qbOption, "maxMark", "1.0"); + } else { + XMLUtil.rewriteTextElement(assessmentOption, qbOption, "grade", "maxMark", "0"); + } + XMLUtil.rewriteTextElement(assessmentOption, qbOption, "optionString", "name", null, false, false, QbUtils.QB_MIGRATION_CKEDITOR_CLEANER); + XMLUtil.rewriteTextElement(assessmentOption, qbOption, "feedback", "feedback", null); + XMLUtil.rewriteTextElement(assessmentOption, qbOption, "question", "matchingPair", null, false, + false, QbUtils.QB_MIGRATION_CKEDITOR_CLEANER); + XMLUtil.rewriteTextElement(assessmentOption, qbOption, "acceptedError", "acceptedError", null); + XMLUtil.rewriteTextElement(assessmentOption, qbOption, "optionFloat", "numericalOption", null); } // get rid of junk assessmentQuestion.removeChild(assessmentOptions.item(0).getParentNode()); XMLUtil.removeElement(assessmentQuestion, "questionHash"); + + // now rewrite units + NodeList assessmentUnits = assessmentQuestion + .getElementsByTagName("org.lamsfoundation.lams.tool.assessment.model.AssessmentUnit"); + if (assessmentUnits.getLength() == 0) { + continue; + } + + Element qbUnits = document.createElement("units"); + qbQuestion.appendChild(qbUnits); + + for (int assessmentUnitIndex = 0; assessmentUnitIndex < assessmentUnits + .getLength(); assessmentUnitIndex++) { + Element assessmentUnit = (Element) assessmentUnits.item(assessmentUnitIndex); + Element qbUnit = document.createElement("org.lamsfoundation.lams.qb.model.QbQuestionUnit"); + qbUnits.appendChild(qbUnit); + + XMLUtil.rewriteTextElement(assessmentUnit, assessmentUnit, "sequenceId", "displayOrder", null); + XMLUtil.rewriteTextElement(assessmentUnit, assessmentUnit, "unit", "name", null); + XMLUtil.rewriteTextElement(assessmentUnit, assessmentUnit, "multiplier", "multiplier", null); + } + + // remove old units section from the legacy assessment question + assessmentQuestion.removeChild(assessmentUnits.item(0).getParentNode()); } // now rewrite question references @@ -228,6 +265,12 @@ Element questionReference = (Element) questionReferences.item(questionReferenceIndex); XMLUtil.rewriteTextElement(questionReference, questionReference, "defaultGrade", "maxMark", "1", false, true); + + // question reference type gets removed, if it exists + List type = XMLUtil.findChildren(questionReference, "type"); + if (!type.isEmpty()) { + questionReference.removeChild(type.get(0)); + } } }); } Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java =================================================================== diff -u -r846fd5c0307ebedc923d937f6dbe9a614b746e2e -r9b18dabfc4198e4a842adda25a39957b6c4be92e --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 846fd5c0307ebedc923d937f6dbe9a614b746e2e) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 9b18dabfc4198e4a842adda25a39957b6c4be92e) @@ -2652,15 +2652,27 @@ Collection qbOptions = new ArrayList<>(qbQuestion.getQbOptions()); qbQuestion.getQbOptions().clear(); - assessmentDao.insert(qbQuestion); + Collection units = qbQuestion.getUnits(); + qbQuestion.getUnits().clear(); + assessmentDao.insert(qbQuestion); + + qbQuestion.getUnits().addAll(units); + for (QbQuestionUnit unit : units) { + unit.setQbQuestion(qbQuestion); + assessmentDao.insert(units); + } + units.clear(); + qbQuestion.getQbOptions().addAll(qbOptions); for (QbOption qbOption : qbOptions) { qbOption.setQbQuestion(qbQuestion); assessmentDao.insert(qbOption); } qbOptions.clear(); + + assessmentDao.insert(assessmentQuestion); } Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McImportContentVersionFilter.java =================================================================== diff -u -r89eb8824370b9646254df13f34e4c1ad0ff330cb -r9b18dabfc4198e4a842adda25a39957b6c4be92e --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McImportContentVersionFilter.java (.../McImportContentVersionFilter.java) (revision 89eb8824370b9646254df13f34e4c1ad0ff330cb) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McImportContentVersionFilter.java (.../McImportContentVersionFilter.java) (revision 9b18dabfc4198e4a842adda25a39957b6c4be92e) @@ -135,11 +135,9 @@ .valueOf(XMLUtil.getChildElementValue(mcOption, "correctOption", "false")); XMLUtil.addTextElement(qbOption, "maxMark", correctOption ? "1" : "0"); - maxDisplayOrder = Math.max( - Integer.valueOf(XMLUtil.rewriteTextElement(mcOption, qbOption, "displayOrder", - "displayOrder", String.valueOf(maxDisplayOrder + 1), false, true)), - maxDisplayOrder); - XMLUtil.rewriteTextElement(mcOption, qbOption, "mcQueOptionText", "name", null, false, true, + maxDisplayOrder = Math.max(Integer.valueOf(XMLUtil.rewriteTextElement(mcOption, qbOption, + "displayOrder", "displayOrder", String.valueOf(maxDisplayOrder + 1))), maxDisplayOrder); + XMLUtil.rewriteTextElement(mcOption, qbOption, "mcQueOptionText", "name", null, false, false, QbUtils.QB_MIGRATION_CKEDITOR_CLEANER); } Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieImportContentVersionFilter.java =================================================================== diff -u -r846fd5c0307ebedc923d937f6dbe9a614b746e2e -r9b18dabfc4198e4a842adda25a39957b6c4be92e --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieImportContentVersionFilter.java (.../ScratchieImportContentVersionFilter.java) (revision 846fd5c0307ebedc923d937f6dbe9a614b746e2e) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieImportContentVersionFilter.java (.../ScratchieImportContentVersionFilter.java) (revision 9b18dabfc4198e4a842adda25a39957b6c4be92e) @@ -149,12 +149,10 @@ .valueOf(XMLUtil.getChildElementValue(scratchieOption, "correct", "false")); XMLUtil.addTextElement(qbOption, "maxMark", correctOption ? "1" : "0"); - maxDisplayOrder = Math.max( - Integer.valueOf(XMLUtil.rewriteTextElement(scratchieOption, qbOption, "orderId", - "displayOrder", String.valueOf(maxDisplayOrder + 1), false, true)), - maxDisplayOrder); + maxDisplayOrder = Math.max(Integer.valueOf(XMLUtil.rewriteTextElement(scratchieOption, qbOption, + "orderId", "displayOrder", String.valueOf(maxDisplayOrder + 1))), maxDisplayOrder); - XMLUtil.rewriteTextElement(scratchieOption, qbOption, "description", "name", null, false, true, + XMLUtil.rewriteTextElement(scratchieOption, qbOption, "description", "name", null, false, false, QbUtils.QB_MIGRATION_CKEDITOR_CLEANER); }