diff --git a/src/main/java/org/olat/course/config/ui/CourseToolbarController.java b/src/main/java/org/olat/course/config/ui/CourseToolbarController.java index ee4b45b7bb83e2ef8961631a50c732d9e5f086e2..2583770bfcc8cace0d8076f1991d8f00f017678c 100644 --- a/src/main/java/org/olat/course/config/ui/CourseToolbarController.java +++ b/src/main/java/org/olat/course/config/ui/CourseToolbarController.java @@ -267,7 +267,7 @@ public class CourseToolbarController extends FormBasicController { .fireEventToListenersOf(new CourseConfigEvent(CourseConfigType.calendar, course.getResourceableId()), course); } - fireEvent(ureq, new ReloadSettingsEvent()); + fireEvent(ureq, new ReloadSettingsEvent(false, true, false)); } @Override diff --git a/src/main/java/org/olat/course/run/CourseRuntimeController.java b/src/main/java/org/olat/course/run/CourseRuntimeController.java index c20ad1e5c9a41ee8fff5766814a1e506c0e8c5fe..313a27cef016d83b1b138b0c67402fcafe2ab96a 100644 --- a/src/main/java/org/olat/course/run/CourseRuntimeController.java +++ b/src/main/java/org/olat/course/run/CourseRuntimeController.java @@ -429,14 +429,7 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im toolbarPanel.setBreadcrumbEnabled(false); } - if(!isAssessmentLock()) { - initSettingsTools(toolsDropdown); - initEditorTools(toolsDropdown, uce); - initRuntimeTools(toolsDropdown, uce); - initStatistics(toolsDropdown, course, uce); - initEditionTools(toolsDropdown); - initDeleteTools(toolsDropdown); - } + initToolsMenu(toolsDropdown); initToolsMyCourse(course, uce); initGeneralTools(course); @@ -457,7 +450,25 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im } @Override - protected void initSettingsTools(Dropdown tools) { + protected void initToolsMenu(Dropdown toolsDropdown) { + toolsDropdown.removeAllComponents(); + toolsDropdown.setDirty(true); + + if(!isAssessmentLock()) { + ICourse course = CourseFactory.loadCourse(getRepositoryEntry()); + UserCourseEnvironmentImpl uce = getUserCourseEnvironment(); + + initToolsMenuSettings(toolsDropdown); + initToolsMenuEditor(toolsDropdown, uce); + initToolsMenuRuntime(toolsDropdown, uce); + initToolsMenuStatistics(toolsDropdown, course, uce); + initToolsMenuEdition(toolsDropdown); + initToolsMenuDelete(toolsDropdown); + } + } + + @Override + protected void initToolsMenuSettings(Dropdown tools) { // 1) administrative tools if (reSecurity.isEntryAdmin() || reSecurity.isPrincipal() || reSecurity.isCoach() || hasCourseRight(CourseRights.RIGHT_COURSEEDITOR) || hasCourseRight(CourseRights.RIGHT_MEMBERMANAGEMENT) @@ -482,7 +493,7 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im } } - private void initEditorTools(Dropdown tools, final UserCourseEnvironmentImpl uce) { + private void initToolsMenuEditor(Dropdown tools, final UserCourseEnvironmentImpl uce) { if(uce == null) return; if (reSecurity.isEntryAdmin() || hasCourseRight(CourseRights.RIGHT_COURSEEDITOR)) { @@ -503,7 +514,7 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im } } - private void initRuntimeTools(Dropdown tools, final UserCourseEnvironmentImpl uce) { + private void initToolsMenuRuntime(Dropdown tools, final UserCourseEnvironmentImpl uce) { boolean courseAuthorRight = reSecurity.isEntryAdmin() || hasCourseRight(CourseRights.RIGHT_COURSEEDITOR); if (courseAuthorRight || reSecurity.isPrincipal() || reSecurity.isCoach() || hasCourseRight(CourseRights.RIGHT_DB) @@ -559,7 +570,7 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im return lectureConfig != null && lectureConfig.isLectureEnabled(); } - private void initStatistics(Dropdown tools, ICourse course, final UserCourseEnvironmentImpl uce) { + private void initToolsMenuStatistics(Dropdown tools, ICourse course, final UserCourseEnvironmentImpl uce) { if (reSecurity.isEntryAdmin() || reSecurity.isPrincipal() || reSecurity.isCoach() || hasCourseRight(CourseRights.RIGHT_ARCHIVING) || hasCourseRight(CourseRights.RIGHT_STATISTICS)) { @@ -606,7 +617,7 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im } @Override - protected void initDeleteTools(Dropdown settingsDropdown) { + protected void initToolsMenuDelete(Dropdown settingsDropdown) { RepositoryEntry re = getRepositoryEntry(); boolean closeManged = RepositoryEntryManagedFlag.isManaged(re, RepositoryEntryManagedFlag.close); diff --git a/src/main/java/org/olat/ims/qti/QTIRuntimeController.java b/src/main/java/org/olat/ims/qti/QTIRuntimeController.java index 9da7481175020a405388d9922a06829bac728e37..77e552a3c94f2b58b53f19266701b601518eaa13 100644 --- a/src/main/java/org/olat/ims/qti/QTIRuntimeController.java +++ b/src/main/java/org/olat/ims/qti/QTIRuntimeController.java @@ -73,8 +73,8 @@ public class QTIRuntimeController extends RepositoryEntryRuntimeController imple } @Override - protected void initEditionTools(Dropdown settingsDropdown) { - super.initEditionTools(settingsDropdown); + protected void initToolsMenuEdition(Dropdown settingsDropdown) { + super.initToolsMenuEdition(settingsDropdown); RepositoryEntry re = getRepositoryEntry(); boolean copyManaged = RepositoryEntryManagedFlag.isManaged(re, RepositoryEntryManagedFlag.copy); boolean canConvert = (isAuthor || reSecurity.isEntryAdmin()) && (re.getCanCopy() || reSecurity.isEntryAdmin()) && !copyManaged diff --git a/src/main/java/org/olat/ims/qti21/ui/QTI21RuntimeController.java b/src/main/java/org/olat/ims/qti21/ui/QTI21RuntimeController.java index 6e6e73c29234fe4240c1d8c72704ad6ee7ecde55..b6cc6815ceb551d05a2cf382aa38233667843884 100644 --- a/src/main/java/org/olat/ims/qti21/ui/QTI21RuntimeController.java +++ b/src/main/java/org/olat/ims/qti21/ui/QTI21RuntimeController.java @@ -79,7 +79,7 @@ public class QTI21RuntimeController extends RepositoryEntryRuntimeController { } @Override - protected void initRuntimeTools(Dropdown toolsDropdown) { + protected void initToolsMenuRuntime(Dropdown toolsDropdown) { if (reSecurity.isEntryAdmin() || reSecurity.isCoach()) { assessmentLink = LinkFactory.createToolLink("assessment", translate("command.openassessment"), this, "o_icon_assessment_tool"); assessmentLink.setElementCssClass("o_sel_course_assessment_tool"); @@ -89,7 +89,7 @@ public class QTI21RuntimeController extends RepositoryEntryRuntimeController { toolsDropdown.addComponent(testStatisticLink); } - super.initRuntimeTools(toolsDropdown); + super.initToolsMenuRuntime(toolsDropdown); } @Override diff --git a/src/main/java/org/olat/modules/curriculum/ui/CurriculumElementListController.java b/src/main/java/org/olat/modules/curriculum/ui/CurriculumElementListController.java index ff2fe4a9ca63963d1480229cf824f7dc6b53caa4..7e9b6594ad768c2e57fc756298dbb8e3c88cef83 100644 --- a/src/main/java/org/olat/modules/curriculum/ui/CurriculumElementListController.java +++ b/src/main/java/org/olat/modules/curriculum/ui/CurriculumElementListController.java @@ -324,13 +324,19 @@ public class CurriculumElementListController extends FormBasicController impleme } private void forge(CurriculumElementWithViewsRow row, Collection<Long> repoKeys, List<OLATResourceAccess> resourcesWithOffer) { - if(row.getRepositoryEntryKey() == null) return; - + if(row.getRepositoryEntryKey() == null || guestOnly) return;// nothing for guests + + boolean isMember = repoKeys.contains(row.getRepositoryEntryKey()); + row.setMember(isMember); + + FormLink startLink = null; List<PriceMethod> types = new ArrayList<>(); - if (!row.isAllUsers() && !row.isGuests()) { - // members only always show lock icon - types.add(new PriceMethod("", "o_ac_membersonly_icon", translate("cif.access.membersonly.short"))); - } else { + if(row.isAllUsers() || isMember) { + startLink = uifactory.addFormLink("start_" + (++counter), "start", "start", null, null, Link.LINK); + startLink.setElementCssClass("o_start btn-block"); + startLink.setCustomEnabledLinkCSS("o_start btn-block"); + startLink.setIconRightCSS("o_icon o_icon_start"); + } else if(row.isBookable()) { // collect access control method icons OLATResource resource = row.getOlatResource(); for(OLATResourceAccess resourceAccess:resourcesWithOffer) { @@ -344,15 +350,27 @@ public class CurriculumElementListController extends FormBasicController impleme } } } + + startLink = uifactory.addFormLink("start_" + (++counter), "start", "book", null, null, Link.LINK); + startLink.setElementCssClass("o_start btn-block"); + startLink.setCustomEnabledLinkCSS("o_book btn-block"); + startLink.setIconRightCSS("o_icon o_icon_start"); } + + if(startLink != null) { + startLink.setUserObject(row); + row.setStartLink(startLink); + } + - row.setMember(repoKeys.contains(row.getRepositoryEntryKey())); - + if (!row.isAllUsers() && !row.isGuests()) { + // members only always show lock icon + types.add(new PriceMethod("", "o_ac_membersonly_icon", translate("cif.access.membersonly.short"))); + } if(!types.isEmpty()) { row.setAccessTypes(types); } - forgeStartLink(row); forgeDetails(row); forgeMarkLink(row); forgeSelectLink(row); @@ -365,22 +383,6 @@ public class CurriculumElementListController extends FormBasicController impleme row.setDetailsLink(detailsLink); } - private void forgeStartLink(CurriculumElementWithViewsRow row) { - String label; - boolean isStart = true; - if((row.isAllUsers() || row.isGuests()) && row.getAccessTypes() != null && !row.getAccessTypes().isEmpty() && !row.isMember()) { - label = "book"; - isStart = false; - } else { - label = "start"; - } - FormLink startLink = uifactory.addFormLink("start_" + (++counter), "start", label, null, null, Link.LINK); - startLink.setUserObject(row); - startLink.setCustomEnabledLinkCSS(isStart ? "o_start btn-block" : "o_book btn-block"); - startLink.setIconRightCSS("o_icon o_icon_start"); - row.setStartLink(startLink); - } - private void forgeMarkLink(CurriculumElementWithViewsRow row) { if(!guestOnly) { FormLink markLink = uifactory.addFormLink("mark_" + (++counter), "mark", "", null, null, Link.NONTRANSLATED); diff --git a/src/main/java/org/olat/modules/curriculum/ui/CurriculumElementWithViewsRow.java b/src/main/java/org/olat/modules/curriculum/ui/CurriculumElementWithViewsRow.java index edc986fa103cb5b960a07c6ae5bec2850bcd1931..20c6a523661c5b90687c0f4a9128b385f98c87ec 100644 --- a/src/main/java/org/olat/modules/curriculum/ui/CurriculumElementWithViewsRow.java +++ b/src/main/java/org/olat/modules/curriculum/ui/CurriculumElementWithViewsRow.java @@ -68,8 +68,9 @@ public class CurriculumElementWithViewsRow implements CurriculumElementWithView, private String shortenedDescription; private RepositoryEntryStatusEnum status; - private boolean allUsers; private boolean guests; + private boolean allUsers; + private boolean bookable; private List<PriceMethod> accessTypes; private boolean member; @@ -117,6 +118,7 @@ public class CurriculumElementWithViewsRow implements CurriculumElementWithView, guests = repositoryEntryView.isGuests(); allUsers = repositoryEntryView.isAllUsers(); + bookable = repositoryEntryView.isBookable(); status = repositoryEntryView.getEntryStatus(); repositoryEntry = repositoryEntryView; olatResource = repositoryEntryView.getOlatResource(); @@ -276,6 +278,10 @@ public class CurriculumElementWithViewsRow implements CurriculumElementWithView, return guests; } + public boolean isBookable() { + return bookable; + } + public boolean isThumbnailAvailable() { return StringHelper.containsNonWhitespace(thumbnailRelPath); } diff --git a/src/main/java/org/olat/modules/lecture/ui/LectureRepositorySettingsController.java b/src/main/java/org/olat/modules/lecture/ui/LectureRepositorySettingsController.java index d1b1045446b7e3c1eb26bbbb233b709cd959adb3..4ed9be489b4a5fdcff648190c9b2ae25a0ba1353 100644 --- a/src/main/java/org/olat/modules/lecture/ui/LectureRepositorySettingsController.java +++ b/src/main/java/org/olat/modules/lecture/ui/LectureRepositorySettingsController.java @@ -326,7 +326,7 @@ public class LectureRepositorySettingsController extends FormBasicController { lectureConfig = lectureService.updateRepositoryEntryLectureConfiguration(lectureConfig); dbInstance.commit(); lectureService.syncCalendars(entry); - fireEvent(ureq, new ReloadSettingsEvent()); + fireEvent(ureq, new ReloadSettingsEvent(false, true, false)); } @Override diff --git a/src/main/java/org/olat/modules/portfolio/ui/BinderRuntimeController.java b/src/main/java/org/olat/modules/portfolio/ui/BinderRuntimeController.java index 8b8c761e683dc801d2b00c2afc367c153538d43b..5f32976890471e56bf2385052696c17d03dab8eb 100644 --- a/src/main/java/org/olat/modules/portfolio/ui/BinderRuntimeController.java +++ b/src/main/java/org/olat/modules/portfolio/ui/BinderRuntimeController.java @@ -63,7 +63,7 @@ public class BinderRuntimeController extends RepositoryEntryRuntimeController { } @Override - protected void initRuntimeTools(Dropdown toolsDropdown) { + protected void initToolsMenuRuntime(Dropdown toolsDropdown) { if (reSecurity.isEntryAdmin()) { membersLink = LinkFactory.createToolLink("members", translate("details.members"), this, "o_sel_repo_members"); membersLink.setIconLeftCSS("o_icon o_icon-fw o_icon_membersmanagement"); diff --git a/src/main/java/org/olat/modules/video/ui/VideoRuntimeController.java b/src/main/java/org/olat/modules/video/ui/VideoRuntimeController.java index 58e9fc3bfb4f5dbbe9f931234ec9a81feb80acae..f19b0b19b40bfe97d5da65ac04b066682e5497d0 100644 --- a/src/main/java/org/olat/modules/video/ui/VideoRuntimeController.java +++ b/src/main/java/org/olat/modules/video/ui/VideoRuntimeController.java @@ -62,7 +62,7 @@ public class VideoRuntimeController extends RepositoryEntryRuntimeController { } @Override - protected void initEditorTools(Dropdown toolsDropdown) { + protected void initToolsMenuEditor(Dropdown toolsDropdown) { if (reSecurity.isEntryAdmin()) { toolsDropdown.addComponent(new Spacer("video-editor")); diff --git a/src/main/java/org/olat/portfolio/ui/EPTemplateRuntimeController.java b/src/main/java/org/olat/portfolio/ui/EPTemplateRuntimeController.java index 85665182dbb0fcc315ee21626bf051e4802c4e2b..13b51300aba8d399b41620c84ae1826ccd68077a 100644 --- a/src/main/java/org/olat/portfolio/ui/EPTemplateRuntimeController.java +++ b/src/main/java/org/olat/portfolio/ui/EPTemplateRuntimeController.java @@ -47,7 +47,7 @@ public class EPTemplateRuntimeController extends RepositoryEntryRuntimeControlle } @Override - protected void initEditorTools(Dropdown toolsDropdown) { + protected void initToolsMenuEditor(Dropdown toolsDropdown) { if(getRuntimeController() instanceof EPMapViewController) { EPMapViewController mapCtrl = (EPMapViewController)getRuntimeController(); if(mapCtrl.canEditStructure()) { diff --git a/src/main/java/org/olat/repository/RepositoryManager.java b/src/main/java/org/olat/repository/RepositoryManager.java index 1102587ed1c9b3067930e65b325d1c545fde4caf..37659bd501b9caea3a11790eb63da58dc465aa10 100644 --- a/src/main/java/org/olat/repository/RepositoryManager.java +++ b/src/main/java/org/olat/repository/RepositoryManager.java @@ -636,6 +636,28 @@ public class RepositoryManager { return updatedRe; } + public RepositoryEntry setAccess(final RepositoryEntry re, + boolean canCopy, boolean canReference, boolean canDownload) { + RepositoryEntry reloadedRe = repositoryEntryDao.loadForUpdate(re); + if(reloadedRe == null) { + return null; + } + reloadedRe.setLastModified(new Date()); + //properties + reloadedRe.setCanCopy(canCopy); + reloadedRe.setCanReference(canReference); + reloadedRe.setCanDownload(canDownload); + RepositoryEntry updatedRe = dbInstance.getCurrentEntityManager().merge(reloadedRe); + //fetch the values + updatedRe.getStatistics().getLaunchCounter(); + if(updatedRe.getLifecycle() != null) { + updatedRe.getLifecycle().getCreationDate(); + } + + dbInstance.commit(); + return updatedRe; + } + public RepositoryEntry setAccess(final RepositoryEntry re, boolean allUsers, boolean guests, boolean bookable, RepositoryEntryAllowToLeaveOptions leaveSetting, List<Organisation> organisations) { diff --git a/src/main/java/org/olat/repository/ui/RepositoryEntryRuntimeController.java b/src/main/java/org/olat/repository/ui/RepositoryEntryRuntimeController.java index f643d59e07fcdd2692635323fdbce7b6f050af11..c75661c333ebd22d3a196869a507ff1b1551fab0 100644 --- a/src/main/java/org/olat/repository/ui/RepositoryEntryRuntimeController.java +++ b/src/main/java/org/olat/repository/ui/RepositoryEntryRuntimeController.java @@ -122,7 +122,7 @@ public class RepositoryEntryRuntimeController extends MainLayoutBasicController private RepositoryEntryDetailsController detailsCtrl; private RepositoryMembersController membersEditController; protected RepositoryEntrySettingsController settingsCtrl; - protected RepositoryEditDescriptionController descriptionCtrl; + protected RepositoryEditDescriptionController descriptionCtrl2; private Dropdown tools; private Dropdown status; @@ -361,13 +361,7 @@ public class RepositoryEntryRuntimeController extends MainLayoutBasicController } protected void initToolbar(Dropdown toolsDropdown) { - toolsDropdown.removeAllComponents(); - - initSettingsTools(toolsDropdown); - initEditorTools(toolsDropdown); - initRuntimeTools(toolsDropdown); - initEditionTools(toolsDropdown); - initDeleteTools(toolsDropdown); + initToolsMenu(toolsDropdown); detailsLink = LinkFactory.createToolLink("details", translate("details.header"), this, "o_sel_repo_details"); detailsLink.setIconLeftCSS("o_icon o_icon-fw o_icon_details"); @@ -383,7 +377,17 @@ public class RepositoryEntryRuntimeController extends MainLayoutBasicController toolbarPanel.addTool(bookmarkLink, Align.right); } - protected void initSettingsTools(Dropdown toolsDropdown) { + protected void initToolsMenu(Dropdown toolsDropdown) { + toolsDropdown.removeAllComponents(); + + initToolsMenuSettings(toolsDropdown); + initToolsMenuEditor(toolsDropdown); + initToolsMenuRuntime(toolsDropdown); + initToolsMenuEdition(toolsDropdown); + initToolsMenuDelete(toolsDropdown); + } + + protected void initToolsMenuSettings(Dropdown toolsDropdown) { if (reSecurity.isEntryAdmin()) { settingsLink = LinkFactory.createToolLink("settings", translate("details.settings"), this, "o_sel_repo_settings"); settingsLink.setIconLeftCSS("o_icon o_icon-fw o_icon_settings"); @@ -396,7 +400,7 @@ public class RepositoryEntryRuntimeController extends MainLayoutBasicController } } - protected void initEditorTools(Dropdown toolsDropdown) { + protected void initToolsMenuEditor(Dropdown toolsDropdown) { if (reSecurity.isEntryAdmin() && handler.supportsEdit(re.getOlatResource()) == EditionSupport.yes) { toolsDropdown.addComponent(new Spacer("editors-tools")); @@ -408,7 +412,7 @@ public class RepositoryEntryRuntimeController extends MainLayoutBasicController } } - protected void initRuntimeTools(Dropdown toolsDropdown) { + protected void initToolsMenuRuntime(Dropdown toolsDropdown) { if (reSecurity.isEntryAdmin()) { ordersLink = LinkFactory.createToolLink("bookings", translate("details.orders"), this, "o_sel_repo_booking"); ordersLink.setIconLeftCSS("o_icon o_icon-fw o_icon_booking"); @@ -418,7 +422,7 @@ public class RepositoryEntryRuntimeController extends MainLayoutBasicController } } - protected void initEditionTools(Dropdown toolsDropdown) { + protected void initToolsMenuEdition(Dropdown toolsDropdown) { boolean copyManaged = RepositoryEntryManagedFlag.isManaged(re, RepositoryEntryManagedFlag.copy); boolean canCopy = (isAuthor || reSecurity.isEntryAdmin()) && (re.getCanCopy() || reSecurity.isEntryAdmin()) && !copyManaged; @@ -449,7 +453,7 @@ public class RepositoryEntryRuntimeController extends MainLayoutBasicController } } - protected void initDeleteTools(Dropdown toolsDropdown) { + protected void initToolsMenuDelete(Dropdown toolsDropdown) { if(reSecurity.isEntryAdmin()) { boolean deleteManaged = RepositoryEntryManagedFlag.isManaged(re, RepositoryEntryManagedFlag.delete); toolsDropdown.addComponent(new Spacer("close-delete")); @@ -538,6 +542,31 @@ public class RepositoryEntryRuntimeController extends MainLayoutBasicController // } + protected void processReloadSettingsEvent(ReloadSettingsEvent event) { + if(event.isChangedTitle()) { + RepositoryEntry entry = repositoryService.loadByKey(getRepositoryEntry().getKey()); + refreshRepositoryEntry(entry); + handler.onDescriptionChanged(entry); + // update name of root bread crumb and opened tabs in top nav in case the title has been modified + if (!toolbarPanel.getBreadCrumbs().isEmpty()) { + String newTitle = entry.getDisplayname(); + String oldTitle = toolbarPanel.getBreadCrumbs().get(0).getCustomDisplayText(); + if (!newTitle.equals(oldTitle)) { + // 1: update breadcrumb in toolbar + toolbarPanel.getBreadCrumbs().get(0).setCustomDisplayText(newTitle); + // 2: update dynamic tab in topnav + OLATResourceable reOres = OresHelper.clone(entry); + getWindowControl().getWindowBackOffice().getWindow().getDTabs().updateDTabTitle(reOres, newTitle); + } + } + } else if(event.isChangedToolbar()) { + RepositoryEntry entry = repositoryService.loadByKey(getRepositoryEntry().getKey()); + refreshRepositoryEntry(entry); + initToolsMenu(tools); + } + settingsChanged = true; + } + protected void processEntryChangedEvent(EntryChangedEvent repoEvent) { if(repoEvent.isMe(getIdentity()) && (repoEvent.getChange() == Change.addBookmark || repoEvent.getChange() == Change.removeBookmark)) { @@ -623,28 +652,7 @@ public class RepositoryEntryRuntimeController extends MainLayoutBasicController } else if(event == Event.CLOSE_EVENT) { doClose(ureq); } else if(event instanceof ReloadSettingsEvent) { - settingsChanged = true; - initToolbar(tools); - } - } else if(descriptionCtrl == source) { - if(event == Event.CHANGED_EVENT) { - RepositoryEntry entry = descriptionCtrl.getRepositoryEntry(); - refreshRepositoryEntry(entry); - handler.onDescriptionChanged(entry); - // update name of root bread crumb and opened tabs in top nav in case the title has been modified - if (!toolbarPanel.getBreadCrumbs().isEmpty()) { - String newTitle = entry.getDisplayname(); - String oldTitle = toolbarPanel.getBreadCrumbs().get(0).getCustomDisplayText(); - if (!newTitle.equals(oldTitle)) { - // 1: update breadcrumb in toolbar - toolbarPanel.getBreadCrumbs().get(0).setCustomDisplayText(newTitle); - // 2: update dynamic tab in topnav - OLATResourceable reOres = OresHelper.clone(entry); - getWindowControl().getWindowBackOffice().getWindow().getDTabs().updateDTabTitle(reOres, newTitle); - } - } - } else if(event == Event.CLOSE_EVENT) { - doClose(ureq); + processReloadSettingsEvent((ReloadSettingsEvent)event); } } else if(detailsCtrl == source) { if(event instanceof LeavingEvent) { @@ -701,7 +709,6 @@ public class RepositoryEntryRuntimeController extends MainLayoutBasicController removeAsListenerAndDispose(confirmDeleteCtrl); removeAsListenerAndDispose(accessController); removeAsListenerAndDispose(confirmCloseCtrl); - removeAsListenerAndDispose(descriptionCtrl); removeAsListenerAndDispose(detailsCtrl); removeAsListenerAndDispose(editorCtrl); removeAsListenerAndDispose(ordersCtlr); @@ -712,7 +719,6 @@ public class RepositoryEntryRuntimeController extends MainLayoutBasicController confirmDeleteCtrl = null; accessController = null; confirmCloseCtrl = null; - descriptionCtrl = null; detailsCtrl = null; editorCtrl = null; ordersCtlr = null; diff --git a/src/main/java/org/olat/repository/ui/author/AuthoringEditAccessController.java b/src/main/java/org/olat/repository/ui/author/AuthoringEditAccessController.java index d1e6ce2540abe8252dc1165f5a570d2d5f26560d..04d34db70b205fe4a836fe72278506eb79e93387 100644 --- a/src/main/java/org/olat/repository/ui/author/AuthoringEditAccessController.java +++ b/src/main/java/org/olat/repository/ui/author/AuthoringEditAccessController.java @@ -29,7 +29,6 @@ import org.olat.core.gui.control.controller.BasicController; import org.olat.core.util.coordinate.CoordinatorManager; import org.olat.core.util.event.MultiUserEvent; import org.olat.repository.RepositoryEntry; -import org.olat.repository.RepositoryEntryStatusEnum; import org.olat.repository.RepositoryManager; import org.olat.repository.RepositoryService; import org.olat.repository.controllers.EntryChangedEvent; @@ -86,7 +85,7 @@ public class AuthoringEditAccessController extends BasicController { if(accessAndBookingCtrl == source) { if(event == Event.DONE_EVENT) { doSaveAccessAndBooking(ureq); - fireEvent(ureq, new ReloadSettingsEvent()); + fireEvent(ureq, new ReloadSettingsEvent(true, false, false)); } else if(event == Event.CANCELLED_EVENT) { initAccessAndBooking(ureq); } @@ -125,9 +124,7 @@ public class AuthoringEditAccessController extends BasicController { boolean canReference = authorAccessCtrl.canReference(); boolean canDownload = authorAccessCtrl.canDownload(); entry = authorAccessCtrl.getEntry(); - RepositoryEntryStatusEnum status = entry.getEntryStatus(); - entry = repositoryManager.setAccessAndProperties(entry, status, entry.isAllUsers(), entry.isGuests(), - canCopy, canReference, canDownload); + entry = repositoryManager.setAccess(entry, canCopy, canReference, canDownload); // inform anybody interested about this change MultiUserEvent modifiedEvent = new EntryChangedEvent(entry, getIdentity(), Change.modifiedAccess, "authoring"); diff --git a/src/main/java/org/olat/repository/ui/settings/ReloadSettingsEvent.java b/src/main/java/org/olat/repository/ui/settings/ReloadSettingsEvent.java index 31df6d30ea6dd68b5ff963191e6e4ebd247e2750..45beb4003986172c3687d5382387a3003adea06c 100644 --- a/src/main/java/org/olat/repository/ui/settings/ReloadSettingsEvent.java +++ b/src/main/java/org/olat/repository/ui/settings/ReloadSettingsEvent.java @@ -32,8 +32,30 @@ public class ReloadSettingsEvent extends Event { private static final long serialVersionUID = -6750322705437476311L; public static final String RELOAD_SETTINGS = "reload-settings"; + private final boolean changedTitle; + private final boolean changedToolbar; + private final boolean changedToolsMenu; + public ReloadSettingsEvent() { + this(false, false, false); + } + + public ReloadSettingsEvent(boolean changedToolsMenu, boolean changedToolbar, boolean changedTitle) { super(RELOAD_SETTINGS); + this.changedTitle = changedTitle; + this.changedToolbar = changedToolbar; + this.changedToolsMenu = changedToolsMenu; + } + + public boolean isChangedTitle() { + return changedTitle; } + public boolean isChangedToolsMenu() { + return changedToolsMenu; + } + + public boolean isChangedToolbar() { + return changedToolbar; + } } diff --git a/src/main/java/org/olat/repository/ui/settings/RepositoryEntryInfoController.java b/src/main/java/org/olat/repository/ui/settings/RepositoryEntryInfoController.java index 394cf069199a7b0aaff7b5e9b75966f71c73b9da..bfa538d6b0c1f870b2dcb067193cf7e4c718af49 100644 --- a/src/main/java/org/olat/repository/ui/settings/RepositoryEntryInfoController.java +++ b/src/main/java/org/olat/repository/ui/settings/RepositoryEntryInfoController.java @@ -371,7 +371,7 @@ public class RepositoryEntryInfoController extends FormBasicController { showWarning("repositoryentry.not.existing"); fireEvent(ureq, Event.CLOSE_EVENT); } else { - fireEvent(ureq, Event.CHANGED_EVENT); + fireEvent(ureq, new ReloadSettingsEvent(false, false, true)); MultiUserEvent modifiedEvent = new EntryChangedEvent(repositoryEntry, getIdentity(), Change.modifiedDescription, "authoring"); CoordinatorManager.getInstance().getCoordinator().getEventBus() .fireEventToListenersOf(modifiedEvent, RepositoryService.REPOSITORY_EVENT_ORES); diff --git a/src/main/java/org/olat/upgrade/OLATUpgrade_13_0_0_beta9.java b/src/main/java/org/olat/upgrade/OLATUpgrade_13_0_0_beta9.java index f10769fd92454ab90037a00282d284fb914d5a1a..7d21fc8ebae9c5aede38c5d965ccf734e645e9ac 100644 --- a/src/main/java/org/olat/upgrade/OLATUpgrade_13_0_0_beta9.java +++ b/src/main/java/org/olat/upgrade/OLATUpgrade_13_0_0_beta9.java @@ -109,8 +109,9 @@ public class OLATUpgrade_13_0_0_beta9 extends OLATUpgrade { private void migrateBookableFlag(Long entrykey) { RepositoryEntry entry = repositoryService.loadByKey(entrykey); - if(!entry.isBookable()) { + if(!entry.isBookable() && entry.isAllUsers()) { OLATResource resource = entry.getOlatResource(); + // need at least one "not deleted" offer boolean bookable = acService.isResourceAccessControled(resource, null); if(bookable != entry.isBookable()) { entry.setBookable(bookable); diff --git a/src/test/java/org/olat/selenium/BusinessGroupTest.java b/src/test/java/org/olat/selenium/BusinessGroupTest.java index 98d2ceacfd43da437715c97ff7a0b6ecf5535a48..6fd3e734dfe7b8bcfac50c52a8500fcf3db095ae 100644 --- a/src/test/java/org/olat/selenium/BusinessGroupTest.java +++ b/src/test/java/org/olat/selenium/BusinessGroupTest.java @@ -311,7 +311,8 @@ public class BusinessGroupTest extends Deployments { .openAddDropMenu() .addTokenMethod() .configureTokenMethod(token, description) - .assertOnToken(token); + .assertOnToken(token) + .save(); //members see members group = GroupPage.getGroup(browser) diff --git a/src/test/java/org/olat/selenium/page/group/GroupPage.java b/src/test/java/org/olat/selenium/page/group/GroupPage.java index 8d0bd6edab702abe93afb8846cb5879b7ff4c5d0..adb5bdde2c1a7bec8d6c1e9ae785669ba497d0f4 100644 --- a/src/test/java/org/olat/selenium/page/group/GroupPage.java +++ b/src/test/java/org/olat/selenium/page/group/GroupPage.java @@ -204,21 +204,21 @@ public class GroupPage { By showOwnersBy = By.cssSelector(".o_sel_group_show_owners input[type='checkbox']"); browser.findElement(showOwnersBy).click(); OOGraphene.waitBusy(browser); - OOGraphene.waitElement(memberMenuItem, 5, browser); + OOGraphene.waitElement(memberMenuItem, browser); } if(participants) { By showParticipants = By.cssSelector(".o_sel_group_show_participants input[type='checkbox']"); browser.findElement(showParticipants).click(); OOGraphene.waitBusy(browser); - OOGraphene.waitElement(memberMenuItem, 5, browser); + OOGraphene.waitElement(memberMenuItem, browser); } if(waitingList) { By showWaitingListBy = By.cssSelector(".o_sel_group_show_waiting_list input[type='checkbox']"); browser.findElement(showWaitingListBy).click(); OOGraphene.waitBusy(browser); - OOGraphene.waitElement(memberMenuItem, 5, browser); + OOGraphene.waitElement(memberMenuItem, browser); } return this; } @@ -245,8 +245,7 @@ public class GroupPage { */ public GroupPage saveDetails() { By submitBy = By.cssSelector(".o_sel_group_edit_group_form button.btn-primary"); - WebElement submitButton = browser.findElement(submitBy); - submitButton.click(); + browser.findElement(submitBy).click(); OOGraphene.waitBusy(browser); return this; }