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
master
jensp 2017-09-01 10:04:52 +00:00
parent 70171a8e8c
commit aaead492e1
1 changed files with 14 additions and 4 deletions

View File

@ -31,6 +31,7 @@ import org.apache.log4j.Logger;
import com.arsdigita.categorization.Category; import com.arsdigita.categorization.Category;
import com.arsdigita.categorization.CategoryCollection; import com.arsdigita.categorization.CategoryCollection;
import com.arsdigita.categorization.CategoryLocalizationCollection;
import com.arsdigita.cms.CMSConfig; import com.arsdigita.cms.CMSConfig;
import com.arsdigita.cms.TemplateContext; import com.arsdigita.cms.TemplateContext;
import com.arsdigita.dispatcher.DispatcherHelper; import com.arsdigita.dispatcher.DispatcherHelper;
@ -46,6 +47,7 @@ import com.arsdigita.web.DefaultApplicationFileResolver;
import com.arsdigita.web.Web; import com.arsdigita.web.Web;
import com.arsdigita.globalization.GlobalizationHelper; import com.arsdigita.globalization.GlobalizationHelper;
import com.arsdigita.kernel.KernelConfig;
import java.io.IOException; 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 String PATH_COOKIE_NAME = "ad_path";
public static final char PATH_COOKIE_SEPARATOR = '|'; public static final char PATH_COOKIE_SEPARATOR = '|';
/**
*
*/
@Override @Override
public RequestDispatcher resolve(String templatePath, public RequestDispatcher resolve(String templatePath,
HttpServletRequest sreq, HttpServletRequest sreq,
@ -86,7 +85,7 @@ public class NavigationFileResolver extends DefaultApplicationFileResolver {
GlobalizationHelper.setSelectedLocale(lang); GlobalizationHelper.setSelectedLocale(lang);
} else { } else {
final String lang; String lang;
if (GlobalizationHelper.getSelectedLocale(sreq) == null) { if (GlobalizationHelper.getSelectedLocale(sreq) == null) {
lang = GlobalizationHelper.getNegotiatedLocale().getLanguage(); lang = GlobalizationHelper.getNegotiatedLocale().getLanguage();
} else { } else {
@ -99,6 +98,17 @@ public class NavigationFileResolver extends DefaultApplicationFileResolver {
redirectTo.append(DispatcherHelper.getWebappContext()); 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 redirectTo
.append("/ccm") .append("/ccm")
.append(app.getPath()) .append(app.getPath())