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