1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
package Echolot::Thesaurus;
# (c) 2002 Peter Palfrader <peter@palfrader.org>
# $Id: Thesaurus.pm,v 1.1 2002/07/06 00:50:27 weasel Exp $
#
=pod
=head1 Name
Echolot::Thesaurus - build thesaurus pages
=head1 DESCRIPTION
This package provides necessary functions for the thesaurus.
=cut
use strict;
use warnings;
use Carp qw{cluck};
use English;
sub build_thesaurus() {
return 1 unless Echolot::Config::get()->{'thesaurus'};
my $dir = Echolot::Config::get()->{'thesaurusdir'};
opendir(DIR, $dir) or
cluck ("Cannot open '$dir': $!"),
return 0;
my @files = grep { ! /^\./ } readdir(DIR);
closedir(DIR);
my $data;
for my $filename (@files) {
my ($id, $what) = $filename =~ /^(\d+)-(adminkey|conf|help|key|stats)$/;
next unless (defined $id && defined $what);
my $remailer = Echolot::Globals::get()->{'storage'}->get_address_by_id($id);
next return 0 unless defined $remailer;
my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
$atime,$mtime,$ctime,$blksize,$blocks)
= stat($dir.'/'.$filename);
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday)
= gmtime($mtime);
my $date = sprintf("%04d-%02d-%02d %02d:%02d",
$year+1900, $mon+1, $mday,
$hour, $min);
$data->{$remailer->{'address'}}->{$what} = {
'href' => $filename,
'date' => $date,
};
};
for my $addr (keys (%$data)) {
my $nick = Echolot::Globals::get()->{'storage'}->get_nick($addr);
$data->{$addr}->{'nick'} = defined $nick ? $nick : 'N/A';
};
my $file = Echolot::Config::get()->{'thesaurusindexfile'};
open (F, ">$file") or
cluck ("Cannot open '$file': $!"),
return 0;
print F '<html><head><title>Thesaurus</title></head><body><h1>Thesaurus</h1><table border=1>'."\n";
print F "<tr><tr><th>nick</th><th>Address</th><th>conf</th><th>help</th><th>key</th><th>stats</th><th>adminkey</th></tr>\n";
for my $addr (sort { $data->{$a}->{'nick'} cmp $data->{$b}->{'nick'} } keys (%$data)) {
printf F "<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>\n",
$data->{$addr}->{'nick'},
$addr,
defined ($data->{$addr}->{'conf'}) ?
sprintf('<a href="%s">%s</a>', $data->{$addr}->{'conf'}->{'href'}, $data->{$addr}->{'conf'}->{'date'}) : 'N/A',
defined ($data->{$addr}->{'help'}) ?
sprintf('<a href="%s">%s</a>', $data->{$addr}->{'help'}->{'href'}, $data->{$addr}->{'help'}->{'date'}) : 'N/A',
defined ($data->{$addr}->{'key'}) ?
sprintf('<a href="%s">%s</a>', $data->{$addr}->{'key'}->{'href'}, $data->{$addr}->{'key'}->{'date'}) : 'N/A',
defined ($data->{$addr}->{'stats'}) ?
sprintf('<a href="%s">%s</a>', $data->{$addr}->{'stats'}->{'href'}, $data->{$addr}->{'stats'}->{'date'}) : 'N/A',
defined ($data->{$addr}->{'adminkey'}) ?
sprintf('<a href="%s">%s</a>', $data->{$addr}->{'adminkey'}->{'href'}, $data->{$addr}->{'adminkey'}->{'date'}) : 'N/A';
};
print F '</table></body>';
close (F);
};
1;
# vim: set ts=4 shiftwidth=4:
|