From: Mike Rylander Date: Wed, 28 Mar 2012 16:14:56 +0000 (-0400) Subject: Add an HTML-output stylesheet and teach FlatFielder to use it X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=a6621acfe89fcfcf6e4b860a819b14ebffd019fa;p=evergreen%2Fequinox.git Add an HTML-output stylesheet and teach FlatFielder to use it Signed-off-by: Mike Rylander --- diff --git a/Open-ILS/src/perlmods/lib/OpenILS/WWW/FlatFielder.pm b/Open-ILS/src/perlmods/lib/OpenILS/WWW/FlatFielder.pm index f8216c1388..19c40b48dc 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/WWW/FlatFielder.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/WWW/FlatFielder.pm @@ -8,11 +8,17 @@ use Apache2::Const -compile => qw( OK HTTP_NOT_ACCEPTABLE HTTP_INTERNAL_SERVER_ERROR :log ); use XML::LibXML; +use XML::LibXSLT; use Text::Glob; use CGI qw(:all -utf8); use OpenSRF::Utils::JSON; use OpenSRF::AppSession; +use OpenSRF::Utils::SettingsClient; + + +my $_parser = new XML::LibXML; +my $_xslt = new XML::LibXSLT; # BEGIN package globals @@ -21,7 +27,23 @@ use OpenSRF::AppSession; # you can weight them to control what matches requests for things like # 'application/*' + +sub html_ish_output { + my ($r, $args, $xslt) = @_; + $args->{'stylesheet'} = + OpenSRF::Utils::SettingsClient->new->config_value(dirs => 'xsl') . $xslt; + print data_to_xml($args); + return Apache2::Const::OK; +} + my $_output_handler_dispatch = { + "text/html" => { + "prio" => 0, + "code" => sub { + $_[0]->content_type("text/html; charset=utf-8"); + return html_ish_output( @_, 'FlatFielder2HTML.xsl' ); + } + }, "application/xml" => { "prio" => 0, "code" => sub { @@ -49,6 +71,21 @@ my @_output_handler_types = sort { # END package globals +=comment + + + + YAY! + boooo + + + WHEEE! + noooo + + + +=cut + sub data_to_xml { my ($args) = @_; @@ -60,10 +97,14 @@ sub data_to_xml { $fs->setAttribute("FS_key", $args->{key}) if $args->{key}; $dom->setDocumentElement($fs); + my $rownum = 1; for my $i (@{$$args{data}}) { - my $item = $dom->createElement("item"); + my $item = $dom->createElement("row"); + $item->setAttribute('ordinal', $rownum); + $rownum++; for my $k (keys %$i) { - my $val = $dom->createElement($k); + my $val = $dom->createElement('column'); + $val->setAttribute('name', $k); $val->appendText($i->{$k}); $item->addChild($val); } @@ -72,6 +113,13 @@ sub data_to_xml { # XML::LibXML::Document::toString() returns an encoded byte string, which # is why we don't need to binmode STDOUT, ':utf8'. + + return $_xslt->parse_stylesheet( + $_parser->parse_file( $$args{stylesheet} ) + )->transform( + $dom + )->toString if ($$args{stylesheet}); # configured transform, early return + return $dom->toString(); } diff --git a/Open-ILS/xsl/FlatFielder2HTML.xsl b/Open-ILS/xsl/FlatFielder2HTML.xsl new file mode 100644 index 0000000000..c988ba8fcd --- /dev/null +++ b/Open-ILS/xsl/FlatFielder2HTML.xsl @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + +