X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=rt%2Flib%2FRT%2FObjectCustomFieldValue_Overlay.pm;h=37ad0567b8835ed87f5ae5200daca91f13c838b3;hb=b4b0c7e72d7eaee2fbfc7022022c9698323203dd;hp=7f50f2cc271e2944cd67fce300bc96c5d60409c0;hpb=2dfda73eeb3eae2d4f894099754794ef07d060dd;p=freeside.git diff --git a/rt/lib/RT/ObjectCustomFieldValue_Overlay.pm b/rt/lib/RT/ObjectCustomFieldValue_Overlay.pm index 7f50f2cc2..37ad0567b 100644 --- a/rt/lib/RT/ObjectCustomFieldValue_Overlay.pm +++ b/rt/lib/RT/ObjectCustomFieldValue_Overlay.pm @@ -1,8 +1,8 @@ # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: -# -# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC +# +# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -45,64 +45,66 @@ # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} + package RT::ObjectCustomFieldValue; use strict; -no warnings qw(redefine); +use warnings; +use RT::Interface::Web; +no warnings qw(redefine); sub Create { my $self = shift; my %args = ( - CustomField => '0', - ObjectType => '', - ObjectId => '0', - Disabled => '0', - Content => '', - LargeContent => '', - ContentType => '', - ContentEncoding => '', - - @_); - - - if( $args{'Content'} && length($args{'Content'}) > 255 && !$args{'LargeContent'} ) { - - $args{'LargeContent'} = $args{'Content'}; - $args{'Content'} = ''; - $args{'ContentType'} = 'text/plain'; + CustomField => 0, + ObjectType => '', + ObjectId => 0, + Disabled => 0, + Content => '', + LargeContent => undef, + ContentType => '', + ContentEncoding => '', + @_, + ); + + if ( defined $args{'Content'} && length( Encode::encode_utf8($args{'Content'}) ) > 255 ) { + if ( defined $args{'LargeContent'} && length $args{'LargeContent'} ) { + $RT::Logger->error("Content is longer than 255 bytes and LargeContent specified"); + } + else { + $args{'LargeContent'} = $args{'Content'}; + $args{'Content'} = ''; + $args{'ContentType'} ||= 'text/plain'; + } } ( $args{'ContentEncoding'}, $args{'LargeContent'} ) = - $self->_EncodeLOB( $args{'LargeContent'}, $args{'ContentType'} ) - if ( $args{'LargeContent'} ); - - $self->SUPER::Create( - CustomField => $args{'CustomField'}, - ObjectType => $args{'ObjectType'}, - ObjectId => $args{'ObjectId'}, - Disabled => $args{'Disabled'}, - Content => $args{'Content'}, - LargeContent => $args{'LargeContent'}, - ContentType => $args{'ContentType'}, - ContentEncoding => $args{'ContentEncoding'}, -); - - - + $self->_EncodeLOB( $args{'LargeContent'}, $args{'ContentType'} ) + if defined $args{'LargeContent'}; + + return $self->SUPER::Create( + CustomField => $args{'CustomField'}, + ObjectType => $args{'ObjectType'}, + ObjectId => $args{'ObjectId'}, + Disabled => $args{'Disabled'}, + Content => $args{'Content'}, + LargeContent => $args{'LargeContent'}, + ContentType => $args{'ContentType'}, + ContentEncoding => $args{'ContentEncoding'}, + ); } sub LargeContent { my $self = shift; - $self->_DecodeLOB( $self->ContentType, $self->ContentEncoding, - $self->_Value( 'LargeContent', decode_utf8 => 0 ) ); - + return $self->_DecodeLOB( + $self->ContentType, + $self->ContentEncoding, + $self->_Value( 'LargeContent', decode_utf8 => 0 ) + ); } - - - =head2 LoadByTicketContentAndCustomField { Ticket => TICKET, CustomField => CUSTOMFIELD, Content => CONTENT } Loads a custom field value by Ticket, Content and which CustomField it's tied to @@ -112,40 +114,40 @@ Loads a custom field value by Ticket, Content and which CustomField it's tied to sub LoadByTicketContentAndCustomField { my $self = shift; - my %args = ( Ticket => undef, - CustomField => undef, - Content => undef, - @_ - ); - - - $self->LoadByCols( Content => $args{'Content'}, - CustomField => $args{'CustomField'}, - ObjectType => 'RT::Ticket', - ObjectId => $args{'Ticket'}, - Disabled => 0 - ); - - + my %args = ( + Ticket => undef, + CustomField => undef, + Content => undef, + @_ + ); + + return $self->LoadByCols( + Content => $args{'Content'}, + CustomField => $args{'CustomField'}, + ObjectType => 'RT::Ticket', + ObjectId => $args{'Ticket'}, + Disabled => 0 + ); } sub LoadByObjectContentAndCustomField { my $self = shift; - my %args = ( Object => undef, - CustomField => undef, - Content => undef, - @_ - ); + my %args = ( + Object => undef, + CustomField => undef, + Content => undef, + @_ + ); my $obj = $args{'Object'} or return; - $self->LoadByCols( Content => $args{'Content'}, - CustomField => $args{'CustomField'}, - ObjectType => ref($obj), - ObjectId => $obj->Id, - Disabled => 0 - ); - + return $self->LoadByCols( + Content => $args{'Content'}, + CustomField => $args{'CustomField'}, + ObjectType => ref($obj), + ObjectId => $obj->Id, + Disabled => 0 + ); } @@ -156,18 +158,16 @@ content, try "LargeContent" =cut - sub Content { my $self = shift; my $content = $self->SUPER::Content; - if (!$content && $self->ContentType eq 'text/plain') { - return $self->LargeContent(); + if ( !(defined $content && length $content) && $self->ContentType && $self->ContentType eq 'text/plain' ) { + return $self->LargeContent; } else { return $content; } } - =head2 Object Returns the object this value applies to @@ -176,9 +176,9 @@ Returns the object this value applies to sub Object { my $self = shift; - my $Object = $self->__Value('ObjectType')->new($self->CurrentUser); - $Object->Load($self->__Value('ObjectId')); - return($Object); + my $Object = $self->__Value('ObjectType')->new( $self->CurrentUser ); + $Object->LoadById( $self->__Value('ObjectId') ); + return $Object; } @@ -191,13 +191,13 @@ Disable this value. Used to remove "current" values from records while leaving t sub Delete { my $self = shift; - $self->SetDisabled(1); + return $self->SetDisabled(1); } =head2 _FillInTemplateURL URL Takes a URL containing placeholders and returns the URL as filled in for this -ObjectCustomFieldValue. +ObjectCustomFieldValue. The values for the placeholders will be URI-escaped. Available placeholders: @@ -211,21 +211,41 @@ The id of the object in question. The value of this custom field for the object in question. +=item __WebDomain__, __WebPort__, __WebPath__, __WebBaseURL__ and __WebURL__ + +The value of the config option. + =back =cut -sub _FillInTemplateURL { +{ +my %placeholders = ( + id => { value => sub { $_[0]->ObjectId }, escape => 1 }, + CustomField => { value => sub { $_[0]->Content }, escape => 1 }, + WebDomain => { value => sub { RT->Config->Get('WebDomain') } }, + WebPort => { value => sub { RT->Config->Get('WebPort') } }, + WebPath => { value => sub { RT->Config->Get('WebPath') } }, + WebBaseURL => { value => sub { RT->Config->Get('WebBaseURL') } }, + WebURL => { value => sub { RT->Config->Get('WebURL') } }, +); +sub _FillInTemplateURL { my $self = shift; - my $url = shift; - $url =~ s/__id__/@{[$self->ObjectId]}/g; - $url =~ s/__CustomField__/@{[$self->Content]}/g; + # default value, uri-escape + for my $key (keys %placeholders) { + $url =~ s{__${key}__}{ + my $value = $placeholders{$key}{'value'}->( $self ); + $value = '' if !defined($value); + RT::Interface::Web::EscapeURI(\$value) if $placeholders{$key}{'escape'}; + $value + }gxe; + } return $url; -} +} } =head2 ValueLinkURL @@ -256,7 +276,4 @@ sub IncludeContentForValue { return $self->_FillInTemplateURL($self->CustomFieldObj->IncludeContentForValue); } - - - 1;