diff --git a/src/main/java/org/olat/course/ICourse.java b/src/main/java/org/olat/course/ICourse.java index 821fc81e387a7ae88f296fdb030eadac4a32bbd1..0ed4c97b658f5fe47ce7dd85173d7a92f4f8300e 100644 --- a/src/main/java/org/olat/course/ICourse.java +++ b/src/main/java/org/olat/course/ICourse.java @@ -75,7 +75,7 @@ public interface ICourse extends OLATResourceable { public void postCopy(CourseEnvironmentMapper envMapper, ICourse sourceCourse); - public void postImport(CourseEnvironmentMapper envMapper); + public void postImport(File importDirectory, CourseEnvironmentMapper envMapper); /** * Return the container to files for this course. diff --git a/src/main/java/org/olat/course/PersistingCourseImpl.java b/src/main/java/org/olat/course/PersistingCourseImpl.java index 1156d7db7fd556ddaa265af66b59d6e148204bc1..df5163bb394548876e72fa4c9df5ae2957607817 100644 --- a/src/main/java/org/olat/course/PersistingCourseImpl.java +++ b/src/main/java/org/olat/course/PersistingCourseImpl.java @@ -398,13 +398,13 @@ public class PersistingCourseImpl implements ICourse, OLATResourceable, Serializ } @Override - public void postImport(CourseEnvironmentMapper envMapper) { + public void postImport(File importDirectory, CourseEnvironmentMapper envMapper) { Structure importedStructure = getRunStructure(); - visit(new NodePostImportVisitor(envMapper, Processing.runstructure), importedStructure.getRootNode()); + visit(new NodePostImportVisitor(importDirectory, this, envMapper, Processing.runstructure), importedStructure.getRootNode()); saveRunStructure(); CourseEditorTreeModel importedEditorModel = getEditorTreeModel(); - visit(new NodePostImportVisitor(envMapper, Processing.editor), importedEditorModel.getRootNode()); + visit(new NodePostImportVisitor(importDirectory, this, envMapper, Processing.editor), importedEditorModel.getRootNode()); saveEditorTreeModel(); } @@ -574,13 +574,16 @@ class NodePostExportVisitor implements Visitor { } class NodePostImportVisitor implements Visitor { - + private final ICourse course; + private final File importDirectory; private final Processing processType; private final CourseEnvironmentMapper envMapper; - public NodePostImportVisitor(CourseEnvironmentMapper envMapper, Processing processType) { + public NodePostImportVisitor(File importDirectory, ICourse course, CourseEnvironmentMapper envMapper, Processing processType) { + this.course = course; this.envMapper = envMapper; this.processType = processType; + this.importDirectory = importDirectory; } @Override @@ -589,7 +592,7 @@ class NodePostImportVisitor implements Visitor { node = ((CourseEditorTreeNode)node).getCourseNode(); } if(node instanceof CourseNode) { - ((CourseNode)node).postImport(envMapper, processType); + ((CourseNode)node).postImport(importDirectory, course, envMapper, processType); } } } diff --git a/src/main/java/org/olat/course/export/CourseEnvironmentMapper.java b/src/main/java/org/olat/course/export/CourseEnvironmentMapper.java index e43cdbfadef4a92d5ef470cad6fb998a6df2d19c..833d47181dcc63b44505016eadf2e31c5d3f6a0c 100644 --- a/src/main/java/org/olat/course/export/CourseEnvironmentMapper.java +++ b/src/main/java/org/olat/course/export/CourseEnvironmentMapper.java @@ -26,6 +26,7 @@ import java.util.List; import java.util.Set; import java.util.UUID; +import org.olat.core.id.Identity; import org.olat.core.util.StringHelper; import org.olat.group.model.BGAreaReference; import org.olat.group.model.BusinessGroupEnvironment; @@ -40,6 +41,20 @@ public class CourseEnvironmentMapper { private final List<BGAreaReference> areas = new ArrayList<BGAreaReference>(); private final List<BusinessGroupReference> groups = new ArrayList<BusinessGroupReference>(); + private Identity author; + + public CourseEnvironmentMapper() { + // + } + + public Identity getAuthor() { + return author; + } + + public void setAuthor(Identity author) { + this.author = author; + } + public List<BGAreaReference> getAreas() { return areas; } @@ -116,6 +131,18 @@ public class CourseEnvironmentMapper { return groupKeyList; } + public Long toGroupKeyFromOriginalKey(Long originalKey) { + if(originalKey == null) return null; + Long groupKey = null; + for(BusinessGroupReference group:groups) { + if(originalKey.equals(group.getOriginalKey())) { + groupKey = group.getKey(); + break; + } + } + return groupKey; + } + public List<Long> toAreaKeyFromOriginalNames(String areaNames) { if(!StringHelper.containsNonWhitespace(areaNames)) return null; String[] areaNameArr = areaNames.split(","); diff --git a/src/main/java/org/olat/course/nodes/COCourseNode.java b/src/main/java/org/olat/course/nodes/COCourseNode.java index 156e736df8342acae6719fc4a05dcc2e03b0bd61..60d578413ef7114a491e6831304fcbae3d5c40eb 100755 --- a/src/main/java/org/olat/course/nodes/COCourseNode.java +++ b/src/main/java/org/olat/course/nodes/COCourseNode.java @@ -25,6 +25,7 @@ package org.olat.course.nodes; +import java.io.File; import java.util.ArrayList; import java.util.List; @@ -123,8 +124,8 @@ public class COCourseNode extends AbstractAccessableCourseNode { } @Override - public void postImport(CourseEnvironmentMapper envMapper, Processing processType) { - super.postImport(envMapper, processType); + public void postImport(File importDirectory, ICourse course, CourseEnvironmentMapper envMapper, Processing processType) { + super.postImport(importDirectory, course, envMapper, processType); postImportCopy(envMapper); } diff --git a/src/main/java/org/olat/course/nodes/CourseNode.java b/src/main/java/org/olat/course/nodes/CourseNode.java index 2da740c41b0a69f4091a75de9d19c3cc947c5397..c21423ecf3c1718bfffcaeac26fff3c151a8ba38 100644 --- a/src/main/java/org/olat/course/nodes/CourseNode.java +++ b/src/main/java/org/olat/course/nodes/CourseNode.java @@ -371,7 +371,7 @@ public interface CourseNode extends INode, ShortName { /** * Remap the node to the context of the course after import. */ - public void postImport(CourseEnvironmentMapper envMapper, Processing type); + public void postImport(File importDirectory, ICourse course, CourseEnvironmentMapper envMapper, Processing type); /** * diff --git a/src/main/java/org/olat/course/nodes/ENCourseNode.java b/src/main/java/org/olat/course/nodes/ENCourseNode.java index 014e45d239b28534982926dc0170400f1fdb9c05..b2cdb300e11c8dfcb147839b737a16eae0e2ab0e 100644 --- a/src/main/java/org/olat/course/nodes/ENCourseNode.java +++ b/src/main/java/org/olat/course/nodes/ENCourseNode.java @@ -25,6 +25,7 @@ package org.olat.course.nodes; +import java.io.File; import java.util.ArrayList; import java.util.List; @@ -274,8 +275,8 @@ public class ENCourseNode extends AbstractAccessableCourseNode { } @Override - public void postImport(CourseEnvironmentMapper envMapper, Processing processType) { - super.postImport(envMapper, processType); + public void postImport(File importDirectory, ICourse course, CourseEnvironmentMapper envMapper, Processing processType) { + super.postImport(importDirectory, course, envMapper, processType); postImportCopy(envMapper); } diff --git a/src/main/java/org/olat/course/nodes/GenericCourseNode.java b/src/main/java/org/olat/course/nodes/GenericCourseNode.java index b0448f71a63dd579eaf5c50868f98956cd76a558..828c89bd3702e75b1f9ba41a8017d0ca9b5795f2 100644 --- a/src/main/java/org/olat/course/nodes/GenericCourseNode.java +++ b/src/main/java/org/olat/course/nodes/GenericCourseNode.java @@ -440,7 +440,7 @@ public abstract class GenericCourseNode extends GenericNode implements CourseNod } @Override - public void postImport(CourseEnvironmentMapper envMapper, Processing processType) { + public void postImport(File importDirectory, ICourse course, CourseEnvironmentMapper envMapper, Processing processType) { postImportCopyConditions(envMapper); } diff --git a/src/main/java/org/olat/course/nodes/ProjectBrokerCourseNode.java b/src/main/java/org/olat/course/nodes/ProjectBrokerCourseNode.java index 62edaaebc93591d1600913de7e55466f370d71f7..a17f2e518afe054e1c4dab35f0f1867aa2b68e17 100644 --- a/src/main/java/org/olat/course/nodes/ProjectBrokerCourseNode.java +++ b/src/main/java/org/olat/course/nodes/ProjectBrokerCourseNode.java @@ -30,6 +30,7 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; +import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -699,55 +700,97 @@ public class ProjectBrokerCourseNode extends GenericCourseNode implements Assess } @Override - public void importNode(File importDirectory, ICourse course, Identity owner, Locale locale, boolean withReferences) { + public void postImport(File importDirectory, ICourse course, CourseEnvironmentMapper envMapper, Processing processType) { // initialize managers - ProjectBrokerManager projectBrokerManager = CoreSpringFactory.getImpl(ProjectBrokerManager.class); + if(processType == Processing.editor && importDirectory != null) { + ProjectBrokerManager projectBrokerManager = CoreSpringFactory.getImpl(ProjectBrokerManager.class); + CoursePropertyManager cpm = course.getCourseEnvironment().getCoursePropertyManager(); + // create a new projectBroker + ProjectBroker projectBroker = projectBrokerManager.createAndSaveProjectBroker(); + projectBrokerManager.saveProjectBrokerId(projectBroker.getKey(), cpm, this); + // get the node folder inside of the importDirectory + File folderNodeData = new File(importDirectory, getIdent()); + // loop through the project directories + if (folderNodeData.exists()) { + for (File projectDir : folderNodeData.listFiles(DirectoryFilter.DIRECTORY_FILTER)) { + for (File projectFile : projectDir.listFiles(new FileNameSuffixFilter("xml"))) { + importProject(projectDir, projectFile, projectBroker, course, envMapper); + } + } + } + } + super.postImport(importDirectory, course, envMapper, processType); + } + + private void importProject(File projectDir, File projectFile, ProjectBroker projectBroker, ICourse course, CourseEnvironmentMapper envMapper) { + XStream xstream = XStreamHelper.createXStreamInstance(); + BusinessGroupService bgs = CoreSpringFactory.getImpl(BusinessGroupService.class); CoursePropertyManager cpm = course.getCourseEnvironment().getCoursePropertyManager(); ProjectGroupManager projectGroupManager = CoreSpringFactory.getImpl(ProjectGroupManager.class); - XStream xstream = XStreamHelper.createXStreamInstance(); - // create a new projectBroker - ProjectBroker projectBroker = projectBrokerManager.createAndSaveProjectBroker(); - projectBrokerManager.saveProjectBrokerId(projectBroker.getKey(), cpm, this); - // get the node folder inside of the importDirectory - File folderNodeData = new File(importDirectory, this.getIdent()); - // loop through the project directories - if (folderNodeData.exists()) { - for (File projectDir : folderNodeData.listFiles(DirectoryFilter.DIRECTORY_FILTER)) { - for (File projectFile : projectDir.listFiles(new FileNameSuffixFilter("xml"))) { - // read the projectConfiguration from the importDirectory - try { - Map<String, Object> projectConfig = (HashMap<String, Object>) XStreamHelper.readObject(xstream, projectFile); - BusinessGroup projectGroup = projectGroupManager.createProjectGroupFor(projectBroker.getKey(), owner, projectConfig.get("title").toString(), projectConfig.get("description").toString(), course.getResourceableId()); - Project project = projectBrokerManager.createAndSaveProjectFor(projectConfig.get("title").toString(), projectConfig.get("description").toString(), projectBrokerManager.getProjectBrokerId(cpm, this), projectGroup); - projectGroupManager.setDeselectionAllowed(project, (boolean) projectConfig.get("allowDeselection")); - project.setMailNotificationEnabled((boolean) projectConfig.get("mailNotificationEnabled")); - project.setMaxMembers((int) projectConfig.get("maxMembers")); - project.setAttachedFileName(projectConfig.get("attachmentFileName").toString()); - for (int i = 0; i < (int) projectConfig.get("customeFieldSize"); i++) { - project.setCustomFieldValue(i, projectConfig.get("customFieldValue" + i).toString()); - } - projectBrokerManager.updateProject(project); - - // get the attachment directory within the project - // directory - File attachmentDir = new File(projectDir, "attachment");// .getParentFile().listFiles(attachmentFilter); - if (attachmentDir.exists()) { - File[] attachment = attachmentDir.listFiles(); - if (attachment.length > 0) { - VFSLeaf attachmentLeaf = new LocalFileImpl(attachment[0]); - projectBrokerManager.saveAttachedFile(project, projectConfig.get("attachmentFileName").toString(), attachmentLeaf, course.getCourseEnvironment(), this); - } - } - } catch (Exception e) { - // handle/log error in case of FileIO exception or cast - // exception if import input is not correct - log.error("Error while importing a project into projectbroker", e); + ProjectBrokerManager projectBrokerManager = CoreSpringFactory.getImpl(ProjectBrokerManager.class); + + // read the projectConfiguration from the importDirectory + try { + @SuppressWarnings("unchecked") + Map<String, Object> projectConfig = (HashMap<String, Object>) XStreamHelper.readObject(xstream, projectFile); + String projectTitle = (String)projectConfig.get("title"); + + Long originalGroupKey = null; + if(projectConfig.containsKey("businessGroupKey")) { + originalGroupKey = (Long)projectConfig.get("businessGroupKey"); + } else { + for(BusinessGroupReference ref:envMapper.getGroups()) { + if(ref.getName().endsWith(projectTitle)) { + originalGroupKey = ref.getOriginalKey(); } } } + + BusinessGroup projectGroup = null; + if(originalGroupKey != null) { + Long groupKey = envMapper.toGroupKeyFromOriginalKey(originalGroupKey); + projectGroup = bgs.loadBusinessGroup(groupKey); + } + if(projectGroup == null) { + projectGroup = projectGroupManager.createProjectGroupFor(projectBroker.getKey(), envMapper.getAuthor(), projectTitle, (String)projectConfig.get("description"), course.getResourceableId()); + } + if(envMapper.getAuthor() != null) { + Identity author = envMapper.getAuthor(); + bgs.addOwners(author, null, Collections.singletonList(author), projectGroup, null); + } + + Project project = projectBrokerManager.createAndSaveProjectFor(projectTitle, (String)projectConfig.get("description"), projectBrokerManager.getProjectBrokerId(cpm, this), projectGroup); + projectGroupManager.setDeselectionAllowed(project, (boolean) projectConfig.get("allowDeselection")); + project.setMailNotificationEnabled((boolean) projectConfig.get("mailNotificationEnabled")); + project.setMaxMembers((int) projectConfig.get("maxMembers")); + project.setAttachedFileName(projectConfig.get("attachmentFileName").toString()); + for (int i = 0; i < (int) projectConfig.get("customeFieldSize"); i++) { + project.setCustomFieldValue(i, projectConfig.get("customFieldValue" + i).toString()); + } + projectBrokerManager.updateProject(project); + + // get the attachment directory within the project + // directory + File attachmentDir = new File(projectDir, "attachment");// .getParentFile().listFiles(attachmentFilter); + if (attachmentDir.exists()) { + File[] attachment = attachmentDir.listFiles(); + if (attachment.length > 0) { + VFSLeaf attachmentLeaf = new LocalFileImpl(attachment[0]); + projectBrokerManager.saveAttachedFile(project, projectConfig.get("attachmentFileName").toString(), attachmentLeaf, course.getCourseEnvironment(), this); + } + } + } catch (Exception e) { + // handle/log error in case of FileIO exception or cast + // exception if import input is not correct + log.error("Error while importing a project into projectbroker", e); } } + @Override + public void importNode(File importDirectory, ICourse course, Identity owner, Locale locale, boolean withReferences) { + super.importNode(importDirectory, course, owner, locale, withReferences); + } + @Override public void exportNode(File exportDirectory, ICourse course) { // initialize managers @@ -760,9 +803,7 @@ public class ProjectBrokerCourseNode extends GenericCourseNode implements Assess File pbNodeFolder = new File(exportDirectory, getIdent()); // get all the projects available in the pb List<Project> projects = projectBrokerManager.getProjectListBy(pb.getKey()); - ListIterator<Project> projectIterator = projects.listIterator(); - while (projectIterator.hasNext()) { - Project project = projectIterator.next(); + for (Project project:projects) { File projectFolder = new File(pbNodeFolder, project.getKey().toString()); projectFolder.mkdirs(); // create a hashmap with the project configuration and insert the @@ -777,6 +818,7 @@ public class ProjectBrokerCourseNode extends GenericCourseNode implements Assess projectData.put("attachmentFileName", project.getAttachmentFileName()); projectData.put("allowDeselection", projectGroupManager.isDeselectionAllowed(project)); projectData.put("customeFieldSize", project.getCustomFieldSize()); + projectData.put("businessGroupKey", project.getProjectGroup().getKey()); // iterate through the customFields for (int i = 0; i < project.getCustomFieldSize(); i++) { projectData.put("customFieldValue" + i, project.getCustomFieldValue(i)); @@ -938,59 +980,54 @@ public class ProjectBrokerCourseNode extends GenericCourseNode implements Assess postExportCondition(conditionProjectBroker, envMapper, backwardsCompatible); } + /** + * Do re-arrange the projects in a new project broker after the copy happened + */ @Override public void postCopy(CourseEnvironmentMapper envMapper, Processing processType, ICourse course, ICourse sourceCourse) { super.postCopy(envMapper, processType, course, null); - if(processType.equals(Processing.runstructure)){ - postImportCopy(envMapper, course, sourceCourse); - } - } - - /** - * do re-arrange the projects in a new projectbroker after the copy happened - * @param envMapper - * @param course - */ - public void postImportCopy(CourseEnvironmentMapper envMapper, ICourse course, ICourse sourceCourse) { - //initialize the managers and services - ProjectBrokerManager projectBrokerManager = CoreSpringFactory.getImpl(ProjectBrokerManager.class); - ProjectGroupManager projectGroupManager = CoreSpringFactory.getImpl(ProjectGroupManager.class); - CoursePropertyManager oldCpm = sourceCourse.getCourseEnvironment().getCoursePropertyManager(); - BusinessGroupService bgs = CoreSpringFactory.getImpl(BusinessGroupService.class); - //create new Project broker and get the old one - Long projectBrokerId = projectBrokerManager.createAndSaveProjectBroker().getKey(); - projectBrokerManager.saveProjectBrokerId(projectBrokerId, course.getCourseEnvironment().getCoursePropertyManager(), this); - Long oldBrokerId = projectBrokerManager.getProjectBrokerId(oldCpm, this); - List<Project> projectsFromGroup = projectBrokerManager.getProjectListBy(oldBrokerId); - //loop create and configure the new Projects - for(Project project : projectsFromGroup){ - Identity ident = bgs.getMembers(project.getProjectGroup(), GroupRoles.coach.name()).get(0); - for(BusinessGroupReference group : envMapper.getGroups()){ - if(group.getName() == project.getProjectGroup().getName()){ - bgs.deleteBusinessGroup(bgs.loadBusinessGroup(group.getKey())); + if(processType.equals(Processing.runstructure)) { + //initialize the managers and services + ProjectBrokerManager projectBrokerManager = CoreSpringFactory.getImpl(ProjectBrokerManager.class); + ProjectGroupManager projectGroupManager = CoreSpringFactory.getImpl(ProjectGroupManager.class); + CoursePropertyManager oldCpm = sourceCourse.getCourseEnvironment().getCoursePropertyManager(); + BusinessGroupService bgs = CoreSpringFactory.getImpl(BusinessGroupService.class); + //create new Project broker and get the old one + Long projectBrokerId = projectBrokerManager.createAndSaveProjectBroker().getKey(); + projectBrokerManager.saveProjectBrokerId(projectBrokerId, course.getCourseEnvironment().getCoursePropertyManager(), this); + Long oldBrokerId = projectBrokerManager.getProjectBrokerId(oldCpm, this); + List<Project> projectsFromGroup = projectBrokerManager.getProjectListBy(oldBrokerId); + //loop create and configure the new Projects + for(Project project : projectsFromGroup){ + Long originalGroupKey = project.getProjectGroup().getKey(); + Long copiedGroupKey = envMapper.toGroupKeyFromOriginalKey(originalGroupKey); + + BusinessGroup projectGroup = bgs.loadBusinessGroup(copiedGroupKey); + if(envMapper.getAuthor() != null) { + Identity author = envMapper.getAuthor(); + bgs.addOwners(author, null, Collections.singletonList(author), projectGroup, null); } - } - BusinessGroup projectGroup = bgs.copyBusinessGroup(ident, project.getProjectGroup(), project.getTitle(), project.getDescription(), -1, -1, false, false, false, true, false, false, false, false); - Project newProject = projectBrokerManager.createAndSaveProjectFor(project.getTitle(), project.getDescription(), projectBrokerId, projectGroup); - // copy all project configurations - newProject.setMailNotificationEnabled(project.isMailNotificationEnabled()); - newProject.setMaxMembers(project.getMaxMembers()); - for (int i = 0; i < project.getCustomFieldSize(); i++) { - newProject.setCustomFieldValue(i, project.getCustomFieldValue(i)); - } - projectGroupManager.setDeselectionAllowed(newProject, project.getProjectGroup().isAllowToLeave()); - projectBrokerManager.updateProject(newProject); - // attachment file - OlatRootFolderImpl rootFolder = new OlatRootFolderImpl(projectBrokerManager.getAttamchmentRelativeRootPath(project, sourceCourse.getCourseEnvironment(), this), null); - VFSItem item = rootFolder.resolve(project.getAttachmentFileName()); - if (item instanceof VFSLeaf) { - projectBrokerManager.saveAttachedFile(newProject, project.getAttachmentFileName(), (VFSLeaf) item, course.getCourseEnvironment(), this); - newProject.setAttachedFileName(project.getAttachmentFileName()); + + Project newProject = projectBrokerManager.createAndSaveProjectFor(project.getTitle(), project.getDescription(), projectBrokerId, projectGroup); + // copy all project configurations + newProject.setMailNotificationEnabled(project.isMailNotificationEnabled()); + newProject.setMaxMembers(project.getMaxMembers()); + for (int i = 0; i < project.getCustomFieldSize(); i++) { + newProject.setCustomFieldValue(i, project.getCustomFieldValue(i)); + } + projectGroupManager.setDeselectionAllowed(newProject, project.getProjectGroup().isAllowToLeave()); projectBrokerManager.updateProject(newProject); + // attachment file + OlatRootFolderImpl rootFolder = new OlatRootFolderImpl(projectBrokerManager.getAttamchmentRelativeRootPath(project, sourceCourse.getCourseEnvironment(), this), null); + VFSItem item = rootFolder.resolve(project.getAttachmentFileName()); + if (item instanceof VFSLeaf) { + projectBrokerManager.saveAttachedFile(newProject, project.getAttachmentFileName(), (VFSLeaf) item, course.getCourseEnvironment(), this); + newProject.setAttachedFileName(project.getAttachmentFileName()); + projectBrokerManager.updateProject(newProject); + } } - } + } } - /** * @see org.olat.course.nodes.CourseNode#createInstanceForCopy() diff --git a/src/main/java/org/olat/course/nodes/STCourseNode.java b/src/main/java/org/olat/course/nodes/STCourseNode.java index 1dd4cc8b9f4a5e893ca9f3fd868d4e299d12cfc7..e05d9be1a5ce0ebaa890c36645ce43910b801372 100644 --- a/src/main/java/org/olat/course/nodes/STCourseNode.java +++ b/src/main/java/org/olat/course/nodes/STCourseNode.java @@ -25,6 +25,7 @@ package org.olat.course.nodes; +import java.io.File; import java.util.ArrayList; import java.util.List; @@ -617,8 +618,8 @@ public class STCourseNode extends AbstractAccessableCourseNode implements Assess } @Override - public void postImport(CourseEnvironmentMapper envMapper, Processing processType) { - super.postImport(envMapper, processType); + public void postImport(File importDirectory, ICourse course, CourseEnvironmentMapper envMapper, Processing processType) { + super.postImport(importDirectory, course, envMapper, processType); postImportCopy(envMapper); } diff --git a/src/main/java/org/olat/repository/handlers/CourseHandler.java b/src/main/java/org/olat/repository/handlers/CourseHandler.java index 16c041736559349d8f20d208a1cfad0dd4ceba3f..54123f8e12711cd32084400e43f02b81029e765a 100644 --- a/src/main/java/org/olat/repository/handlers/CourseHandler.java +++ b/src/main/java/org/olat/repository/handlers/CourseHandler.java @@ -271,9 +271,10 @@ public class CourseHandler implements RepositoryHandler { cgm = course.getCourseEnvironment().getCourseGroupManager(); File fImportBaseDirectory = course.getCourseExportDataDir().getBasefile(); CourseEnvironmentMapper envMapper = cgm.importCourseBusinessGroups(fImportBaseDirectory); + envMapper.setAuthor(initialAuthor); //upgrade course course = CourseFactory.loadCourse(cgm.getCourseResource()); - course.postImport(envMapper); + course.postImport(fImportBaseDirectory, envMapper); //rename root nodes course.getRunStructure().getRootNode().setShortTitle(Formatter.truncateOnly(displayname, 25)); //do not use truncate! @@ -443,6 +444,7 @@ public class CourseHandler implements RepositoryHandler { CourseGroupManager cgm = course.getCourseEnvironment().getCourseGroupManager(); // import groups CourseEnvironmentMapper envMapper = cgm.importCourseBusinessGroups(fExportDir); + envMapper.setAuthor(author); //upgrade to the current version of the course course = CourseFactory.loadCourse(cgm.getCourseResource()); course.postCopy(envMapper, sourceCourse); diff --git a/src/main/java/org/olat/upgrade/OLATUpgrade_8_2_0.java b/src/main/java/org/olat/upgrade/OLATUpgrade_8_2_0.java index 34d92370ec84556c9976b40ccb76a3d9d8d4a303..7ef713968f77241342dd95425fb2c9d0a89c0fb4 100644 --- a/src/main/java/org/olat/upgrade/OLATUpgrade_8_2_0.java +++ b/src/main/java/org/olat/upgrade/OLATUpgrade_8_2_0.java @@ -176,7 +176,7 @@ public class OLATUpgrade_8_2_0 extends OLATUpgrade { try { ICourse course = CourseFactory.loadCourse(entry.getOlatResource()); CourseEnvironmentMapper envMapper = getCourseEnvironmentMapper(entry); - course.postImport(envMapper); + course.postImport(null, envMapper); } catch (CorruptedCourseException e) { log.error("Course seems corrupt: " + entry.getOlatResource().getResourceableId()); } catch (Exception e) {