1 package Onis::Plugins::Weekdays;
6 use Onis::Config (qw(get_config));
7 use Onis::Html (qw(get_filehandle));
8 use Onis::Language (qw(translate));
9 use Onis::Data::Core (qw(register_plugin get_main_nick nick_to_ident nick_to_name));
10 use Onis::Data::Persistent ();
12 register_plugin ('TEXT', \&add);
13 register_plugin ('ACTION', \&add);
14 register_plugin ('OUTPUT', \&output);
16 our $LongtermLastSeen = Onis::Data::Persistent->new ('LongtermLastSeen', 'nick', 'day');
17 our $LongtermCache = Onis::Data::Persistent->new ('LongtermCache', 'key', qw(time0 time1 time2 time3));
19 =head1 CONFIGURATION OPTIONS
23 =item B<vertical_images>: I<image0>, I<image1>, I<image2>, I<image3>;
25 Sets the images to use for vertical graphs.
29 our @VImages = get_config ('vertical_images');
30 if (scalar (@VImages) != 4)
32 @VImages = qw#images/ver0n.png images/ver1n.png images/ver2n.png images/ver3n.png#;
35 =item B<longterm_days>: I<31>;
37 Sets the number of days displayed by this plugin.
41 our $DisplayDays = 31;
42 if (get_config ('longterm_days'))
44 my $tmp = get_config ('longterm_days');
46 $DisplayDays = $tmp if ($tmp);
54 print STDERR $/, __FILE__, ": $VERSION" if ($::DEBUG);
61 my $nick = $data->{'nick'};
62 my $time = $data->{'epoch'};
63 my $hour = int ($data->{'hour'} / 6);
64 my $chars = length ($data->{'text'});
65 my $day = int ($time / 86400);
66 my $index = ($day * 4) + $hour;
68 my ($lastseen) = $LongtermLastSeen->get ($nick);
71 for (my $i = $lastseen; $i < $day; $i++)
73 my $last = $i - $DisplayDays;
74 $LongtermCache->del ($nick . ':' . $last);
78 $LongtermCache->put ($nick . ':' . $i, qw(0 0 0 0));
82 my @data = $LongtermCache->get ($nick . ':' . $day);
83 @data = (qw(0 0 0 0)) unless (@data);
84 $data[$hour] += $chars;
85 $LongtermCache->put ($nick . ':' . $day, @data);
87 $LongtermLastSeen->put ($nick, $day);
92 for ($WeekdayCache->keys ())
95 my $main = $nick eq '<TOTAL>' ? '<TOTAL>' : get_main_nick ($nick);
96 my @data = $WeekdayCache->get ($nick);
98 if (!defined ($WeekdayData->{$main}))
100 $WeekdayData->{$main} =
112 for (my $i = 0; $i < 7; $i++)
114 my $day = $Weekdays[$i];
115 for (my $j = 0; $j < 4; $j++)
117 my $idx = ($i * 4) + $j;
118 $WeekdayData->{$main}{$day}[$j] += $data[$idx];
127 return (undef) unless (%$WeekdayData);
131 [1, 'mon', 'Monday'],
132 [2, 'tue', 'Tuesday'],
133 [3, 'wed', 'Wednesday'],
134 [4, 'thu', 'Thursday'],
135 [5, 'fri', 'Friday'],
136 [6, 'sat', 'Saturday'],
140 my $data = $WeekdayData->{'<TOTAL>'};
142 my $fh = get_filehandle ();
150 my ($num, $abbr, $name) = @$_;
152 for (my $i = 0; $i < 4; $i++)
154 $max = $data->{$abbr}[$i] if ($max < $data->{$abbr}[$i]);
155 $total += $data->{$abbr}[$i];
159 $bar_factor = $BarHeight / $max;
161 print $fh qq#<table class="plugin weekdays">\n <tr class="bars">\n#;
164 my ($num, $abbr, $name) = @$_;
165 for (my $i = 0; $i < 4; $i++)
167 my $num = $data->{$abbr}[$i];
168 my $height = sprintf ("%.2f", (95 * $num / $max));
169 my $img = $VImages[$i];
171 print $fh qq# <td class="bar vertical $abbr">#,
172 qq(<img src="$img" alt="" class="first last" style="height: ${height}%;" /></td>\n);
175 print $fh qq( </tr>\n <tr class="counter">\n);
178 my ($num, $abbr, $name) = @$_;
179 my $sum = $data->{$abbr}[0] + $data->{$abbr}[1] + $data->{$abbr}[2] + $data->{$abbr}[3];
180 my $pct = sprintf ("%.1f", (100 * $sum / $total));
181 print $fh qq( <td colspan="4" class="counter $abbr">$pct%</td>\n);
183 print $fh qq( </tr>\n <tr class="numeration">\n);
186 my ($num, $abbr, $name) = @$_;
187 print $fh qq( <td colspan="4" class="numeration $abbr">$name</td>\n);
189 print $fh " </tr>\n</table>\n\n";