# Blosxom Plugin: most_recent -*-cperl-*- # Author(s): Jason Blevins # Version: 2007-11-17 # Last Modified: November 24, 2007 13:50 EST # Documentation: See the bottom of this file or type: perldoc config package most_recent; use strict; use File::Basename; use Time::localtime; # --- Configurable variables ----- # Number of entries to show. my $num_entries = 10; # -------------------------------- use vars qw!$most_recent $most_recent_list $category_recent!; my @all_entries; my %month2num = (nil=>'00', Jan=>'01', Feb=>'02', Mar=>'03', Apr=>'04', May=>'05', Jun=>'06', Jul=>'07', Aug=>'08', Sep=>'09', Oct=>'10', Nov=>'11', Dec=>'12'); sub start { 1; } sub head { my($pkg, $currentdir, $head_ref) = @_; my %all_mtime = (); my %results = (); my %results_list = (); for my $entry (keys %entries_cache_meta::cache) { $all_mtime{$entry} = $entries_cache_meta::cache{$entry}{'mtime'}; } @all_entries = sort { $all_mtime{$b} <=> $all_mtime{$a} } keys %all_mtime; my @cat_entries = grep(/$currentdir/, @all_entries); my %escape = ('<'=>'<', '>'=>'>', '&'=>'&', '"'=>'"'); my $escape_re = join '|' => keys %escape; foreach my $entry (@all_entries) { my ($file, $directory, $file_ext) = fileparse($entry, ".$blosxom::file_extension"); my $url = "$directory$file"; $url =~ s/$blosxom::datadir/$blosxom::url/g; # JRB # $url .= "." . $blosxom::default_flavour; $url =~ s/0index$//; my $title = $entries_cache_meta::cache{$entry}{'title'}; my $desc = $entries_cache_meta::cache{$entry}{'description'}; $desc =~ s/($escape_re)/$escape{$1}/g; my ($dw,$mo,$mo_num,$da,$ti,$yr) = nice_date($entries_cache_meta::cache{$entry}{'mtime'}); $results_list{$entry} = "
  • $title
  • \n"; $results{$entry} = "
  • $yr-$mo_num-$da $title - $entries_cache_meta::cache{$entry}{'description'}
  • \n"; } $most_recent_list = ''; $most_recent = ''; foreach my $entry (@all_entries[0..$num_entries-1]) { $most_recent_list .= $results_list{$entry} . "\n"; $most_recent .= $results{$entry} . "\n"; } $category_recent = ''; foreach my $entry (@cat_entries[0..$num_entries-1]) { $category_recent .= $results{$entry} . "\n"; } } sub in_category { my ($self, $attr, $content) = @_; my $category = $attr->{category} || "/"; my @cat_entries = grep(/$category/, @all_entries); my $count = 0; my $results = ''; my $max_entries = $attr->{count} || $num_entries; foreach my $entry (@cat_entries) { if ($count < $max_entries) { $count += 1; my ($file, $directory, $file_ext) = fileparse($entry, ".$blosxom::file_extension"); my $url = "$directory$file"; $url =~ s/$blosxom::datadir/$blosxom::url/g; # JRB # $url .= "." . $blosxom::default_flavour; $url =~ s/0index$//; my $title = $entries_cache_meta::cache{$entry}{'title'}; my ($dw,$mo,$mo_num,$da,$ti,$yr) = nice_date($entries_cache_meta::cache{$entry}{'mtime'}); $results .= "
  • $yr-$mo_num-$da $title - $entries_cache_meta::cache{$entry}{'description'}
  • \n"; } } return $results; } sub nice_date { my($unixtime) = @_; my $c_time = ctime($unixtime); my($dw,$mo,$da,$ti,$yr) = ( $c_time =~ /(\w{3}) +(\w{3}) +(\d{1,2}) +(\d{2}:\d{2}):\d{2} +(\d{4})$/ ); $da = sprintf("%02d", $da); my $mo_num = $month2num{$mo}; return ($dw,$mo,$mo_num,$da,$ti,$yr); } 1; =head1 NAME Blosxom Plugin: most_recent =head1 SYNOPSIS Depends on the entries_cache_meta plugin. Insert $most_recent::most_recent or $most_recent::category_recent in any flavour template. =head1 AUTHOR Jason Blevins jrblevin@sdf.lonestar.org http://jblevins.org =head1 Changelog 2007-11-24 Add (escaped) page descriptions to title attribute of links. 2007-11-19 Added in_category function. 2007-11-17 Initial version.