From: <fa...@vh...> - 2005-09-12 15:14:56
|
Author: fabrice Date: 2005-09-12 17:05:35 +0200 (Mon, 12 Sep 2005) New Revision: 792 Modified: ccm-ldn-navigation/trunk/src/com/arsdigita/london/navigation/NavigationFileResolver.java Log: Filter out non-existing categories, or categories which are not in the correct tree Modified: ccm-ldn-navigation/trunk/src/com/arsdigita/london/navigation/NavigationFileResolver.java =================================================================== --- ccm-ldn-navigation/trunk/src/com/arsdigita/london/navigation/NavigationFileResolver.java 2005-09-12 15:04:51 UTC (rev 791) +++ ccm-ldn-navigation/trunk/src/com/arsdigita/london/navigation/NavigationFileResolver.java 2005-09-12 15:05:35 UTC (rev 792) @@ -18,25 +18,27 @@ package com.arsdigita.london.navigation; - +import com.arsdigita.categorization.Categorization; +import com.arsdigita.categorization.Category; +import com.arsdigita.categorization.CategoryCollection; +import com.arsdigita.cms.TemplateContext; +import com.arsdigita.domain.DomainCollection; +import com.arsdigita.london.terms.Domain; +import com.arsdigita.persistence.DataCollection; +import com.arsdigita.persistence.SessionManager; +import com.arsdigita.util.Assert; +import com.arsdigita.util.StringUtils; +import com.arsdigita.web.Application; import com.arsdigita.web.DefaultApplicationFileResolver; -import com.arsdigita.web.Application; import com.arsdigita.web.Web; -import com.arsdigita.cms.TemplateContext; -import com.arsdigita.util.StringUtils; -import com.arsdigita.util.Assert; -import com.arsdigita.categorization.Category; -import com.arsdigita.categorization.CategoryCollection; - import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.RequestDispatcher; import java.math.BigDecimal; - +import java.util.ArrayList; import java.util.List; -import java.util.ArrayList; import org.apache.log4j.Logger; @@ -73,7 +75,42 @@ useContext = Template.DEFAULT_USE_CONTEXT; } - Category cat = new Category(new BigDecimal(id)); + Category cat = null; + + // if the category doesn't exist, send a 404, nicer + try { + cat = new Category(new BigDecimal(id)); + } catch (Exception e) { + s_log.warn("Could not load category for id "+id); + return null; + } + + // check that the category is in the tree of categories + Category root = null; + DataCollection objs = SessionManager.getSession() + .retrieve(Domain.BASE_DATA_OBJECT_TYPE); + objs.addEqualsFilter("model.ownerUseContext.categoryOwner.id", nav.getID()); + objs.addEqualsFilter("model.ownerUseContext.useContext", null); + DomainCollection domains = new DomainCollection(objs); + if (domains.next()) { + root = ((Domain) domains.getDomainObject()).getModel(); + } else { + // can't find domain, 404 + return null; + } + domains.close(); + if (root == null) { + // no root category, 404 + return null; + } + + if (!root.isMemberOfSubtree(cat)) { + // send of 404 + s_log.warn("Category doesn't belong to navigation tree."); + return null; + } + + CategoryCollection parents = cat.getDefaultAscendants(); parents.addOrder(Category.DEFAULT_ANCESTORS); List cats = new ArrayList(); |