NAME

CGI::Wiki::Plugin::RSS::ModWiki - A CGI::Wiki plugin to output RecentChanges RSS.

DESCRIPTION

This is an alternative access to the recent changes of a CGI::Wiki wiki. It outputs RSS as described by the ModWiki proposal at http://www.usemod.com/cgi-bin/mb.pl?ModWiki

SYNOPSIS

use CGI::Wiki;
use CGI::Wiki::Plugin::RSS::ModWiki;

my $wiki = CGI::Wiki->new( ... );  # See perldoc CGI::Wiki

# Set up the RSS feeder with the mandatory arguments - see
# C<new> below for more, optional, arguments.
my $rss = CGI::Wiki::Plugin::RSS::ModWiki->new(
    wiki                 => $wiki,
    site_name            => "My Wiki",
    make_node_url        => sub {
                                  my ($node_name, $version) = @_;
                                  return "http://example.com/?id="
                                  . uri_escape($node_name)
                                  . ";version=" . uri_escape($version);
                                },
    recent_changes_link  => "http://example.com/?RecentChanges",
);

print "Content-type: application/xml\n\n";
print $rss->recent_changes;

METHODS

new
my $rss = CGI::Wiki::Plugin::RSS::ModWiki->new(
    wiki                 => $wiki,
    site_name            => "My Wiki",
    make_node_url        => sub {
                              my ($node_name, $version) = @_;
                              return "http://example.com/?id="
                              . uri_escape($node_name)
                              . ";version=" . uri_escape($version);
                                },
    recent_changes_link  => "http://example.com/?RecentChanges",
# Those above were mandatory, those below are optional.
    site_description     => "My wiki about my stuff",
    interwiki_identifier => "KakesWiki",
    make_diff_url        => sub {
                                 my $node_name = shift;
                                 return "http://example.com/?diff="
                                        . uri_escape($node_name)
                                },
    make_history_url     => sub {
                                 my $node_name = shift;
                                 return "http://example.com/?hist="
                                        . uri_escape($node_name)
                                },
);

wiki must be a CGI::Wiki object. make_node_url, and make_diff_url and make_history_url, if supplied, must be coderefs.

The mandatory arguments are:

  • wiki

  • site_name

  • make_node_url

  • recent_changes_link

recent_changes
  $wiki->write_node( "About This Wiki",
		     "blah blah blah content",
		     $checksum,
		     {
                       comment  => "Stub page, please update!",
		       username => "Kake"
                     }
  );

  print "Content-type: application/xml\n\n";
  print $rss->recent_changes;

  # Or get something other than the default of the latest 15 changes.
  print $rss->recent_changes( items => 50 );
  print $rss->recent_changes( days => 7 );

  # Or ignore minor changes.
  print $rss->recent_changes( ignore_minor_changes => 1 );

  # Personalise your feed further - consider only changes
  # made by Kake to pages about pubs.
  print $rss->recent_changes(
                       filter_on_metadata => {
                                               username => "Kake",
                                               category => "Pubs",
                                             },
                            );

If using filter_on_metadata note that only changes satisfying all criteria will be returned.

Note: Many of the fields emitted by the RSS generator are taken from the node metadata. The form of this metadata is not mandated by CGI::Wiki. Your wiki application should make sure to store some or all of the following metadata when calling write_node:

comment - a brief comment summarising the edit that has just been made; will be used in the RDF description for this item. Defaults to the empty string.
username - an identifier for the person who made the edit; will be used as the Dublin Core contributor for this item, and also in the RDF description. Defaults to the empty string.
host - the hostname or IP address of the computer used to make the edit; if no username is supplied then this will be used as the Dublin Core contributor for this item. Defaults to the empty string.
major_change - true if the edit was a major edit and false if it was a minor edit; used for the importance of the item. Defaults to true (ie if major_change was not defined or was explicitly stored as undef).
rss_timestamp
print $rss->rss_timestamp();

Returns the timestamp of the feed in POSIX::strftime style ("Tue, 29 Feb 2000 12:34:56 GMT"), which is equivalent to the timestamp of the most recent item in the feed. Takes the same arguments as recent_changes(). You will most likely need this to print a Last-Modified HTTP header so user-agents can determine whether they need to reload the feed or not.

SEE ALSO

MAINTAINER

Earle Martin <EMARTIN@cpan.org>. Originally by Kake Pugh <kake@earth.li>.

COPYRIGHT AND LICENSE

Copyright 2003-4 Kake Pugh. Subsequent modifications copyright 2005 Earle Martin.

This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

CREDITS

The people on #swig on irc.freenode.net gave encouragement and useful advice.

1 POD Error

The following errors were encountered while parsing the POD:

Around line 328:

You forgot a '=back' before '=head1'