Index: lams_central/src/java/org/lamsfoundation/lams/authoring/template/Assessment.java =================================================================== diff -u -r4c5a620700d152367d81a3ad8cf1d0f0b94f86ac -r8be457696d7f17c6da2e89704fe7e128f1f8ea91 --- lams_central/src/java/org/lamsfoundation/lams/authoring/template/Assessment.java (.../Assessment.java) (revision 4c5a620700d152367d81a3ad8cf1d0f0b94f86ac) +++ lams_central/src/java/org/lamsfoundation/lams/authoring/template/Assessment.java (.../Assessment.java) (revision 8be457696d7f17c6da2e89704fe7e128f1f8ea91) @@ -24,9 +24,11 @@ package org.lamsfoundation.lams.authoring.template; import java.text.MessageFormat; -import java.util.LinkedList; +import java.util.Comparator; import java.util.List; import java.util.ResourceBundle; +import java.util.Set; +import java.util.TreeSet; import org.lamsfoundation.lams.rest.RestTags; @@ -53,13 +55,14 @@ Boolean required = false; int defaultGrade = 1; boolean multipleAnswersAllowed = false; // only used if type == 1 - List answers = null; // only used if type == 1 + Set answers = null; // only used if type == 1 String uuid = null; // used when QTI gets imported and it contains QB question UUID public void setType(short type) { this.type = type; if (type == 1 && this.answers == null) { - this.answers = new LinkedList<>(); + // JSP template pages expect this list to be in correct order + this.answers = new TreeSet<>(Comparator.comparingInt(AssessMCAnswer::getSequenceId)); } } @@ -107,7 +110,7 @@ this.defaultGrade = defaultGrade; } - public List getAnswers() { + public Set getAnswers() { return answers; } Index: lams_central/src/java/org/lamsfoundation/lams/authoring/template/web/LdTemplateController.java =================================================================== diff -u -rf6f3e50bca627b971bbd84d4aa341d3ea37890e2 -r8be457696d7f17c6da2e89704fe7e128f1f8ea91 --- lams_central/src/java/org/lamsfoundation/lams/authoring/template/web/LdTemplateController.java (.../LdTemplateController.java) (revision f6f3e50bca627b971bbd84d4aa341d3ea37890e2) +++ lams_central/src/java/org/lamsfoundation/lams/authoring/template/web/LdTemplateController.java (.../LdTemplateController.java) (revision 8be457696d7f17c6da2e89704fe7e128f1f8ea91) @@ -1375,11 +1375,16 @@ request.setAttribute("containingDivName", WebUtil.readStrParam(request, "containingDivName", true)); String questionType = WebUtil.readStrParam(request, "questionType"); - if (questionType == null || !questionType.equalsIgnoreCase("mcq")) { - return "/authoring/template/tool/assessment"; - } else { - return "authoring/template/tool/assessmcq"; + if (questionType != null) { + if (questionType.equalsIgnoreCase("essay")) { + return "authoring/template/tool/assessmcq"; + } + // if it is a import from Question Bank, we need to do further processing + if (questionType.equalsIgnoreCase("importQbAe")) { + return "forward:importQbAe.do"; + } } + return "/authoring/template/tool/assessmcq"; } @@ -1399,18 +1404,50 @@ /** * Gets a QB question based on its UID and creates a structure for template wizard JSP. */ - @RequestMapping("/importQb") - private String importQuestionFromQb(@RequestParam long qbQuestionUid, @RequestParam int questionNumber, Model model) + @RequestMapping("/importQbAe") + private String importAeQuestionFromQb(@RequestParam long qbQuestionUid, Model model) throws UnsupportedEncodingException { QbQuestion qbQuestion = qbService.getQuestionByUid(qbQuestionUid); Assessment question = new Assessment(); + question.setType(qbQuestion.getType().shortValue()); + question.setTitle(qbQuestion.getName()); + question.setText(qbQuestion.getDescription()); + question.setMultipleAnswersAllowed(qbQuestion.isMultipleAnswersAllowed()); + question.setRequired(qbQuestion.isAnswerRequired()); + question.setDefaultGrade(qbQuestion.getMaxMark()); + question.setUuid(qbQuestion.getUuid().toString()); + + model.addAttribute(AttributeNames.PARAM_CONTENT_FOLDER_ID, qbQuestion.getContentFolderId()); + model.addAttribute("question", question); + + if (question.getType() == Assessment.ASSESSMENT_QUESTION_TYPE_MULTIPLE_CHOICE) { + Set answers = question.getAnswers(); + for (QbOption qbOption : qbQuestion.getQbOptions()) { + AssessMCAnswer answer = new AssessMCAnswer(qbOption.getDisplayOrder(), qbOption.getName(), + qbOption.getMaxMark()); + answers.add(answer); + } + return "/authoring/template/tool/assessmcq"; + } + return "/authoring/template/tool/assessment"; + } + + /** + * Gets a QB question based on its UID and creates a structure for template wizard JSP. + */ + @RequestMapping("/importQbIra") + private String importIraQuestionFromQb(@RequestParam long qbQuestionUid, @RequestParam int questionNumber, + Model model) throws UnsupportedEncodingException { + QbQuestion qbQuestion = qbService.getQuestionByUid(qbQuestionUid); + + Assessment question = new Assessment(); question.setType(Assessment.ASSESSMENT_QUESTION_TYPE_MULTIPLE_CHOICE); question.setTitle(qbQuestion.getName()); question.setText(qbQuestion.getDescription()); question.setUuid(qbQuestion.getUuid().toString()); - List answers = question.getAnswers(); + Set answers = question.getAnswers(); for (QbOption qbOption : qbQuestion.getQbOptions()) { AssessMCAnswer answer = new AssessMCAnswer(qbOption.getDisplayOrder(), qbOption.getName(), qbOption.getMaxMark()); @@ -1566,9 +1603,9 @@ case ("peerreviewstar"): path = "authoring/template/tool/peerreviewstar"; break; - case ("importQb"): + case ("importQbIra"): // further processing in another action method - path = "forward:importQb.do"; + path = "forward:importQbIra.do"; break; default: path = null; Index: lams_central/web/authoring/template/comms.jsp =================================================================== diff -u -re137553ae8df8ba48da568c79e4deea0f5380d29 -r8be457696d7f17c6da2e89704fe7e128f1f8ea91 --- lams_central/web/authoring/template/comms.jsp (.../comms.jsp) (revision e137553ae8df8ba48da568c79e4deea0f5380d29) +++ lams_central/web/authoring/template/comms.jsp (.../comms.jsp) (revision 8be457696d7f17c6da2e89704fe7e128f1f8ea91) @@ -141,7 +141,7 @@ window.open(url,'QuestionFile','width=500,height=240,scrollbars=yes,top=150,left=' + left); } - function createAssessment(questionType, numAssessmentsFieldname, containingDivName ) { + function createAssessment(questionType, numAssessmentsFieldname, containingDivName, qbQuestionUid) { var numAssessments = $('#'+numAssessmentsFieldname); var type = questionType ? questionType : 'essay'; var currNum = numAssessments.val(); @@ -150,6 +150,9 @@ newDiv.id = containingDivName+'divassess'+nextNum; newDiv.className = 'space-top space-sides'; var url=getSubmissionURL()+"/createAssessment.do?questionNumber="+nextNum+"&questionType="+type+"&containingDivName="+containingDivName; + if (qbQuestionUid) { + url += '&qbQuestionUid=' + qbQuestionUid; + } $('#'+containingDivName).append(newDiv); $.ajaxSetup({ cache: true }); $(newDiv).load(url, function( response, status, xhr ) { Index: lams_central/web/authoring/template/tbl/appex.jsp =================================================================== diff -u -r4c2d1f37b92435907ec4ce23cb635a7cd9e4161e -r8be457696d7f17c6da2e89704fe7e128f1f8ea91 --- lams_central/web/authoring/template/tbl/appex.jsp (.../appex.jsp) (revision 4c2d1f37b92435907ec4ce23cb635a7cd9e4161e) +++ lams_central/web/authoring/template/tbl/appex.jsp (.../appex.jsp) (revision 8be457696d7f17c6da2e89704fe7e128f1f8ea91) @@ -30,6 +30,9 @@
+ + +
@@ -41,6 +44,23 @@
+ + +
+
+
+ + + + + +
+ +
+ +
+
+