Uploaded image for project: 'XWiki Platform'
  1. XWiki Platform
  2. XWIKI-14431

Code to improve description field content for RSS feed

    Details

    • Type: Improvement
    • Status: Open
    • Priority: Minor
    • Resolution: Unresolved
    • Affects Version/s: 1.9.1
    • Fix Version/s: None
    • Component/s: Distribution - Flavor
    • Labels:
      None
    • keywords:
      Velocity RSS patch
    • Pull Request Status:
      Awaiting Pull Request creation
    • Similar issues:

      Description

      Currently description field for RSS feed doesn't contain useful information.
      Below is fixed code from ../xwiki/bin/edit/XWiki/WebRssCode?editor=wiki
      This code makes shortened plain text content form Xwiki document or included object, if it is used (currently for Blog (Xwiki enterprise default) and Recipes (My Custom object)).

      Probably there is no need to use separate Blog feed when this code is corrected.

      Start looking (and merge from) place with:

      ...
      ####################################
      ## Format content for description ##
      ####################################
      ....
      

      till:

      ...
      <description>
      $ccont
      $msg.get("xe.rss.version") $currentdoc.version $msg.get("xe.rss.editedby")
      $xwiki.getXMLEncoded($xwiki.getUserName($currentdoc.author, false))
      </description>
      ....
      {pre}
      $context.setCacheDuration(1800)
      <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/" xmlns:html="http://www.w3.org/1999/xhtml">
      <channel rdf:about="$baseurl">
      <title>
      #if($title)
      $title
      #else
      $request.serverName
      #end
      </title>
      <link>$baseurl</link>
      <description>
      #if($description)
      $description
      #else
      $request.serverName
      #end
      </description>
      #set($logourl = $xwiki.getSkinFile($xwiki.getSkinPreference('logo', 'logo.png')))
      #set($port = "")
      #if(($request.scheme == "http") && ($request.serverPort != 80))
      #set($port = ":${request.serverPort}")
      #elseif(($request.scheme == "https") && ($request.serverPort != 443))
      #set($port = ":${request.serverPort}")
      #end
      #set($logourl = "${request.scheme}://${request.serverName}${port}$logourl")
      <image rdf:resource="$logourl"/>
      <dc:language>$doc.defaultLanguage</dc:language>
      <dc:rights>$xwiki.getXMLEncoded($xwiki.webCopyright.replaceAll('<', '<html:').replaceAll('<html:/', '</html:'))</dc:rights>
      <dc:publisher>$xwiki.getUserName($doc.author, false)</dc:publisher>
      <dc:creator>$xwiki.getUserName($doc.author, false)</dc:creator>
      <items>
      <rdf:Seq>
      #if(!$list)
      #if(!$sql)
      #set($sql = "where 1=1 order by doc.date desc")
      #end
      #set($list = $xwiki.searchDocuments($sql, 20, 0))
      #end
      #set($list = $xwiki.wrapDocs($list))
      #foreach ($currentdoc in $list)
      #if($xwiki.hasAccessLevel("view", "${context.database}:${currentdoc.fullName}"))
      <rdf:li rdf:resource="$currentdoc.getExternalURL('view', "language=${currentdoc.realLanguage}")" />
      #end
      #end
      </rdf:Seq>
      </items>
      </channel>
      <image rdf:about="$logourl">
        <title>XWiki Logo</title>
        <link>${baseurl}</link>
        <url>$logourl</url>
      </image>
      #foreach ($currentdoc in $list)
      #if($xwiki.hasAccessLevel("view", "${context.database}:${currentdoc.fullName}"))
      #set($url = $currentdoc.getExternalURL('view', "language=${currentdoc.realLanguage}"))
      
      ####################################
      ## Format content for description ##
      ####################################
      ## Get Xwiki document content
      #set($ccont=$currentdoc.content)
      
      ## If document includes object, get content from related object
      #if($ccont.indexOf("include")>-1)
       ## If Blog object is included
       #if($ccont.indexOf("Blog.BlogPostSheet")>-1)
        #set($ccont=$currentdoc.getObject("Blog.BlogPostClass").extract)
       #end
       ## If Recipe object is attached (would be nice, If you will not remove this clause :-))
       #if($ccont.indexOf("Recipes.RecipeClassSheet")>-1)
        #set($ccont=$currentdoc.getObject("Recipes.RecipeClass").content)
       #end
       ## Feel free to add clauses for your custom objects here
      #end
      
      ## Clean up content
      ## Remove HTML links
      #set($ccont=$ccont.replaceAll('(\<(/?[^\>]+)\>)',''))
      ## Remove HTML links
      #set($ccont=$ccont.replaceAll('<a href="[^"]+">',''))
      ## Remove Xwiki links
      #set($ccont=$ccont.replaceAll('[\||\>](/?[^\>]+)\]',''))
      ## Clean up special characters if some were left
      #set($ccont=$ccont.replaceAll('[\<|\>|\*|\[|\]]',''))
      
      ## Shorten content
      #if ($ccont.length() < 255)
       #set ($length = $ccont.length())
      #else
       #set ($length = 255)
      #end
      #set($ccont=$ccont.substring(0,$length))
      
      <item rdf:about="$url">
      <title>$xwiki.getXMLEncoded(${currentdoc.displayTitle})</title>
      <link>$url</link>
      <description>
      $ccont
      $msg.get("xe.rss.version") $currentdoc.version $msg.get("xe.rss.editedby")
      $xwiki.getXMLEncoded($xwiki.getUserName($currentdoc.author, false))
      </description>
      #set($tz = $xwiki.formatDate($currentdoc.date, "Z"))
      #set($tz = "${tz.substring(0, 3)}:${tz.substring(3)}")
      <dc:date>$xwiki.formatDate($currentdoc.date, "yyyy-MM-dd")T$xwiki.formatDate($currentdoc.date, "hh:mm:ss")$tz</dc:date>
      <dc:creator>$xwiki.getXMLEncoded($xwiki.getUserName($currentdoc.creator, false))</dc:creator>
      <dc:contributor>
      <rdf:Description link="">
      <rdf:value>$xwiki.getXMLEncoded($xwiki.getUserName($currentdoc.author, false))</rdf:value>
      </rdf:Description>
      </dc:contributor>
      </item>
      #end
      #end
      </rdf:RDF>
      {/pre}
      

        Attachments

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              valdisvi Valdis Vitolins
            • Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

              • Created:
                Updated:
                Date of First Response: