Example #1
0
def _makeFolder(id, site_folder=False):
    from Products.CMFCore.PortalFolder import PortalFolder
    from Products.CMFCore.TypesTool import TypesTool
    from Products.CMFCore.tests.base.dummy import DummyType

    class _TypeInfo(DummyType):
        def _getId(self):
            return self._id
        def constructInstance(self, container, id, *args, **kw):
            portal_type = self._getId()
            if portal_type == TEST_FOLDER:
                content = PortalFolder(id)
            elif portal_type == TEST_CONTENT:
                content = _makeItem()
                content._setId(id)
            elif portal_type == TEST_INI_AWARE:
                content = _makeINIAware(id)
            elif portal_type == TEST_CSV_AWARE:
                content = _makeCSVAware(id)
            else:
                raise ValueError, 'Ugh'
            content.portal_type = portal_type
            container._setObject(id, content)
            return container._getOb(id)

    folder = PortalFolder(id)
    folder.portal_type = TEST_FOLDER
    if site_folder:
        tool = folder.portal_types = TypesTool()
        tool._setObject(TEST_CSV_AWARE, _TypeInfo(TEST_CSV_AWARE))
        tool._setObject(TEST_INI_AWARE, _TypeInfo(TEST_INI_AWARE))
        tool._setObject(TEST_CONTENT, _TypeInfo(TEST_CONTENT))
        tool._setObject(TEST_FOLDER, _TypeInfo(TEST_FOLDER))

    return folder
 def manage_beforeDelete(self, item, container):
     " Remove self from the workflow and catalog. "
     # We don't call PortalContent.manage_beforeDelete because
     #  it deals with talkbacks which are subobjects...
     # Remove self from catalog
     if aq_base(container) is not aq_base(self):
         self.unindexObject()
     # Then recurse in the children (ObjectManager)
     PortalFolder.manage_beforeDelete(self, item, container)
    def setUp(self):
        self.portal = self.layer['portal']
        setRoles(self.portal, TEST_USER_ID, ['Manager'])

        self.folder = api.content.create(type='Folder',
                                         container=self.portal,
                                         id='folder')
        self.folder.skos = [
            self.term,
        ]
        self.folder.reindexObject()

        self.sub_folder = api.content.create(type='Folder',
                                             container=self.folder,
                                             id='sub_folder')

        self.document = api.content.create(type='Document',
                                           container=self.folder,
                                           id='a_document')
        self.document.setSubject([
            'Bar',
        ])
        self.document.reindexObject()

        o = PortalContent('cmf', 'CMF Content', '', '', '')
        self.folder._setObject('cmf', o, suppress_events=True)
        o = PortalFolder('cmf_folder', 'CMF Folder', '')
        self.folder._setObject('cmf_folder', o, suppress_events=True)
        o = PortalContent('cmf', 'CMF Content', '', '', '')
        self.folder['cmf_folder']._setObject('cmf', o, suppress_events=True)
Example #4
0
 def constructInstance(self, container, id, *args, **kw):
     portal_type = self._getId()
     if portal_type == TEST_FOLDER:
         content = PortalFolder(id)
     elif portal_type == TEST_CONTENT:
         content = _makeItem()
         content._setId(id)
     elif portal_type == TEST_INI_AWARE:
         content = _makeINIAware(id)
     elif portal_type == TEST_CSV_AWARE:
         content = _makeCSVAware(id)
     else:
         raise ValueError, 'Ugh'
     content.portal_type = portal_type
     container._setObject(id, content)
     return container._getOb(id)
Example #5
0
    def test_tracker261(self):

        #
        #   Tracker issue #261 says that content in a deleted folder
        #   is not being uncatalogued.  Try creating a subfolder with
        #   content object, and test.
        #
        from Products.CMFCore.PortalFolder import PortalFolder

        test = self._makeOne('test')
        ttool = self.site._setObject( 'portal_types', TypesTool() )
        ctool = self.site._setObject( 'portal_catalog', CatalogTool() )
        self.assertEqual( len(ctool), 0 )

        test._setObject( 'sub', PortalFolder( 'sub', '' ) )
        sub = test.sub

        sub._setObject( 'foo', DummyContent( 'foo', catalog=1 ) )
        foo = sub.foo

        self.failUnless( foo.after_add_called )
        self.failIf( foo.before_delete_called )
        self.assertEqual( len(ctool), 1 )

        foo.reset()
        test.manage_delObjects( ids=['sub'] )
        self.failIf( foo.after_add_called )
        self.failUnless( foo.before_delete_called )
        self.assertEqual( len(ctool), 0 )
Example #6
0
    def test_createMemberArea(self):
        site = self._makeSite()
        mtool = site.portal_membership
        members = site._setObject('Members', PortalFolder('Members'))
        acl_users = site._setObject('acl_users', DummyUserFolder())
        wtool = site._setObject('portal_workflow', DummyTool())

        # permission
        mtool.createMemberArea('user_foo')
        self.failIf(hasattr(members.aq_self, 'user_foo'))
        newSecurityManager(None, acl_users.user_bar)
        mtool.createMemberArea('user_foo')
        self.failIf(hasattr(members.aq_self, 'user_foo'))
        newSecurityManager(None, acl_users.user_foo)
        mtool.setMemberareaCreationFlag()
        mtool.createMemberArea('user_foo')
        self.failIf(hasattr(members.aq_self, 'user_foo'))
        newSecurityManager(None, acl_users.all_powerful_Oz)
        mtool.setMemberareaCreationFlag()
        mtool.createMemberArea('user_foo')
        self.failUnless(hasattr(members.aq_self, 'user_foo'))

        # default content
        f = members.user_foo
        ownership = acl_users.user_foo
        localroles = (('user_foo', ('Owner', )), )
        self.assertEqual(f.getOwner(), ownership)
        self.assertEqual(
            f.get_local_roles(), localroles,
            'CMF Collector issue #162 (LocalRoles broken): %s' %
            str(f.get_local_roles()))
Example #7
0
    def test_constructContent_simple_STI(self):
        from AccessControl import Unauthorized
        from AccessControl.SecurityManagement import newSecurityManager
        from AccessControl.SecurityManager import setSecurityPolicy
        from Products.CMFCore.PortalFolder import PortalFolder
        from Products.CMFCore.TypesTool \
                import ScriptableTypeInformation as STI
        from Products.CMFCore.tests.base.dummy import DummyFactoryDispatcher
        from Products.CMFCore.tests.base.tidata import STI_SCRIPT
        from Products.PythonScripts.PythonScript import PythonScript
        site = self._makeSite().__of__(self.root)
        acl_users = site.acl_users
        setSecurityPolicy(self._oldPolicy)
        newSecurityManager(None, acl_users.all_powerful_Oz)
        tool = self._makeOne().__of__(site)
        sti_baz = STI('Baz',
                      permission='Add portal content',
                      constructor_path='addBaz')
        tool._setObject('Baz', sti_baz)
        script = PythonScript('addBaz')
        script.write(STI_SCRIPT)
        tool._setObject('addBaz',  script)
        folder = site._setObject( 'folder', PortalFolder(id='folder') )
        folder.manage_addProduct = {'FooProduct':
                                        DummyFactoryDispatcher(folder) }
        folder._owner = (['acl_users'], 'user_foo')
        self.assertEqual( folder.getOwner(), acl_users.user_foo )

        try:
            tool.constructContent('Baz', container=folder, id='page2')
        except Unauthorized:
            self.fail('CMF Collector issue #165 (Ownership bug): '
                      'Unauthorized raised' )

        self.assertEqual(folder.page2.portal_type, 'Baz')
Example #8
0
    def test_getSyndicatableContent(self):
        # http://www.zope.org/Collectors/CMF/369
        # Make sure we use a suitable base class call when determining
        # syndicatable content
        try:
            # This test only makes sense if CMFBTreeFolder is installed,
            # which depends on the BTreeFolder2 product, which might not
            # always be available.
            from Products.CMFCore import CMFBTreeFolder
        except ImportError:
            return

        from Products.CMFCore.PortalFolder import PortalFolder
        from Products.CMFCore.CMFBTreeFolder import CMFBTreeFolder
        from Products.CMFCore.TypesTool import TypesTool
        PERIOD = 'hourly'
        FREQUENCY = 4
        NOW = DateTime()
        MAX_ITEMS = 42

        self.root._setObject( 'portal_types', TypesTool() )
        self.root._setObject('pf', PortalFolder('pf'))
        self.root._setObject('bf', CMFBTreeFolder('bf'))
        self.root._setObject('portal_syndication', self._makeOne())
        tool = self.root.portal_syndication
        tool.editProperties(updatePeriod=PERIOD,
                            updateFrequency=FREQUENCY,
                            updateBase=NOW,
                            isAllowed=True,
                            max_items=MAX_ITEMS,
                           )

        self.assertEqual(len(tool.getSyndicatableContent(self.root.pf)), 0)
        self.assertEqual(len(tool.getSyndicatableContent(self.root.bf)), 0)
Example #9
0
    def test_constructContent(self):
        from Products.CMFCore.TypesTool \
                import ScriptableTypeInformation as STI

        site = self.site
        acl_users = self.acl_users
        ttool = self.ttool
        setSecurityPolicy(self._oldPolicy)
        newSecurityManager(None, acl_users.all_powerful_Oz)
        self.site._owner = (['acl_users'], 'all_powerful_Oz')
        sti_baz = STI('Baz',
                      permission='Add portal content',
                      constructor_path='addBaz')
        ttool._setObject('Baz', sti_baz)
        ttool._setObject('addBaz', PythonScript('addBaz'))
        s = ttool.addBaz
        s.write(STI_SCRIPT)

        f = site._setObject('folder', PortalFolder(id='folder'))
        f.manage_addProduct = {'FooProduct': DummyFactory(f)}
        f._owner = (['acl_users'], 'user_foo')
        self.assertEqual(f.getOwner(), acl_users.user_foo)

        ttool.constructContent('Dummy Content', container=f, id='page1')
        try:
            ttool.constructContent('Baz', container=f, id='page2')
        except Unauthorized:
            self.fail('CMF Collector issue #165 (Ownership bug): '
                      'Unauthorized raised')
Example #10
0
    def test_tracker261(self):
        #
        #   Tracker issue #261 says that content in a deleted folder
        #   is not being uncatalogued.  Try creating a subfolder with
        #   content object, and test.
        #
        from Products.CMFCore.PortalFolder import PortalFolder

        acl_users = self.site._setObject('acl_users', DummyUserFolder())
        newSecurityManager(None, acl_users.all_powerful_Oz)
        test = self._makeOne('test')
        ctool = DummyCatalogTool()
        getSiteManager().registerUtility(ctool, ICatalogTool)
        self.assertEqual(len(ctool), 0)

        test._setObject('sub', PortalFolder('sub', ''))
        sub = test.sub

        sub._setObject('foo', DummyContent('foo', catalog=1))
        foo = sub.foo

        self.assertTrue(foo.after_add_called)
        self.assertFalse(foo.before_delete_called)
        self.assertEqual(len(ctool), 1)

        foo.reset()
        test._delObject('sub')
        self.assertFalse(foo.after_add_called)
        self.assertTrue(foo.before_delete_called)
        self.assertEqual(len(ctool), 0)
Example #11
0
    def setUp( self ):
        SecurityTest.setUp(self)

        root = self.root
        try: root._delObject('test')
        except AttributeError: pass
        root._setObject( 'test', PortalFolder( 'test','' ) )
Example #12
0
    def test_getSyndicatableContent(self):
        # http://www.zope.org/Collectors/CMF/369
        # Make sure we use a suitable base class call when determining
        # syndicatable content
        from Products.CMFCore.PortalFolder import PortalFolder
        from Products.CMFCore.CMFBTreeFolder import CMFBTreeFolder
        from Products.CMFCore.TypesTool import TypesTool

        PERIOD = 'hourly'
        FREQUENCY = 4
        NOW = datetime.now()
        MAX_ITEMS = 42

        getSiteManager().registerUtility(TypesTool(), ITypesTool)
        self.app._setObject('pf', PortalFolder('pf'))
        self.app._setObject('bf', CMFBTreeFolder('bf'))
        tool = self._makeOne()
        tool.period = PERIOD
        tool.frequency = FREQUENCY
        tool.base = NOW
        tool.enable()
        tool.max_items = MAX_ITEMS

        self.assertEqual(len(tool.getSyndicatableContent(self.app.pf)), 0)
        self.assertEqual(len(tool.getSyndicatableContent(self.app.bf)), 0)
Example #13
0
    def test_deleteMembersUnsupported(self):
        # Quite a few user folders do not support the deletion API
        # http://www.zope.org/Collectors/CMF/481
        # Make sure we get the right exception
        site = self._makeSite()
        sm = getSiteManager()
        sm.registerUtility(site, ISiteRoot)
        mtool = site.portal_membership
        members = site._setObject('Members', PortalFolder('Members'))
        acl_users = site._setObject('acl_users', DummyUserFolder())
        mdtool = MemberDataTool()
        sm.registerUtility(mdtool, IMemberDataTool)
        newSecurityManager(None, acl_users.all_powerful_Oz)

        self.assertEqual(acl_users.getUserById('user_foo'), acl_users.user_foo)
        mtool.createMemberArea('user_foo')
        self.assertTrue(hasattr(members.aq_self, 'user_foo'))
        mdtool.registerMemberData('Dummy', 'user_foo')
        self.assertTrue('user_foo' in mdtool._members)

        # Fake an incompatible user folder by deleting the class method
        deletion_method = DummyUserFolder.userFolderDelUsers
        del DummyUserFolder.userFolderDelUsers
        self.assertRaises(NotImplementedError, mtool.deleteMembers,
                          ('user_foo', ))
        self.assertTrue(acl_users.getUserById('user_foo', None))
        self.assertTrue('user_foo' in mdtool._members)
        self.assertTrue(hasattr(members.aq_self, 'user_foo'))

        # Cleanup
        DummyUserFolder.userFolderDelUsers = deletion_method
Example #14
0
    def test_deleteMembers(self):
        site = self._makeSite()
        sm = getSiteManager()
        mtool = site.portal_membership
        members = site._setObject('Members', PortalFolder('Members'))
        acl_users = site._setObject('acl_users', DummyUserFolder())
        utool = site._setObject('portal_url', DummyTool())
        sm.registerUtility(utool, IURLTool)
        wtool = site._setObject('portal_workflow', DummyTool())
        mdtool = site._setObject('portal_memberdata', MemberDataTool())
        sm.registerUtility(mdtool, IMemberDataTool)
        newSecurityManager(None, acl_users.all_powerful_Oz)

        self.assertEqual(acl_users.getUserById('user_foo'), acl_users.user_foo)
        mtool.createMemberArea('user_foo')
        self.failUnless(hasattr(members.aq_self, 'user_foo'))
        mdtool.registerMemberData('Dummy', 'user_foo')
        self.failUnless(mdtool._members.has_key('user_foo'))

        rval = mtool.deleteMembers(('user_foo', 'user_baz'))
        self.assertEqual(rval, ('user_foo', ))
        self.failIf(acl_users.getUserById('user_foo', None))
        self.failIf(mdtool._members.has_key('user_foo'))
        self.failIf(hasattr(members.aq_self, 'user_foo'))

        cleanUp()
Example #15
0
    def test_HomeFolder_methods(self):
        from Products.CMFCore.interfaces import IMembershipTool

        mtool = getSiteManager().getUtility(IMembershipTool)
        setRequest(self.REQUEST)
        self.assertEqual(mtool.getHomeFolder(id='member_foo'), None)
        self.assertEqual(mtool.getHomeUrl(id='member_foo'), None)
        self.site._setObject('Members', PortalFolder('Members'))
        self.assertEqual(mtool.getHomeFolder(id='member_foo'), None)
        self.assertEqual(mtool.getHomeUrl(id='member_foo'), None)
        self.site.Members._setObject('member_foo', PortalFolder('member_foo'))
        self.assertEqual(mtool.getHomeFolder(id='member_foo'),
                         self.site.Members.member_foo)
        self.assertEqual(mtool.getHomeUrl(id='member_foo'),
                         'http://nohost/bar/site/Members/member_foo')
        clearRequest()
Example #16
0
    def test_tracker261(self):

        #
        #   Tracker issue #261 says that content in a deleted folder
        #   is not being uncatalogued.  Try creating a subfolder with
        #   content object, and test.
        #
        test = self.root.test

        self.root._setObject('portal_types', TypesTool())
        types_tool = self.root.portal_types

        self.root._setObject('portal_catalog', CatalogTool())
        catalog = self.root.portal_catalog
        assert len(catalog) == 0

        test._setObject('sub', PortalFolder('sub', ''))
        sub = test.sub

        sub._setObject('foo', DummyContent('foo', catalog=1))
        foo = sub.foo

        assert foo.after_add_called
        assert not foo.before_delete_called
        assert len(catalog) == 1

        foo.reset()
        test.manage_delObjects(ids=['sub'])
        assert not foo.after_add_called
        assert foo.before_delete_called
        assert len(catalog) == 0
Example #17
0
 def constructInstance(self, container, id, *args, **kw):
     portal_type = self._getId()
     if portal_type == TEST_FOLDER:
         content = PortalFolder(id)
     elif portal_type == TEST_CONTENT:
         content = _makeItem()
         content._setId(id)
     elif portal_type == TEST_INI_AWARE:
         content = _makeINIAware(id)
     elif portal_type == TEST_CSV_AWARE:
         content = _makeCSVAware(id)
     else:
         raise ValueError, 'Ugh'
     content.portal_type = portal_type
     container._setObject(id, content)
     return container._getOb(id)
Example #18
0
    def test_move_cant_delete_source(self):

        #
        #   This test fails on Zope's earlier than 2.7.3 because of the
        #   changes required to 'OFS.CopytSupport.manage_pasteObjects'
        #   which must pass 'validate_src' of 2 to '_verifyObjectPaste'
        #   to indicate that the object is being moved, rather than
        #   simply copied.
        #
        #   If you are running with such a Zope, this test will fail,
        #   because the move (which should raise Unauthorized) will be
        #   allowed.
        #
        from AccessControl.Permissions import delete_objects as DeleteObjects
        from Products.CMFCore.PortalFolder import PortalFolder

        folder1, folder2 = self._initFolders()
        folder1.manage_permission(DeleteObjects, roles=(), acquire=0)

        folder1._setObject('sub', PortalFolder('sub'))
        transaction.savepoint(optimistic=True)  # get a _p_jar for 'sub'

        self.app.portal_types = DummyTypesTool()

        def _no_delete_objects(permission, object, context):
            return permission != DeleteObjects

        self._initPolicyAndUser(c_lambda=_no_delete_objects)

        cookie = folder1.manage_cutObjects(ids=('sub', ))
        self._assertCopyErrorUnauth(folder2.manage_pasteObjects,
                                    cookie,
                                    ce_regex='Insufficient Privileges' +
                                    '.*%s' % DeleteObjects)
Example #19
0
    def test_getSyndicatableContent(self):
        # http://www.zope.org/Collectors/CMF/369
        # Make sure we use a suitable base class call when determining
        # syndicatable content
        from Products.CMFCore.PortalFolder import PortalFolder
        from Products.CMFCore.CMFBTreeFolder import CMFBTreeFolder
        from Products.CMFCore.TypesTool import TypesTool

        PERIOD = 'hourly'
        FREQUENCY = 4
        NOW = DateTime()
        MAX_ITEMS = 42

        self.root._setObject('portal_types', TypesTool())
        self.root._setObject('pf', PortalFolder('pf'))
        self.root._setObject('bf', CMFBTreeFolder('bf'))
        self.root._setObject('portal_syndication', self._makeOne())
        tool = self.root.portal_syndication
        tool.editProperties(
            updatePeriod=PERIOD,
            updateFrequency=FREQUENCY,
            updateBase=NOW,
            isAllowed=True,
            max_items=MAX_ITEMS,
        )

        self.assertEqual(len(tool.getSyndicatableContent(self.root.pf)), 0)
        self.assertEqual(len(tool.getSyndicatableContent(self.root.bf)), 0)
Example #20
0
    def test_folderMove(self):
        #
        #   Does the catalog stay synched when folders are moved?
        #
        from Products.CMFCore.PortalFolder import PortalFolder

        ttool = self.site._setObject( 'portal_types', TypesTool() )
        ctool = self.site._setObject( 'portal_catalog', CatalogTool() )
        ctool.addIndex('getId', 'FieldIndex')
        self.assertEqual( len(ctool), 0 )

        folder = self._makeOne('folder')
        folder._setObject( 'sub', PortalFolder( 'sub', '' ) )
        folder.sub._setObject( 'foo', DummyContent( 'foo', catalog=1 ) )
        self.assertEqual( len(ctool), 1 )
        self.failUnless( 'foo' in ctool.uniqueValuesFor('getId') )
        self.failUnless( has_path(ctool._catalog,
                                  '/bar/site/folder/sub/foo') )

        transaction.savepoint(optimistic=True)
        folder.manage_renameObject(id='sub', new_id='new_sub')
        self.assertEqual( len(ctool), 1 )
        self.failUnless( 'foo' in ctool.uniqueValuesFor('getId') )
        self.failUnless( has_path(ctool._catalog,
                                  '/bar/site/folder/new_sub/foo') )

        folder._setObject( 'bar', DummyContent( 'bar', catalog=1 ) )
        self.assertEqual( len(ctool), 2 )
        self.failUnless( 'bar' in ctool.uniqueValuesFor('getId') )
        self.failUnless( has_path(ctool._catalog, '/bar/site/folder/bar') )

        folder._setObject( 'sub2', PortalFolder( 'sub2', '' ) )
        sub2 = folder.sub2
        # Waaa! force sub2 to allow paste of Dummy object.
        sub2.all_meta_types = []
        sub2.all_meta_types.extend( sub2.all_meta_types )
        sub2.all_meta_types.extend( extra_meta_types() )

        transaction.savepoint(optimistic=True)
        cookie = folder.manage_cutObjects(ids=['bar'])
        sub2.manage_pasteObjects(cookie)

        self.failUnless( 'foo' in ctool.uniqueValuesFor('getId') )
        self.failUnless( 'bar' in ctool.uniqueValuesFor('getId') )
        self.assertEqual( len(ctool), 2 )
        self.failUnless( has_path(ctool._catalog,
                                  '/bar/site/folder/sub2/bar') )
Example #21
0
    def test_folderMove(self):
        #
        #   Does the catalog stay synched when folders are moved?
        #
        from Products.CMFCore.PortalFolder import PortalFolder

        acl_users = self.site._setObject('acl_users', DummyUserFolder())
        newSecurityManager(None, acl_users.all_powerful_Oz)
        ctool = DummyCatalogTool()
        sm = getSiteManager()
        sm.registerUtility(TypesTool(), ITypesTool)
        sm.registerUtility(ctool, ICatalogTool)
        self.assertEqual(len(ctool), 0)

        folder = self._makeOne('folder')
        folder._setObject('sub', PortalFolder('sub', ''))
        folder.sub._setObject('foo', DummyContent('foo', catalog=1))
        self.assertEqual(len(ctool), 1)
        self.assertTrue(has_id(ctool, 'foo'))
        self.assertTrue(has_path(ctool, '/bar/site/folder/sub/foo'))

        transaction.savepoint(optimistic=True)
        folder.manage_renameObject(id='sub', new_id='new_sub')
        self.assertEqual(len(ctool), 1)
        self.assertTrue(has_id(ctool, 'foo'))
        self.assertTrue(has_path(ctool, '/bar/site/folder/new_sub/foo'))

        folder._setObject('bar', DummyContent('bar', catalog=1))
        self.assertEqual(len(ctool), 2)
        self.assertTrue(has_id(ctool, 'bar'))
        self.assertTrue(has_path(ctool, '/bar/site/folder/bar'))

        folder._setObject('sub2', PortalFolder('sub2', ''))
        sub2 = folder.sub2
        # Waaa! force sub2 to allow paste of Dummy object.
        sub2.all_meta_types = []
        sub2.all_meta_types.extend(sub2.all_meta_types)
        sub2.all_meta_types.extend(extra_meta_types())

        transaction.savepoint(optimistic=True)
        cookie = folder.manage_cutObjects(ids=['bar'])
        sub2.manage_pasteObjects(cookie)

        self.assertTrue(has_id(ctool, 'foo'))
        self.assertTrue(has_id(ctool, 'bar'))
        self.assertEqual(len(ctool), 2)
        self.assertTrue(has_path(ctool, '/bar/site/folder/sub2/bar'))
Example #22
0
    def setUp( self ):
        from Products.CMFCore.PortalFolder import PortalFolder
        SecurityTest.setUp(self)

        root = self.root
        try: root._delObject('test')
        except AttributeError: pass
        root._setObject( 'test', PortalFolder( 'test','' ) )
Example #23
0
 def setUp(self):
     super(FunctionalUpgradeTestCase, self).setUp()
     sm = getSiteManager()
     sm.registerAdapter(SyndicationInfo, [IFolderish], ISyndicationInfo)
     syndication = SyndicationTool()
     sm.registerUtility(syndication, ISyndicationTool)
     folder = PortalFolder("Dummy Portal Folder")
     self.folder = folder
Example #24
0
 def manage_addPortalFolder(self, id, title='', REQUEST=None):
     """Add a new PortalFolder object with id *id*.
     """
     ob = PortalFolder(id, title)
     self._setObject(id, ob, suppress_events=True)
     if REQUEST is not None:
         return self.folder_contents( # XXX: ick!
             self, REQUEST, portal_status_message="Folder added")
Example #25
0
 def getSyndicatableContent(self, obj):
     """
     An interface for allowing folderish items to implement an equivalent of PortalFolder.contentValues()
     """
     if hasattr(obj, 'synContentValues'):
         values = obj.synContentValues()
     else:
         values = PortalFolder.contentValues(obj)
     return values
Example #26
0
 def getSyndicatableContent(self, obj):
     """
     An interface for allowing folderish items to implement an equivalent of PortalFolder.contentValues()
     """
     if hasattr(obj, 'synContentValues'):
         values = obj.synContentValues()
     else:
         values = PortalFolder.contentValues(obj)
     return values
Example #27
0
    def _makeOne(self):
        from zope.interface import alsoProvides
        from Products.CMFCore.PortalFolder import PortalFolder
        folder = PortalFolder('folder')

        self.portal._setObject('folder', folder)
        alsoProvides(folder, IAnnotations)

        return self._getTargetClass()(folder)
Example #28
0
 def setUp(self):
     """Setup a site"""
     self.site = site = DummySite('site')
     sm = getSiteManager()
     sm.registerUtility(DummyTool(), IMembershipTool)
     sm.registerUtility(DummyTool().__of__(site), IPropertiesTool)
     sm.registerUtility(DummyTool().__of__(site), IURLTool)
     sm.registerUtility(DummyTool(), ITypesTool)
     folder = PortalFolder('test_folder')
     self.folder = site._setObject('test_folder', folder)
Example #29
0
    def setUp(self):
        from zope.annotation.attribute import AttributeAnnotations
        from Products.CMFCore.interfaces import IFolderish
        from Products.CMFCore.PortalFolder import PortalFolder

        super(SyndicationInfoTests, self).setUp()
        self.app._setObject('portal', PortalFolder('portal'))
        self.portal = self.app.portal
        self.syndtool = DummySyndicationTool()
        sm = getSiteManager()
        sm.registerUtility(self.syndtool, ISyndicationTool)
        sm.registerAdapter(AttributeAnnotations, [IFolderish], IAnnotations)
Example #30
0
def _makeFolder(id, site_folder=False):
    from zope.interface import directlyProvides
    from zope.interface import providedBy
    from Products.CMFCore.PortalFolder import PortalFolder
    from Products.CMFCore.interfaces import ISiteRoot
    from Products.CMFCore.TypesTool import TypesTool
    from Products.CMFCore.tests.base.dummy import DummyType

    class _TypeInfo(DummyType):
        def _getId(self):
            return self._id

        def constructInstance(self, container, id, *args, **kw):
            portal_type = self._getId()
            if portal_type == TEST_FOLDER:
                content = PortalFolder(id)
            elif portal_type == TEST_CONTENT:
                content = _makeItem()
                content._setId(id)
            elif portal_type == TEST_INI_AWARE:
                content = _makeINIAware(id)
            elif portal_type == TEST_CSV_AWARE:
                content = _makeCSVAware(id)
            else:
                raise ValueError, 'Ugh'
            content.portal_type = portal_type
            container._setObject(id, content)
            return container._getOb(id)

    folder = PortalFolder(id)
    folder.portal_type = TEST_FOLDER
    if site_folder:
        directlyProvides(folder, ISiteRoot + providedBy(folder))
        tool = folder.portal_types = TypesTool()
        tool._setObject(TEST_CSV_AWARE, _TypeInfo(TEST_CSV_AWARE))
        tool._setObject(TEST_INI_AWARE, _TypeInfo(TEST_INI_AWARE))
        tool._setObject(TEST_CONTENT, _TypeInfo(TEST_CONTENT))
        tool._setObject(TEST_FOLDER, _TypeInfo(TEST_FOLDER))

    return folder
Example #31
0
def _makeFolder(id, site_folder=False):
    from Products.CMFCore.PortalFolder import PortalFolder
    from Products.CMFCore.TypesTool import TypesTool
    from Products.CMFCore.tests.base.dummy import DummyType

    class _TypeInfo(DummyType):
        def _getId(self):
            return self._id

        def constructInstance(self, container, id, *args, **kw):
            portal_type = self._getId()
            if portal_type == TEST_FOLDER:
                content = PortalFolder(id)
            elif portal_type == TEST_DAV_FOLDER:
                content = _makeDAVAwareFolder(id)
            elif portal_type == TEST_CONTENT:
                content = _makeItem()
                content._setId(id)
            elif portal_type == TEST_INI_AWARE:
                content = _makeINIAware(id)
            elif portal_type == TEST_CSV_AWARE:
                content = _makeCSVAware(id)
            else:
                raise ValueError('Ugh')
            content.portal_type = portal_type
            container._setObject(id, content)
            return container._getOb(id)

    folder = PortalFolder(id)
    folder.portal_type = TEST_FOLDER
    if site_folder:
        ttool = TypesTool()
        ttool._setObject(TEST_CSV_AWARE, _TypeInfo(TEST_CSV_AWARE))
        ttool._setObject(TEST_INI_AWARE, _TypeInfo(TEST_INI_AWARE))
        ttool._setObject(TEST_CONTENT, _TypeInfo(TEST_CONTENT))
        ttool._setObject(TEST_FOLDER, _TypeInfo(TEST_FOLDER))
        ttool._setObject(TEST_DAV_FOLDER, _TypeInfo(TEST_DAV_FOLDER))
        getSiteManager().registerUtility(ttool, ITypesTool)

    return folder
Example #32
0
 def setUp(self):
     """Setup a site"""
     # maybe there is a base class for this?
     self.site = site = DummySite('site')
     self.sm = getSiteManager()
     mtool = site._setObject('portal_membership', DummyTool())
     ptool = site._setObject('portal_properties', DummyTool())
     self.sm.registerUtility(ptool, IPropertiesTool)
     ttool = site._setObject('portal_types', DummyTool())
     utool = site._setObject('portal_url', DummyTool())
     folder = PortalFolder('test_folder')
     self.folder = site._setObject('test_folder', folder)
     self.uf = self.site._setObject('acl_users', DummyUserFolder())
Example #33
0
    def test_createMemberarea(self):
        mtool = self.mtool
        self.site._setObject( 'Members', PortalFolder('Members') )
        self.site._setObject( 'acl_users', DummyUserFolder() )
        self.site._setObject( 'portal_workflow', DummyTool() )
        mtool.createMemberarea('user_foo')

        f = self.site.Members.user_foo
        ownership = self.site.acl_users.user_foo
        localroles = ( ( 'user_foo', ('Owner',) ), )
        self.assertEqual( f.getOwner(), ownership )
        self.assertEqual( f.get_local_roles(), localroles,
                          'CMF Collector issue #162 (LocalRoles broken): %s'
                          % str( f.get_local_roles() ) )
Example #34
0
def _ensurePath( site, path ):
    """
        Ensure that 'path' exists within 'site';  return the folder
        at the end of 'path'.
    """
    if not path:
        return site

    if type( path ) is type( '' ):
        path = string.split( path, '/' )

    base = site

    for element in path:

        if element not in base.objectIds():
            folder = PortalFolder( element )
            folder._added_by_FT = 1
            base._setOb( element, folder )
    
        base = base._getOb( element )

    return base
Example #35
0
def _ensurePath(site, path):
    """
        Ensure that 'path' exists within 'site';  return the folder
        at the end of 'path'.
    """
    if not path:
        return site

    if type(path) is type(''):
        path = string.split(path, '/')

    base = site

    for element in path:

        if element not in base.objectIds():
            folder = PortalFolder(element)
            folder._added_by_FT = 1
            base._setOb(element, folder)

        base = base._getOb(element)

    return base
 def manage_beforeDelete(self, item, container):
     """ Remove self from the workflow and catalog. """
 	if aq_base(container) is not aq_base(self):
         self.unindexObject()
     PortalFolder.manage_beforeDelete(self, item, container)
Example #37
0
 def manage_beforeDelete(self, object, container):
     PortalFolder.manage_beforeDelete(self, object, container)
     self.catalog.uncatalog_object(self.latest.absolute_url_path())
Example #38
0
 def __init__(self, id, title=''):
     PortalFolder.__init__(self, id, title)
     BTreeFolder2Base.__init__(self, id)
Example #39
0
 def _checkId(self, id, allow_dup=0):
     PortalFolder._checkId(self, id, allow_dup)
     BTreeFolder2Base._checkId(self, id, allow_dup)
 def manage_afterAdd(self, item, container):
      """ Add self to the workflow and catalog. """
      PortalFolder.manage_afterAdd(self, item, container)
      PortalContent.manage_afterAdd(self, item, container)
 def manage_afterAdd(self, item, container):
     " Add self to the workflow and catalog. "
     # Recurse in the children (ObjectManager)
     PortalFolder.manage_afterAdd(self, item, container)
     # Add self to workflow and catalog
     PortalContent.manage_afterAdd(self, item, container)
Example #42
0
 def __init__(self, id, title='', storage=None):
     PortalFolder.__init__(self, id, title)
     self.storage = storage