[[tag patch]] Here's a patch to the calendar plugin. If you specify an event preprocessor in a post, such as: [[event time="2008-06-24"]] That date will be used instead of the post creation time when displaying the calendar. > Thanks for coming up with a patch.. Let me make sure I understand its > rationalle. > > The meta plugin already allows modifying the page creation time, > which is what the calendar plugin uses. > > So, it seems to me that the use of this patch is for recording events in > the future. You'd not want a page for a future event to claim it was > created in the future. I suppose you could also use it for events in the > past, if you didn't want to change the creation time for some reason. > (Perhaps you're doing a calendar of historical events, for example.) > > Accurate? --[[Joey]] >> Thanks for the feedback. Thinking about what you said ... I suspect my patch >> doesn't belong in the calendar plugin, which does a very specific thing >> (create a calendar to show when blog posts were created). I'm really angling >> toward an event calendar (as mentioned on [[todo/plugin]]). I'd like to preserve >> the page creation time - which is useful and important information in its own right >> - and be able to generate a calendar with links to particular posts that will show >> up on the calendar based on an arbitrary date. Perhaps this should be re-considered >> as a separate plugin? --[[Jamie]] >>> I think it makes sense to have only one calendar, if possible. >>> I think your event stuff is fine, the only thing we might want to add >>> is a config option for the calendar, to control whether it looks at the >>> event date, or the creation date. --[[Joey]] >>>> Ok - I can work on that. One question - the existing calendar module has it's own >>>> functions for building an html display of a calendar. HTML::CalendarMonth seems to >>>> provide that functionality. My instincts are to rip out the code in the calendar plugin >>>> and use the existing module. On the other hand, that creates added dependencies. >>>> Suggestions anyone? --[[Jamie]] >>>>> I'm all for ripping code out of ikiwiki where CPAN can be used, as >>>>> long as the resulting code and html are good. --[[Joey]] --- calendar.pm.orig 2008-06-24 22:36:09.000000000 -0400 +++ calendar.pm 2008-06-24 22:51:11.000000000 -0400 @@ -23,6 +23,7 @@ use IkiWiki 2.00; use Time::Local; use POSIX; +use Date::Parse; my %cache; my %linkcache; @@ -32,6 +33,7 @@ sub import { #{{{ hook(type => "needsbuild", id => "version", call => \&needsbuild); hook(type => "preprocess", id => "calendar", call => \&preprocess); + hook(type => "preprocess", id => "event", call => \&preprocess_event); } #}}} sub is_leap_year (@) { #{{{ @@ -304,6 +306,19 @@ return $calendar; } #}}} +sub preprocess_event (@) { #{{{ + my %params=@_; + # if now time is given, use now + $params{time} = localtime unless defined $params{time}; + + my $timestamp = str2time($params{time}); + if ( defined $timestamp) { + $pagestate{$params{page}}{event}{mtime}=$timestamp; + } + # remove the event block entirely + return ""; +} #}} + sub preprocess (@) { #{{{ my %params=@_; $params{pages} = "*" unless defined $params{pages}; @@ -355,7 +370,13 @@ if (! defined $cache{$pagespec}) { foreach my $p (keys %pagesources) { next unless pagespec_match($p, $pagespec); - my $mtime = $IkiWiki::pagectime{$p}; + my $mtime; + # use time defined by event preprocessor if it's available + if (defined $pagestate{$p}{event}{mtime}) { + $mtime = $pagestate{$p}{event}{mtime}; + } else { + $mtime = $IkiWiki::pagectime{$p}; + } my $src = $pagesources{$p}; my @date = localtime($mtime); my $mday = $date[3];