From 40d6de55e370646f36bf192fb5fa8b4e3e19eb6f Mon Sep 17 00:00:00 2001 From: jensp Date: Mon, 13 Nov 2017 07:33:34 +0000 Subject: [PATCH] BugFix for LanguageExtension redirect. The redirect was also applied when the feature was disabled in the configuration. git-svn-id: https://svn.libreccm.org/ccm/trunk@5118 8810af33-2d31-482b-a856-94f89814c4df --- .../navigation/NavigationFileResolver.java | 128 +++++++++--------- 1 file changed, 67 insertions(+), 61 deletions(-) diff --git a/ccm-navigation/src/com/arsdigita/navigation/NavigationFileResolver.java b/ccm-navigation/src/com/arsdigita/navigation/NavigationFileResolver.java index 7cdb30207..e8d5fec0c 100755 --- a/ccm-navigation/src/com/arsdigita/navigation/NavigationFileResolver.java +++ b/ccm-navigation/src/com/arsdigita/navigation/NavigationFileResolver.java @@ -78,74 +78,80 @@ public class NavigationFileResolver extends DefaultApplicationFileResolver { } if (!path.endsWith(".jsp")) { - if (CMSConfig.getInstanceOf().getUseLanguageExtension() - && path.matches("(.*)/index\\.[a-zA-Z]{2}")) { + if (CMSConfig.getInstanceOf().getUseLanguageExtension()) { + if (path.matches("(.*)/index\\.[a-zA-Z]{2}")) { - final String lang = path.substring(path.length() - 2); - path = path.substring(0, path.length() - "index.$$".length()); - GlobalizationHelper.setSelectedLocale(lang); - } else { - - String lang; - if (GlobalizationHelper.getSelectedLocale(sreq) == null) { - lang = GlobalizationHelper.getNegotiatedLocale() - .getLanguage(); + final String lang = path.substring(path.length() - 2); + path = path + .substring(0, path.length() - "index.$$".length()); + GlobalizationHelper.setSelectedLocale(lang); } else { - lang = GlobalizationHelper.getSelectedLocale(sreq) - .getLanguage(); - } - final StringBuffer redirectTo = new StringBuffer(); - - redirectTo - .append(DispatcherHelper.getRequest().getScheme()) - .append("://") - .append(DispatcherHelper.getRequest().getServerName()); - - if (DispatcherHelper.getRequest().getServerPort() != 80 - && DispatcherHelper.getRequest().getServerPort() != 443) { - redirectTo - .append(":") - .append(DispatcherHelper.getRequest().getServerPort()); - } - - if (DispatcherHelper.getWebappContext() != null - && !DispatcherHelper.getWebappContext().trim().isEmpty()) { - redirectTo.append(DispatcherHelper.getWebappContext()); - } - - //Is category available in lang? If not change lang to default language - final Category[] cats = resolvePath(getRootCategory(), path); - if (cats == null) { - lang = KernelConfig.getConfig().getDefaultLanguage(); - } else { - final CategoryLocalizationCollection langs - = cats[cats.length - - 1] - .getCategoryLocalizationCollection(); - if (!langs.localizationExists(lang)) { - lang = KernelConfig.getConfig().getDefaultLanguage(); + String lang; + if (GlobalizationHelper.getSelectedLocale(sreq) == null) { + lang = GlobalizationHelper.getNegotiatedLocale() + .getLanguage(); + } else { + lang = GlobalizationHelper.getSelectedLocale(sreq) + .getLanguage(); } - } - redirectTo - .append("/ccm") - .append(app.getPath()) - .append(path); - if (!path.endsWith("/")) { - redirectTo.append('/'); - } - redirectTo - .append("index.") - .append(lang); + final StringBuffer redirectTo = new StringBuffer(); - sresp.setHeader("Location", redirectTo.toString()); - try { - sresp.sendError(HttpServletResponse.SC_MOVED_PERMANENTLY); - } catch (IOException ex) { - throw new RuntimeException(ex); + redirectTo + .append(DispatcherHelper.getRequest().getScheme()) + .append("://") + .append(DispatcherHelper.getRequest().getServerName()); + + if (DispatcherHelper.getRequest().getServerPort() != 80 + && DispatcherHelper.getRequest().getServerPort() + != 443) { + redirectTo + .append(":") + .append(DispatcherHelper.getRequest() + .getServerPort()); + } + + if (DispatcherHelper.getWebappContext() != null + && !DispatcherHelper.getWebappContext().trim() + .isEmpty()) { + redirectTo.append(DispatcherHelper.getWebappContext()); + } + + //Is category available in lang? If not change lang to default language + final Category[] cats = resolvePath(getRootCategory(), path); + if (cats == null) { + lang = KernelConfig.getConfig().getDefaultLanguage(); + } else { + final CategoryLocalizationCollection langs + = cats[cats.length + - 1] + .getCategoryLocalizationCollection(); + if (!langs.localizationExists(lang)) { + lang = KernelConfig.getConfig().getDefaultLanguage(); + } + } + + redirectTo + .append("/ccm") + .append(app.getPath()) + .append(path); + if (!path.endsWith("/")) { + redirectTo.append('/'); + } + redirectTo + .append("index.") + .append(lang); + + sresp.setHeader("Location", redirectTo.toString()); + try { + sresp + .sendError(HttpServletResponse.SC_MOVED_PERMANENTLY); + } catch (IOException ex) { + throw new RuntimeException(ex); + } + return null; } - return null; } }