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.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())