# Blosxom 3.0 plugin timestamp 0+2i # Blosxom2.0のenties_indexプラグインのようなもの + 日付エディット機能も # 2004-07-01 package Blosxom::timestamp; use Data::Dumper; use Time::Local; sub run { my $blosxom = shift; my $files; my $fh = $blosxom->{state}->{filehandle}; my $statefile = "$blosxom->{settings}->{state_dir}/.timestamp.cache"; # ファイルを開く if ( $fh->open($statefile) ) { my $index = join '', <$fh>; $fh->close; $index =~ /\$VAR1 = \{/ and eval($index) and !$@ and $files = $VAR1; } # 再構築の調査 (part1) ファイルが消えてたら再構築 my $reindex = 0; for my $file (keys %{$files}) { -f $file or do { $reindex++; delete $files->{$file} }; } # POSTされてたら書き換え $blosxom->{cgi}->request_method eq 'POST' and $blosxom->{request}->{flavour} eq "idxedit" and edit($blosxom, $files) and $reindex++; # entriesを書き換えながら再構築の調査 (part2) 新しいファイルがあったら再構築 for my $file(keys %{$blosxom->{entries}}){ $files->{$file} ? $blosxom->{entries}->{$file}->{mtime} = $files->{$file} : do {$files->{$file} = $blosxom->{entries}->{$file}->{mtime}; $reindex++;}; } # 再構築 if ( $reindex ) { if( $fh->open("> $blosxom->{settings}->{state_dir}/.timestamp.cache" ) ) { $fh->print(Dumper $files); $fh->close; } else { warn "couldn't > $blosxom->{settings}->{state_dir}/.timestamp.cache: $!\n"; } } #おまけ $blosxom->{settings}->{'timestamp::link'} = defined $blosxom->{request}->{entry} ? $blosxom->{request}->{entry}.'.idxedit' : 'index.idxedit'; 1; } sub edit{ my $blosxom = shift; my $files = shift; my @tms; for my $key ('sec', 'min','hr24','da','mo_num','yr'){ push @tms, $blosxom->{cgi}->param($key); } $tms[4]--; $files->{$blosxom->{cgi}->param('id')} = timelocal(@tms); 1; } 1