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 $WeekdayCache = Onis::Data::Persistent->new ('WeekdayCache', 'nick',
26 our $WeekdayData = {};
27 our @Weekdays = (qw(sun mon tue wed thu fri sat));
30 if (get_config ('bar_height'))
32 my $tmp = get_config ('bar_height');
34 $BarHeight = $tmp if ($tmp >= 10);
37 our @VImages = get_config ('vertical_images');
38 if (scalar (@VImages) != 4)
40 @VImages = qw#images/ver0n.png images/ver1n.png images/ver2n.png images/ver3n.png#;
44 print STDERR $/, __FILE__, ": $VERSION" if ($::DEBUG);
51 my $nick = $data->{'nick'};
52 my $time = $data->{'epoch'};
53 my $hour = int ($data->{'hour'} / 6);
54 my $chars = length ($data->{'text'});
55 my $day = (localtime ($time))[6];
56 my $index = ($day * 4) + $hour;
58 my @data = $WeekdayCache->get ($nick);
59 @data = (qw(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) unless (@data);
60 $data[$index] += $chars;
61 $WeekdayCache->put ($nick, @data);
63 @data = $WeekdayCache->get ('<TOTAL>');
64 @data = (qw(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) unless (@data);
65 $data[$index] += $chars;
66 $WeekdayCache->put ('<TOTAL>', @data);
71 for ($WeekdayCache->keys ())
74 my $main = $nick eq '<TOTAL>' ? '<TOTAL>' : get_main_nick ($nick);
75 my @data = $WeekdayCache->get ($nick);
77 if (!defined ($WeekdayData->{$main}))
79 $WeekdayData->{$main} =
91 for (my $i = 0; $i < 7; $i++)
93 my $day = $Weekdays[$i];
94 for (my $j = 0; $j < 4; $j++)
96 my $idx = ($i * 4) + $j;
97 $WeekdayData->{$main}{$day}[$j] += $data[$idx];
106 return (undef) unless (%$WeekdayData);
110 [1, 'mon', 'Monday'],
111 [2, 'tue', 'Tuesday'],
112 [3, 'wed', 'Wednesday'],
113 [4, 'thu', 'Thursday'],
114 [5, 'fri', 'Friday'],
115 [6, 'sat', 'Saturday'],
119 my $data = $WeekdayData->{'<TOTAL>'};
121 my $fh = get_filehandle ();
129 my ($num, $abbr, $name) = @$_;
130 my $sum = $data->{$abbr}[0] + $data->{$abbr}[1] + $data->{$abbr}[2] + $data->{$abbr}[3];
133 $max = $sum if ($max < $sum);
136 $bar_factor = $BarHeight / $max;
138 print $fh qq#<table class="plugin weekdays">\n <tr class="bars">\n#;
141 my ($num, $abbr, $name) = @$_;
142 print $fh qq# <td class="bar vertical $abbr">#;
143 for (my $i = 3; $i >= 0; $i--)
145 my $num = $data->{$abbr}[$i];
146 my $height = sprintf ("%.2f", (95 * $num / $max));
147 my $img = $VImages[$i];
150 $class = q( class="first") if ($i == 3);
151 $class = q( class="last") if ($i == 0);
153 print $fh qq(<img src="$img" alt="" style="height: ${height}%;"$class />);
157 print $fh qq( </tr>\n <tr class="counter">\n);
160 my ($num, $abbr, $name) = @$_;
161 my $sum = $data->{$abbr}[0] + $data->{$abbr}[1] + $data->{$abbr}[2] + $data->{$abbr}[3];
162 my $pct = sprintf ("%.1f", (100 * $sum / $total));
163 print $fh qq( <td class="counter $abbr">$pct%</td>\n);
165 print $fh qq( </tr>\n <tr class="numeration">\n);
168 my ($num, $abbr, $name) = @$_;
169 print $fh qq( <td class="numeration $abbr">$name</td>\n);
171 print $fh " </tr>\n</table>\n\n";