added user interface for svc_forward and vpopmail support
[freeside.git] / httemplate / search / svc_domain.cgi
1 <%
2 #
3 # $Id: svc_domain.cgi,v 1.2 2001-08-19 15:53:36 jeff Exp $
4 #
5 # Usage: post form to:
6 #        http://server.name/path/svc_domain.cgi
7 #
8 # ivan@voicenet.com 97-mar-5
9 #
10 # rewrite ivan@sisd.com 98-mar-14
11 #
12 # Changes to allow page to work at a relative position in server
13 #       bmccane@maxbaud.net     98-apr-3
14 #
15 # display total, use FS::CGI now does browsing too ivan@sisd.com 98-jul-17
16 #
17 # $Log: svc_domain.cgi,v $
18 # Revision 1.2  2001-08-19 15:53:36  jeff
19 # added user interface for svc_forward and vpopmail support
20 #
21 # Revision 1.1  2001/07/30 07:36:04  ivan
22 # templates!!!
23 #
24 # Revision 1.11  2000/03/03 18:22:44  ivan
25 # changes from 1.2.3 release, fixes from webdemo
26 #
27 # Revision 1.10  1999/07/17 10:38:52  ivan
28 # scott nelson <scott@ultimanet.com> noticed this mod_perl-triggered bug and
29 # gave me a great bugreport at the last rhythmethod
30 #
31 # Revision 1.9  1999/04/15 13:39:16  ivan
32 # $cgi->header( '-expires' => 'now' )
33 #
34 # Revision 1.8  1999/02/28 00:03:57  ivan
35 # removed misleading comments
36 #
37 # Revision 1.7  1999/02/23 08:09:24  ivan
38 # beginnings of one-screen new customer entry and some other miscellania
39 #
40 # Revision 1.6  1999/02/09 09:22:59  ivan
41 # visual and bugfixes
42 #
43 # Revision 1.5  1999/02/07 09:59:39  ivan
44 # more mod_perl fixes, and bugfixes Peter Wemm sent via email
45 #
46 # Revision 1.4  1999/01/19 05:14:17  ivan
47 # for mod_perl: no more top-level my() variables; use vars instead
48 # also the last s/create/new/;
49 #
50 # Revision 1.3  1998/12/23 03:06:50  ivan
51 # $cgi->keywords instead of $cgi->query_string
52 #
53 # Revision 1.2  1998/12/17 09:41:12  ivan
54 # s/CGI::(Base|Request)/CGI.pm/;
55 #
56
57 use strict;
58 use vars qw ( $cgi @svc_domain $sortby $query $conf $mydomain );
59 use CGI;
60 use CGI::Carp qw(fatalsToBrowser);
61 use FS::UID qw(cgisuidsetup);
62 use FS::Record qw(qsearch qsearchs);
63 use FS::CGI qw(header eidiot popurl);
64 use FS::svc_domain;
65 use FS::cust_svc;
66 use FS::svc_acct;
67 use FS::svc_forward;
68
69 $cgi = new CGI;
70 &cgisuidsetup($cgi);
71
72 $conf = new FS::Conf;
73 $mydomain = $conf->config('domain');
74
75 ($query)=$cgi->keywords;
76 $query ||= ''; #to avoid use of unitialized value errors
77 if ( $query eq 'svcnum' ) {
78   $sortby=\*svcnum_sort;
79   @svc_domain=qsearch('svc_domain',{});
80 } elsif ( $query eq 'domain' ) {
81   $sortby=\*domain_sort;
82   @svc_domain=qsearch('svc_domain',{});
83 } elsif ( $query eq 'UN_svcnum' ) {
84   $sortby=\*svcnum_sort;
85   @svc_domain = grep qsearchs('cust_svc',{
86       'svcnum' => $_->svcnum,
87       'pkgnum' => '',
88     }), qsearch('svc_domain',{});
89 } elsif ( $query eq 'UN_domain' ) {
90   $sortby=\*domain_sort;
91   @svc_domain = grep qsearchs('cust_svc',{
92       'svcnum' => $_->svcnum,
93       'pkgnum' => '',
94     }), qsearch('svc_domain',{});
95 } else {
96   $cgi->param('domain') =~ /^([\w\-\.]+)$/; 
97   my($domain)=$1;
98   #push @svc_domain, qsearchs('svc_domain',{'domain'=>$domain});
99   @svc_domain = qsearchs('svc_domain',{'domain'=>$domain});
100 }
101
102 if ( scalar(@svc_domain) == 1 ) {
103   print $cgi->redirect(popurl(2). "view/svc_domain.cgi?". $svc_domain[0]->svcnum);
104   exit;
105 } elsif ( scalar(@svc_domain) == 0 ) {
106   eidiot "No matching domains found!\n";
107 } else {
108
109   my($total)=scalar(@svc_domain);
110   print $cgi->header( '-expires' => 'now' ),
111         header("Domain Search Results",''), <<END;
112
113     $total matching domains found
114     <TABLE BORDER=4 CELLSPACING=0 CELLPADDING=0>
115       <TR>
116         <TH>Service #</TH>
117         <TH>Domain</TH>
118         <TH>Mail to<BR><FONT SIZE=-1>(click to view account)</FONT></TH>
119         <TH>Forwards to<BR><FONT SIZE=-1>(click to view account)</FONT></TH>
120       </TR>
121 END
122
123 #  my(%saw);                 # if we've multiple domains with the same
124                              # svcnum, then we've a corrupt database
125
126   my($svc_domain);
127   my $p = popurl(2);
128   foreach $svc_domain (
129 #    sort $sortby grep(!$saw{$_->svcnum}++, @svc_domain)
130     sort $sortby (@svc_domain)
131   ) {
132     my($svcnum,$domain)=(
133       $svc_domain->svcnum,
134       $svc_domain->domain,
135     );
136     #my($malias);
137     #if ( qsearch('svc_acct_sm',{'domsvc'=>$svcnum}) ) {
138     #  $malias=(
139     #    qq|<FORM ACTION="svc_acct_sm.cgi" METHOD="post">|.
140     #      qq|<INPUT TYPE="hidden" NAME="domuser" VALUE="">|.
141     #      qq|<INPUT TYPE="hidden" NAME="domain" VALUE="$domain">|.
142     #      qq|<INPUT TYPE="submit" VALUE="(mail aliases)">|.
143     #      qq|</FORM>|
144     #  );
145     #} else {
146     #  $malias='';
147     #}
148
149     my @svc_acct=qsearch('svc_acct',{'domsvc' => $svcnum});
150     my $rowspan = 0;
151
152     my $n1 = '';
153     my($svc_acct, @rows);
154     foreach $svc_acct (
155       sort {$b->getfield('username') cmp $a->getfield('username')} (@svc_acct)
156     ) {
157
158       my (@forwards) = ();
159
160       my($svcnum,$username)=(
161         $svc_acct->svcnum,
162         $svc_acct->username,
163       );
164
165       my @svc_forward = qsearch( 'svc_forward', { 'srcsvc' => $svcnum } );
166       my $svc_forward;
167       foreach $svc_forward (@svc_forward) {
168         my($dstsvc,$dst) = (
169           $svc_forward->dstsvc,
170           $svc_forward->dst,
171         );
172         if ($dstsvc) {
173           my $dst_svc_acct=qsearchs( 'svc_acct', { 'svcnum' => $dstsvc } );
174           my $destination=$dst_svc_acct->email;
175           push @forwards, qq!<TD><A HREF="!, popurl(2),
176                 qq!view/svc_acct.cgi?$dstsvc">$destination</A>!,
177                 qq!</TD></TR>!
178           ;
179         }else{
180           push @forwards, qq!<TD>$dst</TD></TR>!
181           ;
182         }
183       }
184
185       push @rows, qq!$n1<TD ROWSPAN=!, (scalar(@svc_forward) || 1),
186             qq!><A HREF="!. popurl(2). qq!view/svc_acct.cgi?$svcnum">!,
187       #print '', ( ($domuser eq '*') ? "<I>(anything)</I>" : $domuser );
188             ( ($username eq '*') ? "<I>(anything)</I>" : $username ),
189             qq!\@$domain</A> </TD>!,
190       ;
191
192       push @rows, @forwards;
193
194       $rowspan += (scalar(@svc_forward) || 1);
195       $n1 = "</TR><TR>";
196     }
197     #end of false laziness
198
199
200
201     print <<END;
202     <TR>
203       <TD ROWSPAN=$rowspan><A HREF="${p}view/svc_domain.cgi?$svcnum"><FONT SIZE=-1>$svcnum</FONT></A></TD>
204       <TD ROWSPAN=$rowspan>$domain</TD>
205 END
206
207     print @rows;
208     print "</TR>";
209
210   }
211  
212   print <<END;
213     </TABLE>
214   </BODY>
215 </HTML>
216 END
217
218 }
219
220 sub svcnum_sort {
221   $a->getfield('svcnum') <=> $b->getfield('svcnum');
222 }
223
224 sub domain_sort {
225   $a->getfield('domain') cmp $b->getfield('domain');
226 }
227
228
229 %>