Class ::xowiki::RSS (public)

 ::xotcl::Class ::xowiki::RSS[i] [ -maxentries maxentries ] [ -days days ] \
    [ -name_filter name_filter ]

Defined in /var/www/openacs.org/packages/xowiki/tcl/syndicate-procs.tcl

Report content of xowiki folder in RSS 2.0 format. The reporting order is descending by date. The title of the feed is taken from the title, the description is taken from the description field of the folder object.

Switches:
-maxentries (optional)
maximum number of entries retrieved
-days (optional)
report entries changed in specified last days
-name_filter (optional)
include only pages matching the provided regular expression (postgres)

Testcases:
No testcase defined.
Source code:
namespace eval ::xowiki {}
::nsf::object::alloc ::xotcl::Class ::xowiki::RSS {set :__default_metaclass ::xotcl::Class
   set :__default_superclass ::xotcl::Object}
::xowiki::RSS instproc tail {} {
    return  "\n</channel>\n</rss>\n"
  }
::xowiki::RSS instproc css_link {} {
    if {${:css} ne ""} {
      #
      # Firefox 2.0 appears to overwrite the style info, so one has to use such ugly tricks:
      #    http://www.blingblog.info/2006/10/30/firefox-big-browser/
      # when we want to use custom style sheets
      #
      set user_agent [string tolower [ns_set iget [ns_conn headers] User-Agent]]
      set filler [expr {[string first firefox $user_agent] >- 1 ?
                        "<!-- [string repeat deadbef 100] -->" : ""
                      }]
      set css_link [expr {[string match "/*" ${:css}] ? ${:css} : "/resources/xowiki/${:css}"}]
      return "\n<?xml-stylesheet type='text/css' href='[ns_quotehtml $css_link]' ?>\n$filler"
    }
    return ""
  }
::xowiki::RSS instproc render {} {

    if {[:parent_ids] ne ""} {
      set folder_ids [:parent_ids]
    } else {
      set folder_ids [::${:package_id} folder_id]
    }

    set :link ${:siteurl}[lindex [site_node::get_url_from_object_id -object_id ${:package_id}] 0]

    set :base_table xowiki_pagex
    set extra_where_clause [:extra_where_clause]

    if {${:base_table} ne "xowiki_pagex"} {
      # we assume, we retrieve the entries for a form
      set extra_from ""
    } else {
      # return always instance_attributes
      set extra_from "left join  xowiki_page_instance on (p.revision_id = page_instance_id)"
    }

    if {[llength $folder_ids] > 1} {
      set folder_select "ci.parent_id in ([ns_dbquotelist $folder_ids])"
    } else {
      set folder_select "ci.parent_id = :folder_ids"
    }

    set sql [::xo::dc select  -vars "s.body, s.rss_xml_frag, p.name, p.creator, p.title, p.page_id, instance_attributes,  p.object_type as content_type, p.publish_date, p.description"  -from "syndication s, cr_items ci, ${:base_table} p $extra_from"  -where "$folder_select and ci.live_revision = s.object_id  and ci.publish_status <> 'production'  and s.object_id = p.page_id  $extra_where_clause" -orderby "p.publish_date desc"  -limit [:limit]]

    set content [:head]
    ::xo::dc foreach get_pages $sql {
      if {[string match "::*" $name]} continue
      if {$content_type eq "::xowiki::PageTemplate" || $content_type eq "::xowiki::Form"} continue
      append content $rss_xml_frag
      set :title $title
      set :description ${:description}
    }
    append content [:tail]
    return $content
  }
::xowiki::RSS instproc extra_where_clause {} {
    set extra_where_clause ""
    if {${:name_filter} ne ""} {
      append extra_where_clause " and ci.name ~ E'${:name_filter}' "
    }
    if {${:days} ne ""} {
      append extra_where_clause "and "  [::xo::dc since_interval_condition p.publish_date "${:days} days"]
    }
    if {${:entries_of} ne ""} {
      if {[regexp {^[0-9 ]+$} ${:entries_of}]} {
        # form item_ids were provided as a filter
        set form_items ${:entries_of}
      } else {
        set form_items [::${:package_id} instantiate_forms -forms ${:entries_of}]
      }

      if {[llength $form_items] == 0} {
        # In case, we have no form_items to select on, let the query fail
        # without causing a SQL error.
        set form_items [list -1]
      }
      append extra_where_clause [subst {
        and p.page_template in ([ns_dbquotelist $form_items]) and p.page_instance_id = p.revision_id
      }] " "

      set :base_table xowiki_form_pagex
    }
    return $extra_where_clause
  }
::xowiki::RSS instproc head {} {
    return "<?xml version='1.0' encoding='utf-8'?>[:css_link]
<rss version='2.0'
  xmlns:ent='http://www.purl.org/NET/ENT/1.0/'
  xmlns:content='http://purl.org/rss/1.0/modules/content/'
  xmlns:dc='http://purl.org/dc/elements/1.1/'>
<channel>
  [:tag title ${:title}]
  [:tag link ${:link}]
  [:tag description ${:description}]
  [:tag language ${:language}]
  [:tag generator xowiki]"
  }
::xowiki::RSS instproc limit {} {
    if {[info exists :maxentries] && ${:maxentries} ne ""} {
      return ${:maxentries}
    }
    return ""
  }
::xowiki::RSS instproc item {-creator -title -link -guid -description -pubdate} {
    append result <item> \n [:tag dc:creator $creator ] \n [:tag title $title ] \n [:tag link $link ] \n [:tag -atts {isPermaLink false} guid $guid] \n [:tag description $description ] \n [:tag pubDate $pubdate ] \n </item> \n
  }
::xowiki::RSS instparametercmd maxentries
::xowiki::RSS instparametercmd parent_ids
::xowiki::RSS instparametercmd css
::xowiki::RSS instparametercmd description
::xowiki::RSS instparametercmd language
::xowiki::RSS instparametercmd siteurl
::xowiki::RSS instparametercmd days
::xowiki::RSS instparametercmd title
::xowiki::RSS instparametercmd entries_of
::xowiki::RSS instparametercmd name_filter
::nsf::relation::set ::xowiki::RSS superclass ::xowiki::XMLSyndication

::nx::slotObj -container slot ::xowiki::RSS
::xowiki::RSS::slot eval {set :__parameter {
    maxentries:integer,0..1
    {parent_ids:integer,0..n ""}
    {name_filter ""}
    {entries_of ""}
    {days:integer,0..1 ""}
    {css ""}
    {siteurl "[ad_url]"}
    {description ""}
    {language en-us}
    {title ""}
  }}

::nsf::object::alloc ::xotcl::Attribute ::xowiki::RSS::slot::description {set :accessor public
   set :configurable true
   set :convert false
   set :default {}
   set :defaultmethods {}
   set :disposition alias
   set :domain ::xowiki::RSS
   set :incremental 0
   set :manager ::xowiki::RSS::slot::description
   set :methodname description
   set :multiplicity 1..1
   set :name description
   set :per-object false
   set :position 0
   set :required false
   set :substdefault 0b111
   set :trace none
   : init}

::nsf::object::alloc ::xotcl::Attribute ::xowiki::RSS::slot::entries_of {set :accessor public
   set :configurable true
   set :convert false
   set :default {}
   set :defaultmethods {}
   set :disposition alias
   set :domain ::xowiki::RSS
   set :incremental 0
   set :manager ::xowiki::RSS::slot::entries_of
   set :methodname entries_of
   set :multiplicity 1..1
   set :name entries_of
   set :per-object false
   set :position 0
   set :required false
   set :substdefault 0b111
   set :trace none
   : init}

::nsf::object::alloc ::xotcl::Attribute ::xowiki::RSS::slot::siteurl {set :accessor public
   set :configurable true
   set :convert false
   set :default {[ad_url]}
   set :defaultmethods {}
   set :disposition alias
   set :domain ::xowiki::RSS
   set :incremental 0
   set :manager ::xowiki::RSS::slot::siteurl
   set :methodname siteurl
   set :multiplicity 1..1
   set :name siteurl
   set :per-object false
   set :position 0
   set :required false
   set :substdefault 0b111
   set :trace none
   : init}

::nsf::object::alloc ::xotcl::Attribute ::xowiki::RSS::slot::maxentries {set :accessor public
   set :configurable true
   set :convert false
   set :defaultmethods {}
   set :disposition alias
   set :domain ::xowiki::RSS
   set :incremental 0
   set :manager ::xowiki::RSS::slot::maxentries
   set :methodname maxentries
   set :multiplicity 0..1
   set :name maxentries
   set :per-object false
   set :position 0
   set :required false
   set :trace none
   set :type integer
   : init}

::nsf::object::alloc ::xotcl::Attribute ::xowiki::RSS::slot::parent_ids {set :accessor public
   set :configurable true
   set :convert false
   set :default {}
   set :defaultmethods {}
   set :disposition alias
   set :domain ::xowiki::RSS
   set :incremental 0
   set :manager ::xowiki::RSS::slot::parent_ids
   set :methodname parent_ids
   set :multiplicity 0..n
   set :name parent_ids
   set :per-object false
   set :position 0
   set :required false
   set :substdefault 0b111
   set :trace none
   set :type integer
   : init}

::nsf::object::alloc ::xotcl::Attribute ::xowiki::RSS::slot::title {set :accessor public
   set :configurable true
   set :convert false
   set :default {}
   set :defaultmethods {}
   set :disposition alias
   set :domain ::xowiki::RSS
   set :incremental 0
   set :manager ::xowiki::RSS::slot::title
   set :methodname title
   set :multiplicity 1..1
   set :name title
   set :per-object false
   set :position 0
   set :required false
   set :substdefault 0b111
   set :trace none
   : init}

::nsf::object::alloc ::xotcl::Attribute ::xowiki::RSS::slot::language {set :accessor public
   set :configurable true
   set :convert false
   set :default en-us
   set :defaultmethods {}
   set :disposition alias
   set :domain ::xowiki::RSS
   set :incremental 0
   set :manager ::xowiki::RSS::slot::language
   set :methodname language
   set :multiplicity 1..1
   set :name language
   set :per-object false
   set :position 0
   set :required false
   set :substdefault 0b111
   set :trace none
   : init}

::nsf::object::alloc ::xotcl::Attribute ::xowiki::RSS::slot::name_filter {set :accessor public
   set :configurable true
   set :convert false
   set :default {}
   set :defaultmethods {}
   set :disposition alias
   set :domain ::xowiki::RSS
   set :incremental 0
   set :manager ::xowiki::RSS::slot::name_filter
   set :methodname name_filter
   set :multiplicity 1..1
   set :name name_filter
   set :per-object false
   set :position 0
   set :required false
   set :substdefault 0b111
   set :trace none
   : init}

::nsf::object::alloc ::xotcl::Attribute ::xowiki::RSS::slot::days {set :accessor public
   set :configurable true
   set :convert false
   set :default {}
   set :defaultmethods {}
   set :disposition alias
   set :domain ::xowiki::RSS
   set :incremental 0
   set :manager ::xowiki::RSS::slot::days
   set :methodname days
   set :multiplicity 0..1
   set :name days
   set :per-object false
   set :position 0
   set :required false
   set :substdefault 0b111
   set :trace none
   set :type integer
   : init}

::nsf::object::alloc ::xotcl::Attribute ::xowiki::RSS::slot::css {set :accessor public
   set :configurable true
   set :convert false
   set :default {}
   set :defaultmethods {}
   set :disposition alias
   set :domain ::xowiki::RSS
   set :incremental 0
   set :manager ::xowiki::RSS::slot::css
   set :methodname css
   set :multiplicity 1..1
   set :name css
   set :per-object false
   set :position 0
   set :required false
   set :substdefault 0b111
   set :trace none
   : init}

namespace eval ::xowiki {::namespace export Menu YUIMenuBar YUIMenuBarItem YUIMenu YUIMenuItem YUIMenuItemList YUIContextMenu YUIContextMenuItem}
XQL Not present:
Generic, PostgreSQL, Oracle
[ hide source ] | [ make this the default ]
Show another procedure: