Changeset 294

Show
Ignore:
Timestamp:
05/18/06 16:44:39 (6 years ago)
Author:
nick
Message:

More splitting of data fetch and rendering, this time for Atom

Location:
wiki-toolkit/trunk/lib/Wiki/Toolkit/Feed
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • wiki-toolkit/trunk/lib/Wiki/Toolkit/Feed/Atom.pm

    r292 r294  
    5555 
    5656  my $wiki = $self->{wiki}; 
     57 
     58  my %criteria = ( 
     59                   ignore_case => 1, 
     60                 ); 
     61 
     62  # If we're not passed any parameters to limit the items returned, default to 15. 
     63  $args{days} ? $criteria{days}           = $args{days} 
     64              : $criteria{last_n_changes} = $args{items} || 15; 
     65   
     66  $criteria{metadata_wasnt} = { major_change => 0 }     if $args{ignore_minor_edits}; 
     67  $criteria{metadata_was}   = $args{filter_on_metadata} if $args{filter_on_metadata}; 
     68 
     69  my @changes = $wiki->list_recent_changes(%criteria); 
     70  my $atom_timestamp = $self->feed_timestamp(%args); 
     71 
     72  return $self->generate_node_list_feed($atom_timestamp, @changes); 
     73} 
     74 
     75=item <generate_node_list_feed> 
     76   
     77Generate and return an Atom feed for a list of nodes 
     78   
     79=cut 
     80sub generate_node_list_feed { 
     81  my ($self,$atom_timestamp,@nodes) = @_; 
    5782 
    5883  my $generator = ''; 
     
    6792  }                           
    6893 
    69   my %criteria = ( 
    70                    ignore_case => 1, 
    71                  ); 
    72  
    73   # If we're not passed any parameters to limit the items returned, default to 15. 
    74   $args{days} ? $criteria{days}           = $args{days} 
    75               : $criteria{last_n_changes} = $args{items} || 15; 
    76    
    77   $criteria{metadata_wasnt} = { major_change => 0 }     if $args{ignore_minor_edits}; 
    78   $criteria{metadata_was}   = $args{filter_on_metadata} if $args{filter_on_metadata}; 
    79  
    80   my @changes = $wiki->list_recent_changes(%criteria); 
    81  
    8294  my $subtitle = $self->{site_description} 
    8395                 ? '<subtitle>' . $self->{site_description} . "</subtitle>\n" 
     
    88100<feed xmlns="http://www.w3.org/2005/Atom"> 
    89101 
    90   <link href="}            . $self->{site_url}            . qq{" /> 
    91   <title>}                 . $self->{site_name}           . qq{</title> 
    92   <link rel="self" href="} . $self->{atom_link}           . qq{" /> 
    93   <updated>}               . $self->feed_timestamp(%args) . qq{</updated> 
    94   <id>}                    . $self->{site_url}            . qq{</id> 
     102  <link href="}            . $self->{site_url}     . qq{" /> 
     103  <title>}                 . $self->{site_name}    . qq{</title> 
     104  <link rel="self" href="} . $self->{atom_link}    . qq{" /> 
     105  <updated>}               . $atom_timestamp      . qq{</updated> 
     106  <id>}                    . $self->{site_url}     . qq{</id> 
    95107  $subtitle}; 
    96108 
    97109  my (@urls, @items); 
    98110 
    99   foreach my $change (@changes) 
    100   { 
    101     my $node_name = $change->{name}; 
    102  
    103     my $item_timestamp = $change->{last_modified}; 
     111  foreach my $node (@nodes) 
     112  { 
     113    my $node_name = $node->{name}; 
     114 
     115    my $item_timestamp = $node->{last_modified}; 
    104116     
    105117    # Make a Time::Piece object. 
     
    110122    $item_timestamp = $time->strftime( "%Y-%m-%dT%H:%M:%S$utc_offset" ); 
    111123 
    112     my $author      = $change->{metadata}{username}[0] || $change->{metadata}{host}[0] || 'Anonymous'; 
    113     my $description = $change->{metadata}{comment}[0]  || 'No description given for change'; 
     124    my $author      = $node->{metadata}{username}[0] || $node->{metadata}{host}[0] || 'Anonymous'; 
     125    my $description = $node->{metadata}{comment}[0]  || 'No description given for node'; 
    114126 
    115127    $description .= " [$author]" if $author; 
    116128 
    117     my $version = $change->{version}; 
     129    my $version = $node->{version}; 
    118130    my $status  = (1 == $version) ? 'new' : 'updated'; 
    119131 
    120     my $major_change = $change->{metadata}{major_change}[0]; 
     132    my $major_change = $node->{metadata}{major_change}[0]; 
    121133       $major_change = 1 unless defined $major_change; 
    122134    my $importance = $major_change ? 'major' : 'minor'; 
     
    182194=head1 NAME 
    183195 
    184   Wiki::Toolkit::Feed::Atom - A Wiki::Toolkit plugin to output RecentChanges RSS. 
     196  Wiki::Toolkit::Feed::Atom - A Wiki::Toolkit plugin to output RecentChanges Atom. 
    185197 
    186198=head1 DESCRIPTION 
  • wiki-toolkit/trunk/lib/Wiki/Toolkit/Feed/RSS.pm

    r293 r294  
    154154  my (@urls, @items); 
    155155 
    156   foreach my $change (@nodes) 
    157   { 
    158     my $node_name = $change->{name}; 
    159  
    160     my $timestamp = $change->{last_modified}; 
     156  foreach my $node (@nodes) 
     157  { 
     158    my $node_name = $node->{name}; 
     159 
     160    my $timestamp = $node->{last_modified}; 
    161161     
    162162    # Make a Time::Piece object. 
     
    167167    $timestamp = $time->strftime( "%Y-%m-%dT%H:%M:%S$utc_offset" ); 
    168168 
    169     my $author      = $change->{metadata}{username}[0] || $change->{metadata}{host}[0] || ''; 
    170     my $description = $change->{metadata}{comment}[0]  || ''; 
     169    my $author      = $node->{metadata}{username}[0] || $node->{metadata}{host}[0] || ''; 
     170    my $description = $node->{metadata}{comment}[0]  || ''; 
    171171 
    172172    $description .= " [$author]" if $author; 
    173173 
    174     my $version = $change->{version}; 
     174    my $version = $node->{version}; 
    175175    my $status  = (1 == $version) ? 'new' : 'updated'; 
    176176 
    177     my $major_change = $change->{metadata}{major_change}[0]; 
     177    my $major_change = $node->{metadata}{major_change}[0]; 
    178178       $major_change = 1 unless defined $major_change; 
    179179    my $importance = $major_change ? 'major' : 'minor'; 
     
    239239} 
    240240 
     241=item B<rss_timestamp> 
     242 
     243Generate the timestamp for the RSS, by figuring out the age range of 
     244the source data for the feed 
     245 
     246=cut 
    241247sub rss_timestamp 
    242248{