working: link to parents from other loops sites: query and assign type instances from foreign site

This commit is contained in:
Helmut Merz 2013-07-22 13:16:19 +02:00
parent 349dc89bb8
commit ccb4673268
3 changed files with 16 additions and 10 deletions

View file

@ -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

View file

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

View file

@ -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,))