eliminate some false laziness in FS::Misc::send_email vs. msg_template/email.pm send_...
[freeside.git] / FS / FS / svc_IP_Mixin.pm
index 4266a2a..4c2180e 100644 (file)
@@ -81,7 +81,7 @@ sub svc_ip_check {
   my $error = $self->ip_check;
   return $error if $error;
   if ( my $router = $self->router ) {
-    if ( grep { $_->routernum eq $router->routernum } $self->allowed_routers ) {
+    if ( grep { $_->routernum == $router->routernum } $self->allowed_routers ) {
       return '';
     } else {
       return 'Router '.$router->routername.' not available for this service';
@@ -91,38 +91,21 @@ sub svc_ip_check {
 }
 
 sub _used_addresses {
+  my ($class, $block, $exclude_svc) = @_;
 
-  # Returns all addresses in use.  Does not filter with $block. ref:f197bdbaa1
-
-  my ($class, $block, $exclude) = @_;
-  my $ip_field = $class->table_info->{'ip_field'}
-    or return ();
-  # if the service doesn't have an ip_field, then it has no IP addresses 
-  # in use, yes? 
-
-  my %hash = ( $ip_field => { op => '!=', value => '' } );
-  #$hash{'blocknum'} = $block->blocknum if $block;
-  $hash{'svcnum'} = { op => '!=', value => $exclude->svcnum } if ref $exclude;
-  map { my $na = $_->NetAddr; $na ? $na->addr : () }
-    qsearch({
-        table     => $class->table,
-        hashref   => \%hash,
-        extra_sql => " AND $ip_field != '0e0'",
-    });
-}
-
-sub _used_addresses_in_block {
-  my ($class, $block) = @_;
-
-  croak "_used_addresses_in_block() requires an FS::addr_block parameter"
+  croak "_used_addresses() requires an FS::addr_block parameter"
     unless ref $block && $block->isa('FS::addr_block');
 
   my $ip_field = $class->table_info->{'ip_field'};
   if ( !$ip_field ) {
-    carp "_used_addresses_in_block() skipped, no ip_field";
+    carp "_used_addresses() skipped, no ip_field";
     return;
   }
 
+  my %qsearch = ( $ip_field => { op => '!=', value => '' });
+  $qsearch{svcnum} = { op => '!=', value => $exclude_svc->svcnum }
+    if ref $exclude_svc && $exclude_svc->svcnum;
+
   my $block_na = $block->NetAddr;
 
   my $octets;
@@ -149,15 +132,16 @@ sub _used_addresses_in_block {
   #       parameter to bypass FS::Record objects creation and just
   #       return hashrefs from DBI.  200,000 hashrefs are many seconds faster
   #       than 200,000 FS::Record objects
-  my %qsearch = (
+  my %qsearch_param = (
       table     => $class->table,
       select    => $ip_field,
-      hashref   => { $ip_field => { op => '!=', value => '' }},
+      hashref   => \%qsearch,
       extra_sql => " AND $ip_field != '0e0' ",
   );
   if ( $octets ) {
     my $block_str = join('.', (split(/\D/, $block_na->first))[0..$octets-1]);
-    $qsearch{extra_sql} .= " AND $ip_field LIKE ".dbh->quote("${block_str}.%");
+    $qsearch_param{extra_sql}
+      .= " AND $ip_field LIKE ".dbh->quote("${block_str}.%");
   }
 
   if ( $block->ip_netmask % 8 ) {
@@ -171,7 +155,7 @@ sub _used_addresses_in_block {
 
   return
     map { $_->$ip_field }
-    qsearch( \%qsearch );
+    qsearch( \%qsearch_param );
 }
 
 sub _is_used {