diff options
Diffstat (limited to 'rt/html/Elements/RT__Ticket/ColumnMap')
-rw-r--r-- | rt/html/Elements/RT__Ticket/ColumnMap | 268 |
1 files changed, 181 insertions, 87 deletions
diff --git a/rt/html/Elements/RT__Ticket/ColumnMap b/rt/html/Elements/RT__Ticket/ColumnMap index dade914..a6d387c 100644 --- a/rt/html/Elements/RT__Ticket/ColumnMap +++ b/rt/html/Elements/RT__Ticket/ColumnMap @@ -1,14 +1,8 @@ -%# BEGIN BPS TAGGED BLOCK {{{ +%# BEGIN LICENSE BLOCK; %# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC -%# <jesse@bestpractical.com> +%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> %# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: +%# (Except where explictly superceded by other copyright notices) %# %# 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 @@ -20,37 +14,25 @@ %# 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. -%# +%# Unless otherwise specified, all modifications, corrections or +%# extensions to this work which alter its source code become the +%# property of Best Practical Solutions, LLC when submitted for +%# inclusion in the work. %# -%# 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 }}} +%# END LICENSE BLOCK + <%ARGS> $Name => undef $Attr => undef </%ARGS> +<%perl> +return ColumnMap($Name, $Attr); +</%perl> -<%ONCE> -our ( $COLUMN_MAP ); +<%INIT> +our ( $COLUMN_MAP, $CUSTOM_FIELD_MAP ); sub ColumnMap { my $name = shift; @@ -63,52 +45,46 @@ sub ColumnMap { # now, let's deal with harder things, like Custom Fields - elsif ( $name =~ /^(?:CF|CustomField)\.\{(.+)\}$/ ) { + elsif ( $name =~ /^(?:CF|CustomField).(.*)$/ ) { my $field = $1; + my $cf; + if ( $CUSTOM_FIELD_MAP->{$field} ) { + $cf = $CUSTOM_FIELD_MAP->{$field}; + } + else { + + $cf = RT::CustomField->new( $session{'CurrentUser'} ); + + if ( $field =~ /^(.+?)\.{(.+)}$/ ) { + $cf->LoadByNameAndQueue( Queue => $1, Name => $2 ); + } + else { + $field = $1 if $field =~ /^{(.+)}$/; # trim { } + $cf->LoadByNameAndQueue( Queue => "0", Name => $field ); + } + $CUSTOM_FIELD_MAP->{$field} = $cf if ( $cf->id ); + } + + unless ( $cf->id ) { + return undef; + } if ( $attr eq 'attribute' ) { return (undef); } elsif ( $attr eq 'title' ) { - return ( $field ); + return ( $cf->Name ); } elsif ( $attr eq 'value' ) { - # Display custom field contents, separated by newlines. - # For Image custom fields we also show a thumbnail here. - return sub { - my $values = $_[0]->CustomFieldValues($field); - return map { - ( - ($_->CustomFieldObj->Type eq 'Image') - ? \($m->scomp( '/Elements/ShowCustomFieldImage', Object => $_ )) - : $_->Content - ), - \'<br>', - } @{ $values->ItemsArrayRef } - }; + my $value = eval "sub { + my \$values = \$_[0]->CustomFieldValues('" . $cf->id . "'); + return ( join( ', ', map { \$_->Content } \@{ \$values->ItemsArrayRef } )) + }" || die $@; + return ($value); } } } -sub LinkCallback { - my $method = shift; - - my $mode = $RT::Ticket::LINKTYPEMAP{$method}{Mode}; - my $type = $RT::Ticket::LINKTYPEMAP{$method}{Type}; - my $mode_uri = $mode.'URI'; - my $local_type = 'Local'.$mode; - - return sub { - map { - \'<A HREF="', - $_->$mode_uri->Resolver->HREF, - \'">', - ( $_->$mode_uri->IsLocal ? $_->$local_type : $_->$mode ), - \'</A><BR>', - } @{ $_[0]->Links($mode,$type)->ItemsArrayRef } - } -} - $COLUMN_MAP = { QueueName => { attribute => 'Queue', @@ -127,7 +103,7 @@ $COLUMN_MAP = { }, Status => { attribute => 'Status', - value => sub { return loc($_[0]->Status) } + value => sub { return $_[0]->Status } }, Subject => { attribute => 'Subject', @@ -143,10 +119,10 @@ $COLUMN_MAP = { if ( $Ticket->HasUnresolvedDependencies( Type => 'approval' ) or $Ticket->HasUnresolvedDependencies( Type => 'code' ) ) { - return \'<em>', loc('(pending approval)'), \'</em>'; + return "<em>" . loc('(pending approval)') . "</em>"; } else { - return \'<em>', loc('(pending other Collection)'), \'</em>'; + return "<em>" . loc('(pending other Collection)') . "</em>"; } } else { @@ -161,12 +137,10 @@ $COLUMN_MAP = { }, InitialPriority => { attribute => 'InitialPriority', - name => 'Initial Priority', value => sub { return $_[0]->InitialPriority } }, FinalPriority => { attribute => 'FinalPriority', - name => 'Final Priority', value => sub { return $_[0]->FinalPriority } }, EffectiveId => { @@ -179,17 +153,14 @@ $COLUMN_MAP = { }, TimeWorked => { attribute => 'TimeWorked', - title => 'Time Worked', value => sub { return $_[0]->TimeWorked } }, TimeLeft => { attribute => 'TimeLeft', - title => 'Time Left', value => sub { return $_[0]->TimeLeft } }, TimeEstimated => { attribute => 'TimeEstimated', - title => 'Time Estimated', value => sub { return $_[0]->TimeEstimated } }, Requestors => { @@ -217,7 +188,7 @@ $COLUMN_MAP = { value => sub { return $_[0]->CreatedObj->AgeAsString } }, LastUpdatedRelative => { - title => 'Last Updated', + title => 'LastUpdated', attribute => 'LastUpdated', value => sub { return $_[0]->LastUpdatedObj->AgeAsString } }, @@ -232,7 +203,7 @@ $COLUMN_MAP = { value => sub { my $date = $_[0]->DueObj; if ($date && $date->Unix > 0 && $date->Unix < time()) { - return (\'<span class="overdue">' , $date->AgeAsString , \'</span>'); + return '<span class="overdue">' . $date->AgeAsString . '</span>'; } else { return $date->AgeAsString; } @@ -257,17 +228,14 @@ $COLUMN_MAP = { }, CreatedBy => { attribute => 'CreatedBy', - title => 'Created By', value => sub { return $_[0]->CreatorObj->Name } }, LastUpdated => { attribute => 'LastUpdated', - title => 'Last Updated', value => sub { return $_[0]->LastUpdatedObj->AsString } }, LastUpdatedBy => { attribute => 'LastUpdatedBy', - title => 'Last Updated By', value => sub { return $_[0]->LastUpdatedByObj->Name } }, Told => { @@ -283,18 +251,144 @@ $COLUMN_MAP = { value => sub { return $_[0]->ResolvedObj->AsString } }, - # Everything from LINKTYPEMAP - (map { - $_ => { value => LinkCallback( $_ ) } - } keys %RT::Ticket::LINKTYPEMAP), + DependedOnBy => { + value => sub { + my $links = $_[0]->DependedOnBy; + return ( + join( + "<br>", + map { + '<A HREF="' + . $_->BaseURI->Resolver->HREF . '">' + . ( $_->BaseIsLocal ? $_->LocalBase : $_->Base ) + . '</A>' + } @{ $links->ItemsArrayRef } + ) + ); + } + }, + Members => { + value => sub { + my $links = $_[0]->Members; + return ( + join( + "<br>", + map { + '<A HREF="' + . $_->BaseURI->Resolver->HREF . '">' + . ( $_->BaseIsLocal ? $_->LocalBase : $_->Base ) + . '</A>' + } @{ $links->ItemsArrayRef } + ) + ); + } + }, + Children => { + value => sub { + my $links = $_[0]->Members; + return ( + join( + "<br>", + map { + '<A HREF="' + . $_->BaseURI->Resolver->HREF . '">' + . ( $_->BaseIsLocal ? $_->LocalBase : $_->Base ) + . '</A>' + } @{ $links->ItemsArrayRef } + ) + ); + } + }, + ReferredToBy => { + value => sub { + my $links = $_[0]->ReferredToBy; + return ( + join( + "<br>", + map { + '<A HREF="' + . $_->BaseURI->Resolver->HREF . '">' + . ( $_->BaseIsLocal ? $_->LocalBase : $_->Base ) + . '</A>' + } @{ $links->ItemsArrayRef } + ) + ); + } + }, + + DependsOn => { + value => sub { + my $links = $_[0]->DependsOn; + return ( + join( + "<br>", + map { + '<A HREF="' + . $_->TargetURI->Resolver->HREF . '">' + . ( $_->TargetIsLocal ? $_->LocalTarget : $_->Target ) + . '</A>' + } @{ $links->ItemsArrayRef } + ) + ); + } + }, + MemberOf => { + value => sub { + my $links = $_[0]->MemberOf; + return ( + join( + "<br>", + map { + '<A HREF="' + . $_->TargetURI->Resolver->HREF . '">' + . ( $_->TargetIsLocal ? $_->LocalTarget : $_->Target ) + . '</A>' + } @{ $links->ItemsArrayRef } + ) + ); + } + }, + Parents => { + value => sub { + my $links = $_[0]->MemberOf; + return ( + join( + "<br>", + map { + '<A HREF="' + . $_->TargetURI->Resolver->HREF . '">' + . ( $_->TargetIsLocal ? $_->LocalTarget : $_->Target ) + . '</A>' + } @{ $links->ItemsArrayRef } + ) + ); + } + }, + RefersTo => { + value => sub { + my $links = $_[0]->RefersTo; + return ( + join( + "<br>", + map { + '<A HREF="' + . $_->TargetURI->Resolver->HREF . '">' + . ( $_->TargetIsLocal ? $_->LocalTarget : $_->Target ) + . '</A>' + } @{ $links->ItemsArrayRef } + ) + ); + } + }, '_CLASS' => { value => sub { return $_[1] % 2 ? 'oddline' : 'evenline' } }, }; -</%ONCE> -<%init> + + + +# }}} $m->comp( '/Elements/Callback', COLUMN_MAP => $COLUMN_MAP, _CallbackName => 'ColumnMap'); -return ColumnMap($Name, $Attr); -</%init> +</%INIT> |