Index: lams_build/lib/lams/lams.jar =================================================================== diff -u -r3a3911c81c625738411c8881e78392ddbadd09b8 -r2e4e96faf6744c4567822df3d80485975e792691 Binary files differ Index: lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/Canvas.as =================================================================== diff -u -re72a36376005919f8e453b012d1fbbf1ecad8fed -r2e4e96faf6744c4567822df3d80485975e792691 --- lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/Canvas.as (.../Canvas.as) (revision e72a36376005919f8e453b012d1fbbf1ecad8fed) +++ lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/Canvas.as (.../Canvas.as) (revision 2e4e96faf6744c4567822df3d80485975e792691) @@ -715,6 +715,7 @@ checkReadOnlyDesign(); canvasModel.setDirty(); + createContentFolder(); return true; @@ -1028,7 +1029,6 @@ } private function createContentFolder():Void{ - Debugger.log('instance is Tool',Debugger.GEN,'setPastedItem','Canvas'); var callback:Function = Proxy.create(this,setNewContentFolderID); Application.getInstance().getComms().getRequest('authoring/author.do?method=createUniqueContentFolder&userID='+_root.userID,callback, false); @@ -1038,7 +1038,7 @@ if(o instanceof LFError){ o.showMessageConfirm(); }else{ - _ddm.contentFolderID = String(o); + if(StringUtils.isNull(_ddm.contentFolderID)) { _ddm.contentFolderID = String(o); } } } Index: lams_central/src/java/org/lamsfoundation/lams/authoring/web/AuthoringConstants.java =================================================================== diff -u -r8448034506063ccb94e5e04076ac1ef5380e81f0 -r2e4e96faf6744c4567822df3d80485975e792691 --- lams_central/src/java/org/lamsfoundation/lams/authoring/web/AuthoringConstants.java (.../AuthoringConstants.java) (revision 8448034506063ccb94e5e04076ac1ef5380e81f0) +++ lams_central/src/java/org/lamsfoundation/lams/authoring/web/AuthoringConstants.java (.../AuthoringConstants.java) (revision 2e4e96faf6744c4567822df3d80485975e792691) @@ -38,8 +38,6 @@ public static final String LAMS_AUTHORING_SUCCESS_FLAG = "LAMS_AUTHORING_SUCCESS_FLAG"; // used for tool content folder creation. - public static final String LAMS_WWW_DIR = "lams-www.war"; public static final String LAMS_WWW_FOLDER = "www/"; - public static final String LAMS_WWW_SECURE_DIR = "secure"; public static final String LAMS_LAMS_FOLDER = "lams/"; } Index: lams_central/src/java/org/lamsfoundation/lams/web/LAMSConnectorServlet.java =================================================================== diff -u -r4d2e6cb3a941bbfd6decb57a112a8d3c53f53793 -r2e4e96faf6744c4567822df3d80485975e792691 --- lams_central/src/java/org/lamsfoundation/lams/web/LAMSConnectorServlet.java (.../LAMSConnectorServlet.java) (revision 4d2e6cb3a941bbfd6decb57a112a8d3c53f53793) +++ lams_central/src/java/org/lamsfoundation/lams/web/LAMSConnectorServlet.java (.../LAMSConnectorServlet.java) (revision 2e4e96faf6744c4567822df3d80485975e792691) @@ -43,6 +43,7 @@ import org.lamsfoundation.lams.authoring.web.AuthoringConstants; import org.lamsfoundation.lams.util.Configuration; import org.lamsfoundation.lams.util.ConfigurationKeys; +import org.lamsfoundation.lams.util.FileUtil; import org.apache.commons.fileupload.DiskFileUpload; import org.apache.commons.fileupload.FileItem; @@ -94,7 +95,7 @@ if(baseDir==null) baseDir="secure"; - realBaseDir = Configuration.get(ConfigurationKeys.LAMS_EAR_DIR) + File.separator + AuthoringConstants.LAMS_WWW_DIR + File.separator + baseDir; + realBaseDir = Configuration.get(ConfigurationKeys.LAMS_EAR_DIR) + File.separator + FileUtil.LAMS_WWW_DIR + File.separator + baseDir; File baseFile=new File(realBaseDir); if(!baseFile.exists()){ @@ -126,7 +127,7 @@ String currentDirPath=realBaseDir + currentFolderStr; String validCurrentDirPath = currentDirPath.replace('/', File.separatorChar); - String currentWebPath= "/" + AuthoringConstants.LAMS_LAMS_FOLDER + AuthoringConstants.LAMS_WWW_FOLDER + AuthoringConstants.LAMS_WWW_SECURE_DIR + currentFolderStr + typeStr + "/"; + String currentWebPath= "/" + AuthoringConstants.LAMS_LAMS_FOLDER + AuthoringConstants.LAMS_WWW_FOLDER + FileUtil.LAMS_WWW_SECURE_DIR + currentFolderStr + typeStr + "/"; File currentContentDir=new File(validCurrentDirPath); if(!currentContentDir.exists()){ Index: lams_central/src/java/org/lamsfoundation/lams/web/LAMSUploadServlet.java =================================================================== diff -u -r4d2e6cb3a941bbfd6decb57a112a8d3c53f53793 -r2e4e96faf6744c4567822df3d80485975e792691 --- lams_central/src/java/org/lamsfoundation/lams/web/LAMSUploadServlet.java (.../LAMSUploadServlet.java) (revision 4d2e6cb3a941bbfd6decb57a112a8d3c53f53793) +++ lams_central/src/java/org/lamsfoundation/lams/web/LAMSUploadServlet.java (.../LAMSUploadServlet.java) (revision 2e4e96faf6744c4567822df3d80485975e792691) @@ -31,6 +31,7 @@ import org.lamsfoundation.lams.authoring.web.AuthoringConstants; import org.lamsfoundation.lams.util.Configuration; import org.lamsfoundation.lams.util.ConfigurationKeys; +import org.lamsfoundation.lams.util.FileUtil; import javax.xml.parsers.*; @@ -98,7 +99,7 @@ if(baseDir==null) baseDir="secure"; - realBaseDir = Configuration.get(ConfigurationKeys.LAMS_EAR_DIR) + File.separator + AuthoringConstants.LAMS_WWW_DIR + File.separator + baseDir; + realBaseDir = Configuration.get(ConfigurationKeys.LAMS_EAR_DIR) + File.separator + FileUtil.LAMS_WWW_DIR + File.separator + baseDir; File baseFile=new File(realBaseDir); if(!baseFile.exists()){ @@ -151,7 +152,7 @@ String currentDirPath=realBaseDir + currentFolderStr; String validCurrentDirPath = currentDirPath.replace('/', File.separatorChar); - String currentWebPath= "/" + AuthoringConstants.LAMS_LAMS_FOLDER + AuthoringConstants.LAMS_WWW_FOLDER + AuthoringConstants.LAMS_WWW_SECURE_DIR + currentFolderStr + typeStr; + String currentWebPath= "/" + AuthoringConstants.LAMS_LAMS_FOLDER + AuthoringConstants.LAMS_WWW_FOLDER + FileUtil.LAMS_WWW_SECURE_DIR + currentFolderStr + typeStr; File currentContentDir=new File(validCurrentDirPath); if(!currentContentDir.exists()){ Index: lams_central/web/lams_authoring.swf =================================================================== diff -u -r52bc4220f37e1bd5da1fcf87e0ba36a37fd599b0 -r2e4e96faf6744c4567822df3d80485975e792691 Binary files differ Index: lams_central/web/lams_authoring_library.swf =================================================================== diff -u -r52bc4220f37e1bd5da1fcf87e0ba36a37fd599b0 -r2e4e96faf6744c4567822df3d80485975e792691 Binary files differ Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/ExportToolContentService.java =================================================================== diff -u -r2fc4a8b63d3086df2ab75ada593e5d36528d6281 -r2e4e96faf6744c4567822df3d80485975e792691 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/ExportToolContentService.java (.../ExportToolContentService.java) (revision 2fc4a8b63d3086df2ab75ada593e5d36528d6281) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/ExportToolContentService.java (.../ExportToolContentService.java) (revision 2e4e96faf6744c4567822df3d80485975e792691) @@ -55,6 +55,7 @@ import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.math.NumberUtils; import org.apache.log4j.Logger; +import org.lamsfoundation.lams.authoring.web.AuthoringConstants; import org.lamsfoundation.lams.contentrepository.InvalidParameterException; import org.lamsfoundation.lams.contentrepository.ItemNotFoundException; import org.lamsfoundation.lams.contentrepository.NodeKey; @@ -100,6 +101,8 @@ import org.lamsfoundation.lams.tool.exception.ToolException; import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.WorkspaceFolder; +import org.lamsfoundation.lams.util.Configuration; +import org.lamsfoundation.lams.util.ConfigurationKeys; import org.lamsfoundation.lams.util.FileUtil; import org.lamsfoundation.lams.util.FileUtilException; import org.lamsfoundation.lams.util.zipfile.ZipFileUtil; @@ -123,13 +126,14 @@ //export tool content zip file prefix public static final String EXPORT_TOOLCONTNET_ZIP_PREFIX = "lams_toolcontent_"; + public static final String EXPORT_LDCONTENT_ZIP_PREFIX = "lams_ldcontent_"; public static final String EXPORT_TOOLCONTNET_FOLDER_SUFFIX = "export_toolcontent"; public static final String EXPORT_TOOLCONTNET_ZIP_SUFFIX = ".zip"; + public static final String EXPORT_LDCONTENT_ZIP_SUFFIX = ".zip"; public static final String LEARNING_DESIGN_FILE_NAME = "learning_design.xml"; public static final String TOOL_FILE_NAME = "tool.xml"; public static final String TOOL_FAILED_FILE_NAME = "export_failed.xml"; - private Logger log = Logger.getLogger(ExportToolContentService.class); private ApplicationContext applicationContext; @@ -363,6 +367,20 @@ } } + //create zip file for fckeditor unique content folder + try { + String targetContentZipFileName = EXPORT_LDCONTENT_ZIP_PREFIX + ldDto.getContentFolderID() + EXPORT_LDCONTENT_ZIP_SUFFIX; + String secureDir = Configuration.get(ConfigurationKeys.LAMS_EAR_DIR) + File.separator + FileUtil.LAMS_WWW_DIR + File.separator + FileUtil.LAMS_WWW_SECURE_DIR; + String ldContentDir = FileUtil.getFullPath(secureDir,ldDto.getContentFolderID()); + + log.debug("Create export Learning Design content target zip file. File name is " + targetContentZipFileName); + + ZipFileUtil.createZipFile(targetContentZipFileName, ldContentDir, contentDir); + } catch (Exception e) { + log.error("Exception:" + e.toString()); + throw new ExportToolContentException(e); + } + log.debug("Create export content target zip file. File name is " + targetZipFileName); //create zip file and return zip full file name return ZipFileUtil.createZipFile(targetZipFileName, contentDir,rootDir); @@ -510,6 +528,18 @@ } } + // begin fckeditor content folder import + try { + String contentZipFileName = EXPORT_LDCONTENT_ZIP_PREFIX + ldDto.getContentFolderID() + EXPORT_LDCONTENT_ZIP_SUFFIX; + String secureDir = Configuration.get(ConfigurationKeys.LAMS_EAR_DIR) + File.separator + FileUtil.LAMS_WWW_DIR + File.separator + FileUtil.LAMS_WWW_SECURE_DIR + File.separator + ldDto.getContentFolderID(); + + InputStream is = new FileInputStream(FileUtil.getFullPath(learningDesignPath, contentZipFileName)); + ZipFileUtil.expandZipToFolder(is, secureDir); + + } catch (Exception e) { + throw new ImportToolContentException(e); + } + WorkspaceFolder folder = getWorkspaceFolderForDesign(importer, workspaceFolderUid); return saveLearningDesign(ldDto,importer,folder,toolMapper); Index: lams_common/src/java/org/lamsfoundation/lams/util/FileUtil.java =================================================================== diff -u -rbad08c13deb4bc303c07eb851957e0807d63e570 -r2e4e96faf6744c4567822df3d80485975e792691 --- lams_common/src/java/org/lamsfoundation/lams/util/FileUtil.java (.../FileUtil.java) (revision bad08c13deb4bc303c07eb851957e0807d63e570) +++ lams_common/src/java/org/lamsfoundation/lams/util/FileUtil.java (.../FileUtil.java) (revision 2e4e96faf6744c4567822df3d80485975e792691) @@ -38,6 +38,9 @@ private static Logger log = Logger.getLogger(FileUtil.class); + public static final String LAMS_WWW_SECURE_DIR = "secure"; + public static final String LAMS_WWW_DIR = "lams-www.war"; + protected static final String prefix = "lamstmp_"; // protected rather than private to suit junit test public static final String TEMP_DIR = System.getProperty("java.io.tmpdir"); Index: lams_common/src/java/org/lamsfoundation/lams/util/zipfile/ZipFileUtil.java =================================================================== diff -u -r0536cf3e96bcf86b857004e6110e2e180c21b674 -r2e4e96faf6744c4567822df3d80485975e792691 --- lams_common/src/java/org/lamsfoundation/lams/util/zipfile/ZipFileUtil.java (.../ZipFileUtil.java) (revision 0536cf3e96bcf86b857004e6110e2e180c21b674) +++ lams_common/src/java/org/lamsfoundation/lams/util/zipfile/ZipFileUtil.java (.../ZipFileUtil.java) (revision 2e4e96faf6744c4567822df3d80485975e792691) @@ -78,6 +78,10 @@ extractZipFile(is, tempDirName); return tempDirName; } + + public static void expandZipToFolder(InputStream is, String destFolder) throws ZipFileUtilException { + extractZipFile(is, destFolder); + } /** * Create a temporary directory in which the zip file contents will go.