# gantt.pm: perl module for doing xhtml/css gantt charts.
package gantt;
use Exporter;
use Date::Calc qw( Day_of_Week Days_in_Month Month_to_Text);
use CGI qw(:standard);
our $VERSION = 0.4;
our @ISA = qw(Exporter);
our @EXPORT = ( qw(gantt_head gantt_tail gantt_task) ); # exports all 3 subs
our @EXPORT_OK = qw(gantt_head gantt_tail gantt_task);
our %EXPORT_TAGS = ();
my $month,$year,$last_day;
my @this_month = gmtime;
my $today=$this_month[3];
sub gantt_head ($$) {
($year,$month)=@_;
my $return="";
$last_day=Days_in_Month($year,$month);
$return.=h1(Month_to_Text($month) . " $year") . "\n";
$return.='
';
for (my $i = 1; $i <= $last_day; $i++ ) {
$dow = Day_of_Week($year,$month,$i);
$return.='
5 && $i!=$today);
$return.=' style="background-color:#f00"' if ($i==$today);
$return.=">$i
\n";
}
return $return . br();
}
sub gantt_task($$$$$$$$$) {
return if(!defined $month || !defined $year);
my $return="";
my ($start_year,
$start_month,
$start_day,
$stop_year,
$stop_month,
$stop_day,
$name,
$url,
$priority)=@_;
@_=();
if($start_year<$year) {
$start_year=$year;
$start_month = $start_day = 1;
}
if($stop_year<$year) {
$stop_year=$year;
$stop_month = 12;
$stop_day = 31;
}
if($start_month< $month) {
$start_month = $month;
$start_day=1;
}
if($stop_month>$month) {
$stop_month = $month;
$stop_day = $last_day;
}
my $width= ( ( ($stop_day-$start_day) * 30) + 28);
$width=28 unless( $width > 27);
$return.='
';
$return.=a({-href=>"$url"},"$name");
$return.="
\n";
return $return;
}
sub gantt_tail {
return if(!defined $month || !defined $year);
return("
");
}
1;