3 Here's a patch to the calendar plugin. If you specify an event preprocessor in a post, such as:
5 [[event time="2008-06-24"]]
7 That date will be used instead of the post creation time when displaying the calendar.
9 > Thanks for coming up with a patch.. Let me make sure I understand its
12 > The meta plugin already allows modifying the page creation time,
13 > which is what the calendar plugin uses.
15 > So, it seems to me that the use of this patch is for recording events in
16 > the future. You'd not want a page for a future event to claim it was
17 > created in the future. I suppose you could also use it for events in the
18 > past, if you didn't want to change the creation time for some reason.
19 > (Perhaps you're doing a calendar of historical events, for example.)
21 > Accurate? --[[Joey]]
23 >> Thanks for the feedback. Thinking about what you said ... I suspect my patch
24 >> doesn't belong in the calendar plugin, which does a very specific thing
25 >> (create a calendar to show when blog posts were created). I'm really angling
26 >> toward an event calendar (as mentioned on [[todo/plugin]]). I'd like to preserve
27 >> the page creation time - which is useful and important information in its own right
28 >> - and be able to generate a calendar with links to particular posts that will show
29 >> up on the calendar based on an arbitrary date. Perhaps this should be re-considered
30 >> as a separate plugin?
32 --- calendar.pm.orig 2008-06-24 22:36:09.000000000 -0400
33 +++ calendar.pm 2008-06-24 22:51:11.000000000 -0400
44 hook(type => "needsbuild", id => "version", call => \&needsbuild);
45 hook(type => "preprocess", id => "calendar", call => \&preprocess);
46 + hook(type => "preprocess", id => "event", call => \&preprocess_event);
49 sub is_leap_year (@) { #{{{
54 +sub preprocess_event (@) { #{{{
56 + # if now time is given, use now
57 + $params{time} = localtime unless defined $params{time};
59 + my $timestamp = str2time($params{time});
60 + if ( defined $timestamp) {
61 + $pagestate{$params{page}}{event}{mtime}=$timestamp;
63 + # remove the event block entirely
67 sub preprocess (@) { #{{{
69 $params{pages} = "*" unless defined $params{pages};
71 if (! defined $cache{$pagespec}) {
72 foreach my $p (keys %pagesources) {
73 next unless pagespec_match($p, $pagespec);
74 - my $mtime = $IkiWiki::pagectime{$p};
76 + # use time defined by event preprocessor if it's available
77 + if (defined $pagestate{$p}{event}{mtime}) {
78 + $mtime = $pagestate{$p}{event}{mtime};
80 + $mtime = $IkiWiki::pagectime{$p};
82 my $src = $pagesources{$p};
83 my @date = localtime($mtime);