X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fsvc_domain.pm;h=0d71b27754c6c51d7c4bb053c3615e81af45848a;hb=a47374ae5aba9530e999f630ca5a21eb758cc0b5;hp=d01a403d1975258a9b6b734efa31814e79d5e459;hpb=daac302e231e2e09b84e771c0413b0f2119c52e8;p=freeside.git diff --git a/FS/FS/svc_domain.pm b/FS/FS/svc_domain.pm index d01a403d1..0d71b2775 100644 --- a/FS/FS/svc_domain.pm +++ b/FS/FS/svc_domain.pm @@ -6,7 +6,7 @@ use vars qw( @ISA $whois_hack $conf $smtpmachine $soarefresh $soaretry $qshellmachine $nossh_hack ); use Carp; -use Mail::Internet; +use Mail::Internet 1.44; use Mail::Header; use Date::Format; use Net::Whois 1.0; @@ -193,14 +193,14 @@ sub insert { foreach my $record ( @defaultrecords ) { my($zone,$af,$type,$data) = split(/\s+/,$record,4); - my $record = new FS::domain_record { + my $domain_record = new FS::domain_record { 'svcnum' => $self->svcnum, 'reczone' => $zone, 'recaf' => $af, 'rectype' => $type, 'recdata' => $data, }; - my $error = $record->insert; + my $error = $domain_record->insert; if ( $error ) { $dbh->rollback if $oldAutoCommit; return "couldn't insert record for new domain: $error"; @@ -251,14 +251,35 @@ sub delete { return "Can't delete a domain which has accounts!" if qsearch( 'svc_acct', { 'domsvc' => $self->svcnum } ); - return "Can't delete a domain with (svc_acct_sm) mail aliases!" - if defined( $FS::Record::dbdef->table('svc_acct_sm') ) - && qsearch('svc_acct_sm', { 'domsvc' => $self->svcnum } ); + #return "Can't delete a domain with (domain_record) zone entries!" + # if qsearch('domain_record', { 'svcnum' => $self->svcnum } ); - return "Can't delete a domain with (domain_record) zone entries!" - if qsearch('domain_record', { 'svcnum' => $self->svcnum } ); + local $SIG{HUP} = 'IGNORE'; + local $SIG{INT} = 'IGNORE'; + local $SIG{QUIT} = 'IGNORE'; + local $SIG{TERM} = 'IGNORE'; + local $SIG{TSTP} = 'IGNORE'; + local $SIG{PIPE} = 'IGNORE'; + + my $oldAutoCommit = $FS::UID::AutoCommit; + local $FS::UID::AutoCommit = 0; + my $dbh = dbh; - $self->SUPER::delete; + foreach my $domain_record ( reverse $self->domain_record ) { + my $error = $domain_record->delete; + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return $error; + } + } + + my $error = $self->SUPER::delete; + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return $error; + } + + $dbh->commit or die $dbh->errstr if $oldAutoCommit; } =item replace OLD_RECORD @@ -270,13 +291,12 @@ returns the error, otherwise returns false. sub replace { my ( $new, $old ) = ( shift, shift ); - my $error; return "Can't change domain - reorder." if $old->getfield('domain') ne $new->getfield('domain'); - $new->SUPER::replace($old); - + my $error = $new->SUPER::replace($old); + return $error if $error; } =item suspend @@ -369,6 +389,26 @@ sub check { } +=item domain_record + +=cut + +sub domain_record { + my $self = shift; + + my %order = ( + SOA => 1, + NS => 2, + MX => 3, + CNAME => 4, + A => 5, + ); + + sort { $order{$a->rectype} <=> $order{$b->rectype} } + qsearch('domain_record', { svcnum => $self->svcnum } ); + +} + =item whois Returns the Net::Whois::Domain object (see L) for this domain, or @@ -405,10 +445,6 @@ sub submit_internic { =back -=head1 VERSION - -$Id: svc_domain.pm,v 1.26 2002-03-18 09:10:12 ivan Exp $ - =head1 BUGS All BIND/DNS fields should be included (and exported).