diff --git a/src/main/java/org/olat/commons/calendar/ICalFileCalendarManager.java b/src/main/java/org/olat/commons/calendar/ICalFileCalendarManager.java index bcb956f15826384490a44cf3a05cca5dc3470441..226c619dd83e847e15b5cb71d2da432a0e0ac5c6 100644 --- a/src/main/java/org/olat/commons/calendar/ICalFileCalendarManager.java +++ b/src/main/java/org/olat/commons/calendar/ICalFileCalendarManager.java @@ -324,6 +324,9 @@ public class ICalFileCalendarManager extends BasicManager implements CalendarMan */ public KalendarConfig findKalendarConfigForIdentity(Kalendar kalendar, UserRequest ureq) { Preferences guiPreferences = ureq.getUserSession().getGuiPreferences(); + if(guiPreferences == null) { + return null; + } return (KalendarConfig)guiPreferences.get(KalendarConfig.class, kalendar.getCalendarID()); } diff --git a/src/main/java/org/olat/restapi/repository/course/CoursesWebService.java b/src/main/java/org/olat/restapi/repository/course/CoursesWebService.java index 7d01b6feb7e2238de682bf8e1a82db53c86d3bd3..e6269232b182837f2015fd82e8054d2d31eefef1 100644 --- a/src/main/java/org/olat/restapi/repository/course/CoursesWebService.java +++ b/src/main/java/org/olat/restapi/repository/course/CoursesWebService.java @@ -210,7 +210,8 @@ public class CoursesWebService { @PUT @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public Response createEmptyCourse(@QueryParam("shortTitle") String shortTitle, @QueryParam("title") String title, - @QueryParam("softKey") String softKey, @QueryParam("access") Integer access, @QueryParam("membersOnly") Boolean membersOnly, + @QueryParam("displayName") String displayName, @QueryParam("softKey") String softKey, + @QueryParam("access") Integer access, @QueryParam("membersOnly") Boolean membersOnly, @QueryParam("externalId") String externalId, @QueryParam("externalRef") String externalRef, @QueryParam("managedFlags") String managedFlags, @QueryParam("sharedFolderSoftKey") String sharedFolderSoftKey, @QueryParam("copyFrom") Long copyFrom, @@ -223,13 +224,16 @@ public class CoursesWebService { int accessInt = (access == null ? RepositoryEntry.ACC_OWNERS : access.intValue()); boolean membersOnlyBool = (membersOnly == null ? false : membersOnly.booleanValue()); + if(!StringHelper.containsNonWhitespace(displayName)) { + displayName = shortTitle; + } ICourse course; UserRequest ureq = getUserRequest(request); if(copyFrom != null) { - course = copyCourse(copyFrom, ureq, shortTitle, title, softKey, accessInt, membersOnlyBool, externalId, externalRef, managedFlags, configVO); + course = copyCourse(copyFrom, ureq, shortTitle, title, displayName, softKey, accessInt, membersOnlyBool, externalId, externalRef, managedFlags, configVO); } else { - course = createEmptyCourse(ureq.getIdentity(), shortTitle, title, softKey, accessInt, membersOnlyBool, externalId, externalRef, managedFlags, configVO); + course = createEmptyCourse(ureq.getIdentity(), shortTitle, title, displayName, softKey, accessInt, membersOnlyBool, externalId, externalRef, managedFlags, configVO); } CourseVO vo = ObjectFactory.get(course); return Response.ok(vo).build(); @@ -257,8 +261,9 @@ public class CoursesWebService { UserRequest ureq = getUserRequest(request); CourseConfigVO configVO = new CourseConfigVO(); - ICourse course = createEmptyCourse(ureq.getIdentity(), courseVo.getTitle(), - courseVo.getTitle(), courseVo.getSoftKey(), RepositoryEntry.ACC_OWNERS, false, + ICourse course = createEmptyCourse(ureq.getIdentity(), + courseVo.getTitle(), courseVo.getTitle(), courseVo.getTitle(), + courseVo.getSoftKey(), RepositoryEntry.ACC_OWNERS, false, courseVo.getExternalId(), courseVo.getExternalRef(), courseVo.getManagedFlags(), configVO); CourseVO vo = ObjectFactory.get(course); @@ -423,10 +428,10 @@ public class CoursesWebService { } } - public static ICourse copyCourse(Long copyFrom, UserRequest ureq, String name, String longTitle, + private static ICourse copyCourse(Long copyFrom, UserRequest ureq, String shortTitle, String longTitle, String displayName, String softKey, int access, boolean membersOnly, String externalId, String externalRef, String managedFlags, CourseConfigVO courseConfigVO) { - String shortTitle = name; + //String learningObjectives = name + " (Example of creating a new course)"; OLATResourceable originalOresTrans = OresHelper.createOLATResourceableInstance(CourseModule.class, copyFrom); @@ -450,8 +455,8 @@ public class CoursesWebService { preparedEntry.setCanDownload(src.getCanDownload()); preparedEntry.setCanLaunch(src.getCanLaunch()); - if (courseConfigVO != null && StringHelper.containsNonWhitespace(shortTitle)) { - preparedEntry.setDisplayname(shortTitle); + if (courseConfigVO != null && StringHelper.containsNonWhitespace(displayName)) { + preparedEntry.setDisplayname(displayName); } else { preparedEntry.setDisplayname("Copy of " + src.getDisplayname()); } @@ -488,7 +493,7 @@ public class CoursesWebService { // copy image if available RepositoryManager.getInstance().copyImage(src, preparedEntry); - ICourse course = prepareCourse(preparedEntry, courseConfigVO); + ICourse course = prepareCourse(preparedEntry,shortTitle, longTitle, courseConfigVO); RepositoryHandlerFactory.getInstance().getRepositoryHandler(src).releaseLock(lockResult); return course; } @@ -505,7 +510,7 @@ public class CoursesWebService { * @return */ public static ICourse createEmptyCourse(Identity initialAuthor, String shortTitle, String longTitle, CourseConfigVO courseConfigVO) { - return createEmptyCourse(initialAuthor, shortTitle, longTitle, null, RepositoryEntry.ACC_OWNERS, false, null, null, null, courseConfigVO); + return createEmptyCourse(initialAuthor, shortTitle, longTitle, shortTitle, null, RepositoryEntry.ACC_OWNERS, false, null, null, null, courseConfigVO); } /** @@ -520,18 +525,22 @@ public class CoursesWebService { * @param courseConfigVO * @return */ - public static ICourse createEmptyCourse(Identity initialAuthor, String shortTitle, String longTitle, + public static ICourse createEmptyCourse(Identity initialAuthor, String shortTitle, String longTitle, String reDisplayName, String softKey, int access, boolean membersOnly, String externalId, String externalRef, String managedFlags, CourseConfigVO courseConfigVO) { + String learningObjectives = shortTitle + " (Example of creating a new course)"; - + if(!StringHelper.containsNonWhitespace(reDisplayName)) { + reDisplayName = shortTitle; + } + try { OLATResourceable oresable = OLATResourceManager.getInstance().createOLATResourceInstance(CourseModule.class); // create a repository entry - RepositoryEntry addedEntry = createCourseRepositoryEntry(initialAuthor, shortTitle, softKey, externalId, externalRef, managedFlags, oresable); + RepositoryEntry addedEntry = createCourseRepositoryEntry(initialAuthor, reDisplayName, softKey, externalId, externalRef, managedFlags, oresable); // create an empty course CourseFactory.createEmptyCourse(oresable, shortTitle, longTitle, learningObjectives); prepareSecurityGroup(initialAuthor, addedEntry, access, membersOnly); - return prepareCourse(addedEntry, courseConfigVO); + return prepareCourse(addedEntry, shortTitle, longTitle, courseConfigVO); } catch (Exception e) { throw new WebApplicationException(e); } @@ -605,19 +614,27 @@ public class CoursesWebService { RepositoryManager.getInstance().saveRepositoryEntry(addedEntry); } - private static ICourse prepareCourse(RepositoryEntry addedEntry, CourseConfigVO courseConfigVO) { + private static ICourse prepareCourse(RepositoryEntry addedEntry, String shortTitle, String longTitle, CourseConfigVO courseConfigVO) { BaseSecurity securityManager = BaseSecurityManager.getInstance(); securityManager.createAndPersistPolicy(addedEntry.getOwnerGroup(), Constants.PERMISSION_ADMIN, addedEntry.getOlatResource()); // set root node title + String courseShortTitle = addedEntry.getDisplayname(); + if(StringHelper.containsNonWhitespace(shortTitle)) { + courseShortTitle = shortTitle; + } + String courseLongTitle = addedEntry.getDisplayname(); + if(StringHelper.containsNonWhitespace(longTitle)) { + courseLongTitle = longTitle; + } + ICourse course = CourseFactory.openCourseEditSession(addedEntry.getOlatResource().getResourceableId()); - String displayName = addedEntry.getDisplayname(); - course.getRunStructure().getRootNode().setShortTitle(Formatter.truncate(displayName, 25)); - course.getRunStructure().getRootNode().setLongTitle(displayName); + course.getRunStructure().getRootNode().setShortTitle(Formatter.truncate(courseShortTitle, 25)); + course.getRunStructure().getRootNode().setLongTitle(courseLongTitle); CourseNode rootNode = ((CourseEditorTreeNode) course.getEditorTreeModel().getRootNode()).getCourseNode(); - rootNode.setShortTitle(Formatter.truncate(displayName, 25)); - rootNode.setLongTitle(displayName); + rootNode.setShortTitle(Formatter.truncate(courseShortTitle, 25)); + rootNode.setLongTitle(courseLongTitle); if(courseConfigVO != null) { CourseConfig courseConfig = course.getCourseEnvironment().getCourseConfig(); @@ -625,7 +642,6 @@ public class CoursesWebService { courseConfig.setSharedFolderSoftkey(courseConfigVO.getSharedFolderSoftKey()); } } - //RepositoryManager.getInstance().updateRepositoryEntry(addedEntry); CourseFactory.saveCourse(course.getResourceableId()); CourseFactory.closeCourseEditSession(course.getResourceableId(), true); diff --git a/src/test/java/org/olat/restapi/CoursesTest.java b/src/test/java/org/olat/restapi/CoursesTest.java index 730bbc992e5f295129f5c18b5173b241ff8173d5..f91494200e97da26dc26b2e7dde67b34643e039e 100644 --- a/src/test/java/org/olat/restapi/CoursesTest.java +++ b/src/test/java/org/olat/restapi/CoursesTest.java @@ -103,16 +103,16 @@ public class CoursesTest extends OlatJerseyTestCase { try { // create course and persist as OLATResourceImpl admin = BaseSecurityManager.getInstance().findIdentityByName("administrator"); - course1 = CoursesWebService.createEmptyCourse(admin, "courses1", "courses1 long name", null, RepositoryEntry.ACC_OWNERS, false, null, null, null, null); + course1 = CoursesWebService.createEmptyCourse(admin, "courses1", "courses1 long name", null, null, RepositoryEntry.ACC_OWNERS, false, null, null, null, null); externalId = UUID.randomUUID().toString(); externalRef = UUID.randomUUID().toString(); - course2 = CoursesWebService.createEmptyCourse(admin, "courses2", "courses2 long name", null, RepositoryEntry.ACC_OWNERS, false, externalId, externalRef, "all", null); + course2 = CoursesWebService.createEmptyCourse(admin, "courses2", "courses2 long name", null, null, RepositoryEntry.ACC_OWNERS, false, externalId, externalRef, "all", null); dbInstance.commitAndCloseSession(); externalId3 = UUID.randomUUID().toString(); - course3 = CoursesWebService.createEmptyCourse(admin, "courses3", "courses3 long name", null, RepositoryEntry.ACC_OWNERS, false, externalId3, null, "all", null); + course3 = CoursesWebService.createEmptyCourse(admin, "courses3", "courses3 long name", null, null, RepositoryEntry.ACC_OWNERS, false, externalId3, null, "all", null); RepositoryEntry re3 = repositoryManager.lookupRepositoryEntry(course3, false); RepositoryEntryLifecycle lifecycle3 = reLifecycleDao.create("course3 lifecycle", UUID.randomUUID().toString(), true, new Date(), new Date()); dbInstance.commit();