[Rt-commit] r6330 - in rtir/branches/2.1-EXPERIMENTAL: .
ruz at bestpractical.com
ruz at bestpractical.com
Mon Oct 30 15:08:28 EST 2006
Author: ruz
Date: Mon Oct 30 15:08:27 2006
New Revision: 6330
Modified:
rtir/branches/2.1-EXPERIMENTAL/ (props changed)
rtir/branches/2.1-EXPERIMENTAL/lib/RT/IR.pm
Log:
r1794 at cubic-pc: cubic | 2006-10-30 23:18:01 +0300
* add hook in LoadByCols to do serialisation
Modified: rtir/branches/2.1-EXPERIMENTAL/lib/RT/IR.pm
==============================================================================
--- rtir/branches/2.1-EXPERIMENTAL/lib/RT/IR.pm (original)
+++ rtir/branches/2.1-EXPERIMENTAL/lib/RT/IR.pm Mon Oct 30 15:08:27 2006
@@ -121,12 +121,36 @@
use Regexp::Common::net::CIDR;
require Net::CIDR;
-require RT::Tickets;
+sub ParseIPRange {
+ my $arg = shift or return ();
+
+ if ( $arg =~ /^\s*$RE{net}{CIDR}{IPv4}{-keep}\s*$/go ) {
+ my $cidr = join( '.', map $_||0, (split /\./, $1)[0..3] ) ."/$2";
+ $arg = (Net::CIDR::cidr2range( $cidr ))[0] || $arg;
+ }
+
+ my ($sIP, $eIP);
+ if ( $arg =~ /^\s*($RE{net}{IPv4})\s*$/o ) {
+ $sIP = $eIP = sprintf "%03d.%03d.%03d.%03d", split /\./, $1;
+ }
+ elsif ( $arg =~ /^\s*($RE{net}{IPv4})-($RE{net}{IPv4})\s*$/o ) {
+ $sIP = sprintf "%03d.%03d.%03d.%03d", split /\./, $1;
+ $eIP = sprintf "%03d.%03d.%03d.%03d", split /\./, $2;
+ }
+ else {
+ return ();
+ }
+ ($sIP, $eIP) = ($eIP, $sIP) if $sIP gt $eIP;
+
+ return $sIP, $eIP;
+}
+
# limit formatting "%03d.%03d.%03d.%03d"
# "= 'sIP-eIP'" => "( >=sIP AND <=eIP)"
# "!= 'sIP-eIP'" => "( <sIP OR >eIP)"
# two ranges intercect when ( eIP1 >= sIP2 AND sIP1 <= eIP2 )
+require RT::Tickets;
wrap 'RT::Tickets::_CustomFieldLimit',
pre => sub {
return if $_[2] && $_[2] =~ /^[<>]=?$/;
@@ -185,19 +209,11 @@
for ( my $i = 1; $i < @_; $i += 2 ) {
next unless $_[$i] && $_[$i] eq 'Content';
- my ($sIP, $eIP);
- if ( $_[++$i] =~ /^\s*($RE{net}{IPv4})\s*$/o ) {
- $sIP = $eIP = sprintf "%03d.%03d.%03d.%03d", split /\./, $1;
- }
- elsif ( $_[$i] =~ /^\s*($RE{net}{IPv4})-($RE{net}{IPv4})\s*$/o ) {
- $sIP = sprintf "%03d.%03d.%03d.%03d", split /\./, $1;
- $eIP = sprintf "%03d.%03d.%03d.%03d", split /\./, $2;
- }
- else {
+ my ($sIP, $eIP) = ParseIPRange( $_[++$i] );
+ unless ( $sIP && $eIP ) {
$_[-1] = 0;
return;
}
- ($sIP, $eIP) = ($eIP, $sIP) if $sIP gt $eIP;
$_[$i] = $sIP;
my $flag = 0;
@@ -236,4 +252,31 @@
eval "require RT::IR_Local";
die $@ if ($@ && $@ !~ qr{^Can't locate RT/IR_Local.pm});
+package RT::ObjectCustomFieldValue;
+
+use strict;
+use warnings;
+
+sub LoadByCols {
+ my $self = shift;
+ my %args = @_;
+ return $self->SUPER::LoadByCols( %args )
+ unless $args{'CustomField'} && $args{'Content'};
+
+ my $cf = RT::IR::GetCustomField( '_RTIR_IP' );
+ unless ( $cf && $cf->id ) {
+ $RT::Logger->crit("Couldn't load IP CF");
+ return $self->SUPER::LoadByCols( %args )
+ }
+ return $self->SUPER::LoadByCols( %args )
+ unless $cf->id == $args{'CustomField'};
+
+ my ($sIP, $eIP) = RT::IR::ParseIPRange( $args{'Content'} );
+ return $self->SUPER::LoadByCols( %args )
+ unless $sIP && $eIP;
+
+ return $self->SUPER::LoadByCols( %args, Content => $sIP, LargeContent => $eIP );
+}
+
+
1;
More information about the Rt-commit
mailing list