193 lines
4.6 KiB
Perl
193 lines
4.6 KiB
Perl
package TTXBarChart;
|
|
#
|
|
# This module is a part of Trouble Ticket Express package
|
|
# http://www.troubleticketexpress.com
|
|
#
|
|
# COPYRIGHT: 2005, United Web Coders
|
|
# http://www.unitedwebcoders.com
|
|
#
|
|
# $Revision: 186 $
|
|
# $Date: 2006-06-21 07:47:49 -0400 (Wed, 21 Jun 2006) $
|
|
#
|
|
|
|
$TTXBarChart::VERSION='2.22';
|
|
BEGIN {
|
|
$TTXBarChart::REVISION = '$Revision: 186 $';
|
|
if ($TTXBarChart::REVISION =~ /(\d+)/) {
|
|
$TTXBarChart::REVISION = $1;
|
|
}
|
|
};
|
|
|
|
use strict;
|
|
use TTXData;
|
|
my %defaults = (
|
|
barwidth => 20,
|
|
barheight => 15,
|
|
chartwidth => 200,
|
|
chartheight => 100,
|
|
barcolor => 'blue',
|
|
fontratio => 0.4
|
|
);
|
|
# ========================================================================= vbar
|
|
|
|
sub vbar {
|
|
my ($data, $barwidth, $chartheight, $barcolor, $fratio) = @_;
|
|
my $buff;
|
|
my $cfg = TTXData::get('CONFIG');
|
|
my $img = $cfg->get('imgurl')."/dot.gif";
|
|
if (!$barwidth || $barwidth =~ /\D/) {
|
|
$barwidth = $defaults{barwidth};
|
|
}
|
|
if (!$chartheight || $chartheight =~ /\D/) {
|
|
$chartheight = $defaults{chartheight};
|
|
}
|
|
if ($barcolor eq undef) {
|
|
$barcolor = $defaults{barcolor}
|
|
}
|
|
if ($fratio eq undef) {
|
|
$fratio = $defaults{fontratio}
|
|
}
|
|
my $lblstyle = "style=\"font-size: ".(int ($barwidth*$fratio))."px\"";
|
|
my $valstyle = "style=\"font-size: ".(int ($barwidth*$fratio) - 1)."px;font-family:serif\"";
|
|
$buff =<<EOT;
|
|
<table cellpadding=0 cellspacing=1>
|
|
<tr>
|
|
EOT
|
|
my $max = 0;
|
|
for (my $i = 0; $i < @{$data}; ++$i) {
|
|
if ($data->[$i]->{val} eq undef || $data->[$i]->{val} < 0) {
|
|
$data->[$i]->{val} = 0;
|
|
}
|
|
if ($data->[$i]->{val} > $max) {
|
|
$max = $data->[$i]->{val};
|
|
}
|
|
}
|
|
for (my $i = 0; $i < @{$data}; ++$i) {
|
|
my $h=1;
|
|
if ($max) {
|
|
$h = int (($data->[$i]->{val} / $max) * $chartheight);
|
|
}
|
|
my $alt = $data->[$i]->{val};
|
|
my $v = $alt;
|
|
if ($v > 9999) {
|
|
if ($v < 1000000) {
|
|
$v = (int ($v/1000)).'K';
|
|
} else {
|
|
$v = (int ($v/1000000)).'M';
|
|
}
|
|
}
|
|
$buff .= <<EOT;
|
|
<td valign=bottom>
|
|
<table cellpadding=0 cellspacing=0>
|
|
<tr>
|
|
<td align=center $valstyle>$v</td>
|
|
</tr>
|
|
<tr bgcolor="$barcolor">
|
|
<td><img src="$img" width=$barwidth height=$h alt=$alt /></td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
EOT
|
|
}
|
|
$buff .= "</tr>\n<tr>";
|
|
for (my $i = 0; $i < @{$data}; ++$i) {
|
|
my $lbl = $data->[$i]->{lbl};
|
|
if ($lbl =~ /^(..?.?)/) {
|
|
$lbl = $1;
|
|
} else {
|
|
$lbl = ' ';
|
|
}
|
|
$buff .= "<td valign=top align=center $lblstyle>$lbl</td>\n";
|
|
}
|
|
$buff .=<<EOT;
|
|
</tr>
|
|
</table>
|
|
EOT
|
|
return $buff;
|
|
}
|
|
# ========================================================================= hbar
|
|
|
|
sub hbar {
|
|
my ($data, $barheight, $chartwidth, $barcolor, $fratio, $percentage) = @_;
|
|
my $buff;
|
|
my $cfg = TTXData::get('CONFIG');
|
|
my $img = $cfg->get('imgurl')."/dot.gif";
|
|
if (!$barheight || $barheight =~ /\D/) {
|
|
$barheight = $defaults{barheight};
|
|
}
|
|
if (!$chartwidth || $chartwidth =~ /\D/) {
|
|
$chartwidth = $defaults{chartwidth};
|
|
}
|
|
if ($barcolor eq undef) {
|
|
$barcolor = $defaults{barcolor}
|
|
}
|
|
if ($fratio eq undef) {
|
|
$fratio = $defaults{fontratio}
|
|
}
|
|
my $lblstyle = "style=\"font-size: ".(int ($barheight*$fratio))."px\"";
|
|
my $valstyle = "style=\"font-size: ".(int ($barheight*$fratio) - 1)."px;font-family:serif\"";
|
|
$buff =<<EOT;
|
|
<table cellpadding=0 cellspacing=1>
|
|
EOT
|
|
my $max = 0;
|
|
my $total;
|
|
for (my $i = 0; $i < @{$data}; ++$i) {
|
|
if ($data->[$i]->{val} eq undef || $data->[$i]->{val} < 0) {
|
|
$data->[$i]->{val} = 0;
|
|
}
|
|
if ($data->[$i]->{val} > $max) {
|
|
$max = $data->[$i]->{val};
|
|
}
|
|
$total += $data->[$i]->{val};
|
|
}
|
|
for (my $i = 0; $i < @{$data}; ++$i) {
|
|
my $w=1;
|
|
if ($max) {
|
|
$w = int (($data->[$i]->{val} / $max) * $chartwidth);
|
|
}
|
|
my $alt = $data->[$i]->{val};
|
|
my $v = $alt;
|
|
if ($v > 9999) {
|
|
if ($v < 1000000) {
|
|
$v = (int ($v/1000)).'K';
|
|
} else {
|
|
$v = (int ($v/1000000)).'M';
|
|
}
|
|
}
|
|
my $lbl = $data->[$i]->{lbl};
|
|
if ($lbl eq undef) {
|
|
$lbl = ' ';
|
|
}
|
|
if ($percentage && $total) {
|
|
$v .= ' ('.(int (100 * $alt / $total)).'%)';
|
|
}
|
|
$buff .= <<EOT;
|
|
<tr>
|
|
<td valign=middle align=right $lblstyle>$lbl</td>
|
|
<td valign=middle align=left>
|
|
<table cellpadding=0 cellspacing=0>
|
|
<tr>
|
|
<td align=left valign=middle>
|
|
<table cellpadding=0 cellspacing=0>
|
|
<tr bgcolor="$barcolor">
|
|
<td><img src="$img" width=$w height=$barheight alt=$alt /></td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
<td align=left valign=middle>
|
|
<span $valstyle> $v</span>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
</tr>
|
|
EOT
|
|
}
|
|
$buff .= "</table>\n";
|
|
return $buff;
|
|
}
|
|
|
|
|
|
1;
|
|
#
|