From 4bc90983785d5ae3c676c2f6f2845d1054c0327a Mon Sep 17 00:00:00 2001 From: fkiefer <none@none> Date: Mon, 6 Mar 2017 12:19:54 +0100 Subject: [PATCH] OO-2581 make course search icon in course toolbar respond immediately after switch --- .../core/logging/activity/ActionObject.java | 1 + .../LearningResourceLoggingAction.java | 4 +++ .../org/olat/course/config/CourseConfig.java | 2 +- .../olat/course/config/CourseConfigEvent.java | 1 + .../config/ui/CourseOptionsController.java | 35 +++++++++++++++---- .../course/run/CourseRuntimeController.java | 14 ++++++-- .../RepositoryEntryManagedFlag.java | 1 + 7 files changed, 49 insertions(+), 9 deletions(-) diff --git a/src/main/java/org/olat/core/logging/activity/ActionObject.java b/src/main/java/org/olat/core/logging/activity/ActionObject.java index c3fa7dd4d29..313db2c9c53 100644 --- a/src/main/java/org/olat/core/logging/activity/ActionObject.java +++ b/src/main/java/org/olat/core/logging/activity/ActionObject.java @@ -82,6 +82,7 @@ public enum ActionObject { resource, rights, rightsempty, + search, sharedfolder, spgetfile, statistic, diff --git a/src/main/java/org/olat/core/logging/activity/LearningResourceLoggingAction.java b/src/main/java/org/olat/core/logging/activity/LearningResourceLoggingAction.java index 52479791c2c..dd3c171bc93 100644 --- a/src/main/java/org/olat/core/logging/activity/LearningResourceLoggingAction.java +++ b/src/main/java/org/olat/core/logging/activity/LearningResourceLoggingAction.java @@ -86,6 +86,10 @@ public class LearningResourceLoggingAction extends BaseLoggingAction { new LearningResourceLoggingAction(ActionType.admin, CrudAction.update, ActionVerb.add, ActionObject.chat).setTypeList(LEARNING_RESOURCE_OPEN_CLOSE_LIST); public static final ILoggingAction REPOSITORY_ENTRY_PROPERTIES_IM_DISABLED = new LearningResourceLoggingAction(ActionType.admin, CrudAction.update, ActionVerb.remove, ActionObject.chat).setTypeList(LEARNING_RESOURCE_OPEN_CLOSE_LIST); + public static final ILoggingAction REPOSITORY_ENTRY_PROPERTIES_COURSESEARCH_ENABLED = + new LearningResourceLoggingAction(ActionType.admin, CrudAction.update, ActionVerb.add, ActionObject.search).setTypeList(LEARNING_RESOURCE_OPEN_CLOSE_LIST); + public static final ILoggingAction REPOSITORY_ENTRY_PROPERTIES_COURSESEARCH_DISABLED = + new LearningResourceLoggingAction(ActionType.admin, CrudAction.update, ActionVerb.remove, ActionObject.search).setTypeList(LEARNING_RESOURCE_OPEN_CLOSE_LIST); public static final ILoggingAction REPOSITORY_ENTRY_PROPERTIES_GLOSSARY_ENABLED = new LearningResourceLoggingAction(ActionType.admin, CrudAction.update, ActionVerb.add, ActionObject.glossar).setTypeList(LEARNING_RESOURCE_OPEN_CLOSE_LIST); public static final ILoggingAction REPOSITORY_ENTRY_PROPERTIES_GLOSSARY_DISABLED = diff --git a/src/main/java/org/olat/course/config/CourseConfig.java b/src/main/java/org/olat/course/config/CourseConfig.java index e248e3def5b..ff2fd6f1f5a 100644 --- a/src/main/java/org/olat/course/config/CourseConfig.java +++ b/src/main/java/org/olat/course/config/CourseConfig.java @@ -271,7 +271,7 @@ public class CourseConfig implements Serializable, Cloneable { } if (version == 11) { - if (!configuration.containsKey(COURSESEARCH_ENABLED)) configuration.put(COURSESEARCH_ENABLED, Boolean.TRUE); + if (!configuration.containsKey(COURSESEARCH_ENABLED)) configuration.put(COURSESEARCH_ENABLED, Boolean.FALSE); this.version = 12; } diff --git a/src/main/java/org/olat/course/config/CourseConfigEvent.java b/src/main/java/org/olat/course/config/CourseConfigEvent.java index aef5fcf0831..e2790cc6616 100644 --- a/src/main/java/org/olat/course/config/CourseConfigEvent.java +++ b/src/main/java/org/olat/course/config/CourseConfigEvent.java @@ -59,6 +59,7 @@ public class CourseConfigEvent extends MultiUserEvent { public static enum CourseConfigType { efficiencyStatement, calendar, + search, chat, glossary, layout diff --git a/src/main/java/org/olat/course/config/ui/CourseOptionsController.java b/src/main/java/org/olat/course/config/ui/CourseOptionsController.java index df15573bf93..e02191d2cc2 100644 --- a/src/main/java/org/olat/course/config/ui/CourseOptionsController.java +++ b/src/main/java/org/olat/course/config/ui/CourseOptionsController.java @@ -94,7 +94,7 @@ public class CourseOptionsController extends FormBasicController { private FormLink addGlossaryCommand, removeGlossaryCommand; private StaticTextElement glossaryNameEl; private FormLink saveButton; - private FormLayoutContainer saveCont, calendarCont, chatCont, glossaryCont, sharedFolderCont; + private FormLayoutContainer saveCont, calendarCont, searchCont, chatCont, glossaryCont, sharedFolderCont; private FormLink addFolderCommand, removeFolderCommand; private StaticTextElement folderNameEl; @@ -211,9 +211,20 @@ public class CourseOptionsController extends FormBasicController { } } //searchbar - searchEl = uifactory.addCheckboxesHorizontal("searchIsOn", "chkbx.search.onoff", menuCont, onKeys, onValues); - searchEl.select(onKeys[0], courseConfig.isCourseSearchEnabled()); + searchCont = FormLayoutContainer.createDefaultFormLayout("search", getTranslator()); + searchCont.setRootForm(mainForm); + formLayout.add(searchCont); + + boolean searchEnabled = courseConfig.isCourseSearchEnabled(); + boolean managedSearch = RepositoryEntryManagedFlag.isManaged(entry, RepositoryEntryManagedFlag.search); + searchEl = uifactory.addCheckboxesHorizontal("searchIsOn", "chkbx.search.onoff", searchCont, onKeys, onValues); searchEl.addActionListener(FormEvent.ONCHANGE); + searchEl.select(onKeys[0], searchEnabled); + searchEl.setEnabled(editable && !managedSearch); + + if(managedSearch && searchEnabled) { + canHideToolbar &= false; + } //chat chatCont = FormLayoutContainer.createDefaultFormLayout("chat", getTranslator()); @@ -383,6 +394,7 @@ public class CourseOptionsController extends FormBasicController { calendarCont.setVisible(enabled); } chatCont.setVisible(enabled); + searchCont.setVisible(enabled); glossaryCont.setVisible(enabled); } @@ -457,13 +469,14 @@ public class CourseOptionsController extends FormBasicController { boolean toolbarEnabled = toolbarEl.isSelected(0); courseConfig.setToolbarEnabled(toolbarEnabled); + boolean enableSearch = searchEl.isSelected(0); + boolean updateSearch = courseConfig.isCourseSearchEnabled() != enableSearch; + courseConfig.setCourseSearchEnabled(enableSearch && toolbarEnabled); + boolean enableChat = chatEl.isSelected(0); boolean updateChat = courseConfig.isChatEnabled() != enableChat; courseConfig.setChatIsEnabled(enableChat && toolbarEnabled); - boolean enableSearch = searchEl.isSelected(0); - courseConfig.setCourseSearchEnabled(enableSearch && toolbarEnabled); - boolean enableCalendar = calendarEl == null ? false : calendarEl.isSelected(0); boolean updateCalendar = courseConfig.isCalendarEnabled() != enableCalendar && calendarModule.isEnableCourseToolCalendar(); courseConfig.setCalendarEnabled(enableCalendar && toolbarEnabled); @@ -494,6 +507,16 @@ public class CourseOptionsController extends FormBasicController { CourseFactory.setCourseConfig(course.getResourceableId(), courseConfig); CourseFactory.closeCourseEditSession(course.getResourceableId(), true); + + if(updateSearch) { + ILoggingAction loggingAction = enableSearch ? + LearningResourceLoggingAction.REPOSITORY_ENTRY_PROPERTIES_COURSESEARCH_ENABLED : + LearningResourceLoggingAction.REPOSITORY_ENTRY_PROPERTIES_COURSESEARCH_DISABLED; + ThreadLocalUserActivityLogger.log(loggingAction, getClass()); + + CoordinatorManager.getInstance().getCoordinator().getEventBus() + .fireEventToListenersOf(new CourseConfigEvent(CourseConfigType.search, course.getResourceableId()), course); + } if(updateChat) { ILoggingAction loggingAction = enableChat ? diff --git a/src/main/java/org/olat/course/run/CourseRuntimeController.java b/src/main/java/org/olat/course/run/CourseRuntimeController.java index b0dbd4d2382..8df0be3c9bc 100644 --- a/src/main/java/org/olat/course/run/CourseRuntimeController.java +++ b/src/main/java/org/olat/course/run/CourseRuntimeController.java @@ -779,9 +779,10 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im } // add course search to toolbox - if (!assessmentLock && cc.isCourseSearchEnabled() && !isGuestOnly) { + boolean isSearchEnabled = !assessmentLock && !isGuestOnly; + if (isSearchEnabled) { searchLink = LinkFactory.createToolLink("coursesearch", translate("command.coursesearch"), this, "o_icon_search"); - searchLink.setVisible(imModule.isCourseEnabled() && cc.isChatEnabled()); + searchLink.setVisible(cc.isCourseSearchEnabled()); toolbarPanel.addTool(searchLink); } @@ -1704,6 +1705,15 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im } break; } + case search: { + if(searchLink != null) { + ICourse course = CourseFactory.loadCourse(getRepositoryEntry()); + CourseConfig cc = course.getCourseEnvironment().getCourseConfig(); + searchLink.setVisible(cc.isCourseSearchEnabled()); + toolbarPanel.setDirty(true); + } + break; + } case chat: { if(chatLink != null) { ICourse course = CourseFactory.loadCourse(getRepositoryEntry()); diff --git a/src/main/java/org/olat/repository/RepositoryEntryManagedFlag.java b/src/main/java/org/olat/repository/RepositoryEntryManagedFlag.java index 720bd7148cf..6b586bd610c 100644 --- a/src/main/java/org/olat/repository/RepositoryEntryManagedFlag.java +++ b/src/main/java/org/olat/repository/RepositoryEntryManagedFlag.java @@ -45,6 +45,7 @@ public enum RepositoryEntryManagedFlag { location(details,all), settings(all),//max num of participants... access(settings,all), + search(settings, all), chat(settings,all), layout(settings,all), resourcefolder(settings,all), -- GitLab