Show
Ignore:
Timestamp:
05/11/08 17:04:41 (4 years ago)
Author:
dom
Message:

fix much tab/whitespace damage; no functional changes.

Files:
1 modified

Legend:

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

    r425 r431  
    1414@ISA = qw( Wiki::Toolkit::Feed::Listing ); 
    1515 
    16 sub new 
    17 { 
    18   my $class = shift; 
    19   my $self  = {}; 
    20   bless $self, $class; 
    21  
    22   my %args = @_; 
    23   my $wiki = $args{wiki}; 
    24  
    25   unless ($wiki && UNIVERSAL::isa($wiki, 'Wiki::Toolkit')) 
    26   { 
    27     croak 'No Wiki::Toolkit object supplied'; 
    28   } 
    29    
    30   $self->{wiki} = $wiki; 
    31    
    32   # Mandatory arguments. 
    33   foreach my $arg (qw/site_name site_url make_node_url atom_link/) 
    34   { 
    35     croak "No $arg supplied" unless $args{$arg}; 
    36     $self->{$arg} = $args{$arg}; 
    37   } 
    38  
    39   # Must-supply-one-of arguments 
    40   my %mustoneof = ( 'html_equiv_link' => ['html_equiv_link','recent_changes_link'] ); 
    41   $self->handle_supply_one_of(\%mustoneof,\%args); 
    42    
    43   # Optional arguments. 
    44   foreach my $arg (qw/site_description software_name software_version software_homepage encoding/) 
    45   { 
    46     $self->{$arg} = $args{$arg} || ''; 
    47   } 
    48  
    49   # Supply some defaults, if a blank string isn't what we want 
    50   unless($self->{encoding}) { 
    51     $self->{encoding} = $self->{wiki}->store->{_charset}; 
    52   } 
    53  
    54   $self->{timestamp_fmt} = $Wiki::Toolkit::Store::Database::timestamp_fmt; 
    55   $self->{utc_offset} = strftime "%z", localtime; 
    56   $self->{utc_offset} =~ s/(..)(..)$/$1:$2/; 
    57    
    58   # Escape any &'s in the urls 
    59   foreach my $key qw(site_url atom_link) { 
    60      my @ands = ($self->{$key} =~ /(\&.{1,6})/g); 
    61      foreach my $and (@ands) { 
    62         if($and ne "&") { 
    63             my $new_and = $and; 
    64             $new_and =~ s/\&/\&/; 
    65             $self->{$key} =~ s/$and/$new_and/; 
     16sub new { 
     17    my $class = shift; 
     18    my $self  = {}; 
     19    bless $self, $class; 
     20 
     21    my %args = @_; 
     22    my $wiki = $args{wiki}; 
     23 
     24    unless ($wiki && UNIVERSAL::isa($wiki, 'Wiki::Toolkit')) { 
     25        croak 'No Wiki::Toolkit object supplied'; 
     26    } 
     27   
     28    $self->{wiki} = $wiki; 
     29   
     30    # Mandatory arguments. 
     31    foreach my $arg (qw/site_name site_url make_node_url atom_link/) { 
     32        croak "No $arg supplied" unless $args{$arg}; 
     33        $self->{$arg} = $args{$arg}; 
     34    } 
     35 
     36    # Must-supply-one-of arguments 
     37    my %mustoneof = ( 'html_equiv_link' => ['html_equiv_link','recent_changes_link'] ); 
     38    $self->handle_supply_one_of(\%mustoneof,\%args); 
     39   
     40    # Optional arguments. 
     41    foreach my $arg (qw/site_description software_name software_version software_homepage encoding/) { 
     42        $self->{$arg} = $args{$arg} || ''; 
     43    } 
     44 
     45    # Supply some defaults, if a blank string isn't what we want 
     46    unless($self->{encoding}) { 
     47        $self->{encoding} = $self->{wiki}->store->{_charset}; 
     48    } 
     49 
     50    $self->{timestamp_fmt} = $Wiki::Toolkit::Store::Database::timestamp_fmt; 
     51    $self->{utc_offset} = strftime "%z", localtime; 
     52    $self->{utc_offset} =~ s/(..)(..)$/$1:$2/; 
     53   
     54    # Escape any &'s in the urls 
     55    foreach my $key qw(site_url atom_link) { 
     56        my @ands = ($self->{$key} =~ /(\&.{1,6})/g); 
     57        foreach my $and (@ands) { 
     58            if($and ne "&") { 
     59                my $new_and = $and; 
     60                $new_and =~ s/\&/\&/; 
     61                $self->{$key} =~ s/$and/$new_and/; 
     62            } 
    6663        } 
    67      } 
    68   } 
    69  
    70   $self; 
     64    } 
     65 
     66    $self; 
    7167} 
    7268 
     
    7975 
    8076sub build_feed_start { 
    81   my ($self,$atom_timestamp) = @_; 
    82  
    83   my $generator = ''; 
    84    
    85   if ($self->{software_name}) 
    86   { 
    87     $generator  = '  <generator'; 
    88     $generator .= ' uri="' . $self->{software_homepage} . '"'   if $self->{software_homepage}; 
    89     $generator .= ' version=' . $self->{software_version} . '"' if $self->{software_version}; 
    90     $generator .= ">\n"; 
    91     $generator .= $self->{software_name} . "</generator>\n"; 
    92   }                           
    93  
    94   my $subtitle = $self->{site_description} 
     77    my ($self,$atom_timestamp) = @_; 
     78 
     79    my $generator = ''; 
     80   
     81    if ($self->{software_name}) { 
     82        $generator  = '  <generator'; 
     83        $generator .= ' uri="' . $self->{software_homepage} . '"'   if $self->{software_homepage}; 
     84        $generator .= ' version=' . $self->{software_version} . '"' if $self->{software_version}; 
     85        $generator .= ">\n"; 
     86        $generator .= $self->{software_name} . "</generator>\n"; 
     87    }                           
     88 
     89    my $subtitle = $self->{site_description} 
    9590                 ? '<subtitle>' . $self->{site_description} . "</subtitle>\n" 
    9691                 : ''; 
    9792 
    98   $atom_timestamp ||= ''; 
    99  
    100   my $atom = qq{<?xml version="1.0" encoding="} . $self->{encoding} . qq{"?> 
     93    $atom_timestamp ||= ''; 
     94 
     95    my $atom = qq{<?xml version="1.0" encoding="} . $self->{encoding} . qq{"?> 
    10196 
    10297<feed  
     
    113108  $subtitle}; 
    114109   
    115   return $atom; 
     110    return $atom; 
    116111} 
    117112 
     
    135130 
    136131sub generate_node_list_feed { 
    137   my ($self,$atom_timestamp,@nodes) = @_; 
    138  
    139   my $atom = $self->build_feed_start($atom_timestamp); 
    140  
    141   my (@urls, @items); 
    142  
    143   foreach my $node (@nodes) 
    144   { 
    145     my $node_name = $node->{name}; 
    146  
    147     my $item_timestamp = $node->{last_modified}; 
     132    my ($self,$atom_timestamp,@nodes) = @_; 
     133 
     134    my $atom = $self->build_feed_start($atom_timestamp); 
     135 
     136    my (@urls, @items); 
     137 
     138    foreach my $node (@nodes) { 
     139        my $node_name = $node->{name}; 
     140 
     141        my $item_timestamp = $node->{last_modified}; 
    148142     
    149     # Make a Time::Piece object. 
    150     my $time = Time::Piece->strptime($item_timestamp, $self->{timestamp_fmt}); 
    151  
    152     my $utc_offset = $self->{utc_offset}; 
     143        # Make a Time::Piece object. 
     144        my $time = Time::Piece->strptime($item_timestamp, $self->{timestamp_fmt}); 
     145 
     146        my $utc_offset = $self->{utc_offset}; 
    153147     
    154     $item_timestamp = $time->strftime( "%Y-%m-%dT%H:%M:%S$utc_offset" ); 
    155  
    156     my $author      = $node->{metadata}{username}[0] || $node->{metadata}{host}[0] || 'Anonymous'; 
    157     my $description = $node->{metadata}{comment}[0]  || 'No description given for node'; 
    158  
    159     $description .= " [$author]" if $author; 
    160  
    161     my $version = $node->{version}; 
    162     my $status  = (1 == $version) ? 'new' : 'updated'; 
    163  
    164     my $major_change = $node->{metadata}{major_change}[0]; 
    165        $major_change = 1 unless defined $major_change; 
    166     my $importance = $major_change ? 'major' : 'minor'; 
    167  
    168     my $url = $self->{make_node_url}->($node_name, $version); 
    169  
    170     # make XML-clean 
    171     my $title =  $node_name; 
    172        $title =~ s/&/&amp;/g; 
    173        $title =~ s/</&lt;/g; 
    174        $title =~ s/>/&gt;/g; 
    175  
    176     # Pop the categories into atom:category elements (4.2.2) 
    177     # We can do this because the spec says: 
    178     #   "This specification assigns no meaning to the content (if any)  
    179     #    of this element." 
    180     # TODO: Decide if we should include the "all categories listing" url 
    181     #        as the scheme (URI) attribute? 
    182     my $category_atom = ""; 
    183     if($node->{metadata}->{category}) { 
    184         foreach my $cat (@{ $node->{metadata}->{category} }) { 
    185             $category_atom .= "    <category term=\"$cat\" />\n"; 
     148        $item_timestamp = $time->strftime( "%Y-%m-%dT%H:%M:%S$utc_offset" ); 
     149 
     150        my $author      = $node->{metadata}{username}[0] || $node->{metadata}{host}[0] || 'Anonymous'; 
     151        my $description = $node->{metadata}{comment}[0]  || 'No description given for node'; 
     152 
     153        $description .= " [$author]" if $author; 
     154 
     155        my $version = $node->{version}; 
     156        my $status  = (1 == $version) ? 'new' : 'updated'; 
     157 
     158        my $major_change = $node->{metadata}{major_change}[0]; 
     159        $major_change = 1 unless defined $major_change; 
     160        my $importance = $major_change ? 'major' : 'minor'; 
     161 
     162        my $url = $self->{make_node_url}->($node_name, $version); 
     163 
     164        # make XML-clean 
     165        my $title =  $node_name; 
     166        $title =~ s/&/&amp;/g; 
     167        $title =~ s/</&lt;/g; 
     168        $title =~ s/>/&gt;/g; 
     169 
     170        # Pop the categories into atom:category elements (4.2.2) 
     171        # We can do this because the spec says: 
     172        #   "This specification assigns no meaning to the content (if any)  
     173        #    of this element." 
     174        # TODO: Decide if we should include the "all categories listing" url 
     175        #        as the scheme (URI) attribute? 
     176        my $category_atom = ""; 
     177        if ($node->{metadata}->{category}) { 
     178            foreach my $cat (@{ $node->{metadata}->{category} }) { 
     179                $category_atom .= "    <category term=\"$cat\" />\n"; 
     180            } 
    186181        } 
    187     } 
    188  
    189     # Include geospacial data, if we have it 
    190     my $geo_atom = $self->format_geo($node->{metadata}); 
    191  
    192     # TODO: Find an Atom equivalent of ModWiki, so we can include more info 
     182 
     183        # Include geospacial data, if we have it 
     184        my $geo_atom = $self->format_geo($node->{metadata}); 
     185 
     186        # TODO: Find an Atom equivalent of ModWiki, so we can include more info 
    193187 
    194188     
    195     push @items, qq{ 
     189        push @items, qq{ 
    196190  <entry> 
    197191    <title>$title</title> 
     
    206200}; 
    207201 
    208   } 
    209    
    210   $atom .= join('', @items) . "\n"; 
    211   $atom .= $self->build_feed_end($atom_timestamp); 
    212  
    213   return $atom;    
     202    } 
     203   
     204    $atom .= join('', @items) . "\n"; 
     205    $atom .= $self->build_feed_end($atom_timestamp); 
     206 
     207    return $atom;    
    214208} 
    215209 
     
    224218 
    225219sub generate_node_name_distance_feed { 
    226   my ($self,$atom_timestamp,@nodes) = @_; 
    227  
    228   my $atom = $self->build_feed_start($atom_timestamp); 
    229  
    230   my (@urls, @items); 
    231  
    232   foreach my $node (@nodes) 
    233   { 
    234     my $node_name = $node->{name}; 
    235  
    236     my $url = $self->{make_node_url}->($node_name); 
    237  
    238     # make XML-clean 
    239     my $title =  $node_name; 
    240        $title =~ s/&/&amp;/g; 
    241        $title =~ s/</&lt;/g; 
    242        $title =~ s/>/&gt;/g; 
    243  
    244     # What location stuff do we have? 
    245     my $geo_atom = $self->format_geo($node); 
    246  
    247     push @items, qq{ 
     220    my ($self,$atom_timestamp,@nodes) = @_; 
     221 
     222    my $atom = $self->build_feed_start($atom_timestamp); 
     223 
     224    my (@urls, @items); 
     225 
     226    foreach my $node (@nodes) { 
     227        my $node_name = $node->{name}; 
     228 
     229        my $url = $self->{make_node_url}->($node_name); 
     230 
     231        # make XML-clean 
     232        my $title =  $node_name; 
     233        $title =~ s/&/&amp;/g; 
     234        $title =~ s/</&lt;/g; 
     235        $title =~ s/>/&gt;/g; 
     236 
     237        # What location stuff do we have? 
     238        my $geo_atom = $self->format_geo($node); 
     239 
     240        push @items, qq{ 
    248241  <entry> 
    249242    <title>$title</title> 
     
    254247}; 
    255248 
    256   } 
    257    
    258   $atom .= join('', @items) . "\n"; 
    259   $atom .= $self->build_feed_end($atom_timestamp); 
    260  
    261   return $atom;    
     249    } 
     250   
     251    $atom .= join('', @items) . "\n"; 
     252    $atom .= $self->build_feed_end($atom_timestamp); 
     253 
     254    return $atom;    
    262255} 
    263256 
     
    269262=cut 
    270263 
    271 sub feed_timestamp 
    272 { 
    273   my ($self, $newest_node) = @_; 
    274    
    275   my $time; 
    276   if ($newest_node->{last_modified}) 
    277   { 
    278     $time = Time::Piece->strptime( $newest_node->{last_modified}, $self->{timestamp_fmt} ); 
    279   } else { 
    280     $time = localtime; 
    281   } 
    282  
    283   my $utc_offset = $self->{utc_offset}; 
     264sub feed_timestamp { 
     265    my ($self, $newest_node) = @_; 
     266   
     267    my $time; 
     268    if ($newest_node->{last_modified}) { 
     269        $time = Time::Piece->strptime( $newest_node->{last_modified}, $self->{timestamp_fmt} ); 
     270    } else { 
     271        $time = localtime; 
     272    } 
     273 
     274    my $utc_offset = $self->{utc_offset}; 
    284275     
    285   return $time->strftime( "%Y-%m-%dT%H:%M:%S$utc_offset" ); 
     276    return $time->strftime( "%Y-%m-%dT%H:%M:%S$utc_offset" ); 
    286277} 
    287278 
     
    416407                     'About This Wiki', 
    417408                     'blah blah blah', 
    418                                  $checksum, 
    419                            { 
    420                        comment  => 'Stub page, please update!', 
    421                                    username => 'Fred', 
    422                      } 
     409                         $checksum, 
     410                         { 
     411                           comment  => 'Stub page, please update!', 
     412                           username => 'Fred', 
     413                         } 
    423414  ); 
    424415