1 package Onis::Plugins::Userdetails;
6 use Onis::Config (qw(get_config));
7 use Onis::Html (qw(html_escape get_filehandle));
8 use Onis::Language (qw(translate));
9 use Onis::Data::Core (qw(get_main_nick register_plugin));
10 use Onis::Users (qw(ident_to_name get_link get_image));
12 our $DISPLAY_IMAGES = 0;
13 our $DEFAULT_IMAGE = '';
15 register_plugin ('OUTPUT', \&output);
17 our $SORT_BY = 'lines';
18 if (get_config ('sort_by'))
20 my $tmp = get_config ('sort_by');
23 if (($tmp eq 'lines') or ($tmp eq 'words') or ($tmp eq 'chars'))
29 # The Core plugin already complained about this..
33 if (get_config ('plugin_max'))
35 my $tmp = get_config ('plugin_max');
37 $PLUGIN_MAX = $tmp if ($tmp);
39 if (get_config ('display_images'))
41 my $tmp = get_config ('display_images');
43 if ($tmp =~ m/true|on|yes/i)
47 elsif ($tmp =~ m/false|off|no/i)
53 print STDERR $/, __FILE__, ": ``display_times'' has been set to the invalid value ``$tmp''. ",
54 $/, __FILE__, ": Valid values are ``true'' and ``false''. Using default value ``false''.";
57 if (get_config ('default_image'))
59 $DEFAULT_IMAGE = get_config ('default_image');
62 our @H_IMAGES = qw#dark-theme/h-red.png dark-theme/h-blue.png dark-theme/h-yellow.png dark-theme/h-green.png#;
63 if (get_config ('horizontal_images'))
65 my @tmp = get_config ('horizontal_images');
68 if (scalar (@tmp) != 4)
71 # The core-pligin already complained about this..
74 for ($i = 0; $i < 4; $i++)
76 if (!defined ($tmp[$i]))
81 $H_IMAGES[$i] = $tmp[$i];
85 our @V_IMAGES = qw#images/ver0n.png images/ver1n.png images/ver2n.png images/ver3n.png#;
86 if (get_config ('vertical_images'))
88 my @tmp = get_config ('vertical_images');
91 if (scalar (@tmp) != 4)
94 # Hopefully someone complained by now..
97 for ($i = 0; $i < 4; $i++)
99 if (!defined ($tmp[$i]))
104 $V_IMAGES[$i] = $tmp[$i];
108 our $BAR_HEIGHT = 130;
109 if (get_config ('bar_height'))
111 my $tmp = get_config ('bar_height');
113 $BAR_HEIGHT = $tmp if ($tmp >= 10);
115 #$BAR_HEIGHT = int ($BAR_HEIGHT / 2);
117 our $BAR_WIDTH = 100;
118 if (get_config ('bar_width'))
120 my $tmp = get_config ('bar_width');
122 $BAR_WIDTH = $tmp if ($tmp >= 10);
125 my $VERSION = '$Id: Userdetails.pm,v 1.5 2005/03/14 18:40:25 octo Exp $';
126 print STDERR $/, __FILE__, ": $VERSION" if ($::DEBUG);
134 $DATA->{'byname'}{$b}{$SORT_BY} <=> $DATA->{'byname'}{$a}{$SORT_BY}
137 defined ($DATA->{'byname'}{$_}{'words'})
138 } (keys (%{$DATA->{'byname'}}));
140 return (undef) unless (@names);
142 my $max = $PLUGIN_MAX;
144 my $fh = get_filehandle ();
146 my $trans = translate ('Detailed nick stats');
156 if (defined ($DATA->{'byname'}{$name}{'chars_time'}))
160 next unless (defined ($DATA->{'byname'}{$name}{'chars_time'}{$_}));
161 if ($DATA->{'byname'}{$name}{'chars_time'}{$_} > $max_time)
163 $max_time = $DATA->{'byname'}{$name}{'chars_time'}{$_};
167 if (defined ($DATA->{'byname'}{$name}{'conversations'}))
169 my @others = keys (%{$DATA->{'byname'}{$name}{'conversations'}});
177 $num += $DATA->{'byname'}{$name}{'conversations'}{$o}[$_];
180 if ($num > $max_conv)
193 $time_factor = $BAR_HEIGHT / $max_time;
198 $conv_factor = $BAR_WIDTH / $max_conv;
201 print $fh qq#<table class="plugin userdetails">\n#,
203 qq# <th colspan="#, $DISPLAY_IMAGES ? 3 : 2, qq#">$trans</th>\n#,
210 print $fh qq# <tr>\n#,
211 qq# <th colspan="#, $DISPLAY_IMAGES ? 3 : 2, qq#" class="nick">$name</th>\n#,
217 my $link = get_link ($name);
218 my $image = get_image ($name);
220 if ($DEFAULT_IMAGE and !$image)
222 $image = $DEFAULT_IMAGE;
225 print $fh qq# <td class="image" rowspan="2">#;
230 print $fh qq#<a href="$link">#;
232 print $fh qq#<img src="$image" alt="$name" />#;
245 print $fh qq# <td class="counters">\n#;
247 $num = $DATA->{'byname'}{$name}{'lines'};
248 $trans = translate ('Has written %u lines');
249 printf $fh (" $trans<br />\n", $num);
251 $num = $DATA->{'byname'}{$name}{'words'};
252 $trans = translate ('Has written %u words');
253 printf $fh (" $trans<br />\n", $num);
255 $num = $DATA->{'byname'}{$name}{'chars'};
256 $trans = translate ('Has written %u chars');
257 printf $fh (" $trans<br />\n", $num);
259 if ($DATA->{'byname'}{$name}{'lines'})
261 $num = $DATA->{'byname'}{$name}{'words'} / $DATA->{'byname'}{$name}{'lines'};
262 $trans = translate ('Has written %.1f words per line');
263 printf $fh (" $trans<br />\n", $num);
265 $num = $DATA->{'byname'}{$name}{'chars'} / $DATA->{'byname'}{$name}{'lines'};
266 $trans = translate ('Has written %.1f characters per line');
267 printf $fh (" $trans<br />\n", $num);
270 print $fh qq# </td>\n <td class="numbers">\n#;
272 if (defined ($DATA->{'byname'}{$name}{'op_given'}))
274 $num = $DATA->{'byname'}{$name}{'op_given'};
275 $trans = translate ('Has given %u ops');
277 printf $fh (" $trans<br />\n", $num);
280 if (defined ($DATA->{'byname'}{$name}{'op_taken'}))
282 $num = $DATA->{'byname'}{$name}{'op_taken'};
283 $trans = translate ('Has taken %u ops');
285 printf $fh (" $trans<br />\n", $num);
288 if (defined ($DATA->{'byname'}{$name}{'kick_given'}))
290 $num = $DATA->{'byname'}{$name}{'kick_given'};
291 $trans = translate ('Has kicked out %u people');
293 printf $fh (" $trans<br />\n", $num);
296 if (defined ($DATA->{'byname'}{$name}{'kick_received'}))
298 $num = $DATA->{'byname'}{$name}{'kick_received'};
299 $trans = translate ('Has been kicked out %u times');
301 printf $fh (" $trans<br />\n", $num);
304 if (defined ($DATA->{'byname'}{$name}{'questions'}))
306 $num = 100 * $DATA->{'byname'}{$name}{'questions'} / $DATA->{'byname'}{$name}{'lines'};
307 $trans = translate ("Question ratio: %.1f%%");
309 printf $fh (" $trans<br />\n", $num);
312 if (defined ($DATA->{'byname'}{$name}{'topics'}))
314 $num = $DATA->{'byname'}{$name}{'topics'};
315 $trans = translate ('Has set %u topics');
317 printf $fh (" $trans<br />\n", $num);
320 if (defined ($DATA->{'byname'}{$name}{'actions'}))
322 $num = $DATA->{'byname'}{$name}{'actions'};
323 $trans = translate ('Has performed %u actions');
325 printf $fh (" $trans<br />\n", $num);
329 # exclamation ratio # TODO
335 print $fh qq# </td>\n </tr>\n <tr>\n <td class="houractivity">\n#;
337 if (defined ($DATA->{'byname'}{$name}{'chars_time'}))
339 print $fh qq# <table class="hours_of_day">\n <tr>\n#;
346 my $img = $V_IMAGES[int ($hour / 6)];
349 if (defined ($DATA->{'byname'}{$name}{'chars_time'}{$hour}))
351 $num = $DATA->{'byname'}{$name}{'chars_time'}{$hour};
353 if (defined ($DATA->{'byname'}{$name}{'chars_time'}{1 + $hour}))
355 $num = $DATA->{'byname'}{$name}{'chars_time'}{1 + $hour};
358 $height = int (0.5 + ($time_factor * $num));
364 print $fh qq# <td><img src="$img" alt="$num chars" #,
365 qq#style="height: ${height}px;" /></td>\n#;
370 <tr class="hour_row">
371 <td colspan="3">0-5</td>
372 <td colspan="3">6-11</td>
373 <td colspan="3">12-17</td>
374 <td colspan="3">18-23</td>
384 print $fh qq# </td>\n <td class="convpartners">\n#;
386 if (defined ($DATA->{'byname'}{$name}{'conversations'}))
389 my $data = $DATA->{'byname'}{$name}{'conversations'};
392 ($data->{$b}[0] + $data->{$b}[1] + $data->{$b}[2] + $data->{$b}[3])
394 ($data->{$a}[0] + $data->{$a}[1] + $data->{$a}[2] + $data->{$a}[3])
398 $trans = translate ('Talks to');
403 <td colspan="2">$trans:</td>
414 qq# <td class="nick">$this_name</td>\n#,
415 qq# <td class="bar">#;
421 my $img = $H_IMAGES[$k];
422 my $width = int (0.5 + ($conv_factor * $data->{$this_name}[$_]));
428 print $fh qq#<img src="$img" alt="" #;
431 print $fh qq#class="first" #;
435 print $fh qq#class="last" #;
437 print $fh qq#style="width: ${width}px;" />#;
440 print $fh "</td>\n </tr>\n";
444 if ($i >= $PLUGIN_MAX)
450 print $fh " </table>\n";
464 print $fh "</table>\n\n";