Index: lams_central/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -r7067bfdadf476c8032a38071ec7d431bb87dd281 -r9846a1d61f34b45ba6db0e6a7daf2a620e607c83 --- lams_central/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 7067bfdadf476c8032a38071ec7d431bb87dd281) +++ lams_central/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 9846a1d61f34b45ba6db0e6a7daf2a620e607c83) @@ -335,6 +335,7 @@ label.questions.choice.title =Choose questions label.questions.choice.select.all =Select all label.questions.choice.missing =Please check at least one question. +label.questions.choice.collection =Choose a collection: index.single.activity.lesson.title =Add single activity lesson index.single.activity.lesson.desc =or one-click activity: label.disable.lesson.sorting =Disable lesson sorting Index: lams_central/src/java/org/lamsfoundation/lams/web/QuestionsController.java =================================================================== diff -u -r3f18890e24de43c31ac23d49e2c1a4906e479863 -r9846a1d61f34b45ba6db0e6a7daf2a620e607c83 --- lams_central/src/java/org/lamsfoundation/lams/web/QuestionsController.java (.../QuestionsController.java) (revision 3f18890e24de43c31ac23d49e2c1a4906e479863) +++ lams_central/src/java/org/lamsfoundation/lams/web/QuestionsController.java (.../QuestionsController.java) (revision 9846a1d61f34b45ba6db0e6a7daf2a620e607c83) @@ -7,13 +7,18 @@ import java.util.TreeSet; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; import org.apache.commons.lang.StringUtils; +import org.lamsfoundation.lams.qb.service.IQbService; import org.lamsfoundation.lams.questions.Question; import org.lamsfoundation.lams.questions.QuestionParser; +import org.lamsfoundation.lams.usermanagement.dto.UserDTO; import org.lamsfoundation.lams.util.Configuration; import org.lamsfoundation.lams.util.ConfigurationKeys; import org.lamsfoundation.lams.util.MessageService; +import org.lamsfoundation.lams.web.session.SessionManager; +import org.lamsfoundation.lams.web.util.AttributeNames; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Controller; @@ -31,11 +36,15 @@ @Autowired @Qualifier("centralMessageService") - MessageService messageService; + private MessageService messageService; + @Autowired + private IQbService qbService; + @RequestMapping("/questions") public String execute(@RequestParam(name = "file", required = false) MultipartFile file, - @RequestParam String returnURL, @RequestParam("limitType") String limitTypeParam, @RequestParam String callerID, + @RequestParam String returnURL, @RequestParam("limitType") String limitTypeParam, + @RequestParam String callerID, @RequestParam(defaultValue = "false") boolean collectionChoice, HttpServletRequest request) throws Exception { String tempDirName = Configuration.get(ConfigurationKeys.LAMS_TEMP_DIR); @@ -56,11 +65,15 @@ // this parameter is used by the authoring templates. TBL uses QTI import for both the Questions and Assessments tab request.setAttribute("callerID", callerID); - - + // show only chosen types of questions request.setAttribute("limitType", limitTypeParam); + if (collectionChoice) { + // in the view a drop down with collections will be displayed + request.setAttribute("collections", qbService.getUserCollections(QuestionsController.getUserId())); + } + // user did not choose a file if ((uploadedFileStream == null) || !(packageName.endsWith(".zip") || packageName.endsWith(".xml"))) { MultiValueMap errorMap = new LinkedMultiValueMap<>(); @@ -83,4 +96,10 @@ return "questions/questionChoice"; } + + private static Integer getUserId() { + HttpSession ss = SessionManager.getSession(); + UserDTO user = (UserDTO) ss.getAttribute(AttributeNames.USER); + return user != null ? user.getUserID() : null; + } } \ No newline at end of file Index: lams_central/src/java/org/lamsfoundation/lams/web/qb/ImsQtiController.java =================================================================== diff -u -r59012f90b43cd586fcf9c6330ebd1f20435811c8 -r9846a1d61f34b45ba6db0e6a7daf2a620e607c83 --- lams_central/src/java/org/lamsfoundation/lams/web/qb/ImsQtiController.java (.../ImsQtiController.java) (revision 59012f90b43cd586fcf9c6330ebd1f20435811c8) +++ lams_central/src/java/org/lamsfoundation/lams/web/qb/ImsQtiController.java (.../ImsQtiController.java) (revision 9846a1d61f34b45ba6db0e6a7daf2a620e607c83) @@ -55,13 +55,14 @@ /** * Parses questions extracted from IMS QTI file and adds them as new QB questions. */ - @RequestMapping("/saveQTI") + @RequestMapping(path = "/saveQTI", produces = "text/plain") @ResponseBody - public void saveQTI(HttpServletRequest request, @RequestParam long collectionUid, - @RequestParam String contentFolderID) throws UnsupportedEncodingException { + public String saveQTI(HttpServletRequest request, @RequestParam long collectionUid, + @RequestParam(defaultValue = "") String contentFolderID) throws UnsupportedEncodingException { Question[] questions = QuestionParser.parseQuestionChoiceForm(request); Set collectionUUIDs = null; + StringBuilder qbQuestionUidsString = new StringBuilder(); for (Question question : questions) { @@ -335,10 +336,20 @@ qbService.addQuestionToCollection(collectionUid, qbQuestion.getQuestionId(), false); + qbQuestionUidsString.append(qbQuestion.getQuestionId()).append(','); + if (log.isDebugEnabled()) { log.debug("Imported QTI question. Name: " + qbQuestion.getName() + ", uid: " + qbQuestion.getUid()); } } + + String qbQuestionUids = null; + if (qbQuestionUidsString.length() > 0 && qbQuestionUidsString.charAt(qbQuestionUidsString.length() - 1) == ',') { + qbQuestionUids = qbQuestionUidsString.substring(0, qbQuestionUidsString.length() - 1); + } else { + qbQuestionUids = qbQuestionUidsString.toString(); + } + return qbQuestionUids; } /** Index: lams_central/web/qb/collection.jsp =================================================================== diff -u -r0b3c5ce0f18b9e4a4195dc8144dc02784c6e3997 -r9846a1d61f34b45ba6db0e6a7daf2a620e607c83 --- lams_central/web/qb/collection.jsp (.../collection.jsp) (revision 0b3c5ce0f18b9e4a4195dc8144dc02784c6e3997) +++ lams_central/web/qb/collection.jsp (.../collection.jsp) (revision 9846a1d61f34b45ba6db0e6a7daf2a620e607c83) @@ -376,7 +376,7 @@ var form = $($.parseHTML(formHTML)); $.ajax({ type: "POST", - url: '?contentFolderID=${contentFolderID}&collectionUid=${collection.uid}', + url: '?collectionUid=${collection.uid}', data: form.serializeArray(), success: function() { location.reload(); Index: lams_central/web/questions/questionChoice.jsp =================================================================== diff -u -ra9f95a26e562a58b55c99f2c18e253c151ef457a -r9846a1d61f34b45ba6db0e6a7daf2a620e607c83 --- lams_central/web/questions/questionChoice.jsp (.../questionChoice.jsp) (revision a9f95a26e562a58b55c99f2c18e253c151ef457a) +++ lams_central/web/questions/questionChoice.jsp (.../questionChoice.jsp) (revision 9846a1d61f34b45ba6db0e6a7daf2a620e607c83) @@ -42,6 +42,10 @@ div#errorArea { display: none; } + + #collectionSelect { + float: right; + } Index: lams_tool_lamc/web/authoring/itemlist.jsp =================================================================== diff -u -ra9f95a26e562a58b55c99f2c18e253c151ef457a -r9846a1d61f34b45ba6db0e6a7daf2a620e607c83 --- lams_tool_lamc/web/authoring/itemlist.jsp (.../itemlist.jsp) (revision a9f95a26e562a58b55c99f2c18e253c151ef457a) +++ lams_tool_lamc/web/authoring/itemlist.jsp (.../itemlist.jsp) (revision 9846a1d61f34b45ba6db0e6a7daf2a620e607c83) @@ -36,9 +36,6 @@ - - -