Index: lams_central/src/java/org/lamsfoundation/lams/web/planner/PedagogicalPlannerAction.java =================================================================== diff -u -rfd29638b94298506859efad9b7d2e9511cef7033 -r6c49130d92d4f9cc3f2b28c52af77c0ec1c22270 --- lams_central/src/java/org/lamsfoundation/lams/web/planner/PedagogicalPlannerAction.java (.../PedagogicalPlannerAction.java) (revision fd29638b94298506859efad9b7d2e9511cef7033) +++ lams_central/src/java/org/lamsfoundation/lams/web/planner/PedagogicalPlannerAction.java (.../PedagogicalPlannerAction.java) (revision 6c49130d92d4f9cc3f2b28c52af77c0ec1c22270) @@ -92,6 +92,7 @@ import org.lamsfoundation.lams.learningdesign.ToolActivity; import org.lamsfoundation.lams.learningdesign.Transition; import org.lamsfoundation.lams.learningdesign.dao.hibernate.ActivityDAO; +import org.lamsfoundation.lams.learningdesign.exception.LearningDesignException; import org.lamsfoundation.lams.learningdesign.service.IExportToolContentService; import org.lamsfoundation.lams.learningdesign.service.ImportToolContentException; import org.lamsfoundation.lams.lesson.LearnerProgress; @@ -107,6 +108,8 @@ import org.lamsfoundation.lams.usermanagement.WorkspaceFolder; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; import org.lamsfoundation.lams.usermanagement.exception.UserAccessDeniedException; +import org.lamsfoundation.lams.usermanagement.exception.UserException; +import org.lamsfoundation.lams.usermanagement.exception.WorkspaceFolderException; import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; import org.lamsfoundation.lams.util.CentralConstants; import org.lamsfoundation.lams.util.CentralToolContentHandler; @@ -1201,20 +1204,15 @@ return null; } - HttpSession session = SessionManager.getSession(); - UserDTO userDto = (UserDTO) session.getAttribute(AttributeNames.USER); - User user = (User) getUserManagementService().findById(User.class, userDto.getUserID()); - if (user == null) { - throw new ServletException(PedagogicalPlannerAction.ERROR_USER_NOT_FOUND); - } + User user = getUser(); List toolsErrorMsgs = new ArrayList(); Long learningDesignID = null; LearningDesign learningDesign = null; List learningDesignErrorMsgs = new ArrayList(); - + Integer workspaceFolderId = getWorkspaceFolderId(user.getUserId()); - // Extract the template + // Extract the template try { Object[] ldResults = getExportService().importLearningDesign(designFile, user, workspaceFolderId, toolsErrorMsgs, ""); @@ -1279,7 +1277,21 @@ userManagementService.save(workspaceFolder); } return workspaceFolder.getWorkspaceFolderId(); - } + } + + /** + * Returns current user stored in session. + * @throws ServletException + */ + private User getUser() throws ServletException { + HttpSession session = SessionManager.getSession(); + UserDTO userDto = (UserDTO) session.getAttribute(AttributeNames.USER); + User user = (User) getUserManagementService().findById(User.class, userDto.getUserID()); + if (user == null) { + throw new ServletException(PedagogicalPlannerAction.ERROR_USER_NOT_FOUND); + } + return user; + } /** * Copies the template files from repository into the selected dir. @@ -1535,11 +1547,9 @@ return mapping.findForward(PedagogicalPlannerAction.FORWARD_GROUPING); } - private List getRecentlyModifiedLearnindDesignsAsNodes() { + private List getRecentlyModifiedLearnindDesignsAsNodes() throws ServletException { // Add the recently modified learning design list, if it's the root node with no filtering - HttpSession session = SessionManager.getSession(); - UserDTO userDto = (UserDTO) session.getAttribute(AttributeNames.USER); - User user = (User) getUserManagementService().findById(User.class, userDto.getUserID()); + User user = getUser(); // the list is sorted most-recently-edited-on-top (so by the timestamp descending) Set recentLDs = user.getRecentlyModifiedLearningDesigns(); List recentNodes = new LinkedList(); @@ -1562,10 +1572,8 @@ * * @param learningDesignId */ - private void updateRecentLearningDesignList(Long learningDesignId) { - HttpSession session = SessionManager.getSession(); - UserDTO userDto = (UserDTO) session.getAttribute(AttributeNames.USER); - User user = (User) getUserManagementService().findById(User.class, userDto.getUserID()); + private void updateRecentLearningDesignList(Long learningDesignId) throws ServletException { + User user = getUser(); // the list is sorted most-recently-edited-on-top (so by the timestamp descending) Set recentLDs = user.getRecentlyModifiedLearningDesigns(); boolean ldFound = false; @@ -1589,7 +1597,43 @@ } /*-------------------------- TEMPLATE BASE METHODS -----------------*/ + + /** + * Copies LearningDesign to user's personal folder. + * + * @param mapping + * @param form + * @param request + * @param response + * @return + * @throws ServletException + * @throws IOException + * @throws WorkspaceFolderException + * @throws UserException + * @throws LearningDesignException + */ + public ActionForward copyLearningDesign(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse response) throws ServletException, IOException, LearningDesignException, UserException, WorkspaceFolderException { + PedagogicalPlannerAction.log.debug("Copying LearningDesign to user's personal folder"); + Long designID = WebUtil.readLongParam(request, CentralConstants.PARAM_LEARNING_DESIGN_ID); + LearningDesign originalDesign = getAuthoringService().getLearningDesign(designID); + if (originalDesign == null) { + throw new LearningDesignException(getMessageService().getMessage("no.such.learningdesign.exist", + new Object[] { designID })); + } + User user = getUser(); + WorkspaceFolder targetFolder = user.getWorkspace().getDefaultFolder(); + Integer copyType = LearningDesign.COPY_TYPE_NONE; + boolean setOriginalDesign = false; + String newDesignName = originalDesign.getTitle(); + String customCSV = null; + + getAuthoringService().copyLearningDesign(originalDesign, copyType, user, targetFolder, setOriginalDesign, newDesignName, customCSV); + + return null; + } + /** * Saves additional, non tool-bound template details - currently only the title. * @@ -1852,7 +1896,7 @@ } return PedagogicalPlannerAction.contentHandler; } - + private void writeOutFile(HttpServletResponse response, String zipFilePath) throws IOException { InputStream in = null; ServletOutputStream out = null; Index: lams_central/web/includes/javascript/pedagogicalPlanner.js =================================================================== diff -u -re67b31517d5a6991a5d88a3485bc23da8b6e65a0 -r6c49130d92d4f9cc3f2b28c52af77c0ec1c22270 --- lams_central/web/includes/javascript/pedagogicalPlanner.js (.../pedagogicalPlanner.js) (revision e67b31517d5a6991a5d88a3485bc23da8b6e65a0) +++ lams_central/web/includes/javascript/pedagogicalPlanner.js (.../pedagogicalPlanner.js) (revision 6c49130d92d4f9cc3f2b28c52af77c0ec1c22270) @@ -8,7 +8,7 @@ var startPreviewUrl; //Url to start preview var learningDesignId; //ID of the design to open - var ACTION_DO_NOTHING = 0; //After successful submit do nothing + var ACTION_SAVE_AS_SEQUENCE = 0; //After successful submit save learning design in user's personal folder var ACTION_PREVIEW = 1; //After successful submit start preview var ACTION_OPEN_AUTHOR = 2; //After successful submit open full authoring var ACTION_EXPORT = 3; //After successful submit export the learning design @@ -22,7 +22,7 @@ if (actionAfterCompleted==ACTION_PREVIEW){ startPreviewUrl=additionalParameter; } - else if (actionAfterCompleted==ACTION_OPEN_AUTHOR || actionAfterCompleted==ACTION_EXPORT){ + else if (actionAfterCompleted==ACTION_SAVE_AS_SEQUENCE || actionAfterCompleted==ACTION_OPEN_AUTHOR || actionAfterCompleted==ACTION_EXPORT){ learningDesignId=additionalParameter; } callAttemptedID++; @@ -138,12 +138,24 @@ $('#pedagogicalPlannerBusy').hide(); if (sequenceDetailsValid && activitiesValid==activitiesResponded){ $('#pedagogicalPlannerInfoArea').show(); - if (actionAfterCompleted==ACTION_PREVIEW){ + if (actionAfterCompleted==ACTION_SAVE_AS_SEQUENCE){ + $.ajax({ + url: saveDetailsUrl, + cache: false, + data: "method=copyLearningDesign&ldId="+learningDesignId + }); + } + else if (actionAfterCompleted==ACTION_PREVIEW){ startPreview(startPreviewUrl); } else if (actionAfterCompleted==ACTION_OPEN_AUTHOR){ window.resizeTo(authoring_width,authoring_height); - document.location.href="home.do?method=author&learningDesignID="+learningDesignId; + $.ajax({ + url: saveDetailsUrl, + cache: false, + data: "method=copyLearningDesign&ldId="+learningDesignId + }); + document.location.href="home.do?method=author&learningDesignID="+learningDesignId; } else if (actionAfterCompleted==ACTION_EXPORT){ document.getElementById("downloadFileDummyIframe").src="pedagogicalPlanner.do?method=exportTemplate&ldId="+learningDesignId;