%# BEGIN BPS TAGGED BLOCK {{{
%# 
%# COPYRIGHT:
%# 
%# This software is Copyright (c) 1996-2009 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., 51 Franklin Street, Fifth Floor, Boston, MA
%# 02110-1301 or visit their web page on the internet at
%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
%# 
%# 
%# 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 }}}
<%ARGS>
$Class => 'RT__Ticket'
$Name
$Attr  => undef
</%ARGS>
<%ONCE>

# This is scary and should totally be refactored -- jesse
my $COLUMN_MAP = {
    id => {
        attribute => 'id',
        title    => 'id', # loc
        align     => 'right',
        value     => sub { return $_[0]->id }
    },

    Created => {
        attribute => 'Created',
        title     => 'Created', # loc
        value     => sub { return $_[0]->CreatedObj->AsString }
    },
    CreatedRelative => {
        attribute => 'Created',
        title     => 'Created', # loc
        value     => sub { return $_[0]->CreatedObj->AgeAsString }
    },
    CreatedBy => {
        attribute => 'CreatedBy',
        title     => 'Created By', # loc
        value     => sub { return $_[0]->CreatorObj->Name }
    },
    LastUpdated => {
        attribute => 'LastUpdated',
        title     => 'Last Updated', # loc
        value     => sub { return $_[0]->LastUpdatedObj->AsString }
    },
    LastUpdatedRelative => {
        attribute => 'LastUpdated',
        title     => 'Last Updated', # loc
        value     => sub { return $_[0]->LastUpdatedObj->AgeAsString }
    },
    LastUpdatedBy => {
        attribute => 'LastUpdatedBy',
        title     => 'Last Updated By', # loc
        value     => sub { return $_[0]->LastUpdatedByObj->Name }
    },

    CustomField => {
        attribute => sub { return shift @_ },
        title     => sub { return pop @_ },
        value     => sub {
            # Display custom field contents, separated by newlines.
            # For Image custom fields we also show a thumbnail here.

            my $values = $_[0]->CustomFieldValues( $_[-1] );
            my @values = map {
                (
                    ($_->CustomFieldObj->Type eq 'Image')
                        ? \($m->scomp( '/Elements/ShowCustomFieldImage', Object => $_ ))
                        : $_->Content
                ),
                \'<br />',
            } @{ $values->ItemsArrayRef };
            pop @values; # Remove that last <br />
            return @values;
        },
    },

    CheckBox => {
        title => sub {
            my $name = $_[1] || 'SelectedTickets';
            my $checked = $m->request_args->{ $name .'All' }? 'checked="checked"': '';

            return \qq{<input type="checkbox" name="${name}All" value="1" $checked
                              onclick="setCheckbox(this.form, '$name', this.checked)" />};
        },
        value => sub {
            my $id = $_[0]->id;

            my $name = $_[2] || 'SelectedTickets';
            return \qq{<input type="checkbox" name="$name" value="$id" checked="checked" />}
                if $m->request_args->{ $name . 'All'};

            my $arg = $m->request_args->{ $name };
            my $checked = '';
            if ( $arg && ref $arg ) {
                $checked = 'checked="checked"' if grep $_ == $id, @$arg;
            }
            elsif ( $arg ) {
                $checked = 'checked="checked"' if $arg == $id;
            }
            return \qq{<input type="checkbox" name="$name" value="$id" $checked />}
        },
    },
    RadioButton => {
        title => \'&nbsp;',
        value => sub {
            my $id = $_[0]->id;

            my $name = $_[2] || 'SelectedTicket';
            my $arg = $m->request_args->{ $name };
            my $checked = '';
            $checked = 'checked="checked"' if $arg && $arg == $id;
            return \qq{<input type="radio" name="SelectedTicket" value="$id" $checked />};
        },
    },
    (map {
        my $value = RT->Config->Get($_);
        $_ => { value => sub { return \$value } };
    
    } qw(WebPath WebBaseURL WebURL)),
    WebRequestPath    => { value => sub { substr( $m->request_path, 1 ) } },
    WebRequestPathDir => { value => sub { substr( $m->request_comp->dir_path, 1 ) } },
};

$COLUMN_MAP->{'CF'} = $COLUMN_MAP->{'CustomField'};

</%ONCE>
<%INIT>
$m->callback( COLUMN_MAP => $COLUMN_MAP, CallbackName => 'Once', CallbackOnce => 1 );
$m->callback( COLUMN_MAP => $COLUMN_MAP );

# first deal with class specific things
my $class_map = $m->comp("/Elements/$Class/ColumnMap", Attr => $Attr, Name => $Name );
return $class_map if defined $class_map;
return GetColumnMapEntry( Map => $COLUMN_MAP, Name => $Name, Attribute => $Attr );

</%INIT>
