[xwiki-dev] create a personal rss feed
Vincent Massol
vincent at massol.net
Thu Mar 1 16:29:11 CET 2007
Hi Mathieu,
That's great. What would be awesome would be if you could package
this as an application (a XAR file) so that we can make it available
on xwiki.org
Thanks
-Vincent
On Feb 27, 2007, at 5:39 PM, EMPTOZ Mathieu 310507 wrote:
> Ok here It Is :
>
>
>
>
>
> 1 - the creation of a RSS feed page: “PersonalRSS” in space “ Main”
> with code :
>
>
>
> $response.setContentType("text/xml")
>
> #set($baseurl = "http://${request.serverName}")
>
> #set($member = $request.uid)
>
> #set($title = "$member.replace('XWiki.','') Personal")
>
> #set($description = "Flux RSS Personal of $member.replace
> ('XWiki.','')")
>
> #includeForm("XWiki.PersonalRssCode")
>
>
>
>
>
> 2 – the creation of the RSS Code page: “PersonalRssCode” in space
> Xwiki with code :
>
>
>
> {pre}
>
>
>
> #if($member=="")
>
> #set($member="XWiki.XWikiGuest")
>
> #end
>
>
>
> #set($memberdoc = $xwiki.getDocument($member))
>
> #set($cobj = $memberdoc.getObject("XWiki.XWikiUsers"))
>
> #set($personalrss = $memberdoc.display("blogfeed","view",$cobj))
>
> #set($personalrss = $personalrss.replace("@","','"))
>
> #set($sql = "where doc.fullName in ('${personalrss}') order by
> doc.date desc")
>
>
>
> #set($list = $xwiki.searchDocuments($sql ,0, 0))
>
> #set($rsvc= $xwiki.xWiki.getRightService())
>
>
>
> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
> xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://purl.org/
> rss/1.0/" xmlns:dc="http://purl.org/dc/elements/1.1/"
> xmlns:wiki="http://purl.org/rss/1.0/modules/wiki/"
>
> encoding="ISO-8859-1" >
>
>
>
> <channel rdf:about="$baseurl">
>
> <title>$title</title>
>
> <link>$baseurl</link>
>
> <description>$description</description>
>
> <image rdf:resource="${baseurl}/xwiki/skins/default/logo.gif" />
>
> <dc:language>$doc.defaultLanguage</dc:language>
>
> <dc:rights>$xwiki.webCopyright</dc:rights>
>
> <dc:publisher>$doc.author</dc:publisher>
>
> <dc:creator>$doc.author</dc:creator>
>
>
>
> <items>
>
> <rdf:Seq>
>
> #foreach ($item in $list)
>
> #if($xwiki.hasAccessLevel("view", "${context.database}:${item}"))
>
> #set ($currentdoc = $xwiki.getDocument($item))
>
> <rdf:li rdf:resource="${baseurl}/xwiki/bin/view/${currentdoc.web}/$
> {currentdoc.name}" />
>
> #end
>
> #end
>
> </rdf:Seq>
>
> </items>
>
> </channel>
>
> <image rdf:about="${baseurl}/xwiki/skins/default/logo.gif">
>
> <title>XWiki Logo</title>
>
> <link>${baseurl}</link>
>
> <url>${baseurl}/xwiki/skins/default/logo.gif</url>
>
> </image>
>
> #foreach ($item in $list)
>
> #if($xwiki.hasAccessLevel("view", "${context.database}:${item}"))
>
> #set($currentdoc = $xwiki.getDocument($item))
>
> #set($url = "${baseurl}/xwiki/bin/view/${currentdoc.web}/$
> {currentdoc.name}")
>
> #if($currentdoc.content.length() < 255)
>
> #set($length = $currentdoc.content.length())
>
> #else
>
> #set($length = 255)
>
> #end
>
> <item rdf:about="$url">
>
> #set($itemtitle = ${currentdoc.title})
>
> #if( $itemtitle!="" )
>
> <title>$itemtitle</title>
>
> #else
>
> <title>${currentdoc.web}.${currentdoc.name}</title>
>
> #end
>
> <link>$url</link>
>
> <description>
>
> #set($i = $currentdoc.author.indexOf(".")+1)
>
> This page (v$currentdoc.version) has been modified by
> $currentdoc.author.substring($i) on $xwiki.formatDate
> ($currentdoc.date,"MMMM dd, yyyy HH:mm:ss")
>
> </description>
>
> <dc:date>$xwiki.formatDate($currentdoc.date,"dd MMMM yyyy HH:mm:ss")
> </dc:date>
>
> <dc:contributor>
>
> <rdf:Description link="">
>
> <rdf:value>$currentdoc.author</rdf:value>
>
> </rdf:Description>
>
> </dc:contributor>
>
> </item>
>
> #end
>
> #end
>
> </rdf:RDF>
>
> {/pre}
>
>
>
>
>
> 3 – the creation of the page which add and remove chosen pages :
> “EditPersonalRSS” in space “Xwiki” with code :
>
>
>
> #if($request.page)
>
>
>
> #set($newrsspage = "@${request.page}")
>
>
>
> ####### on cherche la liste
>
> #set($member = $context.getUser())
>
> #set($memberdoc = $xwiki.getDocument($member))
>
> #set($cobj = $memberdoc.getObject("XWiki.XWikiUsers"))
>
>
>
> ####### on recupere les pages existantes
>
> #set($oldrsspages = $memberdoc.display("blogfeed","view",$cobj))
>
>
>
> ######################################################################
>
> #if($request.action == "add")
>
>
>
> ####### on injecte la nouvelle
>
> #if($oldrsspages == "")
>
> #set($oldrsspages = "$newrsspage")
>
> #else
>
> #set($oldrsspages = "${newrsspage}${oldrsspages}")
>
> #end
>
>
>
> ######################################################################
>
> #elseif($request.action == "sub")
>
>
>
> ####### on enleve la page choisie
>
> #set($oldrsspages = $oldrsspages.replace("${newrsspage}","")))
>
>
>
> ######################################################################
>
> #end
>
>
>
> ####### on sauve
>
> $memberdoc.use("XWiki.XWikiUsers")
>
> $memberdoc.set("blogfeed",$oldrsspages)
>
> $memberdoc.save()
>
>
>
> ####### on redirige
>
> #$response.sendRedirect($xwiki.getURL(${request.page}))
>
>
>
> #else
>
> #$response.sendRedirect($xwiki.getURL("Main.WebHome"))
>
> #end
>
>
>
>
>
> 4 – Implement the links to this Personal RSS Feed
>
>
>
> The link to create the RSS Feed:
>
>
>
> <a href="$xwiki.getURL("Main.PersonalRSS", "view", "uid=$
> {context.user}&xpage=rdf")")">Personal RSS <img
> src="$xwiki.getSkinFile("icons/black-rss-mini.png")"></a>
>
>
>
> And in the pages you want to be followed (you can add this code in
> the “view.vm” page for example):
>
>
>
> #set($mdoc = $xwiki.getDocument(${context.user}))
>
> #set($cobj = $mdoc.getObject("XWiki.XWikiUsers"))
>
> #set($prss = $mdoc.display("blogfeed","view",$cobj))
>
> #if($prss.contains(${doc.fullName}))
>
> <a href="$xwiki.getURL("XWiki.EditPersonalRSS","view","page=$
> {doc.fullName}&action=sub")">Unfollow This Page</a>
>
> #else
>
> <a href="$xwiki.getURL("XWiki.EditPersonalRSS","view","page=$
> {doc.fullName}&action=add")">Follow This Page with RSS</a>
>
> #end
>
>
>
>
>
> 5 – Problems encountered
>
>
>
> - I’m using the field “blogfeed”, the best is to create a
> new property in the Object XWiki.XWikiUsers
>
> - Everybody can follow the Personal RSS Feed of everybody
> just by adding the Feed with a “Xwiki.login_of_user” instead of the
> “${context.user}”
>
>
>
>
>
>
>
> That’s work fine, but I think it is possible to ameliorate my code.
>
>
>
> Regards, Mathieu
>
> ---------------------------------------------------
> Mathieu Emptoz
> CEA Cadarache
> DRFC/STEP
> XWiki's EFDA Remote Participation Administrator
> ---------------------------------------------------
>
>
>
>
> --
> You receive this message as a subscriber of the xwiki-
> dev at objectweb.org mailing list.
> To unsubscribe: mailto:xwiki-dev-unsubscribe at objectweb.org
> For general help: mailto:sympa at objectweb.org?subject=help
> ObjectWeb mailing lists service home page: http://www.objectweb.org/
> wws
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.xwiki.org/pipermail/devs/attachments/20070301/7e5341f1/attachment.html
More information about the devs
mailing list