[freeside-commits] branch master updated. 2bfe8d56f1dbf342cb5fac8187953cdb08b9d4cd

Mark Wells mark at 420.am
Mon Feb 27 19:23:49 PST 2012


The branch, master has been updated
       via  2bfe8d56f1dbf342cb5fac8187953cdb08b9d4cd (commit)
      from  d64984bbfe839fbe71830862a6841380425f3dbe (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 2bfe8d56f1dbf342cb5fac8187953cdb08b9d4cd
Author: Mark Wells <mark at freeside.biz>
Date:   Mon Feb 27 19:23:28 2012 -0800

    broadband_sql export, #15924

diff --git a/FS/FS/part_export/broadband_sql.pm b/FS/FS/part_export/broadband_sql.pm
new file mode 100644
index 0000000..697d3cd
--- /dev/null
+++ b/FS/FS/part_export/broadband_sql.pm
@@ -0,0 +1,49 @@
+package FS::part_export::broadband_sql;
+use base qw( FS::part_export::sql_Common );
+
+use strict;
+use vars qw( %info );
+use Tie::IxHash;
+
+tie my %options, 'Tie::IxHash',
+  %{__PACKAGE__->sql_options},
+  # likely to be necessary
+  'mac_case' => {
+    label   => 'Export MAC address as',
+    type    => 'select',
+    options => [ qw(uppercase lowercase) ],
+  },
+  mac_delimiter => {
+    label   => 'Separate MAC address octets with',
+    default => '-',
+  },
+;
+
+%info = (
+  'svc'      => 'svc_broadband',
+  'desc'     => 'Real-time export of broadband services to SQL databases ',
+  'options'  => \%options,
+  'nodomain' => '',
+  'notes'    => <<END
+END
+);
+
+# to avoid confusion, let the user just enter "mac_addr" as the column name
+sub _schema_map {
+  my %map = shift->_map('schema');
+  for (values %map) {
+    s/^mac_addr$/mac_addr_formatted/;
+  }
+  %map;
+}
+
+sub _map_arg_callback {
+  my($self, $field) = @_;
+  if ( $field eq 'mac_addr_formatted' ) {
+    return ($self->option('mac_case'), $self->option('mac_delimiter'));
+  }
+  return ();
+}
+
+1;
+
diff --git a/FS/FS/part_export/broadband_sqlradius.pm b/FS/FS/part_export/broadband_sqlradius.pm
index 45f286f..29bd288 100644
--- a/FS/FS/part_export/broadband_sqlradius.pm
+++ b/FS/FS/part_export/broadband_sqlradius.pm
@@ -76,19 +76,11 @@ END
 
 sub rebless { shift; }
 
-sub _mac_format {
-  my $self = shift;
-  my $addr = shift;
-  if ( $self->option('mac_case',1) eq 'lowercase' ) {
-    $addr = lc($addr);
-  }
-  join( ($self->option('mac_delimiter',1) || ''), $addr =~ /../g );
-}
-
 sub export_username {
   my($self, $svc_broadband) = (shift, shift);
-  my $mac_addr = $svc_broadband->mac_addr;
-  $self->_mac_format($svc_broadband->mac_addr);
+  $svc_broadband->mac_addr_formatted(
+    $self->option('mac_case'), $self->option('mac_delimiter')
+  );
 }
 
 sub radius_reply {
@@ -106,7 +98,7 @@ sub radius_check {
   my $password_attrib = $conf->config('radius-password') || 'Password';
   my %check;
   if ( $self->option('mac_as_password') ) {
-    $check{$password_attrib} = $self->_mac_format($svc_broadband->mac_addr);
+    $check{$password_attrib} = $self->export_username($svc_broadband);
   }
   elsif ( length( $self->option('radius_password',1)) ) {
     $check{$password_attrib} = $self->option('radius_password');
diff --git a/FS/FS/part_export/domain_sql.pm b/FS/FS/part_export/domain_sql.pm
index 3010338..0749fec 100644
--- a/FS/FS/part_export/domain_sql.pm
+++ b/FS/FS/part_export/domain_sql.pm
@@ -1,29 +1,12 @@
 package FS::part_export::domain_sql;
+use base qw( FS::part_export::sql_Common );
 
-use vars qw(@ISA %info);
+use strict;
+use vars qw(%info);
 use Tie::IxHash;
 use FS::part_export;
 
- at ISA = qw(FS::part_export);
-
-#quite a bit of false laziness w/acct_sql - some stuff should be generalized
-#out to a "dababase base class"
-
-tie my %options, 'Tie::IxHash',
-  'datasrc'            => { label => 'DBI data source' },
-  'username'           => { label => 'Database username' },
-  'password'           => { label => 'Database password' },
-  'table'              => { label => 'Database table' },
-  'schema'             => { label =>
-                              'Database schema mapping to Freeside methods.',
-                            type  => 'textarea',
-                          },
-  'static'             => { label =>
-                              'Database schema mapping to static values.',
-                            type  => 'textarea',
-                          },
-  'primary_key'        => { label => 'Database primary key' },
-;
+tie my %options, 'Tie::IxHash', %{__PACKAGE__->sql_options};
 
 tie my %postfix_transport_map, 'Tie::IxHash', 
   'domain' => 'domain'
@@ -60,182 +43,7 @@ uses.
 END
 );
 
-sub _schema_map { shift->_map('schema'); }
-sub _static_map { shift->_map('static'); }
-
-sub _map {
-  my $self = shift;
-  map { /^\s*(\S+)\s*(\S+)\s*$/ } split("\n", $self->option(shift) );
-}
-
-sub _export_insert {
-  my($self, $svc_domain) = (shift, shift);
-
-  my %schema = $self->_schema_map;
-  my %static = $self->_static_map;
-
-  my %record = ( ( map { $_ => $static{$_}       } keys %static ),
-                 ( map { my $method = $schema{$_};
-	               $_ => $svc_domain->$method();
-		       }
-		       keys %schema
-		 )
-	       );
-
-  my $err_or_queue = 
-    $self->domain_sql_queue(
-      $svc_domain->svcnum,
-      'insert',
-      $self->option('table'),
-      %record
-    );
-  return $err_or_queue unless ref($err_or_queue);
-
-  '';
-}
-
-sub _export_replace {
-  my($self, $new, $old) = (shift, shift, shift);
-
-  my %schema = $self->_schema_map;
-  my %static = $self->_static_map;
-  #my %map = (%schema, %static);
-
-  my @primary_key = ();
-  if ( $self->option('primary_key') =~ /,/ ) {
-    foreach my $key ( split(/\s*,\s*/, $self->option('primary_key') ) ) {
-      my $keymap = $schema{$key};
-      push @primary_key, $old->$keymap();
-    }
-  } else {
-    my %map = (%schema, %static);
-    my $keymap = $map{$self->option('primary_key')};
-    push @primary_key, $old->$keymap();
-  }
-
-  my %record = ( ( map { $_ => $static{$_}       } keys %static ),
-                 ( map { my $method = $schema{$_};
-	                 $_ => $new->$method();
-	               }
-		       keys %schema
-		 )
-	       );
-
-  my $err_or_queue = $self->domain_sql_queue(
-    $new->svcnum,
-    'replace',
-    $self->option('table'),
-    $self->option('primary_key'), @primary_key, 
-    %record,
-  );
-  return $err_or_queue unless ref($err_or_queue);
-  '';
-}
-
-sub _export_delete {
-  my ( $self, $svc_domain ) = (shift, shift);
-
-  my %schema = $self->_schema_map;
-  my %static = $self->_static_map;
-  my %map = (%schema, %static);
-
-  my %primary_key = ();
-  if ( $self->option('primary_key') =~ /,/ ) {
-    foreach my $key ( split(/\s*,\s*/, $self->option('primary_key') ) ) {
-      my $keymap = $map{$key};
-      $primary_key{ $key } = $svc_domain->$keymap();
-    }
-  } else {
-    my $keymap = $map{$self->option('primary_key')};
-    $primary_key{ $self->option('primary_key') } = $svc_domain->$keymap(),
-  }
-
-  my $err_or_queue = $self->domain_sql_queue(
-    $svc_domain->svcnum,
-    'delete',
-    $self->option('table'),
-    %primary_key,
-    #$self->option('primary_key') => $svc_domain->$keymap(),
-  );
-  return $err_or_queue unless ref($err_or_queue);
-  '';
-}
-
-sub domain_sql_queue {
-  my( $self, $svcnum, $method ) = (shift, shift, shift);
-  my $queue = new FS::queue {
-    'svcnum' => $svcnum,
-    'job'    => "FS::part_export::domain_sql::domain_sql_$method",
-  };
-  $queue->insert(
-    $self->option('datasrc'),
-    $self->option('username'),
-    $self->option('password'),
-    @_,
-  ) or $queue;
-}
-
-sub domain_sql_insert { #subroutine, not method
-  my $dbh = domain_sql_connect(shift, shift, shift);
-  my( $table, %record ) = @_;
-
-  my $sth = $dbh->prepare(
-    "INSERT INTO $table ( ". join(", ", keys %record).
-    " ) VALUES ( ". join(", ", map '?', keys %record ). " )"
-  ) or die $dbh->errstr;
-
-  $sth->execute( values(%record) )
-    or die "can't insert into $table table: ". $sth->errstr;
-
-  $dbh->disconnect;
-}
-
-sub domain_sql_delete { #subroutine, not method
-  my $dbh = domain_sql_connect(shift, shift, shift);
-  my( $table, %record ) = @_;
-
-  my $sth = $dbh->prepare(
-    "DELETE FROM $table WHERE ". join(' AND ', map "$_ = ? ", keys %record )
-  ) or die $dbh->errstr;
-
-  $sth->execute( map $record{$_}, keys %record )
-    or die "can't delete from $table table: ". $sth->errstr;
-
-  $dbh->disconnect;
-}
-
-sub domain_sql_replace { #subroutine, not method
-  my $dbh = domain_sql_connect(shift, shift, shift);
-
-  my( $table, $pkey ) = ( shift, shift );
-
-  my %primary_key = ();
-  if ( $pkey =~ /,/ ) {
-    foreach my $key ( split(/\s*,\s*/, $pkey ) ) {
-      $primary_key{$key} = shift;
-    }
-  } else {
-    $primary_key{$pkey} = shift;
-  }
-
-  my %record = @_;
-
-  my $sth = $dbh->prepare(
-    "UPDATE $table".
-    ' SET '.   join(', ',    map "$_ = ?", keys %record      ).
-    ' WHERE '. join(' AND ', map "$_ = ?", keys %primary_key )
-  ) or die $dbh->errstr;
-
-  $sth->execute( values(%record), values(%primary_key) );
-
-  $dbh->disconnect;
-}
-
-sub domain_sql_connect {
-  #my($datasrc, $username, $password) = @_;
-  #DBI->connect($datasrc, $username, $password) or die $DBI::errstr;
-  DBI->connect(@_) or die $DBI::errstr;
-}
+# inherit everything else from sql_Common
 
 1;
 
diff --git a/FS/FS/svc_broadband.pm b/FS/FS/svc_broadband.pm
index a327f46..7606ad7 100755
--- a/FS/FS/svc_broadband.pm
+++ b/FS/FS/svc_broadband.pm
@@ -562,6 +562,25 @@ sub allowed_routers {
 =back
 
 
+=item mac_addr_formatted CASE DELIMITER
+
+Format the MAC address (for use by exports).  If CASE starts with "l"
+(for "lowercase"), it's returned in lowercase.  DELIMITER is inserted
+between octets.
+
+=cut
+
+sub mac_addr_formatted {
+  my $self = shift;
+  my ($case, $delim) = @_;
+  my $addr = $self->mac_addr;
+  $addr = lc($addr) if $case =~ /^l/i;
+  join( $delim || '', $addr =~ /../g );
+}
+
+=back
+
+
 #class method
 sub _upgrade_data {
   my $class = shift;

-----------------------------------------------------------------------

Summary of changes:
 FS/FS/part_export/broadband_sql.pm       |   49 +++++++
 FS/FS/part_export/broadband_sqlradius.pm |   16 +--
 FS/FS/part_export/domain_sql.pm          |  202 +-----------------------------
 FS/FS/svc_broadband.pm                   |   19 +++
 4 files changed, 77 insertions(+), 209 deletions(-)
 create mode 100644 FS/FS/part_export/broadband_sql.pm




More information about the freeside-commits mailing list