stray closing /TABLE in the no-ticket case
[freeside.git] / FS / FS / svc_dsl.pm
index b02e74f..dcd6d1d 100644 (file)
@@ -1,14 +1,15 @@
 package FS::svc_dsl;
+use base qw(FS::Password_Mixin
+            FS::svc_Common);
 
 use strict;
-use vars qw( @ISA $conf $DEBUG $me );
-use FS::Record qw( qsearch qsearchs );
+use vars qw( $conf $DEBUG $me );
+use FS::UID;
+use FS::Record qw( qsearch qsearchs dbh );
 use FS::svc_Common;
-use FS::dsl_device;
 use FS::dsl_note;
 use FS::qual;
 
-@ISA = qw( FS::svc_Common );
 $DEBUG = 0;
 $me = '[FS::svc_dsl]';
 
@@ -137,6 +138,7 @@ sub table_info {
         'sorts' => [ 'phonenum' ],
         'display_weight' => 55,
         'cancel_weight' => 75,
+        'ip_field' => 'staticips',
         'fields' => {
             'pushed'                => { label => 'Pushed', 
                                          type  => 'disabled' },
@@ -210,7 +212,25 @@ otherwise returns false.
 
 =cut
 
-# the insert method can be inherited from FS::Record
+sub insert {
+  my $self = shift;
+  my $dbh = dbh;
+  my $oldAutoCommit = $FS::UID::AutoCommit;
+  local $FS::UID::AutoCommit = 0;
+
+  my $error = $self->SUPER::insert(@_);
+  if ( length($self->password) ) {
+    $error ||= $self->insert_password_history;
+  }
+
+  if ( $error ) {
+    $dbh->rollback if $oldAutoCommit;
+    return $error;
+  }
+
+  $dbh->commit if $oldAutoCommit;
+  '';
+}
 
 =item delete
 
@@ -227,6 +247,27 @@ returns the error, otherwise returns false.
 
 =cut
 
+sub replace {
+  my $new = shift;
+  my $old = shift || $new->replace_old;
+  my $dbh = dbh;
+  my $oldAutoCommit = $FS::UID::AutoCommit;
+  local $FS::UID::AutoCommit = 0;
+
+  my $error = $new->SUPER::replace($old, @_);
+  if ( $old->password ne $new->password ) {
+    $error ||= $new->insert_password_history;
+  }
+
+  if ( $error ) {
+    $dbh->rollback if $oldAutoCommit;
+    return $error;
+  }
+
+  $dbh->commit if $oldAutoCommit;
+  '';
+}
+
 # the replace method can be inherited from FS::Record
 
 =item check
@@ -279,6 +320,15 @@ sub check {
   $self->SUPER::check;
 }
 
+=item gateway_access_or_phonenum
+
+=cut
+
+sub gateway_access_or_phonenum {
+  my $self = shift;
+  $self->gateway_access_number || $self->phonenum;
+}
+
 =item dsl_device
 
 Returns the MAC addresses associated with this DSL service, as FS::dsl_device
@@ -286,11 +336,6 @@ objects.
 
 =cut
 
-sub dsl_device {
-  my $self = shift;
-  qsearch('dsl_device', { 'svcnum' => $self->svcnum });
-}
-
 sub predelete_hook_first {
     my $self = shift;
     my @exports = $self->part_svc->part_export_dsl_pull;
@@ -312,6 +357,15 @@ sub predelete_hook {
     '';
 }
 
+# password_history compatibility
+
+sub _password {
+  my $self = shift;
+  $self->get('password');
+}
+
+sub _password_encoding { 'plain'; }
+
 =back
 
 =head1 SEE ALSO