RT# 82942 Replace DBI->connect() with FS::DBI->connect()
[freeside.git] / FS / bin / freeside-sqlradius-reset
index 7d1d343..225de15 100755 (executable)
@@ -3,6 +3,7 @@
 use strict;
 use vars qw( $opt_n );
 use Getopt::Std;
+use FS::DBI;
 use FS::UID qw(adminsuidsetup);
 use FS::Record qw(qsearch qsearchs);
 use FS::part_export;
@@ -19,22 +20,26 @@ adminsuidsetup $user;
 my @exports = ();
 if ( @ARGV ) {
   foreach my $exportnum ( @ARGV ) {
-    foreach my $exporttype (qw( sqlradius sqlradius_withdomain phone_sqlradius )) {
+    foreach my $exporttype (qw( sqlradius sqlradius_withdomain phone_sqlradius broadband_sqlradius )) {
     push @exports, qsearch('part_export', { exportnum  => $exportnum,
                                             exporttype => $exporttype, } );
     }
   }
  } else {
   @exports = qsearch('part_export', { exporttype=>'sqlradius' } );
-  push @exports, qsearch('part_export', { exporttype=>'sqlradius_withdomain' } );
+  push @exports, qsearch('part_export', { exporttype=>'sqlradius_withdomain' } ); 
 }
 
 unless ( $opt_n ) {
   foreach my $export ( @exports ) {
-    my $icradius_dbh = DBI->connect(
+    my $icradius_dbh = FS::DBI->connect(
       map { $export->option($_) } qw( datasrc username password )
-    ) or die $DBI::errstr;
-    for my $table (qw( radcheck radreply usergroup )) {
+    ) or die $FS::DBI::errstr;
+    my $usergroup = $export->option('usergroup') || 'usergroup';
+    my @attr_tables;
+    @attr_tables = qw( radgroupcheck radgroupreply )
+      if $export->option('export_attrs');
+    for my $table (qw( radcheck radreply ), $usergroup, @attr_tables) {
       my $sth = $icradius_dbh->prepare("DELETE FROM $table");
       $sth->execute or die "Can't reset $table table: ". $sth->errstr;
     }
@@ -42,6 +47,13 @@ unless ( $opt_n ) {
   }
 }
 
+use FS::svc_Common;
+$FS::svc_Common::overlimit_missing_cust_svc_nonfatal_kludge = 1;
+$FS::svc_Common::overlimit_missing_cust_svc_nonfatal_kludge = 1;
+
+# this is the same across all exports, for now
+my @radius_attrs = qsearch('radius_attr', {});
+
 foreach my $export ( @exports ) {
 
   #my @svcparts = map { $_->svcpart } $export->export_svc;
@@ -49,14 +61,25 @@ foreach my $export ( @exports ) {
 
   my @svc_x =
     map  { $_->svc_x }
-    map  { qsearch('cust_svc', { 'svcpart' => $_->svcpart } ) }
-    grep { qsearch('cust_svc', { 'svcpart' => $_->svcpart } ) }
+    #map  { qsearch('cust_svc', { 'svcpart' => $_->svcpart } ) }
+    #grep { qsearch('cust_svc', { 'svcpart' => $_->svcpart } ) }
+    #     $export->export_svc;
+    map  { @{ $_->[1] } }
+    grep { scalar( @{ $_->[1] } ) }
+    map  { [ $_, [ qsearch('cust_svc', { 'svcpart' => $_->svcpart } ) ] ] }
          $export->export_svc;
 
+
   foreach my $svc_x ( @svc_x ) {
 
-    $svc_x->check; #set any fixed usergroup so it'll export even if all
-                   #svc_acct records don't have the group yet
+    #$svc_x->check; #set any fixed usergroup so it'll export even if all
+    #               #svc_acct records don't have the group yet
+    #more efficient?
+    my $x = $svc_x->setfixed( $svc_x->_fieldhandlers);
+    unless ( ref($x) ) {
+      warn "WARNING: can't set fixed usergroups for svcnum ". $svc_x->svcnum.
+           "\n";
+    } 
 
     if ($overlimit_groups && $svc_x->overlimit) {
       $svc_x->usergroup( &{ $svc_x->_fieldhandlers->{'usergroup'} }
@@ -69,6 +92,13 @@ foreach my $export ( @exports ) {
     die $error if $error;
 
   }
+
+  if ( $export->option('export_attrs') ) {
+    foreach my $attr (@radius_attrs) {
+      my $error = $export->export_attr_insert($attr);
+      die $error if $error;
+    }
+  }
 }
 
 sub usage {