Ejemplo n.º 1
0
def _update_syndication_info(portal):
    # now, go through all containers and look for syndication_info
    # objects
    from Products.CMFPlone.interfaces.syndication import IFeedSettings
    from Products.CMFPlone.interfaces.syndication import ISyndicatable
    catalog = getToolByName(portal, 'portal_catalog')
    # get all folder types from portal_types
    at_tool = getToolByName(portal, 'archetype_tool', None)
    folder_types = set([])
    if at_tool is not None:
        for _type in at_tool.listPortalTypesWithInterfaces([ISyndicatable]):
            folder_types.add(_type.getId())
    folder_types = folder_types | _getDexterityFolderTypes(portal)
    for brain in catalog(portal_type=tuple(folder_types)):
        try:
            obj = brain.getObject()
        except (AttributeError, KeyError):
            continue
        if 'syndication_information' not in obj.objectIds():
            return
        # just having syndication info object means
        # syndication is enabled
        info = obj.syndication_information
        try:
            settings = IFeedSettings(obj)
        except TypeError:
            continue
        settings.enabled = True
        try:
            settings.max_items = info.max_items
        except AttributeError:
            pass
        settings.feed_types = ('RSS',)
        obj.manage_delObjects(['syndication_information'])
Ejemplo n.º 2
0
 def __call__(self):
     settings = IFeedSettings(self.context)
     settings.enabled = True
     settings._p_changed = True
     transaction.commit()
     IStatusMessage(self.request).add('RSS enabled on %s' %
                                      self.context.getId())
     self.request.RESPONSE.redirect(self.context.absolute_url())
 def enableSyndication(self, obj):
     """
     Enable syndication for the obj
     """
     if not _checkPermission(ModifyPortalContent, obj):
         raise Unauthorized
     settings = IFeedSettings(obj)
     settings.enabled = True
Ejemplo n.º 4
0
 def enableSyndication(self, obj):
     """
     Enable syndication for the obj
     """
     if not _checkPermission(ModifyPortalContent, obj):
         raise Unauthorized
     settings = IFeedSettings(obj)
     settings.enabled = True
Ejemplo n.º 5
0
def enable_syndication(event_listing_block, event=None):
    """
    Enables syndication on the given event listing block. This
    must be called from a subscriber when an event listing block is
    created so the syndication is enabled by default on the event
    listing blocks.
    """
    settings = IFeedSettings(event_listing_block)
    settings.enabled = True
    settings.feed_types = ('RSS', 'rss.xml', 'atom.xml')
Ejemplo n.º 6
0
 def afterSetUp(self):
     self.syndication = getToolByName(self.portal, 'portal_syndication')
     self.folder.invokeFactory('Document', 'doc1')
     self.folder.invokeFactory('Document', 'doc2')
     self.folder.invokeFactory('File', 'file')
     self.doc1 = self.folder.doc1
     self.doc2 = self.folder.doc2
     self.file = self.folder.file
     # Enable syndication on folder
     registry = getUtility(IRegistry)
     self.site_settings = registry.forInterface(ISiteSyndicationSettings)
     settings = IFeedSettings(self.folder)
     settings.enabled = True
     self.folder_settings = settings
Ejemplo n.º 7
0
 def afterSetUp(self):
     self.syndication = getToolByName(self.portal, 'portal_syndication')
     self.folder.invokeFactory('Document', 'doc1')
     self.folder.invokeFactory('Document', 'doc2')
     self.folder.invokeFactory('File', 'file')
     self.doc1 = self.folder.doc1
     self.doc2 = self.folder.doc2
     self.file = self.folder.file
     # Enable syndication on folder
     registry = getUtility(IRegistry)
     self.site_settings = registry.forInterface(ISiteSyndicationSettings)
     settings = IFeedSettings(self.folder)
     settings.enabled = True
     self.folder_settings = settings
Ejemplo n.º 8
0
 def afterSetUp(self):
     super(TestRenderBody, self).afterSetUp()
     self.folder.invokeFactory('News Item', 'news1')
     self.folder.invokeFactory('News Item', 'news2')
     self.news1 = self.folder.news1
     self.news1.setTitle('News 1')
     self.news1.setDescription('The news item #1')
     self.news1.setText(BODY_TEXT)
     self.news2 = self.folder.news2
     self.news2.setTitle('News 2')
     self.news2.setText(ROOTED_BODY_TEXT)
     # Enable syndication on folder
     registry = getUtility(IRegistry)
     self.site_settings = registry.forInterface(ISiteSyndicationSettings)
     settings = IFeedSettings(self.folder)
     settings.enabled = True
     settings.render_body = True
     self.folder_settings = settings
Ejemplo n.º 9
0
 def afterSetUp(self):
     super(TestRenderBody, self).afterSetUp()
     self.folder.invokeFactory('News Item', 'news1')
     self.folder.invokeFactory('News Item', 'news2')
     self.news1 = self.folder.news1
     self.news1.setTitle('News 1')
     self.news1.setDescription('The news item #1')
     self.news1.setText(BODY_TEXT)
     self.news2 = self.folder.news2
     self.news2.setTitle('News 2')
     self.news2.setText(ROOTED_BODY_TEXT)
     # Enable syndication on folder
     registry = getUtility(IRegistry)
     self.site_settings = registry.forInterface(ISiteSyndicationSettings)
     settings = IFeedSettings(self.folder)
     settings.enabled = True
     settings.render_body = True
     self.folder_settings = settings
Ejemplo n.º 10
0
 def afterSetUp(self):
     self.syndication = getToolByName(self.portal, 'portal_syndication')
     self.folder.invokeFactory('Document', 'doc')
     self.folder.invokeFactory('Document', 'doc1')
     self.folder.invokeFactory('News Item', 'news1')
     self.folder.invokeFactory('News Item', 'news2')
     self.folder.invokeFactory('File', 'file')
     self.doc1 = self.folder.doc1
     self.news1 = self.folder.news1
     self.news1.setText(BODY_TEXT)
     self.news2 = self.folder.news2
     self.news2.setText(ROOTED_BODY_TEXT)
     self.file = self.folder.file
     # Enable syndication on folder
     registry = getUtility(IRegistry)
     self.site_settings = registry.forInterface(ISiteSyndicationSettings)
     settings = IFeedSettings(self.folder)
     settings.enabled = True
     self.folder_settings = settings
Ejemplo n.º 11
0
 def afterSetUp(self):
     self.syndication = getToolByName(self.portal, 'portal_syndication')
     self.folder.invokeFactory('Document', 'doc')
     self.folder.invokeFactory('Document', 'doc1')
     self.folder.invokeFactory('News Item', 'news1')
     self.folder.invokeFactory('News Item', 'news2')
     self.folder.invokeFactory('File', 'file')
     self.doc1 = self.folder.doc1
     self.news1 = self.folder.news1
     self.news1.setText(BODY_TEXT)
     self.news2 = self.folder.news2
     self.news2.setText(ROOTED_BODY_TEXT)
     self.file = self.folder.file
     # Enable syndication on folder
     registry = getUtility(IRegistry)
     self.site_settings = registry.forInterface(ISiteSyndicationSettings)
     settings = IFeedSettings(self.folder)
     settings.enabled = True
     self.folder_settings = settings
 def disableSyndication(self, obj):
     if not _checkPermission(ModifyPortalContent, obj):
         raise Unauthorized
     settings = IFeedSettings(obj)
     settings.enabled = False
Ejemplo n.º 13
0
 def disableSyndication(self, obj):
     if not _checkPermission(ModifyPortalContent, obj):
         raise Unauthorized
     settings = IFeedSettings(obj)
     settings.enabled = False
Ejemplo n.º 14
0
def upgradeSyndication(context):
    from zope.component import getUtility, getSiteManager
    from plone.registry.interfaces import IRegistry
    from Products.CMFCore.interfaces import ISyndicationTool
    from Products.CMFPlone.interfaces.syndication import ISyndicatable
    from Products.CMFPlone.interfaces.syndication import (
        ISiteSyndicationSettings, IFeedSettings)

    portal = getToolByName(context, 'portal_url').getPortalObject()

    def getDexterityFolderTypes():
        try:
            from plone.dexterity.interfaces import IDexterityFTI
            from plone.dexterity.utils import resolveDottedName
        except ImportError:
            return set([])

        portal_types = getToolByName(portal, 'portal_types')
        types = [
            fti for fti in portal_types.listTypeInfo()
            if IDexterityFTI.providedBy(fti)
        ]

        ftypes = set([])
        for _type in types:
            klass = resolveDottedName(_type.klass)
            if ISyndicatable.implementedBy(klass):
                ftypes.add(_type.getId())
        return ftypes

    logger.info('Migrating syndication tool')
    registry = getUtility(IRegistry)
    synd_settings = registry.forInterface(ISiteSyndicationSettings)
    # default settings work fine here if all settings are not
    # available
    try:
        old_synd_tool = portal.portal_syndication
        try:
            synd_settings.allowed = old_synd_tool.isAllowed
        except AttributeError:
            pass
        try:
            synd_settings.max_items = old_synd_tool.max_items
        except AttributeError:
            pass
        portal.manage_delObjects(['portal_syndication'])
    except AttributeError:
        pass
    sm = getSiteManager()
    sm.unregisterUtility(provided=ISyndicationTool)
    # now, go through all containers and look for syndication_info
    # objects
    catalog = getToolByName(portal, 'portal_catalog')
    # get all folder types from portal_types
    at_tool = getToolByName(portal, 'archetype_tool')
    folder_types = set([])
    for _type in at_tool.listPortalTypesWithInterfaces([ISyndicatable]):
        folder_types.add(_type.getId())
    folder_types = folder_types | getDexterityFolderTypes()
    for brain in catalog(portal_type=tuple(folder_types)):
        try:
            obj = brain.getObject()
        except (AttributeError, KeyError):
            continue
        if 'syndication_information' in obj.objectIds():
            # just having syndication info object means
            # syndication is enabled
            info = obj.syndication_information
            try:
                settings = IFeedSettings(obj)
            except TypeError:
                continue
            settings.enabled = True
            try:
                settings.max_items = info.max_items
            except AttributeError:
                pass
            settings.feed_types = ('RSS', )
            obj.manage_delObjects(['syndication_information'])
Ejemplo n.º 15
0
def upgradeSyndication(context):
    from zope.component import getUtility, getSiteManager
    from plone.registry.interfaces import IRegistry
    from Products.CMFCore.interfaces import ISyndicationTool
    from Products.CMFPlone.interfaces.syndication import ISyndicatable
    from Products.CMFPlone.interfaces.syndication import (
        ISiteSyndicationSettings, IFeedSettings)

    portal = getToolByName(context, 'portal_url').getPortalObject()

    def getDexterityFolderTypes():
        try:
            from plone.dexterity.interfaces import IDexterityFTI
            from plone.dexterity.utils import resolveDottedName
        except ImportError:
            return set([])

        portal_types = getToolByName(portal, 'portal_types')
        types = [fti for fti in portal_types.listTypeInfo() if
                 IDexterityFTI.providedBy(fti)]

        ftypes = set([])
        for _type in types:
            klass = resolveDottedName(_type.klass)
            if ISyndicatable.implementedBy(klass):
                ftypes.add(_type.getId())
        return ftypes

    logger.info('Migrating syndication tool')
    registry = getUtility(IRegistry)
    synd_settings = registry.forInterface(ISiteSyndicationSettings)
    # default settings work fine here if all settings are not
    # available
    try:
        old_synd_tool = portal.portal_syndication
        try:
            synd_settings.allowed = old_synd_tool.isAllowed
        except AttributeError:
            pass
        try:
            synd_settings.max_items = old_synd_tool.max_items
        except AttributeError:
            pass
        portal.manage_delObjects(['portal_syndication'])
    except AttributeError:
        pass
    sm = getSiteManager()
    sm.unregisterUtility(provided=ISyndicationTool)
    # now, go through all containers and look for syndication_info
    # objects
    catalog = getToolByName(portal, 'portal_catalog')
    # get all folder types from portal_types
    at_tool = getToolByName(portal, 'archetype_tool')
    folder_types = set([])
    for _type in at_tool.listPortalTypesWithInterfaces([ISyndicatable]):
        folder_types.add(_type.getId())
    folder_types = folder_types | getDexterityFolderTypes()
    for brain in catalog(portal_type=tuple(folder_types)):
        try:
            obj = brain.getObject()
        except (AttributeError, KeyError):
            continue
        if 'syndication_information' in obj.objectIds():
            # just having syndication info object means
            # syndication is enabled
            info = obj.syndication_information
            try:
                settings = IFeedSettings(obj)
            except TypeError:
                continue
            settings.enabled = True
            try:
                settings.max_items = info.max_items
            except AttributeError:
                pass
            settings.feed_types = ('RSS',)
            obj.manage_delObjects(['syndication_information'])