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'])
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
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')
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
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
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
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'])
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'])