From: alecm <svn...@pl...> - 2006-08-05 01:27:07
|
Author: alecm Date: Sat Aug 5 01:27:00 2006 New Revision: 10370 Modified: CMFPlone/branches/2.1/HISTORY.txt CMFPlone/branches/2.1/PloneTool.py CMFPlone/branches/2.1/tests/testBrowserDefault.py Log: Backport fix for #5704 (r10369) from 2.5 to 2.1 Modified: CMFPlone/branches/2.1/HISTORY.txt ============================================================================== --- CMFPlone/branches/2.1/HISTORY.txt (original) +++ CMFPlone/branches/2.1/HISTORY.txt Sat Aug 5 01:27:00 2006 @@ -4,6 +4,11 @@ Plone 2.1.4 - Devo - Unreleased + - Made PloneTool.browserDefault check if the default page it is trying to + render is the folder itself, and prevent it from doing so (which would + cause an endless loop). Fixes http://dev.plone.org/plone/ticket/5704 + [alecm] + - Using 'indexObject' instead of 'reindexObject' for CatalogTool.clearFindAndRebuild works just as well, but does not touch every object and cause a monster transaction to be committed. Modified: CMFPlone/branches/2.1/PloneTool.py ============================================================================== --- CMFPlone/branches/2.1/PloneTool.py (original) +++ CMFPlone/branches/2.1/PloneTool.py Sat Aug 5 01:27:00 2006 @@ -996,7 +996,10 @@ if defaultPage is not None: if ids.has_key(defaultPage): return returnPage(obj, defaultPage) - else: + # Avoid infinite recursion in the case that the page id == the + # object id + elif defaultPage != obj.getId() and \ + defaultpage != '/'.join(obj.getPhysicalPath()): # For the default_page property, we may get things in the # skin layers or with an explicit path - split this path # to comply with the __browser_default__() spec Modified: CMFPlone/branches/2.1/tests/testBrowserDefault.py ============================================================================== --- CMFPlone/branches/2.1/tests/testBrowserDefault.py (original) +++ CMFPlone/branches/2.1/tests/testBrowserDefault.py Sat Aug 5 01:27:00 2006 @@ -223,6 +223,21 @@ self.assertEqual(self.portal.atctfolder.getDefaultPage(), None) self.assertEqual(self.portal.atctfolder.defaultView(), defaultLayout) + def testFolderDefaultPageSameAsSelfWithPageMissing(self): + # We need to avoid infinite recursion in the case that + # a page with the same id as the folder was made the default + # page and then deleted. See http://dev.plone.org/plone/ticket/5704 + # We should fallback on the default layout folder_listing + f = self.portal.atctfolder + f.invokeFactory('Document', f.getId()) + f.setDefaultPage(f.getId()) + self.assertEqual(self.putils.browserDefault(f), + (f, [f.getId()],)) + f._delObject(f.getId()) + self.assertEqual(self.putils.browserDefault(f), + (f, ['folder_listing'],)) + + class TestDefaultPage(PloneTestCase.PloneTestCase): """Test the default_page functionality in more detail """ |