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 8b2f579b3605ac38a12433cdb5fc2d6a81a6eaf0..f6f4457d16eb8b5b4ec55f19a24824d7e0399dac 100644 --- a/src/main/java/org/olat/core/commons/fullWebApp/BaseFullWebappController.java +++ b/src/main/java/org/olat/core/commons/fullWebApp/BaseFullWebappController.java @@ -361,10 +361,10 @@ public class BaseFullWebappController extends BasicController implements DTabs, && (usess.getRoles().isOLATAdmin() || usess.getRoles().isUserManager()) && (i18nModule.isTransToolEnabled() || i18nModule.isOverlayEnabled())) { inlineTranslationC = wbo.createInlineTranslationDispatcherController(ureq, getWindowControl()); - Preferences guiPrefs = ureq.getUserSession().getGuiPreferences(); + Preferences guiPrefs = usess.getGuiPreferences(); Boolean isInlineTranslationEnabled = (Boolean) guiPrefs.get(I18nModule.class, I18nModule.GUI_PREFS_INLINE_TRANSLATION_ENABLED, Boolean.FALSE); - i18nManager.setMarkLocalizedStringsEnabled(ureq.getUserSession(), isInlineTranslationEnabled); + i18nManager.setMarkLocalizedStringsEnabled(usess, isInlineTranslationEnabled); mainVc.put("inlineTranslation", inlineTranslationC.getInitialComponent()); } diff --git a/src/main/java/org/olat/course/highscore/ui/HighScoreRunController.java b/src/main/java/org/olat/course/highscore/ui/HighScoreRunController.java index ac2f669709feeace2139e034dad5ad80afb9d93c..10582f3a58cbf60c05c6bc759c99889d5fc2a2c8 100644 --- a/src/main/java/org/olat/course/highscore/ui/HighScoreRunController.java +++ b/src/main/java/org/olat/course/highscore/ui/HighScoreRunController.java @@ -23,7 +23,6 @@ package org.olat.course.highscore.ui; * @author fkiefer */ import java.math.BigDecimal; - import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -294,6 +293,7 @@ public class HighScoreRunController extends FormBasicController{ boolean choosePortrait = !anonymous || ownIdentity.equals(currentID); DisplayPortraitController portrait = new DisplayPortraitController(ureq, getWindowControl(), currentID, false, choosePortrait, !choosePortrait); + listenTo(portrait); Component portraitComponent = portrait.getInitialComponent(); mainVC.put("portrait" + (i + 1) + "-" + (j + 1), portraitComponent); } @@ -304,6 +304,7 @@ public class HighScoreRunController extends FormBasicController{ if (ownIdentity.equals(currentID)) { DisplayPortraitController portrait = new DisplayPortraitController(ureq, getWindowControl(), currentID, true, true, false); + listenTo(portrait); mainVC.put("portrait" + (i + 1), portrait.getInitialComponent()); } } diff --git a/src/main/java/org/olat/gui/control/OlatDmzTopNavController.java b/src/main/java/org/olat/gui/control/OlatDmzTopNavController.java index 9ae62819c3edb4ecb29ce5761430103e35be5f9f..a351fe2bd745bc83227b22084a22225fa220ca27 100644 --- a/src/main/java/org/olat/gui/control/OlatDmzTopNavController.java +++ b/src/main/java/org/olat/gui/control/OlatDmzTopNavController.java @@ -49,6 +49,8 @@ import org.springframework.beans.factory.annotation.Autowired; public class OlatDmzTopNavController extends BasicController implements LockableController { private Link impressumLink, aboutLink; + + private AboutController aboutCtr; private LanguageChooserController languageChooserC; @Autowired @@ -106,20 +108,23 @@ public class OlatDmzTopNavController extends BasicController implements Lockable @Override public void event(UserRequest ureq, Component source, Event event) { if (source == impressumLink) { - ControllerCreator impressumControllerCreator = new ControllerCreator() { - @Override - public Controller createController(UserRequest lureq, WindowControl lwControl) { - return new ImpressumDmzMainController(lureq, lwControl); - } - }; - PopupBrowserWindow popupBrowserWindow = Windows.getWindows(ureq).getWindowManager().createNewUnauthenticatedPopupWindowFor(ureq, impressumControllerCreator); - popupBrowserWindow.open(ureq); + doImpressum(ureq); } else if (source == aboutLink) { - AboutController aboutCtr = new AboutController(ureq, getWindowControl()); - listenTo(aboutCtr); - aboutCtr.activateAsModalDialog(); + doAbout(ureq); + } + } + + @Override + public void event(UserRequest ureq, Controller source, Event event) { + if (aboutCtr == source) { + cleanUp(); } } + + private void cleanUp() { + removeAsListenerAndDispose(aboutCtr); + aboutCtr = null; + } @Override protected void doDispose() { @@ -128,4 +133,23 @@ public class OlatDmzTopNavController extends BasicController implements Lockable languageChooserC = null; } } + + private void doAbout(UserRequest ureq) { + if(aboutCtr != null) return; + + aboutCtr = new AboutController(ureq, getWindowControl()); + listenTo(aboutCtr); + aboutCtr.activateAsModalDialog(); + } + + private void doImpressum(UserRequest ureq) { + ControllerCreator impressumControllerCreator = new ControllerCreator() { + @Override + public Controller createController(UserRequest lureq, WindowControl lwControl) { + return new ImpressumDmzMainController(lureq, lwControl); + } + }; + PopupBrowserWindow popupBrowserWindow = Windows.getWindows(ureq).getWindowManager().createNewUnauthenticatedPopupWindowFor(ureq, impressumControllerCreator); + popupBrowserWindow.open(ureq); + } } \ No newline at end of file diff --git a/src/main/java/org/olat/gui/control/OlatFooterController.java b/src/main/java/org/olat/gui/control/OlatFooterController.java index 39bf009405891eae5932d1a22acc21dc9f84c46a..2a9d0db7c2ee6d7a590aa66cb7440085c2189eb3 100644 --- a/src/main/java/org/olat/gui/control/OlatFooterController.java +++ b/src/main/java/org/olat/gui/control/OlatFooterController.java @@ -49,6 +49,7 @@ import org.olat.core.gui.control.generic.popup.PopupBrowserWindow; import org.olat.core.helpers.Settings; import org.olat.core.id.Identity; import org.olat.core.util.StringHelper; +import org.olat.core.util.UserSession; import org.olat.core.util.Util; import org.olat.login.AboutController; import org.olat.social.SocialModule; @@ -74,6 +75,8 @@ public class OlatFooterController extends BasicController implements LockableCon private final VelocityContainer olatFootervc; private ShareLinkController shareLinkCtr; + private AboutController aboutCtr; + @Autowired private SocialModule socialModule; @Autowired @@ -88,8 +91,9 @@ public class OlatFooterController extends BasicController implements LockableCon olatFootervc = createVelocityContainer("olatFooter"); Identity identity = ureq.getIdentity(); - boolean isGuest = (identity == null ? true : ureq.getUserSession().getRoles().isGuestOnly()); - boolean isInvitee = (identity == null ? false : ureq.getUserSession().getRoles().isInvitee()); + UserSession usess = ureq.getUserSession(); + boolean isGuest = (identity == null ? true : usess.getRoles().isGuestOnly()); + boolean isInvitee = (identity == null ? false : usess.getRoles().isInvitee()); // Show user count UserLoggedInCounter userCounter = new UserLoggedInCounter(); @@ -103,14 +107,14 @@ public class OlatFooterController extends BasicController implements LockableCon } olatFootervc.contextPut("impressumInfos", new ImpressumInformations(impressumModule)); - impressumLink = LinkFactory.createLink("topnav.impressum", olatFootervc, this); + impressumLink = LinkFactory.createLink("_footer_dmz_impressum", "topnav.impressum", olatFootervc, this); impressumLink.setTooltip("topnav.impressum.alt"); impressumLink.setIconLeftCSS("o_icon o_icon_impress o_icon-lg"); impressumLink.setAjaxEnabled(false); impressumLink.setTarget("_blank"); // Push information about user - if (!isGuest && ureq.getUserSession().isAuthenticated()) { + if (!isGuest && usess.isAuthenticated()) { olatFootervc.contextPut("loggedIn", Boolean.TRUE); if(isInvitee) { String fullName = CoreSpringFactory.getImpl(UserManager.class).getUserDisplayName(ureq.getIdentity()); @@ -157,12 +161,30 @@ public class OlatFooterController extends BasicController implements LockableCon if(impressumLink == source) { doOpenImpressum(ureq); } else if (source == aboutLink) { - AboutController aboutCtr = new AboutController(ureq, getWindowControl()); - listenTo(aboutCtr); - aboutCtr.activateAsModalDialog(); + doAbout(ureq); + } + } + + @Override + public void event(UserRequest ureq, Controller source, Event event) { + if(aboutCtr == source) { + cleanUp(); } } + private void cleanUp() { + removeAsListenerAndDispose(aboutCtr); + aboutCtr = null; + } + + private void doAbout(UserRequest ureq) { + if(aboutCtr != null) return; + + aboutCtr = new AboutController(ureq, getWindowControl()); + listenTo(aboutCtr); + aboutCtr.activateAsModalDialog(); + } + protected void doOpenImpressum(UserRequest ureq) { ControllerCreator impressumControllerCreator = new ControllerCreator() { @Override diff --git a/src/main/java/org/olat/gui/control/OlatGuestTopNavController.java b/src/main/java/org/olat/gui/control/OlatGuestTopNavController.java index 10993e59397df9d208a8f08fd921a6a9dba623cf..646e40f4b2bd92e01b282bd26ece652d6f9883ba 100644 --- a/src/main/java/org/olat/gui/control/OlatGuestTopNavController.java +++ b/src/main/java/org/olat/gui/control/OlatGuestTopNavController.java @@ -72,7 +72,7 @@ public class OlatGuestTopNavController extends BasicController implements Lockab // impressum vc.contextPut("impressumInfos", new ImpressumInformations(impressumModule)); - impressumLink = LinkFactory.createLink("topnav.impressum", vc, this); + impressumLink = LinkFactory.createLink("_top_nav_guest_impressum", "topnav.impressum", vc, this); impressumLink.setTooltip("topnav.impressum.alt"); impressumLink.setIconLeftCSS("o_icon o_icon_impress o_icon-lg"); impressumLink.setAjaxEnabled(false); diff --git a/src/main/java/org/olat/gui/control/UserToolsMenuController.java b/src/main/java/org/olat/gui/control/UserToolsMenuController.java index f668e59d4acf15571584ba28f316f41b581ecb3b..705b1fd1bc1de67c7dcf3deeeee5a0ed805b9fcf 100644 --- a/src/main/java/org/olat/gui/control/UserToolsMenuController.java +++ b/src/main/java/org/olat/gui/control/UserToolsMenuController.java @@ -65,19 +65,20 @@ public class UserToolsMenuController extends BasicController implements Lockable menuVC.setDomReplacementWrapperRequired(false); if(ureq.getIdentity() != null) { UserSession usess = ureq.getUserSession(); - if(usess != null && ureq.getUserSession().getRoles() != null) { + if(usess != null && usess.getRoles() != null) { boolean isGuest = usess.getRoles().isGuestOnly(); boolean isInvitee = usess.getRoles().isInvitee(); if(!isGuest && !isInvitee) { loadPersonalTools(ureq); } } + menuVC.contextPut("authenticated", usess.isAuthenticated()); } putInitialPanel(menuVC); } private void loadPersonalTools(UserRequest ureq) { - List<String> linksName = new ArrayList<String>(); + List<String> linksName = new ArrayList<>(); List<String> configLinksName = new ArrayList<>(); List<String> searchLinksName = new ArrayList<>(); List<String> systemLinksName = new ArrayList<>(); diff --git a/src/main/java/org/olat/gui/control/_content/menu.html b/src/main/java/org/olat/gui/control/_content/menu.html index 0e955e974788f2ad4c235be0500d25e346595f88..dda28eb404b9fdf0e1850e105190396247046cb8 100644 --- a/src/main/java/org/olat/gui/control/_content/menu.html +++ b/src/main/java/org/olat/gui/control/_content/menu.html @@ -26,6 +26,7 @@ #end <li role="presentation" class="divider"></li> #end + #if($r.isTrue($authenticated)) <li> ## make logout link very basic without onClick handler in case javaScript is broken it is still possible to log out ## except for the onolatunload() method which must be executed to correctly finish SCORM modules (OLAT-6255) @@ -34,4 +35,5 @@ <i class="o_icon o_icon_logout o_icon-fw"></i> $r.translate("topnav.logout") </a> </li> + #end </ul> \ No newline at end of file diff --git a/src/main/java/org/olat/login/AboutController.java b/src/main/java/org/olat/login/AboutController.java index 9cdd2aed610e654b98607f08ac2619b6f962806d..a358c3710ec654a7cafcb7023b853002ab2c825c 100644 --- a/src/main/java/org/olat/login/AboutController.java +++ b/src/main/java/org/olat/login/AboutController.java @@ -89,9 +89,11 @@ public class AboutController extends BasicController { * Open a modal dialog which can be closed by user. */ public void activateAsModalDialog() { - cmc = new CloseableModalController(getWindowControl(), "close", this.getInitialComponent()); - listenTo(cmc); - cmc.activate(); + if(cmc == null) { + cmc = new CloseableModalController(getWindowControl(), "close", getInitialComponent()); + listenTo(cmc); + cmc.activate(); + } } /** @@ -108,17 +110,16 @@ public class AboutController extends BasicController { @Override protected void event(UserRequest ureq, Component source, Event event) { if (source == closeLink) { - if (cmc != null) { - cmc.deactivate(); - removeAsListenerAndDispose(cmc); - cmc = null; - } + deactivateModalDialog(); + fireEvent(ureq, Event.CLOSE_EVENT); } } @Override protected void event(UserRequest ureq, Controller source, Event event) { - // nothing to do on cmc event, cleanup on dispose + if(cmc == source) { + fireEvent(ureq, Event.CLOSE_EVENT); + } } @Override @@ -140,7 +141,8 @@ public class AboutController extends BasicController { */ public static final Link aboutLinkFactory(Locale locale, Controller listener, boolean withIcon, boolean withBuildInfo) { Translator aboutTrans = Util.createPackageTranslator(AboutController.class, locale); - Link aboutLink = LinkFactory.createLink("menu.about", "menu.about", aboutTrans, null, listener, Link.LINK + Link.NONTRANSLATED); + Link aboutLink = LinkFactory + .createLink("menu.about", "menu.about", "about", "menu.about", aboutTrans, null, listener, Link.LINK + Link.NONTRANSLATED); aboutLink.setCustomDisplayText(aboutTrans.translate("menu.about")); if (withIcon) { aboutLink.setIconLeftCSS("o_icon o_icon_openolat o_icon-fw"); @@ -155,9 +157,6 @@ public class AboutController extends BasicController { aboutLink.setTitle(title); } } - return aboutLink; } - - } diff --git a/src/main/java/org/olat/login/LoginAuthprovidersController.java b/src/main/java/org/olat/login/LoginAuthprovidersController.java index 83dccae10dd9104657a45612163a8ab6ef31155d..6acec3c7dabc9e1a1f5db628cd26a9c74f2bf4ae 100644 --- a/src/main/java/org/olat/login/LoginAuthprovidersController.java +++ b/src/main/java/org/olat/login/LoginAuthprovidersController.java @@ -56,6 +56,7 @@ import org.olat.core.id.context.BusinessControlFactory; import org.olat.core.id.context.ContextEntry; import org.olat.core.id.context.StateEntry; import org.olat.core.util.ArrayHelper; +import org.olat.core.util.UserSession; import org.olat.core.util.Util; import org.olat.core.util.WebappHelper; import org.olat.core.util.i18n.I18nManager; @@ -93,13 +94,14 @@ public class LoginAuthprovidersController extends MainLayoutBasicController impl // Use fallback translator from full webapp package to translate accessibility stuff super(ureq, wControl, Util.createPackageTranslator(BaseFullWebappController.class, ureq.getLocale())); - if(ureq.getUserSession().getEntry("error.change.email") != null) { - wControl.setError(ureq.getUserSession().getEntry("error.change.email").toString()); - ureq.getUserSession().removeEntryFromNonClearedStore("error.change.email"); + UserSession usess = ureq.getUserSession(); + if(usess.getEntry("error.change.email") != null) { + wControl.setError(usess.getEntry("error.change.email").toString()); + usess.removeEntryFromNonClearedStore("error.change.email"); } - if(ureq.getUserSession().getEntry("error.change.email.time") != null) { - wControl.setError(ureq.getUserSession().getEntry("error.change.email.time").toString()); - ureq.getUserSession().removeEntryFromNonClearedStore("error.change.email.time"); + if(usess.getEntry("error.change.email.time") != null) { + wControl.setError(usess.getEntry("error.change.email.time").toString()); + usess.removeEntryFromNonClearedStore("error.change.email.time"); } MainPanel panel = new MainPanel("content"); diff --git a/src/main/java/org/olat/social/shareLink/ShareLinkController.java b/src/main/java/org/olat/social/shareLink/ShareLinkController.java index bf2ef1706e3b03e6821066c4937a7b519e485824..950fc273e073dcef10196c406227280ae3283071 100644 --- a/src/main/java/org/olat/social/shareLink/ShareLinkController.java +++ b/src/main/java/org/olat/social/shareLink/ShareLinkController.java @@ -37,6 +37,7 @@ import org.olat.core.id.context.BusinessControlFactory; import org.olat.core.id.context.ContextEntry; import org.olat.core.id.context.HistoryPoint; import org.olat.core.util.StringHelper; +import org.olat.core.util.UserSession; import org.olat.core.util.prefs.Preferences; import org.olat.social.SocialModule; @@ -77,7 +78,8 @@ public class ShareLinkController extends BasicController { SocialModule socialModule = (SocialModule) CoreSpringFactory.getBean("socialModule"); shareLinkVC.contextPut("shareLinks", socialModule.getEnabledShareLinkButtons()); // Tell if user is logged in - shareLinkVC.contextPut("isUser", ureq.getUserSession().isAuthenticated() && !ureq.getUserSession().getRoles().isGuestOnly()); + UserSession usess = ureq.getUserSession(); + shareLinkVC.contextPut("isUser", usess.isAuthenticated() && !usess.getRoles().isGuestOnly()); putInitialPanel(shareLinkVC); }