aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Youri/Check/Output/File/Format/HTML.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Youri/Check/Output/File/Format/HTML.pm')
-rw-r--r--lib/Youri/Check/Output/File/Format/HTML.pm222
1 files changed, 222 insertions, 0 deletions
diff --git a/lib/Youri/Check/Output/File/Format/HTML.pm b/lib/Youri/Check/Output/File/Format/HTML.pm
new file mode 100644
index 0000000..c498bbd
--- /dev/null
+++ b/lib/Youri/Check/Output/File/Format/HTML.pm
@@ -0,0 +1,222 @@
+# $Id: HTML.pm 1179 2006-08-05 08:30:57Z warly $
+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<Youri::Check::Output::File> 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 => <<EOF, # css style
+h1 {
+ text-align:center;
+}
+table {
+ border-style:solid;
+ border-width:1px;
+ border-color:black;
+ width:100%;
+}
+tr.odd {
+ background-color:white;
+}
+tr.even {
+ background-color:silver;
+}
+p.footer {
+ font-size:smaller;
+ text-align:center;
+}
+EOF
+ @_
+ );
+
+ $self->{_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;