diff --git a/src/pfwbged/folder/folder.py b/src/pfwbged/folder/folder.py
index 136449b..a462bb9 100644
--- a/src/pfwbged/folder/folder.py
+++ b/src/pfwbged/folder/folder.py
@@ -105,6 +105,13 @@ class Folder(Container):
parents.append(item.folder.to_object)
return parents
+ def parent_folders_intid_tree(self, limit=5):
+ intids = component.getUtility(IIntIds)
+ l = [intids.getId(self)]
+ for parent in self.parent_folders():
+ l.extend(parent.parent_folders_intid_tree(limit=limit-1))
+ return l
+
def child_folders_brains(self):
from .link import ILink
intids = component.getUtility(IIntIds)
diff --git a/src/pfwbged/folder/indexers.py b/src/pfwbged/folder/indexers.py
index d94419c..ffbcaef 100644
--- a/src/pfwbged/folder/indexers.py
+++ b/src/pfwbged/folder/indexers.py
@@ -6,11 +6,22 @@ from .link import ILink
from collective.dms.basecontent.dmsdocument import IDmsDocument
@indexer(IDmsDocument)
-def object_folders(obj, **kw):
+def object_direct_folders(obj, **kw):
folders = []
for id, item in obj.contentItems():
if not ILink.providedBy(item):
continue
folders.append(str(item.folder.to_id))
return folders
+grok.global_adapter(object_direct_folders, name='object_direct_folders')
+
+
+@indexer(IDmsDocument)
+def object_folders(obj, **kw):
+ folders = []
+ for id, item in obj.contentItems():
+ if not ILink.providedBy(item):
+ continue
+ folders.extend(item.folder.to_object.parent_folders_intid_tree())
+ return [str(x) for x in folders]
grok.global_adapter(object_folders, name='object_folders')
diff --git a/src/pfwbged/folder/profiles/default/catalog.xml b/src/pfwbged/folder/profiles/default/catalog.xml
index fa54e01..8016f60 100644
--- a/src/pfwbged/folder/profiles/default/catalog.xml
+++ b/src/pfwbged/folder/profiles/default/catalog.xml
@@ -3,4 +3,7 @@
+
+
+
diff --git a/src/pfwbged/folder/templates/folder_view.pt b/src/pfwbged/folder/templates/folder_view.pt
index 9f7bec3..987ab34 100644
--- a/src/pfwbged/folder/templates/folder_view.pt
+++ b/src/pfwbged/folder/templates/folder_view.pt
@@ -76,7 +76,7 @@ $.querywidget.updateSearch = function () {
return baseUrl;
})();
var query = context_url + "/@@querybuilder_html_results?";
- query += "query.i:records=object_folders&query.o:records=plone.app.querystring.operation.int.is&query.v:records:list=";
+ query += "query.i:records=object_direct_folders&query.o:records=plone.app.querystring.operation.string.is&query.v:records:list=";
query += $("input[name='folder_intid']").val();
query += '&sort_on=' + $('#sort_on').val();
if ($('#sort_order:checked').length > 0) {