%# BEGIN BPS TAGGED BLOCK {{{
%# 
%# COPYRIGHT:
%#  
%# This software is Copyright (c) 1996-2006 Best Practical Solutions, LLC 
%#                                          <jesse@bestpractical.com>
%# 
%# (Except where explicitly superseded by other copyright notices)
%# 
%# 
%# LICENSE:
%# 
%# This work is made available to you under the terms of Version 2 of
%# the GNU General Public License. A copy of that license should have
%# been provided with this software, but in any event can be snarfed
%# from www.gnu.org.
%# 
%# This work is distributed in the hope that it will be useful, but
%# WITHOUT ANY WARRANTY; without even the implied warranty of
%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
%# General Public License for more details.
%# 
%# You should have received a copy of the GNU General Public License
%# along with this program; if not, write to the Free Software
%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
%# 
%# 
%# CONTRIBUTION SUBMISSION POLICY:
%# 
%# (The following paragraph is not intended to limit the rights granted
%# to you to modify and distribute this software under the terms of
%# the GNU General Public License and is only of importance to you if
%# you choose to contribute your changes and enhancements to the
%# community by submitting them to Best Practical Solutions, LLC.)
%# 
%# By intentionally submitting any modifications, corrections or
%# derivatives to this work, or any other work intended for use with
%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
%# you are the copyright holder for those contributions and you grant
%# Best Practical Solutions,  LLC a nonexclusive, worldwide, irrevocable,
%# royalty-free, perpetual, license to use, copy, create derivative
%# works based on those contributions, and sublicense and distribute
%# those contributions and any derivatives thereof.
%# 
%# END BPS TAGGED BLOCK }}}
<table border="0" cellspacing="0" cellpadding="1" width="100%">

% if ($ShowHeader) {
<& /Elements/CollectionAsTable/Header, 
    Format => \@Format, 
    FormatString => $Format,
    AllowSorting => $AllowSorting, 
    Order => $Order, 
    Query => $Query,
    Rows => $Rows,
    Page => $Page,
    OrderBy => $OrderBy , 
    BaseURL => $BaseURL,
    maxitems => $maxitems &> 
% }

%   my $i;
%   while (my $record = $Collection->Next) {
%   $i++;
% # Every ten rows, flush the buffer and put something on the page.
% $m->flush_buffer() unless ($i % 10);
<&   /Elements/CollectionAsTable/Row, Format => \@Format, i => $i, record => $record, maxitems => $maxitems &>
%   }

</table>

% if ($Rows && $ShowNavigation) {
<hr>
% my $oddRows;
% if (($TotalFound % $Rows) == 0) {
% $oddRows = 0;
% } else { $oddRows = 1; }
<&|/l, $Page, int($TotalFound/$Rows)+$oddRows&>Page [_1] of [_2]</&>

<%perl>
my $prev = $m->comp(
    '/Elements/QueryString',
    Query   => $Query,
    Format  => $Format,
    Rows    => $Rows,
    OrderBy => $OrderBy,
    Order   => $Order,
    Page    => ( $Page - 1 )
);
my $next = $m->comp(
    '/Elements/QueryString',
    Query   => $Query,
    Format  => $Format,
    Rows    => $Rows,
    OrderBy => $OrderBy,
    Order   => $Order,
    Page    => ( $Page + 1 )
);
</%perl>
% if ($Page > 1) {
<a href="<%$BaseURL%><%$prev%>"><&|/l&>Previous Page</&></a>
% }
% if (($Page * $Rows) < $TotalFound) {
<a href="<%$BaseURL%><%$next%>"><&|/l&>Next Page</&></a>
% }
% }
<%INIT>
my $maxitems = 0;

$Format ||= $RT::DefaultSearchResultFormat;

# DisplayFormat lets us use a "temporary" format for display, while 
# still using our original format for next/prev page links.
# bulk update uses this feature to add checkboxes


$DisplayFormat ||= $Format;

# Scrub the html of the format string to remove any potential nasties.
$Format = $m->comp('/Elements/ScrubHTML', Content => $Format);
$DisplayFormat = $m->comp('/Elements/ScrubHTML', Content => $DisplayFormat);


unless ($Collection) {
        $Collection = RT::Tickets->new($session{'CurrentUser'});
        $Collection->FromSQL($Query);
}

my (@Format) = $m->comp('/Elements/CollectionAsTable/ParseFormat', Format => $DisplayFormat);

# Find the maximum number of items in any row, so we can pad the table.
my $item = 0;
foreach my $col (@Format) {
    $item++;
    if ( $col->{title} && ($col->{title} eq 'NEWLINE') ) {
        $item = 0;
    }
    else {
        $maxitems = $item if $item > $maxitems;
    }
}

if ($OrderBy =~ /\|/) {
    # Multiple Sorts
    my @OrderBy = split /\|/,$OrderBy;
    my @Order = split /\|/,$Order;
    $Collection->OrderByCols(
        map { { FIELD => $OrderBy[$_], ORDER => $Order[$_] } } ( 0
        .. $#OrderBy ) );; 
} else {
    $Collection->OrderBy(FIELD => $OrderBy, ORDER => $Order); 
}

$Collection->RowsPerPage($Rows) if ($Rows);
$Page = 1 unless $Page > 0; # workaround problems with Page = '' or undef
$Collection->GotoPage( $Page - 1 ); # SB uses page 0 as the first page
my $TotalFound =  $Collection->CountAll();

</%INIT>
<%ARGS>
$Query => undef
$Rows => 50
$Page => 1
$Title => 'Ticket Search'
$Collection => undef
$AllowSorting => undef
$Order => undef
$OrderBy => undef
$BaseURL => undef
$Format => $RT::DefaultSearchResultFormat
$DisplayFormat => undef
$ShowNavigation => 1
$ShowHeader => 1
</%ARGS>
