[Rt-commit] rt branch, 4.2/refactor-tsv, created. rt-4.2.3-8-ga8232c7
Alex Vandiver
alexmv at bestpractical.com
Wed Feb 26 13:19:20 EST 2014
The branch, 4.2/refactor-tsv has been created
at a8232c753748f770c0ce9d25f468566c4dabc817 (commit)
- Log -----------------------------------------------------------------
commit a8232c753748f770c0ce9d25f468566c4dabc817
Author: Alex Vandiver <alexmv at bestpractical.com>
Date: Wed Feb 26 13:18:47 2014 -0500
Refactor Results.tsv to allow export of arbitrary collections to TSV
diff --git a/share/html/Search/Results.tsv b/share/html/Elements/TSVExport
similarity index 88%
copy from share/html/Search/Results.tsv
copy to share/html/Elements/TSVExport
index 123392a..eff696f 100644
--- a/share/html/Search/Results.tsv
+++ b/share/html/Elements/TSVExport
@@ -46,10 +46,8 @@
%#
%# END BPS TAGGED BLOCK }}}
<%ARGS>
-$Format => undef
-$Query => ''
-$OrderBy => 'id'
-$Order => 'ASC'
+$Collection
+$Format
$PreserveNewLines => 0
</%ARGS>
<%ONCE>
@@ -107,23 +105,8 @@ for (@columns) {
$m->out(join("\t", map { $_->{header} } @$_)."\n");
}
-my $Tickets = RT::Tickets->new( $session{'CurrentUser'} );
-$Tickets->FromSQL( $Query );
-if ( $OrderBy =~ /\|/ ) {
- # Multiple Sorts
- my @OrderBy = split /\|/, $OrderBy;
- my @Order = split /\|/, $Order;
- $Tickets->OrderByCols(
- map { { FIELD => $OrderBy[$_], ORDER => $Order[$_] } }
- ( 0 .. $#OrderBy )
- );
-}
-else {
- $Tickets->OrderBy( FIELD => $OrderBy, ORDER => $Order );
-}
-
my $ii = 0;
-while (my $row = $Tickets->Next) {
+while (my $row = $Collection->Next) {
for my $col (@columns) {
$m->out(join("\t", map {
my $val = ProcessColumnMapValue($_->{map}, Arguments => [$row, $ii++], Escape => 0);
diff --git a/share/html/Search/Results.tsv b/share/html/Search/Results.tsv
index 123392a..6c29358 100644
--- a/share/html/Search/Results.tsv
+++ b/share/html/Search/Results.tsv
@@ -52,61 +52,7 @@ $OrderBy => 'id'
$Order => 'ASC'
$PreserveNewLines => 0
</%ARGS>
-<%ONCE>
-my $no_html = HTML::Scrubber->new( deny => '*' );
-</%ONCE>
<%INIT>
-require HTML::Entities;
-
-$r->content_type('application/vnd.ms-excel');
-
-my $DisplayFormat = $m->comp('/Elements/ScrubHTML', Content => $Format);
-
-my @Format = $m->comp('/Elements/CollectionAsTable/ParseFormat', Format => $DisplayFormat);
-
-my @columns;
-
-my $should_loc = { map { $_ => 1 } qw(Status) };
-
-my $col_entry = sub {
- my $col = shift;
- # in tsv output, "#" is often a comment character but we use it for "id"
- delete $col->{title}
- if $col->{title} and $col->{title} =~ /^\s*#\s*$/;
- return {
- header => Encode::encode_utf8(loc($col->{title} || $col->{attribute})),
- map => $m->comp(
- "/Elements/ColumnMap",
- Name => $col->{attribute},
- Attr => 'value'
- ),
- should_loc => $should_loc->{$col->{attribute}},
- }
-};
-
-if ($PreserveNewLines) {
- my $col = [];
- push @columns, $col;
- for (@Format) {
- if ($_->{title} eq 'NEWLINE') {
- $col = [];
- push @columns, $col;
- }
- else {
- push @$col, $col_entry->($_);
- }
- }
-}
-else {
- push @columns, [map { $_->{attribute}
- ? $col_entry->($_)
- : () } @Format];
-}
-
-for (@columns) {
- $m->out(join("\t", map { $_->{header} } @$_)."\n");
-}
-
my $Tickets = RT::Tickets->new( $session{'CurrentUser'} );
$Tickets->FromSQL( $Query );
if ( $OrderBy =~ /\|/ ) {
@@ -122,21 +68,5 @@ else {
$Tickets->OrderBy( FIELD => $OrderBy, ORDER => $Order );
}
-my $ii = 0;
-while (my $row = $Tickets->Next) {
- for my $col (@columns) {
- $m->out(join("\t", map {
- my $val = ProcessColumnMapValue($_->{map}, Arguments => [$row, $ii++], Escape => 0);
- $val = loc($val) if $_->{should_loc};
- # remove tabs from all field values, they screw up the tsv
- $val = '' unless defined $val;
- $val =~ s/(?:\n|\r)//g; $val =~ s{\t}{ }g;
- $val = $no_html->scrub($val);
- $val = HTML::Entities::decode_entities($val);
- Encode::encode_utf8($val);
- } @$col)."\n");
- }
-}
-$m->abort();
-
+$m->comp( "/Elements/TSVExport", Collection => $Tickets, Format => $Format, PreserveNewLines => $PreserveNewLines );
</%INIT>
-----------------------------------------------------------------------
More information about the rt-commit
mailing list