# $Id: HTML.pm 876 2006-04-16 12:07:20Z guillomovitch $
package Youri::Check::Output::File::Format::HTML;
=head1 NAME
Youri::Check::Output::File::Format::HTML - File HTML format support
=head1 DESCRIPTION
This format plugin for L provides HTML format
support.
=cut
use warnings;
use strict;
use Carp;
use CGI;
use base 'Youri::Check::Output::File::Format';
sub extension {
return 'html';
}
sub _init {
my $self = shift;
my %options = (
style => <{_style} = $options{style};
$self->{_cgi} = CGI->new();
}
sub get_report {
my ($self, $time, $title, $iterator, $type, $columns, $links, $maintainer) = @_;
my $content;
my $lead_columns = [
$maintainer ?
qw/package media/ :
qw/package media maintainer/
];
my $line;
my @results;
$content .= $self->{_cgi}->start_table();
$content .= $self->{_cgi}->Tr([
$self->{_cgi}->th([
@$lead_columns,
@$columns
])
]);
while (my $result = $iterator->get_result()) {
if (@results && $result->{package} ne $results[0]->{package}) {
$content .= $self->_get_formated_results(
$lead_columns,
$columns,
$links,
$line++ % 2 ? 'odd' : 'even',
\@results
);
@results = ();
}
push(@results, $result);
}
$content .= $self->_get_formated_results(
$lead_columns,
$columns,
$links,
$line++ % 2 ? 'odd' : 'even',
\@results
);
$content .= $self->{_cgi}->end_table();
return $self->_get_html_page($time, $title, \$content);
}
sub get_index {
my ($self, $time, $title, $reports, $maintainers) = @_;
my $content;
if ($reports) {
$content .= $self->{_cgi}->h2("Reports");
my @types = keys %{$reports};
$content .= $self->{_cgi}->start_ul();
foreach my $type (sort @types) {
my $item;
$item = $self->{_cgi}->a(
{ href => "$type.html" },
$type
);
foreach my $extension (@{$reports->{$type}}) {
next if ($extension eq extension());
$item .= " ".$self->{_cgi}->a(
{ href => "$type.$extension" },
"[$extension]"
);
}
$content .= $self->{_cgi}->li($item);
}
$content .= $self->{_cgi}->end_ul();
}
if ($maintainers) {
$content .= $self->{_cgi}->h2("Individual reports");
$content .= $self->{_cgi}->start_ul();
foreach my $maintainer (sort @{$maintainers}) {
$content .= $self->{_cgi}->li(
$self->{_cgi}->a(
{ href => "$maintainer/index.html" },
_obfuscate($maintainer)
)
);
}
$content .= $self->{_cgi}->end_ul();
}
return $self->_get_html_page($time, $title, \$content);
}
sub _get_formated_results {
my ($self, $lead_columns, $columns, $links, $class, $results) = @_;
my $content;
$content .= $self->{_cgi}->end_Tr();
for my $i (0 .. $#$results) {
$content .= $self->{_cgi}->start_Tr(
{ class => $class }
);
if ($i == 0) {
# first line contains spanned cells
$content .= $self->{_cgi}->td(
{ rowspan => scalar @$results },
[
map { $results->[$i]->{$_} }
@$lead_columns
]
);
}
$content .= $self->{_cgi}->td(
[
map {
$links->{$_} && $results->[$i]->{$links->{$_}} ?
$self->{_cgi}->a(
{ href => $results->[$i]->{$links->{$_}} },
$self->{_cgi}->escapeHTML($results->[$i]->{$_})
) :
$self->{_cgi}->escapeHTML($results->[$i]->{$_})
} @$columns
]
);
$content .= $self->{_cgi}->end_Tr();
}
return $content;
}
sub _get_html_page {
my ($self, $time, $title, $body) = @_;
my $content;
$content .= $self->{_cgi}->start_html(
-title => $title,
-style => { code => $self->{_style} }
);
$content .= $self->{_cgi}->h1($title);
$content .= $$body;
$content .= $self->{_cgi}->hr();
$content .= $self->{_cgi}->p(
{ class => 'footer' },
"Page generated $time"
);
$content .= $self->{_cgi}->end_html();
return \$content;
}
sub _obfuscate {
my ($email) = @_;
return unless $email;
$email =~ s/\@/ at /;
$email =~ s/\./ dot /;
return $email;
}
=head1 COPYRIGHT AND LICENSE
Copyright (C) 2002-2006, YOURI project
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
=cut
1;