[Rt-commit] rt branch, 4.2/pluggable-cf-types, updated. rt-4.0.0rc6-135-g779a12a
Chia-liang Kao
clkao at bestpractical.com
Wed Mar 9 08:25:12 EST 2011
The branch, 4.2/pluggable-cf-types has been updated
via 779a12a3f6025b8afa6b93c19ca9e81cb77e1757 (commit)
via 7dc62b834543a024b756b6188365e6dde8a16abd (commit)
via eab78fbea954473a69718d182d7d04d9718c4c53 (commit)
via f95d4bc7b191879d9b5db11e0b65bf1903d72ea2 (commit)
via fe8756f01f83ce8bb5e812e388b05ff331693c50 (commit)
from 347c6f561a3bbb1205e27b03fe764ac2579fac5f (commit)
Summary of changes:
lib/RT/CustomField.pm | 63 ++++++---
lib/RT/CustomField/Type/IPAddress.pm | 100 +++++++++++++
lib/RT/CustomField/Type/IPAddressRange.pm | 137 ++++++++++++++++++
lib/RT/ObjectCustomFieldValue.pm | 224 +++--------------------------
lib/RT/Tickets.pm | 4 +-
5 files changed, 306 insertions(+), 222 deletions(-)
create mode 100644 lib/RT/CustomField/Type/IPAddress.pm
create mode 100644 lib/RT/CustomField/Type/IPAddressRange.pm
- Log -----------------------------------------------------------------
commit fe8756f01f83ce8bb5e812e388b05ff331693c50
Author: Chia-liang Kao <clkao at bestpractical.com>
Date: Wed Mar 9 19:08:20 2011 +0800
remove unused param
diff --git a/lib/RT/Tickets.pm b/lib/RT/Tickets.pm
index e9c9e62..633bbc7 100644
--- a/lib/RT/Tickets.pm
+++ b/lib/RT/Tickets.pm
@@ -1498,7 +1498,7 @@ sub _CustomFieldLimit_Date {
# returns true if the custom field type expansion has handled the rest of the query
sub _CustomFieldLimit_TypeExpansion {
- my ($self, $field, $cf, $value, $op, undef, %rest) = @_;
+ my ($self, $field, $cf, $value, $op, %rest) = @_;
if ($cf->Type eq 'IPAddressRange') {
return $self->_CustomFieldLimit_IPAddressRange($field, $value, $op, %rest);
@@ -1594,7 +1594,7 @@ sub _CustomFieldLimit {
# if column is not defined, that means the CF type still has
# change to expand the query into actual column clauses
return if
- $self->_CustomFieldLimit_TypeExpansion($field, $cf, $value, $op, undef, %rest);
+ $self->_CustomFieldLimit_TypeExpansion($field, $cf, $value, $op, %rest);
}
if ( !$negative_op || $single_value ) {
commit f95d4bc7b191879d9b5db11e0b65bf1903d72ea2
Author: Chia-liang Kao <clkao at bestpractical.com>
Date: Wed Mar 9 19:50:19 2011 +0800
move canonicalize functions to their class of custom field types.
diff --git a/lib/RT/CustomField.pm b/lib/RT/CustomField.pm
index bfb6e54..4fdb0c0 100644
--- a/lib/RT/CustomField.pm
+++ b/lib/RT/CustomField.pm
@@ -170,25 +170,6 @@ our %FieldTypes = (
'Select up to [_1] datetimes', # loc
]
},
-
- IPAddress => {
- sort_order => 110,
- selection_type => 0,
-
- labels => [ 'Enter multiple IP addresses', # loc
- 'Enter one IP address', # loc
- 'Enter up to [_1] IP addresses', # loc
- ]
- },
- IPAddressRange => {
- sort_order => 120,
- selection_type => 0,
-
- labels => [ 'Enter multiple IP address ranges', # loc
- 'Enter one IP address range', # loc
- 'Enter up to [_1] IP address ranges', # loc
- ]
- },
);
@@ -218,6 +199,50 @@ our $RIGHT_CATEGORIES = {
# Tell RT::ACE that this sort of object can get acls granted
$RT::ACE::OBJECT_TYPES{'RT::CustomField'} = 1;
+
+sub RegisterType {
+ my ($class, $name, $param) = @_;
+ $FieldTypes{$name} = $param;
+
+ if (my $class = $param->{class}) {
+ $class->require or die $UNIVERSAL::require::ERROR;
+ }
+}
+
+sub GetTypeClass {
+ my ($self) = @_;
+ my $type = $FieldTypes{$self->Type};
+ $type ? $type->{class} : undef;
+# $FieldTypes{$name}{class};
+}
+
+__PACKAGE__->RegisterType(
+ IPAddress => {
+ sort_order => 110,
+ selection_type => 0,
+
+ labels => [ 'Enter multiple IP addresses', # loc
+ 'Enter one IP address', # loc
+ 'Enter up to [_1] IP addresses', # loc
+ ],
+ class => 'RT::CustomField::Type::IPAddress',
+ },
+
+);
+
+__PACKAGE__->RegisterType(
+ IPAddressRange => {
+ sort_order => 120,
+ selection_type => 0,
+
+ labels => [ 'Enter multiple IP address ranges', # loc
+ 'Enter one IP address range', # loc
+ 'Enter up to [_1] IP address ranges', # loc
+ ],
+ class => 'RT::CustomField::Type::IPAddressRange',
+ },
+);
+
__PACKAGE__->AddRights(%$RIGHTS);
__PACKAGE__->AddRightCategories(%$RIGHT_CATEGORIES);
diff --git a/lib/RT/CustomField/Type/IPAddress.pm b/lib/RT/CustomField/Type/IPAddress.pm
new file mode 100644
index 0000000..be01d19
--- /dev/null
+++ b/lib/RT/CustomField/Type/IPAddress.pm
@@ -0,0 +1,86 @@
+package RT::CustomField::Type::IPAddress;
+use strict;
+use warnings;
+
+use Regexp::Common qw(RE_net_IPv4);
+use Regexp::IPv6 qw($IPv6_re);
+
+sub CanonicalizeForCreate {
+ my ($self, $cf, $args) = @_;
+
+ if ( $args->{'Content'} ) {
+ $args->{'Content'} = $self->ParseIP( $args->{'Content'} );
+ }
+
+
+ unless ( defined $args->{'Content'} ) {
+ return wantarray
+ ? ( 0, "Content is an invalid IP address" ) # loc
+ : 0;
+ }
+
+ return wantarray ? ( 1 ) : 1;
+}
+
+sub CanonicalizeForSearch {
+ my ($self, $cf, $value, $op ) = @_;
+
+ my $parsed = $self->ParseIP($value);
+ if ($parsed) {
+ $value = $parsed;
+ }
+ else {
+ $RT::Logger->warn("$value is not a valid IPAddress");
+ }
+ return $value;
+}
+
+sub ParseIP {
+ my $self = shift;
+ my $value = shift or return;
+ $value = lc $value;
+ $value =~ s!^\s+!!;
+ $value =~ s!\s+$!!;
+
+ if ( $value =~ /^($RE{net}{IPv4})$/o ) {
+ return sprintf "%03d.%03d.%03d.%03d", split /\./, $1;
+ }
+ elsif ( $value =~ /^$IPv6_re$/o ) {
+
+ # up_fields are before '::'
+ # low_fields are after '::' but without v4
+ # v4_fields are the v4
+ my ( @up_fields, @low_fields, @v4_fields );
+ my $v6;
+ if ( $value =~ /(.*:)(\d+\..*)/ ) {
+ ( $v6, my $v4 ) = ( $1, $2 );
+ chop $v6 unless $v6 =~ /::$/;
+ while ( $v4 =~ /(\d+)\.(\d+)/g ) {
+ push @v4_fields, sprintf '%.2x%.2x', $1, $2;
+ }
+ }
+ else {
+ $v6 = $value;
+ }
+
+ my ( $up, $low );
+ if ( $v6 =~ /::/ ) {
+ ( $up, $low ) = split /::/, $v6;
+ }
+ else {
+ $up = $v6;
+ }
+
+ @up_fields = split /:/, $up;
+ @low_fields = split /:/, $low if $low;
+
+ my @zero_fields =
+ ('0000') x ( 8 - @v4_fields - @up_fields - @low_fields );
+ my @fields = ( @up_fields, @zero_fields, @low_fields, @v4_fields );
+
+ return join ':', map { sprintf "%.4x", hex "0x$_" } @fields;
+ }
+ return;
+}
+
+1;
diff --git a/lib/RT/CustomField/Type/IPAddressRange.pm b/lib/RT/CustomField/Type/IPAddressRange.pm
new file mode 100644
index 0000000..e5bb609
--- /dev/null
+++ b/lib/RT/CustomField/Type/IPAddressRange.pm
@@ -0,0 +1,107 @@
+package RT::CustomField::Type::IPAddressRange;
+use strict;
+use warnings;
+
+use RT::CustomField::Type::IPAddress;
+
+use Regexp::Common qw(RE_net_IPv4);
+use Regexp::IPv6 qw($IPv6_re);
+use Regexp::Common::net::CIDR;
+require Net::CIDR;
+
+sub CanonicalizeForCreate {
+ my ($self, $cf, $args) = @_;
+
+ if ($args->{'Content'}) {
+ ($args->{'Content'}, $args->{'LargeContent'}) =
+ $self->ParseIPRange( $args->{'Content'} );
+ }
+ $args->{'ContentType'} = 'text/plain';
+
+ unless ( defined $args->{'Content'} ) {
+ return wantarray
+ ? ( 0, "Content is an invalid IP address range" ) # loc
+ : 0;
+ }
+
+ return wantarray ? ( 1 ) : 1;
+}
+
+sub CanonicalizeForSearch {
+ my ($self, $cf, $value, $op) = @_;
+
+ if ( $value =~ /^\s*$RE{net}{CIDR}{IPv4}{-keep}\s*$/o ) {
+
+ # convert incomplete 192.168/24 to 192.168.0.0/24 format
+ $value =
+ join( '.', map $_ || 0, ( split /\./, $1 )[ 0 .. 3 ] ) . "/$2"
+ || $value;
+ }
+
+ my ( $start_ip, $end_ip ) =
+ $self->ParseIPRange($value);
+ if ( $start_ip && $end_ip ) {
+ if ( $op =~ /^([<>])=?$/ ) {
+ my $is_less = $1 eq '<' ? 1 : 0;
+ if ( $is_less ) {
+ $value = $start_ip;
+ }
+ else {
+ $value = $end_ip;
+ }
+ }
+ else {
+ $value = join '-', $start_ip, $end_ip;
+ }
+ }
+ else {
+ $RT::Logger->warn("$value is not a valid IPAddressRange");
+ }
+ return $value;
+}
+
+*ParseIP = \&RT::CustomField::Type::IPAddress::ParseIP;
+
+sub ParseIPRange {
+ my $self = shift;
+ my $value = shift or return;
+ $value = lc $value;
+ $value =~ s!^\s+!!;
+ $value =~ s!\s+$!!;
+
+ if ( $value =~ /^$RE{net}{CIDR}{IPv4}{-keep}$/go ) {
+ my $cidr = join( '.', map $_||0, (split /\./, $1)[0..3] ) ."/$2";
+ $value = (Net::CIDR::cidr2range( $cidr ))[0] || $value;
+ }
+ elsif ( $value =~ /^$IPv6_re(?:\/\d+)?$/o ) {
+ $value = (Net::CIDR::cidr2range( $value ))[0] || $value;
+ }
+
+ my ($sIP, $eIP);
+ if ( $value =~ /^($RE{net}{IPv4})$/o ) {
+ $sIP = $eIP = sprintf "%03d.%03d.%03d.%03d", split /\./, $1;
+ }
+ elsif ( $value =~ /^($RE{net}{IPv4})-($RE{net}{IPv4})$/o ) {
+ $sIP = sprintf "%03d.%03d.%03d.%03d", split /\./, $1;
+ $eIP = sprintf "%03d.%03d.%03d.%03d", split /\./, $2;
+ }
+ elsif ( $value =~ /^($IPv6_re)$/o ) {
+ $sIP = $self->ParseIP( $1 );
+ $eIP = $sIP;
+ }
+ elsif ( $value =~ /^($IPv6_re)-($IPv6_re)$/o ) {
+ ($sIP, $eIP) = ( $1, $2 );
+ $sIP = $self->ParseIP( $sIP );
+ $eIP = $self->ParseIP( $eIP );
+ }
+ else {
+ return;
+ }
+
+ ($sIP, $eIP) = ($eIP, $sIP) if $sIP gt $eIP;
+
+ return $sIP, $eIP;
+}
+
+
+1;
diff --git a/lib/RT/ObjectCustomFieldValue.pm b/lib/RT/ObjectCustomFieldValue.pm
index 9dde495..f838030 100644
--- a/lib/RT/ObjectCustomFieldValue.pm
+++ b/lib/RT/ObjectCustomFieldValue.pm
@@ -52,11 +52,6 @@ use strict;
use warnings;
use RT::Interface::Web;
-use Regexp::Common qw(RE_net_IPv4);
-use Regexp::IPv6 qw($IPv6_re);
-use Regexp::Common::net::CIDR;
-require Net::CIDR;
-
@@ -69,83 +64,30 @@ sub Table {'ObjectCustomFieldValues'}
sub _CanonicalizeForCreate {
my ($self, $cf_as_sys, $args) = @_;
- if($cf_as_sys->Type eq 'IPAddress') {
- if ( $args->{'Content'} ) {
- $args->{'Content'} = $self->ParseIP( $args->{'Content'} );
- }
-
- unless ( defined $args->{'Content'} ) {
- return
- wantarray
- ? ( 0, $self->loc("Content is an invalid IP address") )
- : 0;
- }
- }
-
- if($cf_as_sys->Type eq 'IPAddressRange') {
- if ($args->{'Content'}) {
- ($args->{'Content'}, $args->{'LargeContent'}) = $self->ParseIPRange( $args->{'Content'} );
- }
- $args->{'ContentType'} = 'text/plain';
+ my $class = $cf_as_sys->GetTypeClass;
- unless ( defined $args->{'Content'} ) {
- return
- wantarray
- ? ( 0, $self->loc("Content is an invalid IP address range") )
- : 0;
+ if ($class) {
+ my ($ret, $msg) = $class->CanonicalizeForCreate( $cf_as_sys, $args );
+ unless ($ret) {
+ return (0, $self->loc($msg));
}
}
return wantarray ? (1) : 1;
}
-# XXX: not yet, the ipaddressrange belongs to some deeper hook for CFLimit
sub _CanonicalizeForSearch {
my ($self, $cf, $value, $op) = @_;
- if ( $cf && $cf->Type eq 'IPAddress' ) {
- my $parsed = RT::ObjectCustomFieldValue->ParseIP($value);
- if ($parsed) {
- $value = $parsed;
- }
- else {
- $RT::Logger->warn("$value is not a valid IPAddress");
- }
- }
-
- if ( $cf->Type eq 'IPAddressRange' ) {
+ return unless $cf;
- if ( $value =~ /^\s*$RE{net}{CIDR}{IPv4}{-keep}\s*$/o ) {
+ my $class = $cf->GetTypeClass;
- # convert incomplete 192.168/24 to 192.168.0.0/24 format
- $value =
- join( '.', map $_ || 0, ( split /\./, $1 )[ 0 .. 3 ] ) . "/$2"
- || $value;
- }
-
- my ( $start_ip, $end_ip ) =
- RT::ObjectCustomFieldValue->ParseIPRange($value);
- if ( $start_ip && $end_ip ) {
- if ( $op =~ /^([<>])=?$/ ) {
- my $is_less = $1 eq '<' ? 1 : 0;
- if ( $is_less ) {
- $value = $start_ip;
- }
- else {
- $value = $end_ip;
- }
- }
- else {
- $value = join '-', $start_ip, $end_ip;
- }
- }
- else {
- $RT::Logger->warn("$value is not a valid IPAddressRange");
- }
+ if ($class) {
+ $value = $class->CanonicalizeForSearch( $cf, $value, $op );
}
return $value;
-
}
sub Create {
@@ -226,7 +168,7 @@ sub LoadByCols {
$cf->Load( $args{CustomField} );
if ( $cf->Type && $cf->Type eq 'IPAddressRange' ) {
- my ( $sIP, $eIP ) = $cf->ParseIPRange( $args{'Content'} );
+ my ( $sIP, $eIP ) = RT::CustomField::Type::IPAddressRange->ParseIPRange( $args{'Content'} );
if ( $sIP && $eIP ) {
$self->SUPER::LoadByCols( %args,
Content => $sIP,
@@ -307,6 +249,7 @@ content, try "LargeContent"
my $re_ip_sunit = qr/[0-1][0-9][0-9]|2[0-4][0-9]|25[0-5]/;
my $re_ip_serialized = qr/$re_ip_sunit(?:\.$re_ip_sunit){3}/;
+use Regexp::IPv6 qw($IPv6_re);
sub Content {
my $self = shift;
@@ -478,97 +421,6 @@ sub IncludeContentForValue {
return $self->_FillInTemplateURL($self->CustomFieldObj->IncludeContentForValue);
}
-
-sub ParseIPRange {
- my $self = shift;
- my $value = shift or return;
- $value = lc $value;
- $value =~ s!^\s+!!;
- $value =~ s!\s+$!!;
-
- if ( $value =~ /^$RE{net}{CIDR}{IPv4}{-keep}$/go ) {
- my $cidr = join( '.', map $_||0, (split /\./, $1)[0..3] ) ."/$2";
- $value = (Net::CIDR::cidr2range( $cidr ))[0] || $value;
- }
- elsif ( $value =~ /^$IPv6_re(?:\/\d+)?$/o ) {
- $value = (Net::CIDR::cidr2range( $value ))[0] || $value;
- }
-
- my ($sIP, $eIP);
- if ( $value =~ /^($RE{net}{IPv4})$/o ) {
- $sIP = $eIP = sprintf "%03d.%03d.%03d.%03d", split /\./, $1;
- }
- elsif ( $value =~ /^($RE{net}{IPv4})-($RE{net}{IPv4})$/o ) {
- $sIP = sprintf "%03d.%03d.%03d.%03d", split /\./, $1;
- $eIP = sprintf "%03d.%03d.%03d.%03d", split /\./, $2;
- }
- elsif ( $value =~ /^($IPv6_re)$/o ) {
- $sIP = $self->ParseIP( $1 );
- $eIP = $sIP;
- }
- elsif ( $value =~ /^($IPv6_re)-($IPv6_re)$/o ) {
- ($sIP, $eIP) = ( $1, $2 );
- $sIP = $self->ParseIP( $sIP );
- $eIP = $self->ParseIP( $eIP );
- }
- else {
- return;
- }
-
- ($sIP, $eIP) = ($eIP, $sIP) if $sIP gt $eIP;
-
- return $sIP, $eIP;
-}
-
-sub ParseIP {
- my $self = shift;
- my $value = shift or return;
- $value = lc $value;
- $value =~ s!^\s+!!;
- $value =~ s!\s+$!!;
-
- if ( $value =~ /^($RE{net}{IPv4})$/o ) {
- return sprintf "%03d.%03d.%03d.%03d", split /\./, $1;
- }
- elsif ( $value =~ /^$IPv6_re$/o ) {
-
- # up_fields are before '::'
- # low_fields are after '::' but without v4
- # v4_fields are the v4
- my ( @up_fields, @low_fields, @v4_fields );
- my $v6;
- if ( $value =~ /(.*:)(\d+\..*)/ ) {
- ( $v6, my $v4 ) = ( $1, $2 );
- chop $v6 unless $v6 =~ /::$/;
- while ( $v4 =~ /(\d+)\.(\d+)/g ) {
- push @v4_fields, sprintf '%.2x%.2x', $1, $2;
- }
- }
- else {
- $v6 = $value;
- }
-
- my ( $up, $low );
- if ( $v6 =~ /::/ ) {
- ( $up, $low ) = split /::/, $v6;
- }
- else {
- $up = $v6;
- }
-
- @up_fields = split /:/, $up;
- @low_fields = split /:/, $low if $low;
-
- my @zero_fields =
- ('0000') x ( 8 - @v4_fields - @up_fields - @low_fields );
- my @fields = ( @up_fields, @zero_fields, @low_fields, @v4_fields );
-
- return join ':', map { sprintf "%.4x", hex "0x$_" } @fields;
- }
- return;
-}
-
-
=head2 id
Returns the current value of id.
commit eab78fbea954473a69718d182d7d04d9718c4c53
Author: Chia-liang Kao <clkao at bestpractical.com>
Date: Wed Mar 9 20:15:41 2011 +0800
Make use of canonicalize in loadbycols
diff --git a/lib/RT/ObjectCustomFieldValue.pm b/lib/RT/ObjectCustomFieldValue.pm
index f838030..7d0f963 100644
--- a/lib/RT/ObjectCustomFieldValue.pm
+++ b/lib/RT/ObjectCustomFieldValue.pm
@@ -166,14 +166,16 @@ sub LoadByCols {
if ( $args{CustomField} ) {
$cf = RT::CustomField->new( $self->CurrentUser );
$cf->Load( $args{CustomField} );
- if ( $cf->Type && $cf->Type eq 'IPAddressRange' ) {
-
- my ( $sIP, $eIP ) = RT::CustomField::Type::IPAddressRange->ParseIPRange( $args{'Content'} );
- if ( $sIP && $eIP ) {
- $self->SUPER::LoadByCols( %args,
- Content => $sIP,
- LargeContent => $eIP
- );
+
+ if ( exists $args{'Content'} && defined $args{'Content'} ) {
+ my ($ret, $msg) = $self->_CanonicalizeForCreate( $cf, \%args );
+ if ($ret) {
+ $self->SUPER::LoadByCols( %args );
+ }
+ else {
+ return wantarray
+ ? ( 0, $msg )
+ : 0;
}
}
}
commit 7dc62b834543a024b756b6188365e6dde8a16abd
Author: Chia-liang Kao <clkao at bestpractical.com>
Date: Wed Mar 9 20:15:51 2011 +0800
cleanup
diff --git a/lib/RT/CustomField.pm b/lib/RT/CustomField.pm
index 4fdb0c0..86129a7 100644
--- a/lib/RT/CustomField.pm
+++ b/lib/RT/CustomField.pm
@@ -211,9 +211,9 @@ sub RegisterType {
sub GetTypeClass {
my ($self) = @_;
+ return unless $self->Type;
my $type = $FieldTypes{$self->Type};
$type ? $type->{class} : undef;
-# $FieldTypes{$name}{class};
}
__PACKAGE__->RegisterType(
commit 779a12a3f6025b8afa6b93c19ca9e81cb77e1757
Author: Chia-liang Kao <clkao at bestpractical.com>
Date: Wed Mar 9 20:29:14 2011 +0800
Make Stringify a type class method
diff --git a/lib/RT/CustomField/Type/IPAddress.pm b/lib/RT/CustomField/Type/IPAddress.pm
index be01d19..5ef1bdc 100644
--- a/lib/RT/CustomField/Type/IPAddress.pm
+++ b/lib/RT/CustomField/Type/IPAddress.pm
@@ -35,6 +35,20 @@ sub CanonicalizeForSearch {
return $value;
}
+my $re_ip_sunit = qr/[0-1][0-9][0-9]|2[0-4][0-9]|25[0-5]/;
+my $re_ip_serialized = qr/$re_ip_sunit(?:\.$re_ip_sunit){3}/;
+
+sub Stringify {
+ my ($self, $ocfv) = @_;
+ my $content = $ocfv->_Value('Content');
+
+ if ( $content =~ /^\s*($re_ip_serialized)\s*$/o ) {
+ $content = sprintf "%d.%d.%d.%d", split /\./, $1;
+ }
+
+ return $content
+}
+
sub ParseIP {
my $self = shift;
my $value = shift or return;
diff --git a/lib/RT/CustomField/Type/IPAddressRange.pm b/lib/RT/CustomField/Type/IPAddressRange.pm
index e5bb609..398370d 100644
--- a/lib/RT/CustomField/Type/IPAddressRange.pm
+++ b/lib/RT/CustomField/Type/IPAddressRange.pm
@@ -2,7 +2,7 @@ package RT::CustomField::Type::IPAddressRange;
use strict;
use warnings;
-use RT::CustomField::Type::IPAddress;
+use base qw(RT::CustomField::Type::IPAddress);
use Regexp::Common qw(RE_net_IPv4);
use Regexp::IPv6 qw($IPv6_re);
@@ -60,7 +60,37 @@ sub CanonicalizeForSearch {
return $value;
}
-*ParseIP = \&RT::CustomField::Type::IPAddress::ParseIP;
+my $re_ip_sunit = qr/[0-1][0-9][0-9]|2[0-4][0-9]|25[0-5]/;
+my $re_ip_serialized = qr/$re_ip_sunit(?:\.$re_ip_sunit){3}/;
+use Regexp::IPv6 qw($IPv6_re);
+
+sub Stringify {
+ my ($self, $ocfv) = @_;
+ my $content = $self->SUPER::Stringify($ocfv);
+
+ my $large_content = $ocfv->__Value('LargeContent');
+ if ( $large_content =~ /^\s*($re_ip_serialized)\s*$/o ) {
+ my $eIP = sprintf "%d.%d.%d.%d", split /\./, $1;
+ if ( $content eq $eIP ) {
+ return $content;
+ }
+ else {
+ return $content . "-" . $eIP;
+ }
+ }
+ elsif ( $large_content =~ /^\s*($IPv6_re)\s*$/o ) {
+ my $eIP = $1;
+ if ( $content eq $eIP ) {
+ return $content;
+ }
+ else {
+ return $content . "-" . $eIP;
+ }
+ }
+ else {
+ return $content;
+ }
+}
sub ParseIPRange {
my $self = shift;
diff --git a/lib/RT/ObjectCustomFieldValue.pm b/lib/RT/ObjectCustomFieldValue.pm
index 7d0f963..6480134 100644
--- a/lib/RT/ObjectCustomFieldValue.pm
+++ b/lib/RT/ObjectCustomFieldValue.pm
@@ -249,48 +249,16 @@ content, try "LargeContent"
=cut
-my $re_ip_sunit = qr/[0-1][0-9][0-9]|2[0-4][0-9]|25[0-5]/;
-my $re_ip_serialized = qr/$re_ip_sunit(?:\.$re_ip_sunit){3}/;
-use Regexp::IPv6 qw($IPv6_re);
-
sub Content {
my $self = shift;
- my $content = $self->_Value('Content');
- if ( $self->CustomFieldObj->Type eq 'IPAddress'
- || $self->CustomFieldObj->Type eq 'IPAddressRange' )
- {
-
- if ( $content =~ /^\s*($re_ip_serialized)\s*$/o ) {
- $content = sprintf "%d.%d.%d.%d", split /\./, $1;
- }
+ my $class = $self->CustomFieldObj->GetTypeClass;
- return $content if $self->CustomFieldObj->Type eq 'IPAddress';
-
- my $large_content = $self->__Value('LargeContent');
- if ( $large_content =~ /^\s*($re_ip_serialized)\s*$/o ) {
- my $eIP = sprintf "%d.%d.%d.%d", split /\./, $1;
- if ( $content eq $eIP ) {
- return $content;
- }
- else {
- return $content . "-" . $eIP;
- }
- }
- elsif ( $large_content =~ /^\s*($IPv6_re)\s*$/o ) {
- my $eIP = $1;
- if ( $content eq $eIP ) {
- return $content;
- }
- else {
- return $content . "-" . $eIP;
- }
- }
- else {
- return $content;
- }
+ if ($class) {
+ return $class->Stringify( $self );
}
+ my $content = $self->_Value('Content');
if ( !(defined $content && length $content) && $self->ContentType && $self->ContentType eq 'text/plain' ) {
return $self->LargeContent;
} else {
-----------------------------------------------------------------------
More information about the Rt-commit
mailing list