diff --git a/expert/browser/search.py b/expert/browser/search.py index af4f437..1776e57 100644 --- a/expert/browser/search.py +++ b/expert/browser/search.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2011 Helmut Merz helmutm@cy55.de +# Copyright (c) 2013 Helmut Merz helmutm@cy55.de # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -19,14 +19,12 @@ """ Definition of basic view classes and other browser related stuff for the loops.expert package. - -$Id$ """ from zope import interface, component from zope.app.pagetemplate import ViewPageTemplateFile from zope.cachedescriptors.property import Lazy -from zope.traversing.api import getName, getParent +from zope.traversing.api import getName, getParent, traverse from cybertools.browser.form import FormController from cybertools.stateful.interfaces import IStateful, IStatesDefinition @@ -150,12 +148,16 @@ class Search(ConceptView): if not isinstance(types, (list, tuple)): types = [types] for type in types: + site = self.loopsRoot + if type.startswith('/'): + parts = type.split(':') + site = traverse(self.loopsRoot, parts[0], site) result = self.executeQuery(title=title or None, type=type, exclude=('hidden',)) fv = FilterView(self.context, self.request) result = fv.apply(result) for o in result: - if o.getLoopsRoot() == self.loopsRoot: + if o.getLoopsRoot() == site: adObj = adapted(o, self.languageInfo) if filterMethod is not None and not filterMethod(adObj): continue diff --git a/expert/concept.py b/expert/concept.py index abd0b6f..d87dfcf 100644 --- a/expert/concept.py +++ b/expert/concept.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2008 Helmut Merz helmutm@cy55.de +# Copyright (c) 2013 Helmut Merz helmutm@cy55.de # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -18,8 +18,6 @@ """ Query concepts management stuff. - -$Id$ """ from BTrees.IOBTree import IOBTree @@ -29,6 +27,7 @@ from zope.interface import Interface, Attribute, implements from zope.app.catalog.interfaces import ICatalog from zope.app.intid.interfaces import IIntIds from zope.cachedescriptors.property import Lazy +from zope.traversing.api import traverse from cybertools.typology.interfaces import IType from loops.common import AdapterBase @@ -66,6 +65,11 @@ class BaseQuery(object): return self.context.context.getLoopsRoot() def queryConcepts(self, title=None, type=None, **kw): + site = self.loopsRoot + if type.startswith('/'): + parts = type.split(':') + site = traverse(self.loopsRoot, parts[0], site) + type = 'loops:' + ':'.join(parts[1:]) if type.endswith('*'): start = type[:-1] end = start + '\x7f' @@ -76,7 +80,7 @@ class BaseQuery(object): result = cat.searchResults(loops_type=(start, end), loops_title=title) else: result = cat.searchResults(loops_type=(start, end)) - result = set(r for r in result if r.getLoopsRoot() == self.loopsRoot + result = set(r for r in result if r.getLoopsRoot() == site and canListObject(r)) if 'exclude' in kw: r1 = set() diff --git a/type.py b/type.py index 64f9615..0f9ffee 100644 --- a/type.py +++ b/type.py @@ -68,7 +68,7 @@ class LoopsType(BaseType): tp = self.typeProvider typeName = tp is None and 'unknown' or str(getName(tp)) if self.isForeignReference: - root = '/'.join(getPath(self.root)) + root = getPath(self.root) else: root = 'loops' return ':'.join((root, self.qualifiers[0], typeName,))