[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