X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/f35b62d4547c2c42373584016bcbf97472e3ae3a..e4516078cc7c5e9148a0f079e3d9a71eeccd4155:/IkiWiki/Plugin/calendar.pm diff --git a/IkiWiki/Plugin/calendar.pm b/IkiWiki/Plugin/calendar.pm index 65ed16ed4..45617afe8 100644 --- a/IkiWiki/Plugin/calendar.pm +++ b/IkiWiki/Plugin/calendar.pm @@ -1,4 +1,4 @@ -#! /usr/bin/perl +#!/usr/bin/perl # Copyright (c) 2006, 2007 Manoj Srivastava # # This program is free software; you can redistribute it and/or modify @@ -108,20 +108,20 @@ sub month_days { sub build_affected { my %affected; - my ($ayear, $amonth, $valid); - - foreach my $year (keys %changed) { - ($ayear, $valid) = nextyear($year, $config{archivebase}); - $affected{calendarlink($ayear)} = sprintf(gettext("building calendar for %s, its previous or next year has changed"), $ayear) if ($valid); - ($ayear, $valid) = previousyear($year, $config{archivebase}); - $affected{calendarlink($ayear)} = sprintf(gettext("building calendar for %s, its previous or next year has changed"), $ayear) if ($valid); - foreach my $month (keys $changed{$year}) { - ($ayear, $amonth, $valid) = nextmonth($year, $month, $config{archivebase}); - $affected{calendarlink($ayear, sprintf("%02d", $amonth))} = sprintf(gettext("building calendar for %s/%s, its previous or next month has changed"), $amonth, $ayear) if ($valid); - ($ayear, $amonth, $valid) = previousmonth($year, $month, $config{archivebase}); - $affected{calendarlink($ayear, sprintf("%02d", $amonth))} = sprintf(gettext("building calendar for %s/%s, its previous or next month has changed"), $amonth, $ayear) if ($valid); - } - } + my ($ayear, $amonth, $valid); + + foreach my $year (keys %changed) { + ($ayear, $valid) = nextyear($year, $config{archivebase}); + $affected{calendarlink($ayear)} = sprintf(gettext("building calendar for %s, its previous or next year has changed"), $ayear) if ($valid); + ($ayear, $valid) = previousyear($year, $config{archivebase}); + $affected{calendarlink($ayear)} = sprintf(gettext("building calendar for %s, its previous or next year has changed"), $ayear) if ($valid); + foreach my $month (keys %{$changed{$year}}) { + ($ayear, $amonth, $valid) = nextmonth($year, $month, $config{archivebase}); + $affected{calendarlink($ayear, sprintf("%02d", $amonth))} = sprintf(gettext("building calendar for %s/%s, its previous or next month has changed"), $amonth, $ayear) if ($valid); + ($ayear, $amonth, $valid) = previousmonth($year, $month, $config{archivebase}); + $affected{calendarlink($ayear, sprintf("%02d", $amonth))} = sprintf(gettext("building calendar for %s/%s, its previous or next month has changed"), $amonth, $ayear) if ($valid); + } + } return %affected; } @@ -141,7 +141,9 @@ sub autocreate { $template->param(month => $month) if defined $month; $template->param(pagespec => $config{archive_pagespec}); + no warnings 'once'; my $dir = $IkiWiki::Plugin::transient::transientdir; + use warnings; writefile($pagefile, $dir, $template->output); } @@ -171,8 +173,6 @@ sub gencalendaryear { my $year = shift; my %params = @_; - return unless $config{calendar_autocreate}; - # Building year page my $page = calendarlink($year); my $pagefile = newpagefile($page, $config{default_pageext}); @@ -195,7 +195,7 @@ sub gencalendaryear { } # Filling potential gaps in years (e.g. calendar goes from 2010 to 2014, - # and we just added year 2005. We have to had years 2006 to 2009). + # and we just added year 2005. We have to add years 2006 to 2009). return if $params{norecurse}; if ($wikistate{calendar}{minyear} > $year) { foreach my $other ($year + 1 .. $wikistate{calendar}{minyear} - 1) { @@ -219,9 +219,13 @@ sub gencalendaryear { } sub previousmonth($$$) { - my $year = shift; - my $month = shift; - my $archivebase = shift; + my $year = shift; + my $month = shift; + my $archivebase = shift; + + if (not exists $wikistate{calendar}{minyear}) { + $wikistate{calendar}{minyear} = $year; + } my $pmonth = $month; my $pyear = $year; @@ -230,16 +234,20 @@ sub previousmonth($$$) { if ($pmonth == 0) { $pyear -= 1; $pmonth = 12; - return ($pyear, $pmonth, 0) unless $pyear >= $wikistate{calendar}{minyear}; + return ($pyear, $pmonth, 0) unless $pyear >= $wikistate{calendar}{minyear}; } } - return ($pyear, $pmonth, 1); + return ($pyear, $pmonth, 1); } sub nextmonth($$$) { - my $year = shift; - my $month = shift; - my $archivebase = shift; + my $year = shift; + my $month = shift; + my $archivebase = shift; + + if (not exists $wikistate{calendar}{maxyear}) { + $wikistate{calendar}{maxyear} = $year; + } my $nmonth = $month; my $nyear = $year; @@ -248,34 +256,34 @@ sub nextmonth($$$) { if ($nmonth == 13) { $nyear += 1; $nmonth = 1; - return ($nyear, $nmonth, 0) unless $nyear <= $wikistate{calendar}{maxyear}; + return ($nyear, $nmonth, 0) unless $nyear <= $wikistate{calendar}{maxyear}; } } - return ($nyear, $nmonth, 1); + return ($nyear, $nmonth, 1); } sub previousyear($$) { - my $year = shift; - my $archivebase = shift; - - my $pyear = $year - 1; - while (not exists $pagesources{"$archivebase/$pyear"}) { - $pyear -= 1; - return ($pyear, 0) unless ($pyear >= $wikistate{calendar}{minyear}); - } - return ($pyear, 1); + my $year = shift; + my $archivebase = shift; + + my $pyear = $year - 1; + while (not exists $pagesources{"$archivebase/$pyear"}) { + $pyear -= 1; + return ($pyear, 0) unless ($pyear >= $wikistate{calendar}{minyear}); + } + return ($pyear, 1); } sub nextyear($$) { - my $year = shift; - my $archivebase = shift; - - my $nyear = $year + 1; - while (not exists $pagesources{"$archivebase/$nyear"}) { - $nyear += 1; - return ($nyear, 0) unless ($nyear <= $wikistate{calendar}{maxyear}); - } - return ($nyear, 1); + my $year = shift; + my $archivebase = shift; + + my $nyear = $year + 1; + while (not exists $pagesources{"$archivebase/$nyear"}) { + $nyear += 1; + return ($nyear, 0) unless ($nyear <= $wikistate{calendar}{maxyear}); + } + return ($nyear, 1); } sub format_month (@) { @@ -303,9 +311,9 @@ sub format_month (@) { my $archivebase = 'archives'; $archivebase = $config{archivebase} if defined $config{archivebase}; $archivebase = $params{archivebase} if defined $params{archivebase}; - - my ($pyear, $pmonth, $pvalid) = previousmonth($params{year}, $params{month}, $archivebase); - my ($nyear, $nmonth, $nvalid) = nextmonth($params{year}, $params{month}, $archivebase); + + my ($pyear, $pmonth, $pvalid) = previousmonth($params{year}, $params{month}, $archivebase); + my ($nyear, $nmonth, $nvalid) = nextmonth($params{year}, $params{month}, $archivebase); # Add padding. $pmonth=sprintf("%02d", $pmonth); @@ -481,7 +489,6 @@ sub format_year (@) { my $mtime = $IkiWiki::pagectime{$p}; my @date = localtime($mtime); my $month = $date[4] + 1; - my $year = $date[5] + 1900; $post_months[$month]++; } @@ -492,8 +499,8 @@ sub format_year (@) { $archivebase = $config{archivebase} if defined $config{archivebase}; $archivebase = $params{archivebase} if defined $params{archivebase}; - my ($pyear, $pvalid) = previousyear($params{year}, $archivebase); - my ($nyear, $nvalid) = nextyear($params{year}, $archivebase); + my ($pyear, $pvalid) = previousyear($params{year}, $archivebase); + my ($nyear, $nvalid) = nextyear($params{year}, $archivebase); my $thisyear = $now[5]+1900; my $future_month = 0; @@ -628,10 +635,7 @@ sub preprocess (@) { } $params{month} = sprintf("%02d", $params{month}); - if (not exists $changed{$params{year}}) { - $changed{$params{year}} = (); - } - $changed{$params{year}}{$params{month}} = 1; + $changed{$params{year}}{$params{month}} = 1; if ($params{type} eq 'month' && $params{year} == $thisyear && $params{month} == $thismonth) { @@ -717,6 +721,8 @@ sub scan (@) { my %params=@_; my $page=$params{page}; + return unless $config{calendar_autocreate}; + # Check if year pages have to be generated if (pagespec_match($page, $config{archive_pagespec})) { my @ctime = localtime($IkiWiki::pagectime{$page});