X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=rt%2Fshare%2Fhtml%2FElements%2FRT__Ticket%2FColumnMap;h=711c8f3a1376a6e26e91574b3dddc4467bdb00d8;hp=7df47100962a7615bfdfbbf7402900a1e2494544;hb=44dd00a3ff974a17999e86e64488e996edc71e3c;hpb=b4b0c7e72d7eaee2fbfc7022022c9698323203dd diff --git a/rt/share/html/Elements/RT__Ticket/ColumnMap b/rt/share/html/Elements/RT__Ticket/ColumnMap index 7df471009..711c8f3a1 100644 --- a/rt/share/html/Elements/RT__Ticket/ColumnMap +++ b/rt/share/html/Elements/RT__Ticket/ColumnMap @@ -1,40 +1,40 @@ %# BEGIN BPS TAGGED BLOCK {{{ -%# +%# %# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC -%# -%# +%# +%# This software is Copyright (c) 1996-2019 Best Practical Solutions, LLC +%# +%# %# (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 @@ -43,11 +43,12 @@ %# 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> $Name => undef $Attr => undef +$GenericMap => {} @@ -57,20 +58,36 @@ my $COLUMN_MAP; my $LinkCallback = sub { my $method = shift; - my $mode = $RT::Ticket::LINKTYPEMAP{$method}{Mode}; - my $type = $RT::Ticket::LINKTYPEMAP{$method}{Type}; + my $mode = $RT::Link::TYPEMAP{$method}{Mode}; + my $type = $RT::Link::TYPEMAP{$method}{Type}; my $other_mode = ($mode eq "Target" ? "Base" : "Target"); my $mode_uri = $mode.'URI'; - my $local_type = 'Local'.$mode; return sub { + my $ObjectType = $_[2]||''; map { \'', - ( $_->$mode_uri->IsLocal ? $_->$local_type : $_->$mode ), + ( $_->$mode_uri->AsString ), \'
', - } @{ $_[0]->Links($other_mode,$type)->ItemsArrayRef } + } # if someone says __RefersTo.{Ticket}__ filter for only local links that are tickets + grep { $ObjectType + ? ( $_->$mode_uri->IsLocal + && ( $_->$mode_uri->Object->RecordType eq $ObjectType )) + : 1 + } + @{ $_[0]->Links($other_mode,$type)->ItemsArrayRef } + } +}; + +my $trustSub = sub { + my $user = shift; + my %key = RT::Crypt->GetKeyInfo( Key => $user->EmailAddress ); + if (!defined $key{'info'}) { + return $m->interp->apply_escapes(' ' . loc("(no pubkey!)"), "h"); + } elsif ($key{'info'}{'TrustLevel'} == 0) { + return $m->interp->apply_escapes(' ' . loc("(untrusted!)"), "h"); } }; @@ -118,7 +135,7 @@ $COLUMN_MAP = { my $SearchURL = RT->Config->Get('WebPath') . '/Search/Results.html?' . $m->comp('/Elements/QueryString', Query => $Query); - return \'', loc('(pending [quant,_1,other ticket])',$count), \''; + return \'', loc('(pending [quant,_1,other ticket,other tickets])',$count), \''; } } else { @@ -169,21 +186,6 @@ $COLUMN_MAP = { title => 'Time Estimated', # loc value => sub { return $_[0]->TimeEstimated } }, - Requestors => { - title => 'Requestors', # loc - attribute => 'Requestor.EmailAddress', - value => sub { return $_[0]->Requestors->MemberEmailAddressesAsString } - }, - Cc => { - title => 'Cc', # loc - attribute => 'Cc.EmailAddress', - value => sub { return $_[0]->Cc->MemberEmailAddressesAsString } - }, - AdminCc => { - title => 'AdminCc', # loc - attribute => 'AdminCc.EmailAddress', - value => sub { return $_[0]->AdminCc->MemberEmailAddressesAsString } - }, StartsRelative => { title => 'Starts', # loc attribute => 'Starts', @@ -205,13 +207,18 @@ $COLUMN_MAP = { value => sub { my $date = $_[0]->DueObj; # Highlight the date if it was due in the past, and it's still active - if ( $date && $date->Unix > 0 && $date->Diff < 0 && $_[0]->QueueObj->IsActiveStatus($_[0]->Status)) { + if ( $date && $date->IsSet && $date->Diff < 0 && $_[0]->QueueObj->IsActiveStatus($_[0]->Status)) { return (\'' , $date->AgeAsString , \''); } else { return $date->AgeAsString; } } }, + WillResolveRelative => { + title => 'Will Resolve', + attribute => 'WillResolve', + value => sub { return $_[0]->WillResolveObj->AgeAsString }, + }, ResolvedRelative => { title => 'Resolved', # loc attribute => 'Resolved', @@ -220,27 +227,32 @@ $COLUMN_MAP = { Starts => { title => 'Starts', # loc attribute => 'Starts', - value => sub { return $_[0]->StartsObj->AsString } + value => sub { return $_[0]->StartsObj } }, Started => { title => 'Started', # loc attribute => 'Started', - value => sub { return $_[0]->StartedObj->AsString } + value => sub { return $_[0]->StartedObj }, }, Told => { title => 'Told', # loc attribute => 'Told', - value => sub { return $_[0]->ToldObj->AsString } + value => sub { return $_[0]->ToldObj }, }, Due => { title => 'Due', # loc attribute => 'Due', - value => sub { return $_[0]->DueObj->AsString } + value => sub { return $_[0]->DueObj }, + }, + WillResolve => { + title => 'Will Resolve', + attribute => 'WillResolve', + value => sub { return $_[0]->WillResolveObj }, }, Resolved => { title => 'Resolved', # loc attribute => 'Resolved', - value => sub { return $_[0]->ResolvedObj->AsString } + value => sub { return $_[0]->ResolvedObj } }, UpdateStatus => { title => 'New messages', # loc @@ -254,21 +266,7 @@ $COLUMN_MAP = { KeyRequestors => { title => 'Requestors', # loc attribute => 'Requestor.EmailAddress', - value => sub { - my $t = shift; - my @requestors = $t->Requestors->MemberEmailAddresses; - for my $email (@requestors) - { - my %key = RT::Crypt::GnuPG::GetKeyInfo($email); - if (!defined $key{'info'}) { - $email .= loc(" (no pubkey!)"); - } - elsif ($key{'info'}{'TrustLevel'} == 0) { - $email .= loc(" (untrusted!)"); - } - } - return join ', ', @requestors; - } + value => sub { return \($m->scomp("/Elements/ShowPrincipal", Object => $_[0]->Requestor, PostUser => $trustSub ) ) } }, KeyOwnerName => { title => 'Owner', # loc @@ -276,7 +274,7 @@ $COLUMN_MAP = { value => sub { my $t = shift; my $name = $t->OwnerObj->Name; - my %key = RT::Crypt::GnuPG::GetKeyInfo($t->OwnerObj->EmailAddress); + my %key = RT::Crypt->GetKeyInfo( Key => $t->OwnerObj->EmailAddress ); if (!defined $key{'info'}) { $name .= ' '. loc("(no pubkey!)"); } @@ -287,11 +285,16 @@ $COLUMN_MAP = { return $name; } }, + KeyOwner => { + title => 'Owner', # loc + attribute => 'Owner', + value => sub { return \($m->scomp("/Elements/ShowPrincipal", Object => $_[0]->OwnerObj, PostUser => $trustSub ) ) } + }, # Everything from LINKTYPEMAP (map { $_ => { value => $LinkCallback->( $_ ) } - } keys %RT::Ticket::LINKTYPEMAP), + } keys %RT::Link::TYPEMAP), '_CLASS' => { value => sub { return $_[1] % 2 ? 'oddline' : 'evenline' } @@ -303,26 +306,6 @@ $COLUMN_MAP = { value => sub { return \('') } }, - 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 - ), - \'
', - } @{ $values->ItemsArrayRef }; - pop @values; # Remove that last
- return @values; - }, - }, Bookmark => { title => ' ', value => sub { @@ -333,23 +316,20 @@ $COLUMN_MAP = { return \$bookmark; }, }, + + #freeside + $m->comp('/Elements/CustomerFields', 'ColumnMap'), + $m->comp('/Elements/ServiceFields', 'ColumnMap'), }; - -$COLUMN_MAP->{'CF'} = $COLUMN_MAP->{'CustomField'}; - -# if no GPG support, then KeyOwnerName and KeyRequestors fall back to the regular -# versions -if (RT->Config->Get('GnuPG')->{'Enable'}) { - require RT::Crypt::GnuPG; -} -else { - $COLUMN_MAP->{KeyOwnerName} = $COLUMN_MAP->{OwnerName}; - $COLUMN_MAP->{KeyRequestors} = $COLUMN_MAP->{Requestors}; -} <%init> -$m->callback( COLUMN_MAP => $COLUMN_MAP, CallbackName => 'Once', CallbackOnce => 1 ); -# backward compatibility -$m->callback( COLUMN_MAP => $COLUMN_MAP, CallbackName => 'ColumnMap' ); +# if no encryption support, then KeyOwnerName and KeyRequestors fall back to the regular +# versions +unless (RT->Config->Get('Crypt')->{'Enable'}) { + $COLUMN_MAP->{KeyOwnerName} = $COLUMN_MAP->{OwnerName}; + $COLUMN_MAP->{KeyRequestors} = $GenericMap->{Requestors}; +} + +$m->callback( GenericMap => $GenericMap, COLUMN_MAP => $COLUMN_MAP, CallbackName => 'Once', CallbackOnce => 1 ); return GetColumnMapEntry( Map => $COLUMN_MAP, Name => $Name, Attribute => $Attr );