X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=gavinc%2Fstorydate;h=f8c724689f5d847fe7983d4d82002a1e9cceb5bf;hb=1c2ded0e43a7f208694862d89c38f8c83688ff61;hp=35c060bb1bc9f6d501f3a55f96c73e5843b2fb05;hpb=2ef9a451e937ef9fb4708c5ce0e7b33d51693e3d;p=matthijs%2Fupstream%2Fblosxom-plugins.git diff --git a/gavinc/storydate b/gavinc/storydate index 35c060b..f8c7246 100644 --- a/gavinc/storydate +++ b/gavinc/storydate @@ -2,13 +2,14 @@ # Author(s): Gavin Carr # (based on work by Frank Hecker # and Bob Schumaker ) -# Version: 0.001000 +# Version: 0.003000 # Documentation: See the bottom of this file or type: perldoc storydate package storydate; use strict; +use vars qw(%config); use File::stat; # Uncomment next line to enable debug output (don't uncomment debug() lines) @@ -16,10 +17,13 @@ use File::stat; # --- Configuration variables ----- +%config = (); + # Perl modules to use for strftime, in search order -my @strftime_modules = qw(Time::Piece Date::Format POSIX); +$config{strftime_modules} = [ qw(Time::Piece Date::Format POSIX) ]; # --------------------------------- +# __END_CONFIG__ # Package variables use vars qw( @@ -29,11 +33,13 @@ use vars qw( $story_mtime_iso8601 $now_rfc822 $now_iso8601 + $latest_rfc822 + $latest_iso8601 %strftime_formats ); %strftime_formats = ( - rfc822 => "%a, %d %b %Y %T %z", + rfc822 => "%a, %d %b %Y %T %z", # ISO 8601 format (localtime, including time zone offset) # Format is YYYY-MM-DDThh:mm:ssTZD per http://www.w3.org/TR/NOTE-datetime iso8601 => "%Y-%m-%dT%T%z", @@ -48,6 +54,22 @@ sub start { 1; } +sub filter { + my ($pkg, $files, $others) = @_; + + # Find the latest publish date in our stories + my $latest_ts = 0; + for (values %$files) { + $latest_ts = $_ if $_ > $latest_ts; + } + + # Format the 'latest' variables + $latest_rfc822 = format_date('rfc822', $latest_ts); + $latest_iso8601 = format_date('iso8601', $latest_ts); + + return 1; +} + sub story { my ($pkg, $path, $filename, $story_ref, $title_ref, $body_ref) = @_; @@ -109,7 +131,7 @@ sub format_date { return $date; } -# strftime wrapper, using the first strftime() it finds in @strftime_modules +# strftime wrapper, using the first strftime() it finds in 'strftime_modules' my %cache = (); my $strftime_module = ''; sub strftime { @@ -126,7 +148,7 @@ sub strftime { # Search for a strftime module, and load if (! $strftime_module) { - for my $module (@strftime_modules) { + for my $module (@{$config{strftime_modules}}) { if (eval "require $module") { $strftime_module = $module; # debug(2, "strftime_module: $strftime_module"); @@ -206,6 +228,14 @@ The current time in RFC822 format. The current time in ISO8601 format. +=item $latest_rfc822 + +The latest story publication date, in RFC822 format. + +=item $latest_iso8601 + +The latest story publication date, in ISO8601 format. + =back In addition, storydate defines a few subroutines that might be useful