def testDontShowAllParents(self): strategy = NavtreeStrategyBase() strategy.showAllParents = False query = {'portal_type' : 'Folder'} context = self.portal.folder1.doc11 tree = buildFolderTree(self.portal, query=query, obj=context, strategy=strategy)['children'] rootPath = '/'.join(self.portal.getPhysicalPath()) self.assertEqual(len(tree), 2) self.assertEqual(tree[0]['item'].getPath(), rootPath + '/folder1') self.assertEqual(len(tree[0]['children']), 0) self.assertEqual(tree[1]['item'].getPath(), rootPath + '/folder2') self.assertEqual(len(tree[1]['children']), 1) self.assertEqual(tree[1]['children'][0]['item'].getPath(), rootPath + '/folder2/folder21')
def testShowAllParentsWithParentNotInCatalog(self): strategy = NavtreeStrategyBase() strategy.showAllParents = True self.portal.folder1.unindexObject() query = {'portal_type': 'Folder'} context = self.portal.folder1.doc11 tree = buildFolderTree(self.portal, query=query, obj=context, strategy=strategy)['children'] rootPath = '/'.join(self.portal.getPhysicalPath()) # XXX: Ideally, this shouldn't happen, we should get a dummy node, but # there's no way to do that with the catalog self.assertEqual(len(tree), 1) self.assertEqual(tree[0]['item'].getPath(), rootPath + '/folder2')
def testShowAllParentsWithParentNotInCatalog(self): strategy = NavtreeStrategyBase() strategy.showAllParents = True wftool = getToolByName(self.portal, 'portal_workflow') self.portal.folder1.unindexObject() query = {'portal_type' : 'Folder'} context = self.portal.folder1.doc11 tree = buildFolderTree(self.portal, query=query, obj=context, strategy=strategy)['children'] rootPath = '/'.join(self.portal.getPhysicalPath()) # XXX: Ideally, this shouldn't happen, we should get a dummy node, but # there's no way to do that with the catalog self.assertEqual(len(tree), 1) self.assertEqual(tree[0]['item'].getPath(), rootPath + '/folder2')
def testShowAllParentsOverridesNonFolderishObjectNotExpanded(self): strategy = NavtreeStrategyBase() strategy.showAllParents = True self.setRoles(['Manager']) f = DummyNonStructuralFolder('ns_folder') self.portal._setObject('ns_folder', f) ns_folder = self.portal.ns_folder self.portal.portal_catalog.indexObject(self.portal.ns_folder) ns_folder.invokeFactory('Document', 'doc') self.setRoles(['Member']) tree = buildFolderTree(self.portal, self.portal.ns_folder.doc, strategy=strategy)['children'] rootPath = '/'.join(self.portal.getPhysicalPath()) self.assertEqual(tree[-1]['item'].getPath(), rootPath + '/ns_folder') self.assertEqual(len(tree[-1]['children']), 1) self.assertEqual(tree[-1]['children'][0]['item'].getPath(), rootPath + '/ns_folder/doc')
def getCourseItemsInOrder(self): """ Create a flattened out list of portal_catalog queried items in their natural depth first navigation order. @param root: Content item which acts as a navigation root @param query: Dictionary of portal_catalog query parameters @return: List of catalog brains """ root = self possible_types = [ 'Kurs', 'Kursabschluss', 'Lerneinheit', 'Document', 'Aufgabe', 'Audiovideo', 'Checkliste', 'Skill' ] query = {'portal_type': possible_types} # Navigation tree base portal_catalog query parameters applied_query = { 'path': '/'.join(root.getPhysicalPath()), 'sort_on': 'getObjPositionInParent' } # Apply caller's filters applied_query.update(query) # Set the navigation tree build strategy # - use navigation portlet strategy as base #strategy = DefaultNavtreeStrategy(root) strategy = NavtreeStrategyBase() strategy.rootPath = '/'.join(root.getPhysicalPath()) strategy.showAllParents = False strategy.bottomLevel = 999 # This will yield out tree of nested dicts of # item brains with retrofitted navigational data tree = buildFolderTree(root, root, query, strategy=strategy) items = [] def flatten(children): """ Recursively flatten the tree """ for c in children: # Copy catalog brain object into the result items.append(c["item"]) children = c.get("children", None) if children: flatten(children) flatten(tree["children"]) return items
def testShowAllParentsWithRestrictedParent(self): strategy = NavtreeStrategyBase() strategy.showAllParents = True wftool = getToolByName(self.portal, 'portal_workflow') wftool.doActionFor(self.portal.folder1, 'hide') self.portal.folder1.reindexObject() query = {'portal_type' : 'Folder'} context = self.portal.folder1.doc11 tree = buildFolderTree(self.portal, query=query, obj=context, strategy=strategy)['children'] rootPath = '/'.join(self.portal.getPhysicalPath()) self.assertEqual(len(tree), 2) self.assertEqual(tree[0]['item'].getPath(), rootPath + '/folder1') self.assertEqual(len(tree[0]['children']), 1) self.assertEqual(tree[0]['children'][0]['item'].getPath(), rootPath + '/folder1/doc11') self.assertEqual(tree[1]['item'].getPath(), rootPath + '/folder2') self.assertEqual(len(tree[1]['children']), 1) self.assertEqual(tree[1]['children'][0]['item'].getPath(), rootPath + '/folder2/folder21')