From 6fd9feddfd646d4a5b40997720b4e0020c5bc0a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Wed, 11 Jun 2014 16:33:48 +0200 Subject: [PATCH] index folders recursively (#4683) --- src/pfwbged/folder/folder.py | 7 +++++++ src/pfwbged/folder/indexers.py | 13 ++++++++++++- src/pfwbged/folder/profiles/default/catalog.xml | 3 +++ src/pfwbged/folder/templates/folder_view.pt | 2 +- 4 files changed, 23 insertions(+), 2 deletions(-) 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) {