<%ARGS>
$Format => undef
$Query => ''
$OrderBy => 'Name'
$Order => 'ASC'
$PreserveNewLines => 0
</%ARGS>
<%INIT>
my $Assets = RT::Assets->new( $session{'CurrentUser'} );

my $catalog_obj = LoadDefaultCatalog($ARGS{'Catalog'} || '');
$ARGS{'Catalog'} = $catalog_obj->Id;

if ( $ARGS{Query} ) {
    $Assets->FromSQL( $Query );
}
else {
    ProcessAssetsSearchArguments(
        Assets => $Assets, Catalog => $catalog_obj, ARGSRef => \%ARGS,
    );
}
if ( $OrderBy =~ /\|/ ) {
    # Multiple Sorts
    my @OrderBy = split /\|/, $OrderBy;
    my @Order   = split /\|/, $Order;
    $Assets->OrderByCols(
        map { { FIELD => $OrderBy[$_], ORDER => $Order[$_] } }
        ( 0 .. $#OrderBy )
    );
}
else {
    $Assets->OrderBy( FIELD => $OrderBy, ORDER => $Order );
}

if ( !$Format ) {
    $Format = q|id, Name, Description, Status, Catalog, |;
    $Format .= "$_, " for RT::Asset->Roles;
    my $catalog_obj = LoadDefaultCatalog($ARGS{'Catalog'} || '');
    my $CFs = RT::CustomFields->new( $session{CurrentUser} );
    $CFs->LimitToCatalog( $catalog_obj->Id );
    $CFs->LimitToObjectId( 0 ); # LimitToGlobal but no LookupType restriction
    $Format .= "'__CF.{$_}__/TITLE:$_', " for map {$_ = $_->Name; s/['\\]/\\$1/g; $_} @{$CFs->ItemsArrayRef};
    $m->callback(CallbackName => "ModifyFormat", Format => \$Format );
}

my $comp = "/Asset/Elements/TSVExport";
$comp = "/Elements/TSVExport" if $m->comp_exists("/Elements/TSVExport");
$m->comp( $comp, Collection => $Assets, Format => $Format );

</%INIT>