From c7530d38e83ee8cc743f8227d8cfb116fb9ce4e0 Mon Sep 17 00:00:00 2001
From: srosse <stephane.rosse@frentix.com>
Date: Mon, 12 Nov 2018 14:25:51 +0100
Subject: [PATCH] OO-3731: allow the open a session in full screen with a
 pretty URL

---
 .../fullWebApp/BaseFullWebappController.java  | 20 ++++++--
 .../BaseFullWebappPopupBrowserWindow.java     | 12 +----
 .../LayoutMain3ColsBackController.java        |  4 +-
 .../fullWebApp/LayoutMain3ColsController.java |  6 +--
 .../LayoutMain3ColsPreviewController.java     |  4 +-
 .../org/olat/core/gui/components/Window.java  | 24 +++++++---
 .../core/gui/control/ChiefController.java     |  7 ++-
 .../gui/control/DefaultChiefController.java   |  9 +++-
 .../org/olat/core/gui/control/Reload.java     | 48 +++++++++++++++++++
 .../org/olat/core/gui/control/ScreenMode.java | 18 ++++++-
 .../olat/core/id/context/BusinessControl.java |  6 +--
 .../mode/AssessmentModeGuardController.java   |  2 +-
 .../nodes/basiclti/LTIRunController.java      |  6 ++-
 .../QTI21AssessmentMainLayoutController.java  |  8 ++--
 .../dispatcher/AuthenticatedDispatcher.java   |  1 +
 .../ui/AbstractTeacherOverviewController.java |  5 +-
 .../ExecutorParticipationsListController.java |  9 ++--
 17 files changed, 142 insertions(+), 47 deletions(-)
 create mode 100644 src/main/java/org/olat/core/gui/control/Reload.java

diff --git a/src/main/java/org/olat/core/commons/fullWebApp/BaseFullWebappController.java b/src/main/java/org/olat/core/commons/fullWebApp/BaseFullWebappController.java
index 6b23ae22377..548897376ad 100644
--- a/src/main/java/org/olat/core/commons/fullWebApp/BaseFullWebappController.java
+++ b/src/main/java/org/olat/core/commons/fullWebApp/BaseFullWebappController.java
@@ -67,6 +67,7 @@ import org.olat.core.gui.components.velocity.VelocityContainer;
 import org.olat.core.gui.control.ChiefController;
 import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.Event;
+import org.olat.core.gui.control.Reload;
 import org.olat.core.gui.control.ScreenMode;
 import org.olat.core.gui.control.ScreenMode.Mode;
 import org.olat.core.gui.control.VetoableCloseController;
@@ -280,7 +281,7 @@ public class BaseFullWebappController extends BasicController implements DTabs,
 		Object fullScreen = Windows.getWindows(ureq).getFullScreen();
 		if(Boolean.TRUE.equals(fullScreen)) {
 			Windows.getWindows(ureq).setFullScreen(null);
-			screenMode.setMode(Mode.full);
+			screenMode.setMode(Mode.full, null);
 		}
 
 		// register for cycle event to be able to adjust the guimessage place
@@ -968,15 +969,20 @@ public class BaseFullWebappController extends BasicController implements DTabs,
 	}
 	
 	@Override
-	public boolean wishReload(UserRequest ureq, boolean erase) {
+	public Reload wishReload(UserRequest ureq, boolean erase) {
 		boolean screen = getScreenMode().wishScreenModeSwitch(erase);
-		boolean r = (reload == null ? false : reload.booleanValue());
+		String screenBusinessPath = null;
+		if(screen && StringHelper.containsNonWhitespace(getScreenMode().getBusinessPath())) {
+			screenBusinessPath = BusinessControlFactory.getInstance()
+					.getURLFromBusinessPathString(getScreenMode().getBusinessPath());
+		}
+		boolean r = reload != null && reload.booleanValue();
 		if(erase && reload != null) {
 			reload = null;
 		}
 		boolean l = checkAssessmentGuard(ureq, lockMode);
 
-		return l || r || screen;
+		return new Reload(l || r || screen, screenBusinessPath);
 	}
 
 	@Override
@@ -986,6 +992,12 @@ public class BaseFullWebappController extends BasicController implements DTabs,
 		return screen || l; 
 	}
 
+	@Override
+	public void resetReload() {
+		getScreenMode().reset();
+		reload = null;
+	}
+
 	@Override
 	public ScreenMode getScreenMode() {
 		return screenMode;
diff --git a/src/main/java/org/olat/core/commons/fullWebApp/BaseFullWebappPopupBrowserWindow.java b/src/main/java/org/olat/core/commons/fullWebApp/BaseFullWebappPopupBrowserWindow.java
index 97428363b80..b7d6fdf6621 100644
--- a/src/main/java/org/olat/core/commons/fullWebApp/BaseFullWebappPopupBrowserWindow.java
+++ b/src/main/java/org/olat/core/commons/fullWebApp/BaseFullWebappPopupBrowserWindow.java
@@ -45,27 +45,17 @@ public class BaseFullWebappPopupBrowserWindow extends BaseFullWebappController i
 			BaseFullWebappControllerParts baseFullWebappControllerParts) {
 		super(ureq, baseFullWebappControllerParts);
 		// apply custom css if available
-		if (contentCtrl != null && contentCtrl instanceof MainLayoutController) {
+		if (contentCtrl instanceof MainLayoutController) {
 			MainLayoutController mainLayoutCtr = (MainLayoutController) contentCtrl;
 			addCurrentCustomCSSToView(mainLayoutCtr.getCustomCSS());
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.olat.core.gui.control.generic.popup.PopupBrowserWindow#open(org.olat
-	 * .core.gui.UserRequest)
-	 */
 	@Override
 	public void open(UserRequest ureq) {
 		ureq.getDispatchResult().setResultingWindow(getWindowControl().getWindowBackOffice().getWindow());
 	}
 
-	/**
-	 * @see org.olat.core.gui.control.generic.popup.PopupBrowserWindow#getPopupWindowControl()
-	 */
 	@Override
 	public WindowControl getPopupWindowControl() {
 		return getWindowControl();
diff --git a/src/main/java/org/olat/core/commons/fullWebApp/LayoutMain3ColsBackController.java b/src/main/java/org/olat/core/commons/fullWebApp/LayoutMain3ColsBackController.java
index 0ab9a1305bf..11a977317b9 100644
--- a/src/main/java/org/olat/core/commons/fullWebApp/LayoutMain3ColsBackController.java
+++ b/src/main/java/org/olat/core/commons/fullWebApp/LayoutMain3ColsBackController.java
@@ -121,7 +121,7 @@ public class LayoutMain3ColsBackController extends MainLayoutBasicController imp
 		ChiefController cc = getWindowControl().getWindowBackOffice().getChiefController();
 		if (cc != null) {
 			thebaseChief = cc;
-			thebaseChief.getScreenMode().setMode(Mode.full);
+			thebaseChief.getScreenMode().setMode(Mode.full, null);
 		}
 		fullScreen = true;
 	}
@@ -133,7 +133,7 @@ public class LayoutMain3ColsBackController extends MainLayoutBasicController imp
 	public void deactivate() {
 		getWindowControl().pop();
 		if (fullScreen && thebaseChief != null) {
-			thebaseChief.getScreenMode().setMode(Mode.standard);
+			thebaseChief.getScreenMode().setMode(Mode.standard, null);
 		}
 	}
 
diff --git a/src/main/java/org/olat/core/commons/fullWebApp/LayoutMain3ColsController.java b/src/main/java/org/olat/core/commons/fullWebApp/LayoutMain3ColsController.java
index d8e3798af2f..f767b806ea9 100644
--- a/src/main/java/org/olat/core/commons/fullWebApp/LayoutMain3ColsController.java
+++ b/src/main/java/org/olat/core/commons/fullWebApp/LayoutMain3ColsController.java
@@ -194,7 +194,7 @@ public class LayoutMain3ColsController extends MainLayoutBasicController impleme
 		ChiefController cc = getWindowControl().getWindowBackOffice().getChiefController();
 		if (cc != null) {
 			thebaseChief = cc;
-			thebaseChief.getScreenMode().setMode(Mode.full);
+			thebaseChief.getScreenMode().setMode(Mode.full, null);
 		} else {
 			Windows.getWindows(ureq).setFullScreen(Boolean.TRUE);
 		}
@@ -209,12 +209,12 @@ public class LayoutMain3ColsController extends MainLayoutBasicController impleme
 		getWindowControl().pop();
 		if (fullScreen) {
 			if(thebaseChief != null) {
-				thebaseChief.getScreenMode().setMode(Mode.standard);
+				thebaseChief.getScreenMode().setMode(Mode.standard, null);
 			} else if (ureq != null){
 				ChiefController cc = getWindowControl().getWindowBackOffice().getChiefController();
 				if (cc != null) {
 					thebaseChief = cc;
-					thebaseChief.getScreenMode().setMode(Mode.standard);
+					thebaseChief.getScreenMode().setMode(Mode.standard, null);
 				}
 			}
 		}
diff --git a/src/main/java/org/olat/core/commons/fullWebApp/LayoutMain3ColsPreviewController.java b/src/main/java/org/olat/core/commons/fullWebApp/LayoutMain3ColsPreviewController.java
index 23251497950..59ef551f7f8 100644
--- a/src/main/java/org/olat/core/commons/fullWebApp/LayoutMain3ColsPreviewController.java
+++ b/src/main/java/org/olat/core/commons/fullWebApp/LayoutMain3ColsPreviewController.java
@@ -114,7 +114,7 @@ public class LayoutMain3ColsPreviewController extends MainLayoutBasicController
 		ChiefController cc = getWindowControl().getWindowBackOffice().getChiefController();
 		if (cc != null) {
 			thebaseChief = cc;
-			thebaseChief.getScreenMode().setMode(Mode.full);
+			thebaseChief.getScreenMode().setMode(Mode.full, null);
 		}
 		fullScreen = true;
 	}
@@ -125,7 +125,7 @@ public class LayoutMain3ColsPreviewController extends MainLayoutBasicController
 	public void deactivate() {
 		getWindowControl().pop();
 		if (fullScreen) {
-			thebaseChief.getScreenMode().setMode(Mode.standard);
+			thebaseChief.getScreenMode().setMode(Mode.standard, null);
 		}
 	}
 
diff --git a/src/main/java/org/olat/core/gui/components/Window.java b/src/main/java/org/olat/core/gui/components/Window.java
index dd234346c19..239ba037cc9 100644
--- a/src/main/java/org/olat/core/gui/components/Window.java
+++ b/src/main/java/org/olat/core/gui/components/Window.java
@@ -56,6 +56,7 @@ import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.Event;
 import org.olat.core.gui.control.JSAndCSSAdder;
 import org.olat.core.gui.control.JSAndCSSAdderImpl;
+import org.olat.core.gui.control.Reload;
 import org.olat.core.gui.control.WindowBackOffice;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.gui.control.generic.dtabs.DTabs;
@@ -103,7 +104,7 @@ import org.olat.core.util.component.ComponentVisitor;
 public class Window extends AbstractComponent implements CustomCSSDelegate {
 	
 	private static final OLog log = Tracing.createLoggerFor(Window.class);
-	private static final DispatchResult NO_DISPATCHRESULT = new DispatchResult(false, false, false);
+	private static final DispatchResult NO_DISPATCHRESULT = new DispatchResult(false, false, Reload.NO_RELOAD);
 	
 	private static final String LOG_SEPARATOR = "^$^";
 	/**
@@ -394,11 +395,13 @@ public class Window extends AbstractComponent implements CustomCSSDelegate {
 						// 3.) return to sender...
 						boolean didDispatch = false;
 						boolean forceReload = false;
+						String forceReloadBusinessPath = null;
 						if (validForDispatching) {
 							DispatchResult dispatchResult = doDispatchToComponent(ureq, null);
 							didDispatch = dispatchResult.isDispatch();
 							incTimestamp = dispatchResult.isIncTimestamp();
 							forceReload = dispatchResult.isForceReload();
+							forceReloadBusinessPath = dispatchResult.getReloadBusinessPath();
 							if (isDebugLog) {
 								long durationAfterDoDispatchToComponent = System.currentTimeMillis() - debug_start;
 								log.debug("Perf-Test: Window durationAfterDoDispatchToComponent=" + durationAfterDoDispatchToComponent);
@@ -410,7 +413,10 @@ public class Window extends AbstractComponent implements CustomCSSDelegate {
 						//-----> if (didDispatch || inlineAfterBackForward) {
 						if (forceReload) {
 							//force RELOAD with a redirect to itself
-							String reRenderUri = buildURIFor(this, timestampID, null);
+							String reRenderUri = forceReloadBusinessPath;
+							if(reRenderUri == null) {
+								reRenderUri = buildURIFor(this, timestampID, null);
+							}
 							Command rmrcom = CommandFactory.createParentRedirectTo(reRenderUri);
 							wbackofficeImpl.sendCommandTo(rmrcom);
 						} else if (didDispatch || !validForDispatching) {
@@ -1217,7 +1223,7 @@ public class Window extends AbstractComponent implements CustomCSSDelegate {
 		}
 		
 		ChiefController chief = wbackofficeImpl.getChiefController();
-		boolean reload = chief == null ? false : chief.wishReload(ureq, true);
+		Reload reload = chief == null ? null : chief.wishReload(ureq, true);
 		return new DispatchResult(toDispatch, incTimestamp, reload);
 	}
 	
@@ -1328,12 +1334,12 @@ public class Window extends AbstractComponent implements CustomCSSDelegate {
 class DispatchResult {
 	private final boolean dispatch;
 	private final boolean incTimestamp;
-	private final boolean forceReload;
+	private final Reload reload;
 	
-	public DispatchResult(boolean dispatch, boolean incTimestamp, boolean forceReload) {
+	public DispatchResult(boolean dispatch, boolean incTimestamp, Reload reload) {
 		this.dispatch = dispatch;
 		this.incTimestamp = incTimestamp;
-		this.forceReload = forceReload;
+		this.reload = reload;
 	}
 
 	public boolean isDispatch() {
@@ -1341,7 +1347,11 @@ class DispatchResult {
 	}
 
 	public boolean isForceReload() {
-		return forceReload;
+		return reload != null && reload.isWishReload();
+	}
+	
+	public String getReloadBusinessPath() {
+		return reload == null ? null : reload.getBusinessPath();
 	}
 
 	public boolean isIncTimestamp() {
diff --git a/src/main/java/org/olat/core/gui/control/ChiefController.java b/src/main/java/org/olat/core/gui/control/ChiefController.java
index 782cb8177b6..a6c19ebb74f 100644
--- a/src/main/java/org/olat/core/gui/control/ChiefController.java
+++ b/src/main/java/org/olat/core/gui/control/ChiefController.java
@@ -66,7 +66,12 @@ public interface ChiefController extends Controller {
 	 * @param erase
 	 * @return
 	 */
-	public boolean wishReload(UserRequest ureq, boolean erase);
+	public Reload wishReload(UserRequest ureq, boolean erase);
+	
+	/**
+	 * Make sure a reload will not be triggered.
+	 */
+	public void resetReload();
 	
 	/**
 	 * 
diff --git a/src/main/java/org/olat/core/gui/control/DefaultChiefController.java b/src/main/java/org/olat/core/gui/control/DefaultChiefController.java
index f85e4d3d088..939a3e2bfcf 100644
--- a/src/main/java/org/olat/core/gui/control/DefaultChiefController.java
+++ b/src/main/java/org/olat/core/gui/control/DefaultChiefController.java
@@ -70,8 +70,13 @@ public abstract class DefaultChiefController extends DefaultController implement
 	}
 
 	@Override
-	public boolean wishReload(UserRequest ureq, boolean erase) {
-		return false;
+	public Reload wishReload(UserRequest ureq, boolean erase) {
+		return Reload.NO_RELOAD;
+	}
+	
+	@Override
+	public void resetReload() {
+		//
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/core/gui/control/Reload.java b/src/main/java/org/olat/core/gui/control/Reload.java
new file mode 100644
index 00000000000..a2a9a1f11c2
--- /dev/null
+++ b/src/main/java/org/olat/core/gui/control/Reload.java
@@ -0,0 +1,48 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.core.gui.control;
+
+/**
+ * 
+ * Initial date: 12 Nov 2018<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class Reload {
+	
+	public static final Reload NO_RELOAD = new Reload(false, null);
+	
+	private final boolean wishReload;
+	private final String businessPath;
+	
+	public Reload(boolean wishReload, String businessPath) {
+		this.wishReload = wishReload;
+		this.businessPath = businessPath;
+	}
+
+	public boolean isWishReload() {
+		return wishReload;
+	}
+
+	public String getBusinessPath() {
+		return businessPath;
+	}
+
+}
diff --git a/src/main/java/org/olat/core/gui/control/ScreenMode.java b/src/main/java/org/olat/core/gui/control/ScreenMode.java
index c2c63160715..cba621243e8 100644
--- a/src/main/java/org/olat/core/gui/control/ScreenMode.java
+++ b/src/main/java/org/olat/core/gui/control/ScreenMode.java
@@ -28,6 +28,7 @@ package org.olat.core.gui.control;
 public class ScreenMode {
 	private Mode wish;
 	private boolean fullScreen;
+	private String businessPath;
 
 	public boolean isFullScreen() {
 		return fullScreen;
@@ -37,9 +38,15 @@ public class ScreenMode {
 		return !fullScreen;
 	}
 	
-	public void setMode(Mode mode) {
+	/**
+	 * 
+	 * @param mode The mode, full or standard screen
+	 * @param businessPath The business path to beautify the reload (in the form [Repository:3781][CourseNode:23468732]) (optional)
+	 */
+	public void setMode(Mode mode, String businessPath) {
 		fullScreen = Mode.full.equals(mode);
 		this.wish = mode;
+		this.businessPath = businessPath;
 	}
 	
 	public boolean isWishFullScreen() {
@@ -63,6 +70,10 @@ public class ScreenMode {
 		return w != null;
 	}
 	
+	public String getBusinessPath() {
+		return businessPath;
+	}
+	
 	public boolean wishFullScreen(boolean erase) {
 		Mode w = wish;
 		if(erase) {
@@ -79,6 +90,11 @@ public class ScreenMode {
 		return w != null && w.equals(Mode.standard);
 	}
 	
+	public void reset() {
+		wish = null;
+		businessPath = null;
+	}
+	
 	public enum Mode {
 		standard,
 		full
diff --git a/src/main/java/org/olat/core/id/context/BusinessControl.java b/src/main/java/org/olat/core/id/context/BusinessControl.java
index 4362a584752..88d0c4297b6 100644
--- a/src/main/java/org/olat/core/id/context/BusinessControl.java
+++ b/src/main/java/org/olat/core/id/context/BusinessControl.java
@@ -54,9 +54,9 @@ import java.util.List;
  */
 public interface BusinessControl {
 	
-	public final static String START_TAG = "[";
-	public final static String END_TAG = "]";
-	public final static String DELIMITER_TAG = ":";
+	public static final String START_TAG = "[";
+	public static final String END_TAG = "]";
+	public static final String DELIMITER_TAG = ":";
 		
 	/**
 	 * Get String represation of BusinessControl. Used to save it as string (serializing)
diff --git a/src/main/java/org/olat/course/assessment/ui/mode/AssessmentModeGuardController.java b/src/main/java/org/olat/course/assessment/ui/mode/AssessmentModeGuardController.java
index 4f4fe0a96a8..9224556e95a 100644
--- a/src/main/java/org/olat/course/assessment/ui/mode/AssessmentModeGuardController.java
+++ b/src/main/java/org/olat/course/assessment/ui/mode/AssessmentModeGuardController.java
@@ -370,7 +370,7 @@ public class AssessmentModeGuardController extends BasicController implements Ge
 			
 			//make sure to see the navigation bar
 			ChiefController cc = Windows.getWindows(ureq).getChiefController();
-			cc.getScreenMode().setMode(Mode.standard);
+			cc.getScreenMode().setMode(Mode.standard, null);
 			
 			fireEvent(ureq, new Event("continue"));
 			String businessPath = "[MyCoursesSite:0]";
diff --git a/src/main/java/org/olat/course/nodes/basiclti/LTIRunController.java b/src/main/java/org/olat/course/nodes/basiclti/LTIRunController.java
index b7ce93d27d6..e8cdff90da9 100644
--- a/src/main/java/org/olat/course/nodes/basiclti/LTIRunController.java
+++ b/src/main/java/org/olat/course/nodes/basiclti/LTIRunController.java
@@ -380,7 +380,8 @@ public class LTIRunController extends BasicController {
 			ChiefController cc = getWindowControl().getWindowBackOffice().getChiefController();
 			if (cc != null) {
 				thebaseChief = cc;
-				thebaseChief.getScreenMode().setMode(Mode.full);
+				String businessPath = getWindowControl().getBusinessControl().getAsString();
+				thebaseChief.getScreenMode().setMode(Mode.full, businessPath);
 			}
 			fullScreen = true;
 			getWindowControl().pushToMainArea(run);
@@ -392,7 +393,8 @@ public class LTIRunController extends BasicController {
 	private void closeBasicLTI() {
 		if (fullScreen && thebaseChief != null) {
 			getWindowControl().pop();
-			thebaseChief.getScreenMode().setMode(Mode.standard);
+			String businessPath = getWindowControl().getBusinessControl().getAsString();
+			thebaseChief.getScreenMode().setMode(Mode.standard, businessPath);
 		}
 		mainPanel.setContent(startPage);
 	}
diff --git a/src/main/java/org/olat/course/nodes/iq/QTI21AssessmentMainLayoutController.java b/src/main/java/org/olat/course/nodes/iq/QTI21AssessmentMainLayoutController.java
index afce4e13ab7..e440cc621fb 100644
--- a/src/main/java/org/olat/course/nodes/iq/QTI21AssessmentMainLayoutController.java
+++ b/src/main/java/org/olat/course/nodes/iq/QTI21AssessmentMainLayoutController.java
@@ -80,7 +80,8 @@ public class QTI21AssessmentMainLayoutController extends MainLayoutBasicControll
 		ChiefController cc = getWindowControl().getWindowBackOffice().getChiefController();
 		if (cc != null) {
 			thebaseChief = cc;
-			thebaseChief.getScreenMode().setMode(Mode.full);
+			String businessPath = getWindowControl().getBusinessControl().getAsString();
+			thebaseChief.getScreenMode().setMode(Mode.full, businessPath);
 		} else {
 			Windows.getWindows(ureq).setFullScreen(Boolean.TRUE);
 		}
@@ -95,13 +96,14 @@ public class QTI21AssessmentMainLayoutController extends MainLayoutBasicControll
 	public void deactivate(UserRequest ureq) {
 		getWindowControl().pop();
 		if (fullScreen) {
+			String businessPath = getWindowControl().getBusinessControl().getAsString();
 			if(thebaseChief != null) {
-				thebaseChief.getScreenMode().setMode(Mode.standard);
+				thebaseChief.getScreenMode().setMode(Mode.standard, businessPath);
 			} else if (ureq != null){
 				ChiefController cc = getWindowControl().getWindowBackOffice().getChiefController();
 				if (cc != null) {
 					thebaseChief = cc;
-					thebaseChief.getScreenMode().setMode(Mode.standard);
+					thebaseChief.getScreenMode().setMode(Mode.standard, businessPath);
 				}
 			}
 		}
diff --git a/src/main/java/org/olat/dispatcher/AuthenticatedDispatcher.java b/src/main/java/org/olat/dispatcher/AuthenticatedDispatcher.java
index 25cea0126da..0d79eb230cf 100644
--- a/src/main/java/org/olat/dispatcher/AuthenticatedDispatcher.java
+++ b/src/main/java/org/olat/dispatcher/AuthenticatedDispatcher.java
@@ -327,6 +327,7 @@ public class AuthenticatedDispatcher implements Dispatcher {
 				// render the window
 				Window w = windowBackOffice.getWindow();
 				w.dispatchRequest(ureq, true); // renderOnly
+				chiefController.resetReload();
 			} catch (Exception e) {
 				// try to render something
 				try {
diff --git a/src/main/java/org/olat/modules/lecture/ui/AbstractTeacherOverviewController.java b/src/main/java/org/olat/modules/lecture/ui/AbstractTeacherOverviewController.java
index 5fc7cef01d7..66b551fefa0 100644
--- a/src/main/java/org/olat/modules/lecture/ui/AbstractTeacherOverviewController.java
+++ b/src/main/java/org/olat/modules/lecture/ui/AbstractTeacherOverviewController.java
@@ -279,8 +279,9 @@ public abstract class AbstractTeacherOverviewController extends BasicController
 				loadModel(currentSearchParams);
 			}
 			getWindowControl().pop();
+			String businessPath = getWindowControl().getBusinessControl().getAsString();
 			getWindowControl().getWindowBackOffice()
-				.getChiefController().getScreenMode().setMode(Mode.standard);
+				.getChiefController().getScreenMode().setMode(Mode.standard, businessPath);
 			cleanUp();
 		} else if(currentLecturesBlockCtrl == source || pendingLecturesBlockCtrl == source
 				|| nextLecturesBlockCtrl == source ||  closedLecturesBlockCtrl == source) {
@@ -368,7 +369,7 @@ public abstract class AbstractTeacherOverviewController extends BasicController
 		listenTo(rollCallWizardCtrl);
 		
 		ChiefController cc = getWindowControl().getWindowBackOffice().getChiefController();
-		cc.getScreenMode().setMode(Mode.full);
+		cc.getScreenMode().setMode(Mode.full, null);
 		getWindowControl().pushToMainArea(rollCallWizardCtrl.getInitialComponent());
 		
 		ThreadLocalUserActivityLogger.log(LearningResourceLoggingAction.LECTURE_BLOCK_ROLL_CALL_STARTED, getClass(),
diff --git a/src/main/java/org/olat/modules/quality/ui/ExecutorParticipationsListController.java b/src/main/java/org/olat/modules/quality/ui/ExecutorParticipationsListController.java
index 1aae51bad80..1d0ebbb255d 100644
--- a/src/main/java/org/olat/modules/quality/ui/ExecutorParticipationsListController.java
+++ b/src/main/java/org/olat/modules/quality/ui/ExecutorParticipationsListController.java
@@ -170,9 +170,11 @@ public class ExecutorParticipationsListController extends FormBasicController im
 	}
 
 	private void doDeactivateExecution(UserRequest ureq) {
-		addToHistory(ureq, this);
+		WindowControl wControl = addToHistory(ureq, this);
 		getWindowControl().pop();
-		getWindowControl().getWindowBackOffice().getChiefController().getScreenMode().setMode(Mode.standard);
+		String businessPath = wControl.getBusinessControl().getAsString();
+		getWindowControl().getWindowBackOffice().getChiefController()
+			.getScreenMode().setMode(Mode.standard, businessPath);
 		cleanUp();
 		tableEl.reloadData();
 	}
@@ -205,7 +207,8 @@ public class ExecutorParticipationsListController extends FormBasicController im
 		listenTo(executionCtrl);
 		
 		ChiefController cc = getWindowControl().getWindowBackOffice().getChiefController();
-		cc.getScreenMode().setMode(Mode.full);
+		String businessPath = getWindowControl().getBusinessControl().getAsString();
+		cc.getScreenMode().setMode(Mode.full, businessPath);
 		getWindowControl().pushToMainArea(executionCtrl.getInitialComponent());
 	}
 
-- 
GitLab