DNS, RT#8933
authorivan <ivan>
Tue, 17 Aug 2010 17:08:22 +0000 (17:08 +0000)
committerivan <ivan>
Tue, 17 Aug 2010 17:08:22 +0000 (17:08 +0000)
FS/FS/Conf.pm
FS/FS/domain_record.pm
FS/FS/svc_domain.pm
httemplate/edit/process/domain_record.cgi
httemplate/edit/process/svc_domain-defaultrecords.cgi [new file with mode: 0644]
httemplate/elements/freeside.css
httemplate/view/svc_domain/dns.html

index c436413..fe010f7 100644 (file)
@@ -1308,7 +1308,12 @@ and customer address. Include units.',
     'editlist_parts' => [ { type=>'text' },
                           { type=>'immutable', value=>'IN' },
                           { type=>'select',
     'editlist_parts' => [ { type=>'text' },
                           { type=>'immutable', value=>'IN' },
                           { type=>'select',
-                            select_enum=>{ map { $_=>$_ } qw(A CNAME MX NS TXT)} },
+                            select_enum => {
+                              map { $_=>$_ }
+                                  #@{ FS::domain_record->rectypes }
+                                  qw(A AAAA CNAME MX NS PTR SPF SRV TXT)
+                            },
+                          },
                           { type=> 'text' }, ],
   },
 
                           { type=> 'text' }, ],
   },
 
index 6513abf..e7e9f70 100644 (file)
@@ -419,6 +419,18 @@ sub reverse_record {
     or new FS::domain_record { %hash, 'recdata' => $self->zone.'.' };
 }
 
     or new FS::domain_record { %hash, 'recdata' => $self->zone.'.' };
 }
 
+=item rectypes
+
+=cut
+#http://en.wikipedia.org/wiki/List_of_DNS_record_types
+#DHCID?  other things?
+sub rectypes {
+  [ qw(A AAAA CNAME MX NS PTR SPF SRV TXT), #most common types
+    #qw(DNAME), #uncommon types
+    qw(DLV DNSKEY DS NSEC NSEC3 NSEC3PARAM RRSIG), #DNSSEC types
+  ];
+}
+
 =back
 
 =head1 BUGS
 =back
 
 =head1 BUGS
index 3dc352b..7d527e5 100644 (file)
@@ -341,12 +341,36 @@ sub insert {
   local $FS::UID::AutoCommit = 0;
   my $dbh = dbh;
 
   local $FS::UID::AutoCommit = 0;
   my $dbh = dbh;
 
-  $error = $self->SUPER::insert(@_);
+  $error =  $self->SUPER::insert(@_)
+         || $self->insert_defaultrecords;
   if ( $error ) {
     $dbh->rollback if $oldAutoCommit;
     return $error;
   }
 
   if ( $error ) {
     $dbh->rollback if $oldAutoCommit;
     return $error;
   }
 
+  $dbh->commit or die $dbh->errstr if $oldAutoCommit;
+
+  ''; #no error
+}
+
+=item insert_defaultrecords
+
+=cut
+
+sub insert_defaultrecords {
+  my $self = shift;
+
+  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;
+
   if ( $soamachine ) {
     my $soa = new FS::domain_record {
       'svcnum'  => $self->svcnum,
   if ( $soamachine ) {
     my $soa = new FS::domain_record {
       'svcnum'  => $self->svcnum,
@@ -356,10 +380,10 @@ sub insert {
       'recdata' => "$soamachine $soaemail ( ". time2str("%Y%m%d", time). "00 ".
                    "$soarefresh $soaretry $soaexpire $soadefaultttl )"
     };
       'recdata' => "$soamachine $soaemail ( ". time2str("%Y%m%d", time). "00 ".
                    "$soarefresh $soaretry $soaexpire $soadefaultttl )"
     };
-    $error = $soa->insert;
+    my $error = $soa->insert;
     if ( $error ) {
       $dbh->rollback if $oldAutoCommit;
     if ( $error ) {
       $dbh->rollback if $oldAutoCommit;
-      return "couldn't insert SOA record for new domain: $error";
+      return "couldn't insert SOA record: $error";
     }
 
     foreach my $record ( @defaultrecords ) {
     }
 
     foreach my $record ( @defaultrecords ) {
@@ -374,7 +398,7 @@ sub insert {
       my $error = $domain_record->insert;
       if ( $error ) {
         $dbh->rollback if $oldAutoCommit;
       my $error = $domain_record->insert;
       if ( $error ) {
         $dbh->rollback if $oldAutoCommit;
-        return "couldn't insert record for new domain: $error";
+        return "couldn't insert record: $error";
       }
     }
 
       }
     }
 
index 2e427e4..ff0f2d4 100755 (executable)
@@ -11,7 +11,7 @@ die "access denied"
 
 my $recnum = $cgi->param('recnum');
 
 
 my $recnum = $cgi->param('recnum');
 
-my $old = qsearchs('agent',{'recnum'=>$recnum}) if $recnum;
+my $old = qsearchs('domain_record',{'recnum'=>$recnum}) if $recnum;
 
 my $new = new FS::domain_record ( {
   map {
 
 my $new = new FS::domain_record ( {
   map {
diff --git a/httemplate/edit/process/svc_domain-defaultrecords.cgi b/httemplate/edit/process/svc_domain-defaultrecords.cgi
new file mode 100644 (file)
index 0000000..feb5840
--- /dev/null
@@ -0,0 +1,14 @@
+<% $cgi->redirect(popurl(3). "view/svc_domain.cgi?$svcnum") %>
+<%init>
+
+die "access denied"
+  unless $FS::CurrentUser::CurrentUser->access_right('Edit domain nameservice');
+
+my $svcnum = scalar($cgi->param('svcnum'));
+
+my $svc_domain = qsearchs('svc_domain', { 'svcnum' => $svcnum })
+  or die 'unknown svc_domain.svcnum';
+
+my $error = $svc_domain->insert_defaultrecords;
+
+</%init>
index dcb639b..18b14e3 100644 (file)
@@ -173,6 +173,43 @@ div.fstabcontainer {
   filter: progid:DXImageTransform.Microsoft.Shadow(color='#666666', Direction=135, Strength=2);
 }
 
   filter: progid:DXImageTransform.Microsoft.Shadow(color='#666666', Direction=135, Strength=2);
 }
 
+.fscontainer {
+  overflow:hidden;
+  display:inline-block;
+}
+.fscontainer {
+  display:block;
+}
+
+.fsbox {
+
+  float:left;
+
+  background-color:#ffffff;
+
+  padding:8px;
+  border-top:1px solid #7e0079;
+  border-left:1px solid #7e0079;
+  border-right:1px solid #7e0079;
+  border-bottom:1px solid #7e0079;
+         -moz-border-radius-bottomleft:8px;
+         -moz-border-radius-bottomright:8px;
+         -webkit-border-radius-bottomleft:8px;
+         -webkit-border-radius-bottomright:8px;
+         border-radius-bottomleft:8px;
+         border-radius-bottomright:8px;
+  -moz-box-shadow: #666666 1px 1px 2px;
+  -webkit-box-shadow: #666666 1px 1px 2px;
+  box-shadow: #666666 1px 1px 2px;
+  filter: progid:DXImageTransform.Microsoft.Shadow(color='#666666', Direction=135, Strength=2);
+}
+
+.fsbox .fsbox-title {
+  /*float:left;*/
+  font-size:150%;
+  font-weight:bold;
+}
+
 .background {
   background-color:#f8f8f8;
 }
 .background {
   background-color:#f8f8f8;
 }
index 88a9bda..a73a27e 100644 (file)
@@ -8,7 +8,12 @@
   }
 </SCRIPT>
 
   }
 </SCRIPT>
 
-DNS records
+<div class="fscontainer">
+<div class="fsbox">
+<div class="fsbox-title">
+  <span class="left">DNS Records</span>
+</div>
+
 % my @records; if ( @records = $svc_domain->domain_record ) { 
 
   <% include('/elements/table-grid.html') %>
 % my @records; if ( @records = $svc_domain->domain_record ) { 
 
   <% include('/elements/table-grid.html') %>
@@ -38,6 +43,7 @@ DNS records
 %          || ! $FS::CurrentUser::CurrentUser->access_right('Edit domain nameservice')
 %        ) { 
 %   ( my $recdata = $domain_record->recdata ) =~ s/"/\\'\\'/g;
 %          || ! $FS::CurrentUser::CurrentUser->access_right('Edit domain nameservice')
 %        ) { 
 %   ( my $recdata = $domain_record->recdata ) =~ s/"/\\'\\'/g;
+      (<A HREF="<%$p%>edit/domain_record.html?<%$domain_record->recnum%>">edit</A>)
       (<A HREF="javascript:areyousure('<%$p%>misc/delete-domain_record.cgi?<%$domain_record->recnum%>', 'Delete \'<% $domain_record->reczone %> <% $type %> <% $recdata %>\' ?' )">delete</A>)
 % }
       </td>
       (<A HREF="javascript:areyousure('<%$p%>misc/delete-domain_record.cgi?<%$domain_record->recnum%>', 'Delete \'<% $domain_record->reczone %> <% $type %> <% $recdata %>\' ?' )">delete</A>)
 % }
       </td>
@@ -53,15 +59,23 @@ DNS records
 % } 
 
   </table>
 % } 
 
   </table>
-% } 
+% } else {
+
+  <FORM METHOD="POST" NAME="DefaultForm" ACTION="<%$p%>edit/process/svc_domain-defaultrecords.cgi">
+      <INPUT TYPE="hidden" NAME="svcnum" VALUE="<%$svcnum%>">
+      <INPUT TYPE="submit" VALUE="Add default records">
+  </FORM>
+
+% }
 
 % if ( $FS::CurrentUser::CurrentUser->access_right('Edit domain nameservice') ) {
 
 % if ( $FS::CurrentUser::CurrentUser->access_right('Edit domain nameservice') ) {
+    <BR>
     <FORM METHOD="POST" ACTION="<%$p%>edit/process/domain_record.cgi">
       <INPUT TYPE="hidden" NAME="svcnum" VALUE="<%$svcnum%>">
       <INPUT TYPE="text" NAME="reczone"> 
       <INPUT TYPE="hidden" NAME="recaf" VALUE="IN"> IN 
       <SELECT NAME="rectype">
     <FORM METHOD="POST" ACTION="<%$p%>edit/process/domain_record.cgi">
       <INPUT TYPE="hidden" NAME="svcnum" VALUE="<%$svcnum%>">
       <INPUT TYPE="text" NAME="reczone"> 
       <INPUT TYPE="hidden" NAME="recaf" VALUE="IN"> IN 
       <SELECT NAME="rectype">
-%       foreach (qw( A NS CNAME MX PTR TXT) ) { 
+%       foreach ( @{ FS::domain_record->rectypes } ) { 
           <OPTION VALUE="<%$_%>"><%$_%></OPTION>
 %       } 
       </SELECT>
           <OPTION VALUE="<%$_%>"><%$_%></OPTION>
 %       } 
       </SELECT>
@@ -69,6 +83,7 @@ DNS records
       <INPUT TYPE="submit" VALUE="Add record">
     </FORM>
 
       <INPUT TYPE="submit" VALUE="Add record">
     </FORM>
 
+    <BR>
     <FORM NAME="SlaveForm" METHOD="POST" ACTION="<%$p%>edit/process/domain_record.cgi">
       <INPUT TYPE="hidden" NAME="svcnum" VALUE="<%$svcnum%>">
       Or
     <FORM NAME="SlaveForm" METHOD="POST" ACTION="<%$p%>edit/process/domain_record.cgi">
       <INPUT TYPE="hidden" NAME="svcnum" VALUE="<%$svcnum%>">
       Or
@@ -86,6 +101,8 @@ DNS records
 
 % }
 
 
 % }
 
+</div>
+</div>
 <%init>
 
 my($svc_domain, %opt) = @_;
 <%init>
 
 my($svc_domain, %opt) = @_;