From aaead492e13641e384b34c8bb083dc5086ef9971 Mon Sep 17 00:00:00 2001 From: jensp Date: Fri, 1 Sep 2017 10:04:52 +0000 Subject: [PATCH] Better handling if navigation category is not available in one of the languages in the Accept-Language header of the request git-svn-id: https://svn.libreccm.org/ccm/trunk@4972 8810af33-2d31-482b-a856-94f89814c4df --- .../navigation/NavigationFileResolver.java | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/ccm-navigation/src/com/arsdigita/navigation/NavigationFileResolver.java b/ccm-navigation/src/com/arsdigita/navigation/NavigationFileResolver.java index 3e7030cf0..bb23e8e72 100755 --- a/ccm-navigation/src/com/arsdigita/navigation/NavigationFileResolver.java +++ b/ccm-navigation/src/com/arsdigita/navigation/NavigationFileResolver.java @@ -31,6 +31,7 @@ import org.apache.log4j.Logger; import com.arsdigita.categorization.Category; import com.arsdigita.categorization.CategoryCollection; +import com.arsdigita.categorization.CategoryLocalizationCollection; import com.arsdigita.cms.CMSConfig; import com.arsdigita.cms.TemplateContext; import com.arsdigita.dispatcher.DispatcherHelper; @@ -46,6 +47,7 @@ import com.arsdigita.web.DefaultApplicationFileResolver; import com.arsdigita.web.Web; import com.arsdigita.globalization.GlobalizationHelper; +import com.arsdigita.kernel.KernelConfig; import java.io.IOException; @@ -64,9 +66,6 @@ public class NavigationFileResolver extends DefaultApplicationFileResolver { public static final String PATH_COOKIE_NAME = "ad_path"; public static final char PATH_COOKIE_SEPARATOR = '|'; - /** - * - */ @Override public RequestDispatcher resolve(String templatePath, HttpServletRequest sreq, @@ -86,7 +85,7 @@ public class NavigationFileResolver extends DefaultApplicationFileResolver { GlobalizationHelper.setSelectedLocale(lang); } else { - final String lang; + String lang; if (GlobalizationHelper.getSelectedLocale(sreq) == null) { lang = GlobalizationHelper.getNegotiatedLocale().getLanguage(); } else { @@ -99,6 +98,17 @@ public class NavigationFileResolver extends DefaultApplicationFileResolver { 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())