i'm not usually like this.
[freeside.git] / httemplate / edit / svc_www.cgi
index 043af61..4989bb6 100644 (file)
@@ -1,6 +1,8 @@
 <!-- mason kludge -->
 <%
 
+my $conf = new FS::Conf;
+
 my( $svcnum,  $pkgnum, $svcpart, $part_svc, $svc_www );
 if ( $cgi->param('error') ) {
   $svc_www = new FS::svc_www ( {
@@ -53,12 +55,17 @@ if ( $cgi->param('error') ) {
 }
 my $action = $svc_www->svcnum ? 'Edit' : 'Add';
 
-my( %username, %arec );
+my( %svc_acct, %arec );
 if ($pkgnum) {
 
-  my($u_part_svc,@u_acct_svcparts);
-  foreach $u_part_svc ( qsearch('part_svc',{'svcdb'=>'svc_acct'}) ) {
-    push @u_acct_svcparts,$u_part_svc->getfield('svcpart');
+  my @u_acct_svcparts;
+  foreach my $svcpart (
+    map { $_->svcpart } qsearch( 'part_svc', { 'svcdb' => 'svc_acct' } )
+  ) {
+    next if $conf->exists('svc_www-usersvc_svcpart')
+            && ! grep { $svcpart == $_ }
+                      $conf->config('svc_www-usersvc_svcpart');
+    push @u_acct_svcparts, $svcpart;
   }
 
   my($cust_pkg)=qsearchs('cust_pkg',{'pkgnum'=>$pkgnum});
@@ -73,7 +80,8 @@ if ($pkgnum) {
       my($i_cust_svc);
       foreach $i_cust_svc ( qsearch('cust_svc',{'pkgnum'=>$cust_pkgnum,'svcpart'=>$acct_svcpart}) ) {
         my($svc_acct)=qsearchs('svc_acct',{'svcnum'=>$i_cust_svc->getfield('svcnum')});
-        $username{$svc_acct->getfield('svcnum')}=$svc_acct->getfield('username');
+        $svc_acct{$svc_acct->getfield('svcnum')}=
+          $svc_acct->cust_svc->part_svc->svc. ': '. $svc_acct->email;
       }  
     }
   }
@@ -84,33 +92,60 @@ if ($pkgnum) {
     push @d_acct_svcparts,$d_part_svc->getfield('svcpart');
   }
 
-  foreach $i_cust_pkg ( qsearch('cust_pkg',{'custnum'=>$custnum}) ) {
-    my($cust_pkgnum)=$i_cust_pkg->getfield('pkgnum');
-    my($acct_svcpart);
-    foreach $acct_svcpart (@d_acct_svcparts) {
-      my($i_cust_svc);
-      foreach $i_cust_svc ( qsearch('cust_svc',{'pkgnum'=>$cust_pkgnum,'svcpart'=>$acct_svcpart}) ) {
-        my($svc_domain)=qsearchs('svc_domain',{'svcnum'=>$i_cust_svc->getfield('svcnum')});
-        my $domain_rec;
-        foreach $domain_rec ( qsearch('domain_record',{
-            'svcnum'  => $svc_domain->svcnum,
-            'rectype' => 'A' } ),
-        qsearch('domain_record',{
-            'svcnum'  => $svc_domain->svcnum,
-            'rectype' => 'CNAME'
-            } ) ) {
-          $arec{$domain_rec->recnum} =
-            $domain_rec->reczone eq '@'
-              ? $svc_domain->domain
-              : $domain_rec->reczone. '.'. $svc_domain->domain;
+  foreach $i_cust_pkg ( qsearch( 'cust_pkg', { 'custnum' => $custnum } ) ) {
+    my $cust_pkgnum = $i_cust_pkg->pkgnum;
+
+    foreach my $acct_svcpart (@d_acct_svcparts) {
+
+      foreach my $i_cust_svc (
+        qsearch( 'cust_svc', { 'pkgnum'  => $cust_pkgnum,
+                               'svcpart' => $acct_svcpart } )
+      ) {
+        my $svc_domain =
+          qsearchs( 'svc_domain', { 'svcnum' => $i_cust_svc->svcnum } );
+
+        my $extra_sql = "AND ( rectype = 'A' OR rectype = 'CNAME' )";
+        unless ( $conf->exists('svc_www-enable_subdomains') ) {
+          $extra_sql .= " AND ( reczone = '\@' OR reczone = '".
+                        $svc_domain->domain. ".' )";
+        }
+
+        foreach my $domain_rec (
+          qsearch( 'domain_record',
+                   {
+                     'svcnum' => $svc_domain->svcnum,
+                   },
+                   '',
+                   $extra_sql,
+          )
+        ) {
+          $arec{$domain_rec->recnum} = $domain_rec->zone;
+        }
+
+        if ( $conf->exists('svc_www-enable_subdomains') ) {
+          $arec{'www.'. $svc_domain->domain} = 'www.'. $svc_domain->domain
+            unless    qsearchs( 'domain_record', {
+                                  svcnum  => $svc_domain->svcnum,
+                                  reczone => 'www',
+                      } )
+                   || qsearchs( 'domain_record', {
+                                  svcnum  => $svc_domain->svcnum,
+                                  reczone => 'www.'.$svc-domain->domain.'.',
+                    } );
         }
+
         $arec{'@.'. $svc_domain->domain} = $svc_domain->domain
-          unless qsearchs('domain_record', { svcnum  => $svc_domain->svcnum,
-                                             reczone => '@',                } );
-        $arec{'www.'. $svc_domain->domain} = 'www.'. $svc_domain->domain
-          unless qsearchs('domain_record', { svcnum  => $svc_domain->svcnum,
-                                             reczone => 'www',              } );
+          unless   qsearchs('domain_record', {
+                              svcnum  => $svc_domain->svcnum,
+                              reczone => '@',
+                   } )
+                || qsearchs('domain_record', {
+                              svcnum  => $svc_domain->svcnum,
+                              reczone => $svc_domain->domain.'.',
+                   } );
+
       }
+
     }
   }
 
@@ -161,13 +196,13 @@ foreach $_ (keys %arec) {
 print "</SELECT></TD></TR>";
 
 print '<TR><TD ALIGN="right">Username</TD><TD><SELECT NAME="usersvc" SIZE=1>';
-foreach $_ (keys %username) {
+foreach $_ (keys %svc_acct) {
   print "<OPTION", ($_ eq $usersvc) ? " SELECTED" : "",
-        qq! VALUE="$_">$username{$_}!;
+        qq! VALUE="$_">$svc_acct{$_}!;
 }
 print "</SELECT></TD></TR>";
 
-foreach $field ($svc_www->virtual_fields) {
+foreach my $field ($svc_www->virtual_fields) {
   if ( $part_svc->part_svc_column($field)->columnflag ne 'F' ) {
     # If the flag is X, it won't even show up in $svc_acct->virtual_fields.
     print $svc_www->pvf($field)->widget('HTML', 'edit',