index folders recursively (#4683)
This commit is contained in:
parent
c177f171c9
commit
6fd9feddfd
|
@ -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)
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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) {
|
||||
|
|
Reference in New Issue