diff options
author | Joey Hess <joey@kitenet.net> | 2010-05-08 12:52:19 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2010-05-08 12:52:19 -0400 |
commit | fd817f9ac3c074622fe7076516dca61199b09372 (patch) | |
tree | 64275aaf1b9a10ebde06c17e840289f9d6756262 | |
parent | 0f778849c6df237f2219de6e1fa237cf2bc9955f (diff) | |
download | ikiwiki-fd817f9ac3c074622fe7076516dca61199b09372.tar ikiwiki-fd817f9ac3c074622fe7076516dca61199b09372.tar.gz |
calendar: nextchange calculation bugfix
If a page had multiple calendars, the last one won and set nextchange.
That's wrong; the calendar that needs to next update soonest should win.
-rw-r--r-- | IkiWiki/Plugin/calendar.pm | 34 |
1 files changed, 22 insertions, 12 deletions
diff --git a/IkiWiki/Plugin/calendar.pm b/IkiWiki/Plugin/calendar.pm index 02f41070e..d43320cac 100644 --- a/IkiWiki/Plugin/calendar.pm +++ b/IkiWiki/Plugin/calendar.pm @@ -373,6 +373,16 @@ EOF return $calendar; } +sub setnextchange ($$) { + my $page=shift; + my $timestamp=shift; + + if (! exists $pagestate{$page}{calendar}{nextchange} || + $pagestate{$page}{calendar}{nextchange} > $timestamp) { + $pagestate{$page}{calendar}{nextchange}=$timestamp; + } +} + sub preprocess (@) { my %params=@_; @@ -402,18 +412,18 @@ sub preprocess (@) { if ($params{type} eq 'month' && $params{year} == $thisyear && $params{month} == $thismonth) { # calendar for current month, updates next midnight - $pagestate{$params{destpage}}{calendar}{nextchange}=($time + setnextchange($params{destpage}, ($time + (60 - $now[0]) # seconds + (59 - $now[1]) * 60 # minutes + (23 - $now[2]) * 60 * 60 # hours - ); + )); } elsif ($params{type} eq 'month' && (($params{year} == $thisyear && $params{month} > $thismonth) || $params{year} > $thisyear)) { # calendar for upcoming month, updates 1st of that month - $pagestate{$params{destpage}}{calendar}{nextchange}= - timelocal(0, 0, 0, 1, $params{month}-1, $params{year}); + setnextchange($params{destpage}, + timelocal(0, 0, 0, 1, $params{month}-1, $params{year})); } elsif (($params{type} eq 'year' && $params{year} == $thisyear) || $relativemonth) { @@ -421,24 +431,24 @@ sub preprocess (@) { # Any calendar relative to the current month also updates # then. if ($thismonth < 12) { - $pagestate{$params{destpage}}{calendar}{nextchange}= - timelocal(0, 0, 0, 1, $thismonth+1-1, $params{year}); + setnextchange($params{destpage}, + timelocal(0, 0, 0, 1, $thismonth+1-1, $params{year})); } else { - $pagestate{$params{destpage}}{calendar}{nextchange}= - timelocal(0, 0, 0, 1, 1-1, $params{year}+1); + setnextchange($params{destpage}, + timelocal(0, 0, 0, 1, 1-1, $params{year}+1)); } } elsif ($relativeyear) { # Any calendar relative to the current year updates 1st # of next year. - $pagestate{$params{destpage}}{calendar}{nextchange}= - timelocal(0, 0, 0, 1, 1-1, $thisyear+1); + setnextchange($params{destpage}, + timelocal(0, 0, 0, 1, 1-1, $thisyear+1)); } elsif ($params{type} eq 'year' && $params{year} > $thisyear) { # calendar for upcoming year, updates 1st of that year - $pagestate{$params{destpage}}{calendar}{nextchange}= - timelocal(0, 0, 0, 1, 1-1, $params{year}); + setnextchange($params{destpage}, + timelocal(0, 0, 0, 1, 1-1, $params{year})); } else { # calendar for past month or year, does not need |