index folders recursively (#4683)

This commit is contained in:
Frédéric Péters 2014-06-11 16:33:48 +02:00
parent c177f171c9
commit 6fd9feddfd
4 changed files with 23 additions and 2 deletions

View File

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

View File

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

View File

@ -3,4 +3,7 @@
<index name="object_folders" meta_type="KeywordIndex">
<indexed_attr value="object_folders"/>
</index>
<index name="object_direct_folders" meta_type="KeywordIndex">
<indexed_attr value="object_direct_folders"/>
</index>
</object>

View File

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