From 75f48004a46787b388741a10815efcd541d314ac Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Fri, 6 Jun 2014 09:19:39 +0200 Subject: [PATCH] OO-1068: +reactivate language selection --- .../fullWebApp/BaseFullWebappController.java | 22 ++++++++++--- .../org/olat/core/gui/components/Window.java | 33 +++++++++++-------- .../core/gui/control/ChiefController.java | 2 ++ .../gui/control/DefaultChiefController.java | 5 +++ .../login/DMZContentControllerCreator.java | 8 +++-- 5 files changed, 51 insertions(+), 19 deletions(-) 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 e586886b2f6..aeba7f78647 100644 --- a/src/main/java/org/olat/core/commons/fullWebApp/BaseFullWebappController.java +++ b/src/main/java/org/olat/core/commons/fullWebApp/BaseFullWebappController.java @@ -121,6 +121,7 @@ public class BaseFullWebappController extends BasicController implements ChiefCo private Controller jsLoggerC; private List<String> bodyCssClasses = new ArrayList<>(3); + private Boolean reload; private final ScreenMode screenMode = new ScreenMode(); private WindowBackOffice wbo; @@ -783,6 +784,16 @@ public class BaseFullWebappController extends BasicController implements ChiefCo addCustomThemeJS(); } + + @Override + public boolean wishReload(boolean erase) { + boolean screen = getScreenMode().wishScreenModeSwitch(erase); + boolean r = (reload == null ? false : reload.booleanValue()); + if(erase && reload != null) { + reload = null; + } + return r || screen; + } @Override public ScreenMode getScreenMode() { @@ -1107,11 +1118,14 @@ public class BaseFullWebappController extends BasicController implements ChiefCo } } else if(event instanceof LanguageChangedEvent){ LanguageChangedEvent lce = (LanguageChangedEvent)event; + UserRequest ureq = lce.getCurrentUreq(); getTranslator().setLocale(lce.getNewLocale()); - initialize(lce.getCurrentUreq()); - //TODO - //initialPanel.popContent(); - //initialPanel.pushContent(mainVc); + initialize(ureq); + WindowManager winman = Windows.getWindows(ureq).getWindowManager(); + initializeBase(ureq, winman, initialPanel); + initialPanel.setContent(mainVc); + + reload = Boolean.TRUE; } else if (event instanceof ChiefControllerMessageEvent) { // msg can be set to show only on one node or on all nodes String msg = GlobalStickyMessage.getGlobalStickyMessage();//either null, or the global message or the per-node-message 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 29208c11092..3d01d6c8cb4 100644 --- a/src/main/java/org/olat/core/gui/components/Window.java +++ b/src/main/java/org/olat/core/gui/components/Window.java @@ -39,6 +39,7 @@ import org.json.JSONException; import org.json.JSONObject; import org.olat.core.CoreSpringFactory; import org.olat.core.commons.persistence.DBFactory; +import org.olat.core.dispatcher.DispatcherModule; import org.olat.core.dispatcher.mapper.MapperService; import org.olat.core.gui.GUIInterna; import org.olat.core.gui.GlobalSettings; @@ -335,12 +336,12 @@ public class Window extends AbstractComponent { // 2.) collect dirty components (top-down, return from sub-path when first dirty node met) // 3.) return to sender... boolean didDispatch = false; - boolean switchScreenMode = false; + boolean forceReload = false; if (validForDispatching) { DispatchResult dispatchResult = doDispatchToComponent(ureq, null); // FIXME:fj:c enable time stats for ajax-mode didDispatch = dispatchResult.isDispatch(); incTimestamp = dispatchResult.isIncTimestamp(); - switchScreenMode = dispatchResult.isSwitchScreenMode(); + forceReload = dispatchResult.isForceReload(); if (isDebugLog) { long durationAfterDoDispatchToComponent = System.currentTimeMillis() - debug_start; log.debug("Perf-Test: Window durationAfterDoDispatchToComponent=" + durationAfterDoDispatchToComponent); @@ -350,7 +351,7 @@ public class Window extends AbstractComponent { MediaResource mmr = null; //REVIEW:PB: this will be the code allowing back forward navigation //-----> if (didDispatch || inlineAfterBackForward) { - if (switchScreenMode) { + if (forceReload) { //force RELOAD with a redirect to itself String reRenderUri = buildURIFor(this, timestampID, null); Command rmrcom = CommandFactory.createParentRedirectTo(reRenderUri); @@ -614,9 +615,11 @@ public class Window extends AbstractComponent { debugMsg.append("sync_bdisp:").append(syncIntroDiff).append(LOG_SEPARATOR); } + boolean forceReload = false; if (dispatch) { DispatchResult dispatchResult = doDispatchToComponent(ureq, debugMsg); boolean didDispatch = dispatchResult.isDispatch(); + forceReload = dispatchResult.isForceReload(); incTimestamp = dispatchResult.isIncTimestamp(); if (isDebugLog) { long dstop = System.currentTimeMillis(); @@ -670,8 +673,13 @@ public class Window extends AbstractComponent { return; } } - - if (inline) { + + if(forceReload) { + //force RELOAD with a redirect to itself (http redirect because we are in non-Ajax mode) + String reRenderUri = buildURIFor(this, timestampID, null); + String url = reRenderUri; + DispatcherModule.redirectTo(response, url); + } else if (inline) { // do inline rendering. ComponentCollection top = getContentPane(); @@ -1189,9 +1197,8 @@ public class Window extends AbstractComponent { } ChiefController chief = Windows.getWindows(ureq).getChiefController(); - boolean switchScreenMode = chief == null ? - false : chief.getScreenMode().wishScreenModeSwitch(true); - return new DispatchResult(toDispatch, incTimestamp, switchScreenMode); + boolean reload = chief == null ? false : chief.wishReload(true); + return new DispatchResult(toDispatch, incTimestamp, reload); } private void appendDispatchDebugInfos(Component target, StringBuilder debugMsg) { @@ -1319,20 +1326,20 @@ public class Window extends AbstractComponent { class DispatchResult { private final boolean dispatch; private final boolean incTimestamp; - private final boolean switchScreenMode; + private final boolean forceReload; - public DispatchResult(boolean dispatch, boolean incTimestamp, boolean switchScreenMode) { + public DispatchResult(boolean dispatch, boolean incTimestamp, boolean forceReload) { this.dispatch = dispatch; this.incTimestamp = incTimestamp; - this.switchScreenMode = switchScreenMode; + this.forceReload = forceReload; } public boolean isDispatch() { return dispatch; } - public boolean isSwitchScreenMode() { - return switchScreenMode; + public boolean isForceReload() { + return forceReload; } 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 93793d2f077..78276274458 100644 --- a/src/main/java/org/olat/core/gui/control/ChiefController.java +++ b/src/main/java/org/olat/core/gui/control/ChiefController.java @@ -45,6 +45,8 @@ public interface ChiefController extends Controller { public ScreenMode getScreenMode(); + public boolean wishReload(boolean erase); + /** * Set a class to the <body> * @param cssClass 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 89c4522f49f..d00a61080c1 100644 --- a/src/main/java/org/olat/core/gui/control/DefaultChiefController.java +++ b/src/main/java/org/olat/core/gui/control/DefaultChiefController.java @@ -63,6 +63,11 @@ public abstract class DefaultChiefController extends DefaultController implement this.window = window; } + @Override + public boolean wishReload(boolean erase) { + return false; + } + @Override public ScreenMode getScreenMode() { return screenMode; diff --git a/src/main/java/org/olat/login/DMZContentControllerCreator.java b/src/main/java/org/olat/login/DMZContentControllerCreator.java index 4287962e9d6..425c26ad28e 100644 --- a/src/main/java/org/olat/login/DMZContentControllerCreator.java +++ b/src/main/java/org/olat/login/DMZContentControllerCreator.java @@ -26,6 +26,8 @@ package org.olat.login; import org.olat.core.commons.fullWebApp.BaseFullWebappController; import org.olat.core.gui.UserRequest; +import org.olat.core.gui.Windows; +import org.olat.core.gui.control.ChiefController; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.creator.AutoCreator; @@ -42,11 +44,13 @@ import org.olat.core.gui.control.creator.ControllerCreator; public class DMZContentControllerCreator implements ControllerCreator { @Override - public Controller createController(UserRequest lureq, WindowControl lwControl) { + public Controller createController(UserRequest ureq, WindowControl lwControl) { DmzBFWCParts dmzSitesAndNav = new DmzBFWCParts(); AutoCreator contentControllerCreator = new AutoCreator(); contentControllerCreator.setClassName(LoginAuthprovidersController.class.getName()); dmzSitesAndNav.setContentControllerCreator(contentControllerCreator); - return new BaseFullWebappController(lureq, dmzSitesAndNav); + ChiefController cc = new BaseFullWebappController(ureq, dmzSitesAndNav); + Windows.getWindows(ureq.getUserSession()).setChiefController(cc); + return cc; } } \ No newline at end of file -- GitLab