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