# zwiki RSS feed functionality from __future__ import nested_scopes import string, re from string import join from types import * from urllib import quote, unquote from DateTime import DateTime from AccessControl import ClassSecurityInfo from Globals import InitializeClass import Permissions from Utils import BLATHER, html_quote from I18n import _ class PageRSSSupport: """ I provide various kinds of RSS feed for the page and the whole wiki. """ security = ClassSecurityInfo() security.declareProtected(Permissions.View, 'pages_rss') def pages_rss(self, num=10, REQUEST=None): """ Provide an RSS feed showing this wiki's recently created pages. """ feedtitle = self.folder().title_or_id() + ' new pages' feeddescription = feedtitle feedlanguage = 'en' feeddate = str(self.folder().bobobase_modification_time()) #XXX ? wikiurl = self.wikiUrl() REQUEST.RESPONSE.setHeader('Content-Type','text/xml') t = """\ %(feedtitle)s %(feedurl)s %(feeddescription)s %(feedlanguage)s %(feeddate)s """ % { 'feedtitle':feedtitle, 'feeddescription':feeddescription, 'feedurl':wikiurl, 'feedlanguage':feedlanguage, 'feeddate':feeddate, } for p in self.pages(sort_on='creation_time', sort_order='reverse', sort_limit=num, isBoring=0): pobj = p.getObject() t += """\ %(title)s %(wikiurl)s/%(id)s %(creation_time)s """ % { 'title':p.Title, 'wikiurl':wikiurl, 'id':p.id, 'summary':pobj.summary(1000), 'creation_time':pobj.creationTime().rfc822(), # be robust here } # t += """\ """ return t security.declareProtected(Permissions.View, 'changes_rss') def changes_rss(self, num=10, REQUEST=None): """ Provide an RSS feed showing this wiki's recently edited pages. This is not the same as all recent edits. """ feedtitle = self.folder().title_or_id() + ' changed pages' feeddescription = feedtitle feedlanguage = 'en' feeddate = str(self.folder().bobobase_modification_time()) #XXX ? wikiurl = self.wikiUrl() REQUEST.RESPONSE.setHeader('Content-Type','text/xml') t = """\ %(feedtitle)s %(feedurl)s %(feeddescription)s %(feedlanguage)s %(feeddate)s """ % { 'feedtitle':feedtitle, 'feeddescription':feeddescription, 'feedurl':wikiurl, 'feedlanguage':feedlanguage, 'feeddate':feeddate, } for p in self.pages(sort_on='last_edit_time', sort_order='reverse', sort_limit=num, isBoring=0): pobj = p.getObject() t += """\ %(title)s %(wikiurl)s/%(id)s %(last_log)s %(last_edit_time)s """ % { 'title':'[%s] %s' % (p.Title,html_quote(p.last_log)), 'wikiurl':wikiurl, 'id':p.id, 'last_log':html_quote(pobj.textDiff()), 'last_edit_time':pobj.lastEditTime().rfc822(), # be robust here } t += """\ """ return t InitializeClass(PageRSSSupport)