Index: lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/ResourceConstants.java =================================================================== diff -u -rba64868d96bcde6a6de9afca8b58a32bd25085ff -raa971e902329c8ae01eae531db29bbc1a595f4ff --- lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/ResourceConstants.java (.../ResourceConstants.java) (revision ba64868d96bcde6a6de9afca8b58a32bd25085ff) +++ lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/ResourceConstants.java (.../ResourceConstants.java) (revision aa971e902329c8ae01eae531db29bbc1a595f4ff) @@ -74,8 +74,6 @@ public static final String ATTR_TOOL_SESSION_ID = "toolSessionID"; - public static final String ATTR_INSTRUCTION_LIST = "instructionList"; - public static final String ATTR_RESOURCE_ITEM_LIST = "resourceList"; public static final String ATTR_DELETED_RESOURCE_ITEM_LIST = "deleteResourceList"; @@ -87,7 +85,7 @@ public static final String ATTR_RESOURCE_REVIEW_URL = "resourceItemReviewUrl"; public static final String ATTR_ENCODED_RESOURCE_REVIEW_URL = "encodedResourceItemReviewUrl"; - + public static final String ATTR_IS_DOWNLOAD = "isDownload"; public static final String ATTR_RESOURCE = "resource"; Index: lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/dbupdates/patch20220217.sql =================================================================== diff -u --- lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/dbupdates/patch20220217.sql (revision 0) +++ lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/dbupdates/patch20220217.sql (revision aa971e902329c8ae01eae531db29bbc1a595f4ff) @@ -0,0 +1,21 @@ +-- Turn off autocommit, so nothing is committed if there is an error +SET AUTOCOMMIT = 0; +SET FOREIGN_KEY_CHECKS=0; +-- Put all sql statements below here + +-- LDEV-5287 Use a single instructions field instead of multiple ones +ALTER TABLE tl_larsrc11_resource_item CHANGE COLUMN description instructions TEXT; + +UPDATE tl_larsrc11_resource_item AS r JOIN + (SELECT item_uid, GROUP_CONCAT(description ORDER BY sequence_id SEPARATOR '

') AS merged_instructions FROM tl_larsrc11_item_instruction GROUP BY item_uid) + AS i ON r.uid = i.item_uid +SET r.instructions = CONCAT(IF(r.instructions IS NULL OR TRIM(r.instructions) = '', '', CONCAT(TRIM(r.instructions), '

')), i.merged_instructions); + +DROP TABLE tl_larsrc11_item_instruction; + +-- Put all sql statements above here + +-- If there were no errors, commit and restore autocommit to on +COMMIT; +SET AUTOCOMMIT = 1; +SET FOREIGN_KEY_CHECKS=1; Fisheye: Tag aa971e902329c8ae01eae531db29bbc1a595f4ff refers to a dead (removed) revision in file `lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/dto/InstructionNavDTO.java'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/dto/ResourceItemDTO.java =================================================================== diff -u -r3c3cfdd84fb32ca1bb3c1455f9f75c9f6fb1b57c -raa971e902329c8ae01eae531db29bbc1a595f4ff --- lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/dto/ResourceItemDTO.java (.../ResourceItemDTO.java) (revision 3c3cfdd84fb32ca1bb3c1455f9f75c9f6fb1b57c) +++ lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/dto/ResourceItemDTO.java (.../ResourceItemDTO.java) (revision aa971e902329c8ae01eae531db29bbc1a595f4ff) @@ -23,9 +23,6 @@ package org.lamsfoundation.lams.tool.rsrc.dto; -import java.util.ArrayList; -import java.util.List; - import org.lamsfoundation.lams.rating.dto.ItemRatingDTO; import org.lamsfoundation.lams.tool.rsrc.model.ResourceItem; import org.lamsfoundation.lams.tool.rsrc.model.ResourceUser; @@ -50,7 +47,6 @@ private boolean itemCreateByAuthor; private boolean itemHide; private String itemTitle; - private List itemInstructions = new ArrayList<>(); private String username; private int viewNumber; private boolean allowRating; @@ -155,14 +151,6 @@ this.isInitGroup = isInitGroup; } - public List getItemInstructions() { - return itemInstructions; - } - - public void setItemInstructions(List itemInstructions) { - this.itemInstructions = itemInstructions; - } - public ItemRatingDTO getRatingDTO() { return ratingDTO; } Index: lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/model/ResourceItem.java =================================================================== diff -u -rba64868d96bcde6a6de9afca8b58a32bd25085ff -raa971e902329c8ae01eae531db29bbc1a595f4ff --- lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/model/ResourceItem.java (.../ResourceItem.java) (revision ba64868d96bcde6a6de9afca8b58a32bd25085ff) +++ lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/model/ResourceItem.java (.../ResourceItem.java) (revision aa971e902329c8ae01eae531db29bbc1a595f4ff) @@ -24,11 +24,7 @@ package org.lamsfoundation.lams.tool.rsrc.model; import java.util.Date; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Set; -import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; @@ -37,8 +33,6 @@ import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; -import javax.persistence.OneToMany; -import javax.persistence.OrderBy; import javax.persistence.Table; import javax.persistence.Transient; @@ -69,7 +63,7 @@ private String title; @Column - private String description; + private String instructions; @Column private String url; @@ -95,11 +89,6 @@ @Column(name = "file_type") private String fileType; - @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true) - @OrderBy("sequence_id ASC") - @JoinColumn(name = "item_uid") - private Set itemInstructions = new HashSet<>(); - @Column(name = "order_id") private Integer orderId; @@ -133,17 +122,6 @@ ResourceItem obj = null; try { obj = (ResourceItem) super.clone(); - // clone attachment - if (itemInstructions != null) { - Iterator iter = itemInstructions.iterator(); - Set set = new HashSet<>(); - while (iter.hasNext()) { - ResourceItemInstruction instruct = iter.next(); - ResourceItemInstruction newInsruct = (ResourceItemInstruction) instruct.clone(); - set.add(newInsruct); - } - obj.itemInstructions = set; - } obj.setUid(null); // clone ReourceUser as well if (this.createBy != null) { @@ -185,12 +163,12 @@ this.fileVersionId = crVersionId; } - public String getDescription() { - return description; + public String getInstructions() { + return instructions; } - public void setDescription(String description) { - this.description = description; + public void setInstructions(String description) { + this.instructions = description; } public String getImsSchema() { @@ -209,14 +187,6 @@ this.initialItem = initialItem; } - public Set getItemInstructions() { - return itemInstructions; - } - - public void setItemInstructions(Set itemInstructions) { - this.itemInstructions = itemInstructions; - } - public String getOrganizationXml() { return organizationXml; } Fisheye: Tag aa971e902329c8ae01eae531db29bbc1a595f4ff refers to a dead (removed) revision in file `lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/model/ResourceItemInstruction.java'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/service/ResourceServiceImpl.java =================================================================== diff -u -rba64868d96bcde6a6de9afca8b58a32bd25085ff -raa971e902329c8ae01eae531db29bbc1a595f4ff --- lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/service/ResourceServiceImpl.java (.../ResourceServiceImpl.java) (revision ba64868d96bcde6a6de9afca8b58a32bd25085ff) +++ lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/service/ResourceServiceImpl.java (.../ResourceServiceImpl.java) (revision aa971e902329c8ae01eae531db29bbc1a595f4ff) @@ -87,7 +87,6 @@ import org.lamsfoundation.lams.tool.rsrc.ims.SimpleContentPackageConverter; import org.lamsfoundation.lams.tool.rsrc.model.Resource; import org.lamsfoundation.lams.tool.rsrc.model.ResourceItem; -import org.lamsfoundation.lams.tool.rsrc.model.ResourceItemInstruction; import org.lamsfoundation.lams.tool.rsrc.model.ResourceItemVisitLog; import org.lamsfoundation.lams.tool.rsrc.model.ResourceSession; import org.lamsfoundation.lams.tool.rsrc.model.ResourceUser; @@ -633,9 +632,6 @@ } catch (RepositoryCheckedException e) { throw new UploadResourceFileException( messageService.getMessage("error.msg.repository") + " " + e.getMessage()); - } catch (IOException e) { - throw new UploadResourceFileException( - messageService.getMessage("error.msg.io.exception") + " " + e.getMessage()); } } return node; @@ -1269,7 +1265,7 @@ item.setHide(false); item.setOrderId(JsonUtil.optInt(itemData, RestTags.DISPLAY_ORDER)); - item.setDescription(JsonUtil.optString(itemData, "description")); + item.setInstructions(JsonUtil.optString(itemData, "instructions")); item.setFileName(JsonUtil.optString(itemData, "name")); item.setFileType(JsonUtil.optString(itemData, "fileType")); item.setFileUuid(JsonUtil.optLong(itemData, "crUuid")); @@ -1278,18 +1274,6 @@ item.setOrganizationXml(JsonUtil.optString(itemData, "organizationXml")); item.setUrl(JsonUtil.optString(itemData, "url")); - ArrayNode instructionStrings = JsonUtil.optArray(itemData, "instructions"); - if ((instructionStrings != null) && (instructionStrings.size() > 0)) { - Set instructions = new LinkedHashSet<>(); - for (int j = 0; j < instructionStrings.size(); j++) { - ResourceItemInstruction rii = new ResourceItemInstruction(); - rii.setDescription(instructionStrings.get(j).asText(null)); - rii.setSequenceId(j); - instructions.add(rii); - } - item.setItemInstructions(instructions); - } - // TODO files - need to save it somehow, validate the file size, etc. Needed for websites, files & LO if ((item.getFileName() != null) || (item.getFileUuid() != null)) { throw new IOException( Index: lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/web/controller/AuthoringController.java =================================================================== diff -u -rba64868d96bcde6a6de9afca8b58a32bd25085ff -raa971e902329c8ae01eae531db29bbc1a595f4ff --- lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/web/controller/AuthoringController.java (.../AuthoringController.java) (revision ba64868d96bcde6a6de9afca8b58a32bd25085ff) +++ lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/web/controller/AuthoringController.java (.../AuthoringController.java) (revision aa971e902329c8ae01eae531db29bbc1a595f4ff) @@ -24,17 +24,13 @@ package org.lamsfoundation.lams.tool.rsrc.web.controller; import java.io.File; -import java.io.UnsupportedEncodingException; -import java.net.URLDecoder; import java.sql.Timestamp; import java.util.ArrayList; import java.util.Date; -import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashSet; import java.util.List; -import java.util.Map; import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; @@ -52,7 +48,6 @@ import org.lamsfoundation.lams.tool.rsrc.ResourceConstants; import org.lamsfoundation.lams.tool.rsrc.model.Resource; import org.lamsfoundation.lams.tool.rsrc.model.ResourceItem; -import org.lamsfoundation.lams.tool.rsrc.model.ResourceItemInstruction; import org.lamsfoundation.lams.tool.rsrc.model.ResourceUser; import org.lamsfoundation.lams.tool.rsrc.service.IResourceService; import org.lamsfoundation.lams.tool.rsrc.util.ResourceItemComparator; @@ -161,7 +156,9 @@ case 1: return "pages/authoring/parts/addurl"; case 2: - resourceItemForm.setTmpFileUploadId(FileUtil.generateTmpFileUploadId()); + if (!resourceItemForm.isHasFile()) { + resourceItemForm.setTmpFileUploadId(FileUtil.generateTmpFileUploadId()); + } return "pages/authoring/parts/addfile"; case 3: resourceItemForm.setTmpFileUploadId(FileUtil.generateTmpFileUploadId()); @@ -216,13 +213,11 @@ @RequestMapping(path = "/saveOrUpdateItem", method = RequestMethod.POST) private String saveOrUpdateItem(@ModelAttribute ResourceItemForm resourceItemForm, HttpServletRequest request) { // get instructions: - List instructionList = getInstructionsFromRequest(request); MultiValueMap errorMap = new LinkedMultiValueMap<>(); validateResourceItem(resourceItemForm, errorMap); if (!errorMap.isEmpty()) { request.setAttribute("errorMap", errorMap); - request.setAttribute(ResourceConstants.ATTR_INSTRUCTION_LIST, instructionList); request.setAttribute("resourceItemForm", resourceItemForm); switch (resourceItemForm.getItemType()) { case 1: @@ -243,15 +238,14 @@ } try { - extractFormToResourceItem(request, instructionList, resourceItemForm); + extractFormToResourceItem(request, resourceItemForm); } catch (Exception e) { // any upload exception will display as normal error message rather // then throw exception directly errorMap.add("GLOBAL", messageService.getMessage(ResourceConstants.ERROR_MSG_UPLOAD_FAILED, new Object[] { e.getMessage() })); if (!errorMap.isEmpty()) { request.setAttribute("errorMap", errorMap); - request.setAttribute(ResourceConstants.ATTR_INSTRUCTION_LIST, instructionList); switch (resourceItemForm.getItemType()) { case 1: return "pages/authoring/parts/addurl"; @@ -273,61 +267,6 @@ } /** - * Ajax call, will add one more input line for new resource item - * instruction. - * - * @param mapping - * @param form - * @param request - * @param response - * @return - */ - @RequestMapping("/newInstruction") - private String newInstruction(HttpServletRequest request) { - int numberOfInstructions = WebUtil.readIntParam(request, INSTRUCTION_ITEM_COUNT); - List instructionList = new ArrayList<>(++numberOfInstructions); - for (int idx = 0; idx < numberOfInstructions; idx++) { - String item = request.getParameter(AuthoringController.INSTRUCTION_ITEM_DESC_PREFIX + idx); - if (item == null) { - instructionList.add(""); - } else { - instructionList.add(item); - } - } - request.setAttribute(ResourceConstants.ATTR_INSTRUCTION_LIST, instructionList); - return "pages/authoring/parts/instructions"; - } - - /** - * Ajax call, remove the given line of instruction of resource item. - * - * @param mapping - * @param form - * @param request - * @param response - * @return - */ - @RequestMapping("/removeInstruction") - private String removeInstruction(HttpServletRequest request) { - int numberOfInstructions = WebUtil.readIntParam(request, INSTRUCTION_ITEM_COUNT); - int removeIdx = WebUtil.readIntParam(request, "removeIdx"); - List instructionList = new ArrayList<>(numberOfInstructions - 1); - for (int idx = 0; idx < numberOfInstructions; idx++) { - String item = request.getParameter(AuthoringController.INSTRUCTION_ITEM_DESC_PREFIX + idx); - if (idx == removeIdx) { - continue; - } - if (item == null) { - instructionList.add(""); - } else { - instructionList.add(item); - } - } - request.setAttribute(ResourceConstants.ATTR_INSTRUCTION_LIST, instructionList); - return "pages/authoring/parts/instructions"; - } - - /** * Read resource data from database and put them into HttpSession. It will * redirect to init.do directly after this method run successfully. * @@ -645,44 +584,6 @@ } /** - * Get resource items instruction from HttpRequest - * - * @param request - */ - private List getInstructionsFromRequest(HttpServletRequest request) { - String list = request.getParameter("instructionList"); - String[] params = list.split("&"); - Map paramMap = new HashMap<>(); - String[] pair; - for (String item : params) { - pair = item.split("="); - if (pair == null || pair.length != 2) { - continue; - } - try { - paramMap.put(pair[0], URLDecoder.decode(pair[1], "UTF-8")); - } catch (UnsupportedEncodingException e) { - AuthoringController.log.error("Error occurs when decode instruction string:" + e.toString()); - } - } - - int count = paramMap.keySet().size(); - List instructionList = new ArrayList<>(); - - for (int idx = 0; idx < count; idx++) { - String item = paramMap.get(AuthoringController.INSTRUCTION_ITEM_DESC_PREFIX + idx); - if (item == null) { - continue; - } - - instructionList.add(item); - } - - return instructionList; - - } - - /** * This method will populate resource item information to its form for edit * use. * @@ -692,7 +593,7 @@ * @param request */ private void populateItemToForm(int itemIdx, ResourceItem item, ResourceItemForm form, HttpServletRequest request) { - form.setDescription(item.getDescription()); + form.setInstructions(item.getInstructions()); form.setTitle(item.getTitle()); form.setUrl(item.getUrl()); form.setAllowRating(item.isAllowRating()); @@ -701,11 +602,6 @@ form.setItemIndex(String.valueOf(itemIdx)); } - Set instructionList = item.getItemInstructions(); - List instructions = new ArrayList<>(); - for (ResourceItemInstruction in : instructionList) { - instructions.add(in.getDescription()); - } // FOR requirment from LDEV-754 // add extra blank line for instructions // for(int idx=0;idx instructionList, - ResourceItemForm itemForm) throws Exception { + private void extractFormToResourceItem(HttpServletRequest request, ResourceItemForm itemForm) throws Exception { SessionMap sessionMap = (SessionMap) request.getSession() .getAttribute(itemForm.getSessionMapID()); @@ -763,8 +656,8 @@ // it may throw exception, so put it as first, to avoid other invlidate // update: - if (type == ResourceConstants.RESOURCE_TYPE_WEBSITE || type == ResourceConstants.RESOURCE_TYPE_LEARNING_OBJECT - || type == ResourceConstants.RESOURCE_TYPE_FILE) { + if ((type == ResourceConstants.RESOURCE_TYPE_WEBSITE || type == ResourceConstants.RESOURCE_TYPE_LEARNING_OBJECT + || type == ResourceConstants.RESOURCE_TYPE_FILE) & !itemForm.isHasFile()) { File uploadDir = FileUtil.getTmpFileUploadDir(itemForm.getTmpFileUploadId()); if (uploadDir.canRead()) { File[] files = uploadDir.listFiles(); @@ -807,21 +700,10 @@ item.setHide(false); item.setAllowRating(itemForm.isAllowRating()); item.setAllowComments(itemForm.isAllowComments()); - // set instructions - Set instructions = new LinkedHashSet<>(); - int idx = 0; - for (String ins : instructionList) { - ResourceItemInstruction instruction = new ResourceItemInstruction(); - instruction.setDescription(ins); - instruction.setSequenceId(idx++); - instructions.add(instruction); - } - item.setItemInstructions(instructions); - if (type == ResourceConstants.RESOURCE_TYPE_URL) { item.setUrl(itemForm.getUrl()); } - item.setDescription(itemForm.getDescription()); + item.setInstructions(itemForm.getInstructions()); // if it's a new item, add it to resourceList if (itemIdx == -1) { @@ -844,42 +726,8 @@ if (resourceItemForm.getItemType() == ResourceConstants.RESOURCE_TYPE_URL) { if (StringUtils.isBlank(resourceItemForm.getUrl())) { errorMap.add("GLOBAL", messageService.getMessage(ResourceConstants.ERROR_MSG_URL_BLANK)); - // URL validation: Commom URL validate(1.3.0) work not very - // well: it can not support http:// - // address:port format!!! - // UrlValidator validator = new UrlValidator(); - // if(!validator.isValid(itemForm.getUrl())) - // errors.add(ActionMessages.GLOBAL_MESSAGE,new - // ActionMessage(ResourceConstants.ERROR_MSG_INVALID_URL)); } } - - // if(itemForm.getItemType() == ResourceConstants.RESOURCE_TYPE_WEBSITE - // ||itemForm.getItemType() == - // ResourceConstants.RESOURCE_TYPE_LEARNING_OBJECT){ - // if(StringUtils.isBlank(itemForm.getDescription())) - // errors.add(ActionMessages.GLOBAL_MESSAGE,new - // ActionMessage(ResourceConstants.ERROR_MSG_DESC_BLANK)); - // } - - // uploads using tmp file upload servlet made following validation obsolete (?) - /* - * if (resourceItemForm.getItemType() == ResourceConstants.RESOURCE_TYPE_WEBSITE - * || resourceItemForm.getItemType() == ResourceConstants.RESOURCE_TYPE_LEARNING_OBJECT - * || resourceItemForm.getItemType() == ResourceConstants.RESOURCE_TYPE_FILE) { - * // validate item size - * if (!FileValidatorUtil.validateFileSize(resourceItemForm.getFile(), false)) { - * errorMap.add("GLOBAL", messageService.getMessage("errors.maxfilesize", - * new Object[] { Configuration.getAsInt(ConfigurationKeys.UPLOAD_FILE_MAX_SIZE) })); - * } - * - * // for edit validate: file already exist - * if (!resourceItemForm.isHasFile() && (resourceItemForm.getFile() == null - * || StringUtils.isEmpty(resourceItemForm.getFile().getOriginalFilename()))) { - * errorMap.add("GLOBAL", messageService.getMessage(ResourceConstants.ERROR_MSG_FILE_BLANK)); - * } - * } - */ } @RequestMapping("/switchResourceItemPosition") Index: lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/web/controller/LearningController.java =================================================================== diff -u -rba64868d96bcde6a6de9afca8b58a32bd25085ff -raa971e902329c8ae01eae531db29bbc1a595f4ff --- lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/web/controller/LearningController.java (.../LearningController.java) (revision ba64868d96bcde6a6de9afca8b58a32bd25085ff) +++ lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/web/controller/LearningController.java (.../LearningController.java) (revision aa971e902329c8ae01eae531db29bbc1a595f4ff) @@ -370,7 +370,7 @@ ResourceUser resourceUser = getCurrentUser(resourceService, sessionId); item.setType(type); item.setTitle(resourceItemForm.getTitle()); - item.setDescription(resourceItemForm.getDescription()); + item.setInstructions(resourceItemForm.getInstructions()); item.setCreateDate(new Timestamp(new Date().getTime())); item.setCreateByAuthor(false); item.setCreateBy(resourceUser); Index: lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/web/controller/ViewItemController.java =================================================================== diff -u -rba64868d96bcde6a6de9afca8b58a32bd25085ff -raa971e902329c8ae01eae531db29bbc1a595f4ff --- lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/web/controller/ViewItemController.java (.../ViewItemController.java) (revision ba64868d96bcde6a6de9afca8b58a32bd25085ff) +++ lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/web/controller/ViewItemController.java (.../ViewItemController.java) (revision aa971e902329c8ae01eae531db29bbc1a595f4ff) @@ -27,7 +27,6 @@ import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; -import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; import java.util.regex.Pattern; @@ -38,9 +37,7 @@ import org.apache.commons.lang.math.NumberUtils; import org.lamsfoundation.lams.tool.ToolAccessMode; import org.lamsfoundation.lams.tool.rsrc.ResourceConstants; -import org.lamsfoundation.lams.tool.rsrc.dto.InstructionNavDTO; import org.lamsfoundation.lams.tool.rsrc.model.ResourceItem; -import org.lamsfoundation.lams.tool.rsrc.model.ResourceItemInstruction; import org.lamsfoundation.lams.tool.rsrc.service.IResourceService; import org.lamsfoundation.lams.tool.rsrc.util.ResourceItemComparator; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; @@ -122,7 +119,7 @@ } /** - * Return next instruction to page. It need four input parameters, mode, itemIndex or itemUid, and insIdx. + * Return next instruction to page */ @RequestMapping("/nextInstruction") private String nextInstruction(HttpServletRequest request) { @@ -136,40 +133,9 @@ if (item == null) { return "error"; } - - Integer currIns = WebUtil.readIntParam(request, ResourceConstants.PARAM_CURRENT_INSTRUCTION_INDEX, true); - if (currIns == null) { - currIns = 0; - } - - Set instructions = item.getItemInstructions(); - InstructionNavDTO navDto = new InstructionNavDTO(); - // For Learner upload item, its instruction will display description/comment fields in ReosourceItem. - if (!item.isCreateByAuthor()) { - List navItems = new ArrayList<>(1); - // create a new instruction and put ResourceItem description into it: just for display use. - ResourceItemInstruction ins = new ResourceItemInstruction(); - ins.setSequenceId(1); - ins.setDescription(item.getDescription()); - navItems.add(ins); - navDto.setAllInstructions(navItems); - instructions.add(ins); - } else { - navDto.setAllInstructions(new ArrayList<>(instructions)); - } - navDto.setTitle(item.getTitle()); - navDto.setType(item.getType()); - navDto.setTotal(instructions.size()); - if (instructions.size() > 0) { - navDto.setInstruction(new ArrayList<>(instructions).get(currIns)); - navDto.setCurrent(currIns + 1); - } else { - navDto.setCurrent(0); - navDto.setInstruction(null); - } - + request.setAttribute(ResourceConstants.ATTR_SESSION_MAP_ID, sessionMapID); - request.setAttribute(ResourceConstants.ATTR_RESOURCE_INSTRUCTION, navDto); + request.setAttribute(ResourceConstants.ATTR_RESOURCE_INSTRUCTION, item.getInstructions()); return "pages/itemreview/instructionsnav"; } Index: lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/web/form/ResourceItemForm.java =================================================================== diff -u -rba64868d96bcde6a6de9afca8b58a32bd25085ff -raa971e902329c8ae01eae531db29bbc1a595f4ff --- lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/web/form/ResourceItemForm.java (.../ResourceItemForm.java) (revision ba64868d96bcde6a6de9afca8b58a32bd25085ff) +++ lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/web/form/ResourceItemForm.java (.../ResourceItemForm.java) (revision aa971e902329c8ae01eae531db29bbc1a595f4ff) @@ -37,7 +37,7 @@ private String title; private short itemType; - private String description; + private String instructions; private String url; //flag of this item has attachment or not private boolean hasFile; @@ -48,12 +48,12 @@ private boolean allowRating; private boolean allowComments; - public String getDescription() { - return description; + public String getInstructions() { + return instructions; } - public void setDescription(String description) { - this.description = description; + public void setInstructions(String description) { + this.instructions = description; } public String getTmpFileUploadId() { Index: lams_tool_larsrc/web/includes/javascript/rsrcresourceitem.js =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -raa971e902329c8ae01eae531db29bbc1a595f4ff --- lams_tool_larsrc/web/includes/javascript/rsrcresourceitem.js (.../rsrcresourceitem.js) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_larsrc/web/includes/javascript/rsrcresourceitem.js (.../rsrcresourceitem.js) (revision aa971e902329c8ae01eae531db29bbc1a595f4ff) @@ -1,26 +1,8 @@ /* This is Resource Item instruction area. */ - var instructionTargetDiv = "instructionArea"; var itemAttachmentTargetDiv = "itemAttachmentArea"; - var singleInstructionHeight = 74; - function removeInstruction(idx){ - //prepare lams_textarea value to Ajax submit - $('textarea').trigger('change'); - - var param = $("#instructionForm").serialize() + "&removeIdx="+idx; - removeInstructionLoading(); - $.post( - removeInstructionUrl, - param, - function(xml) { - removeInstructionComplete(); - document.getElementById("instructionArea").innerHTML = xml; - } - ); - } - function removeItemAttachment(idx){ removeItemAttachmentLoading(); $("#" + itemAttachmentTargetDiv).load( @@ -32,73 +14,20 @@ ); } - function addInstruction(){ - //prepare lams_textarea value to Ajax submit - $('textarea').trigger('change'); - - var param = $("#instructionForm").serialize(); - disableButtons(); - addInstructionLoading(); - - $.post( - addInstructionUrl, - param, - function(xml) { - $('#instructionArea').html(xml); - enableButtons(); - } - ); - - return false; - } - - function upItem(itemIdx){ - //prepare lams_textarea value to Ajax submit - $('textarea').trigger('change'); - - if(itemIdx == 0) - return; - var currId = "instructionItemDesc" + itemIdx; - var repId = "instructionItemDesc" + (--itemIdx); - switchValue(currId,repId); - } - function downItem(itemIdx,maxSize){ - //prepare lams_textarea value to Ajax submit - $('textarea').trigger('change'); - - if(itemIdx == (maxSize -1)) - return; - var currId = "instructionItemDesc" + itemIdx; - var repId = "instructionItemDesc" + (++itemIdx); - switchValue(currId,repId); - } - function switchValue(currId,repId){ - var temp = document.getElementById(repId).value; - document.getElementById(repId).value = document.getElementById(currId).value; - document.getElementById(currId).value = temp; - } - function removeInstructionLoading(){ - showBusy(instructionTargetDiv); - } - function removeInstructionComplete(){ - hideBusy(instructionTargetDiv); - } function removeItemAttachmentLoading(){ showBusy(itemAttachmentTargetDiv); } function removeItemAttachmentComplete(){ hideBusy(itemAttachmentTargetDiv); } - function addInstructionLoading(){ - showBusy(instructionTargetDiv); - } - function addInstructionComplete(){ - hideBusy(instructionTargetDiv); - } function submitResourceItem(){ - //prepare lams_textarea value to Ajax submit and add instructions to form - $('textarea').trigger('change'); + //copy value from CKEditor to textarea before ajax submit + $("textarea[id^='instructions']").each(function() { + var ckeditorData = CKEDITOR.instances[this.name].getData(); + //skip out empty values + this.value = ((ckeditorData == null) || (ckeditorData.replace(/ | |
|\s|

|<\/p>|\xa0/g, "").length == 0)) ? "" : ckeditorData; + }); // validation will fail with spaces var urlField = document.getElementById("url"); @@ -109,10 +38,8 @@ if ( ! $("#resourceItemForm").valid() ) return false; - document.getElementById("instructionList").value = $("#instructionForm").serialize(); var formData = new FormData(document.getElementById("resourceItemForm")); disableButtons(); - showBusy(instructionTargetDiv); // after submit, it direct to itemlist.jsp, // then refresh "basic tab" resource list and close this window. $.ajax({ // create an AJAX call... Index: lams_tool_larsrc/web/pages/authoring/parts/addfile.jsp =================================================================== diff -u -r9dcc3e2d26b504f92d919f53f0d45dd4093a82a2 -raa971e902329c8ae01eae531db29bbc1a595f4ff --- lams_tool_larsrc/web/pages/authoring/parts/addfile.jsp (.../addfile.jsp) (revision 9dcc3e2d26b504f92d919f53f0d45dd4093a82a2) +++ lams_tool_larsrc/web/pages/authoring/parts/addfile.jsp (.../addfile.jsp) (revision aa971e902329c8ae01eae531db29bbc1a595f4ff) @@ -21,7 +21,7 @@ }); $.validator.addMethod('requireFileCount', function (value, element, param) { - return uppy.getFiles().length >= +param + return $('#hasFile').val() === 'true' || uppy.getFiles().length >= +param }, ''); @@ -60,43 +60,42 @@

- - - - - - - + + + + + + + +
+ : + +
+
+ : + +
+ -
- : - -
- - -
- - <%@ include file="/pages/authoring/parts/itemattachment.jsp"%> - - -
- -
- <%@ include file="ratings.jsp"%> -
-
+
+ + <%@ include file="/pages/authoring/parts/itemattachment.jsp"%> + + +
- - <%@ include file="instructions.jsp"%> -

-

-
- - - -
+
+ <%@ include file="ratings.jsp"%> +
+
+ +
+ + + +
Index: lams_tool_larsrc/web/pages/authoring/parts/addurl.jsp =================================================================== diff -u -rba64868d96bcde6a6de9afca8b58a32bd25085ff -raa971e902329c8ae01eae531db29bbc1a595f4ff --- lams_tool_larsrc/web/pages/authoring/parts/addurl.jsp (.../addurl.jsp) (revision ba64868d96bcde6a6de9afca8b58a32bd25085ff) +++ lams_tool_larsrc/web/pages/authoring/parts/addurl.jsp (.../addurl.jsp) (revision aa971e902329c8ae01eae531db29bbc1a595f4ff) @@ -43,40 +43,39 @@
- - - - - - - - -
- : - -
- -
- : - -
+ + + + + + + +
+ : + +
+ +
+ : + +
- <%@ include file="ratings.jsp"%> +
+ : + +
+ +
+ <%@ include file="ratings.jsp"%> +
+
+ +
+ +
- - - - - <%@ include file="instructions.jsp"%> -

-

-
- - - -
Fisheye: Tag aa971e902329c8ae01eae531db29bbc1a595f4ff refers to a dead (removed) revision in file `lams_tool_larsrc/web/pages/authoring/parts/instructions.jsp'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_tool_larsrc/web/pages/itemreview/instructionsnav.jsp =================================================================== diff -u -r94e36ba92006160e48c47ff2a60bb4f525c011e1 -raa971e902329c8ae01eae531db29bbc1a595f4ff --- lams_tool_larsrc/web/pages/itemreview/instructionsnav.jsp (.../instructionsnav.jsp) (revision 94e36ba92006160e48c47ff2a60bb4f525c011e1) +++ lams_tool_larsrc/web/pages/itemreview/instructionsnav.jsp (.../instructionsnav.jsp) (revision aa971e902329c8ae01eae531db29bbc1a595f4ff) @@ -23,8 +23,6 @@ - <c:out value="${instructions.title}" escapeXml="true"/> - <%-- param has higher level for request attribute --%> @@ -84,42 +82,17 @@ function continueReflect(){ location.href=''; } - - function nextIns(currIns){ - var nextUrl="?mode=${mode}&insIdx=" + currIns + "&sessionMapID=${sessionMapID}&itemUid=${param.itemUid}&itemIndex=${param.itemIndex}"; - $.ajaxSetup({ cache: true }); - $('#headerFrame').load(nextUrl); - }
- - -
-
-

- - - -

-
-
-
- - - + - - -