X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=rt%2Fshare%2Fhtml%2FSearch%2FResults.tsv;h=3551258780b888b491fae6cc92b3de9f2d80451b;hp=2a0de14e623c5381fffd58dbdede1f77fe719cf2;hb=187086c479a09629b7d180eec513fb7657f4e291;hpb=01352af8e44b7eb70b2b587ca43ab7ca946f038d diff --git a/rt/share/html/Search/Results.tsv b/rt/share/html/Search/Results.tsv index 2a0de14e6..355125878 100644 --- a/rt/share/html/Search/Results.tsv +++ b/rt/share/html/Search/Results.tsv @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2018 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -46,12 +46,16 @@ %# %# END BPS TAGGED BLOCK }}} <%ARGS> +$Format => undef $Query => '' $OrderBy => 'id' $Order => 'ASC' +$PreserveNewLines => 0 <%INIT> +$r->header_out('Content-Disposition' => 'attachment;filename="Results.tsv"'); + my $Tickets = RT::Tickets->new( $session{'CurrentUser'} ); $Tickets->FromSQL( $Query ); if ( $OrderBy =~ /\|/ ) { @@ -67,97 +71,5 @@ else { $Tickets->OrderBy( FIELD => $OrderBy, ORDER => $Order ); } -my %cf_id_to_name; -my %cf_name_to_pos; -{ - my $cfs = RT::SQL::PossibleCustomFields( - Query => $Query, CurrentUser => $session{'CurrentUser'}, - ); - while ( my $cf = $cfs->Next ) { - my $name = $cf->Name; - $cf_id_to_name{ $cf->id } = $name; - next if $cf_name_to_pos{ $name }; - - $cf_name_to_pos{ $name } = - (sort { $b <=> $a } values %cf_name_to_pos)[0] + 1; - } -} - -my @attrs = qw( - id QueueObj->Name Subject Status - TimeEstimated TimeWorked TimeLeft - Priority FinalPriority - OwnerObj->Name - Requestors->MemberEmailAddressesAsString - Cc->MemberEmailAddressesAsString - AdminCc->MemberEmailAddressesAsString - DueObj->ISO ToldObj->ISO CreatedObj->ISO - ResolvedObj->ISO LastUpdatedObj->ISO LastUpdatedByObj->Name -); - -$r->content_type('text/csv'); -$r->header_out('Content-Disposition' => 'attachment;filename="Results.csv"'); -{ - my @header; - foreach my $attr (@attrs) { - my $label = $attr; - $label =~ s'Obj-.(?:AsString|Name|ISO)''g; - $label =~ s'-\>MemberEmailAddressesAsString''g; - push @header, $label; - } - - $_ += @header - 1 foreach values %cf_name_to_pos; - - foreach my $name ( sort { $cf_name_to_pos{$a} <=> $cf_name_to_pos{$b} } keys %cf_name_to_pos ) { - push @header, "CF-". $name; - } - $m->out(join("\t", @header)); - $m->out("\n"); - $m->flush_buffer; -} - -my $i = 0; -while ( my $Ticket = $Tickets->Next()) { - my @row; - foreach my $attr (@attrs) { - my $value; - if ($attr =~ /(.*)->ISO$/ and $Ticket->$1->Unix <= 0) { - $value = ''; - } else { - my $method = '$Ticket->'.$attr.'()'; - $method =~ s/->ISO\(\)$/->ISO( Timezone => 'user' )/; - $value = eval $method; - if ($@) {die "Failed to find $attr - ". $@}; - } - push @row, $value; - } - - my $values = $Ticket->CustomFieldValues; - $values->OrderByCols; # don't sort them - while (my $value = $values->Next) { - my $pos = $cf_name_to_pos{ $cf_id_to_name{ $value->CustomField } }; - next unless $pos; - - $row[$pos] = '' unless defined $row[$pos]; - $row[$pos] .= ', ' if $row[$pos]; - $row[$pos] .= $value->Content; - } - - # remove tabs from all field values, they screw up the tsv - for (@row) { - $_ = '' unless defined; - $_ =~ s/(?:\n|\r)//g; - $_ =~ s{\t}{ }g; - } - - $m->out(join("\t",@row)); - $m->out("\n"); - - unless (++$i%10) { - $i = 0; - $m->flush_buffer; - } -} - -$m->abort(); +$m->comp( "/Elements/TSVExport", Collection => $Tickets, Format => $Format, PreserveNewLines => $PreserveNewLines );