79b72565b31dc114a72ddfe6e9d148b7b63f436b
[freeside.git] / httemplate / misc / catchall.cgi
1 <%
2 #
3 # $Id: catchall.cgi,v 1.1 2001-08-19 15:53:35 jeff Exp $
4 #
5 # Usage: catchall.cgi {svcnum}
6 #        http://server.name/path/catchall.cgi? {svcnum}
7 #
8 # $Log: catchall.cgi,v $
9 # Revision 1.1  2001-08-19 15:53:35  jeff
10 # added user interface for svc_forward and vpopmail support
11 #
12 #
13
14 use strict;
15 use vars qw( $conf $cgi $action $svcnum $svc_domain $pkgnum $svcpart
16              $part_svc $query %email $p1 $domain $catchall );
17 use CGI;
18 use CGI::Carp qw(fatalsToBrowser);
19 use FS::UID qw(cgisuidsetup);
20 use FS::CGI qw(header popurl);
21 use FS::Record qw(qsearch qsearchs fields);
22 use FS::svc_acct;
23 use FS::svc_domain;
24 use FS::svc_forward;
25 use FS::Conf;
26
27 $cgi = new CGI;
28 &cgisuidsetup($cgi);
29
30 $conf = new FS::Conf;
31
32 if ( $cgi->param('error') ) {
33   $svc_domain = new FS::svc_domain ( {
34     map { $_, scalar($cgi->param($_)) } fields('svc_domain')
35   } );
36   $svcnum = $svc_domain->svcnum;
37   $pkgnum = $cgi->param('pkgnum');
38   $svcpart = $cgi->param('svcpart');
39   $part_svc=qsearchs('part_svc',{'svcpart'=>$svcpart});
40   die "No part_svc entry!" unless $part_svc;
41 } else {
42   my($query) = $cgi->keywords;
43   if ( $query =~ /^(\d+)$/ ) { #editing
44     $svcnum=$1;
45     $svc_domain=qsearchs('svc_domain',{'svcnum'=>$svcnum})
46       or die "Unknown (svc_domain) svcnum!";
47
48     my($cust_svc)=qsearchs('cust_svc',{'svcnum'=>$svcnum})
49       or die "Unknown (cust_svc) svcnum!";
50
51     $pkgnum=$cust_svc->pkgnum;
52     $svcpart=$cust_svc->svcpart;
53   
54     $part_svc=qsearchs('part_svc',{'svcpart'=>$svcpart});
55     die "No part_svc entry!" unless $part_svc;
56
57   } else { 
58
59     die "Invalid (svc_domain) svcnum!";
60
61   }
62 }
63
64 if ($pkgnum) {
65
66   #find all possible user svcnums (and emails)
67
68   #starting with that currently attached
69   if ($svc_domain->catchall) {
70     my($svc_acct)=qsearchs('svc_acct',{'svcnum'=>$svc_domain->catchall});
71     $email{$svc_domain->catchall} = $svc_acct->email;
72   }
73
74   #and including the rest for this customer
75   my($u_part_svc,@u_acct_svcparts);
76   foreach $u_part_svc ( qsearch('part_svc',{'svcdb'=>'svc_acct'}) ) {
77     push @u_acct_svcparts,$u_part_svc->getfield('svcpart');
78   }
79
80   my($cust_pkg)=qsearchs('cust_pkg',{'pkgnum'=>$pkgnum});
81   my($custnum)=$cust_pkg->getfield('custnum');
82   my($i_cust_pkg);
83   foreach $i_cust_pkg ( qsearch('cust_pkg',{'custnum'=>$custnum}) ) {
84     my($cust_pkgnum)=$i_cust_pkg->getfield('pkgnum');
85     my($acct_svcpart);
86     foreach $acct_svcpart (@u_acct_svcparts) {   #now find the corresponding 
87                                               #record(s) in cust_svc ( for this
88                                               #pkgnum ! )
89       my($i_cust_svc);
90       foreach $i_cust_svc ( qsearch('cust_svc',{'pkgnum'=>$cust_pkgnum,'svcpart'=>$acct_svcpart}) ) {
91         my($svc_acct)=qsearchs('svc_acct',{'svcnum'=>$i_cust_svc->getfield('svcnum')});
92         $email{$svc_acct->getfield('svcnum')}=$svc_acct->email;
93       }  
94     }
95   }
96
97 } else {
98
99   my($svc_acct)=qsearchs('svc_acct',{'svcnum'=>$svc_domain->catchall});
100   $email{$svc_domain->catchall} = $svc_acct->email;
101 }
102
103 # add an absence of a catchall
104 $email{0} = "(none)";
105
106 $p1 = popurl(1);
107 print $cgi->header( '-expires' => 'now' ), header("Domain Catchall Edit", '');
108
109 print qq!<FONT SIZE="+1" COLOR="#ff0000">Error: !, $cgi->param('error'),
110       "</FONT>"
111   if $cgi->param('error');
112
113 print qq!<FORM ACTION="${p1}process/catchall.cgi" METHOD=POST>!;
114
115 #display
116
117         #formatting
118         print "<PRE>";
119
120 #svcnum
121 print qq!<INPUT TYPE="hidden" NAME="svcnum" VALUE="$svcnum">!;
122 print qq!Service #<FONT SIZE=+1><B>!, $svcnum ? $svcnum : " (NEW)", "</B></FONT>";
123
124 #pkgnum
125 print qq!<INPUT TYPE="hidden" NAME="pkgnum" VALUE="$pkgnum">!;
126  
127 #svcpart
128 print qq!<INPUT TYPE="hidden" NAME="svcpart" VALUE="$svcpart">!;
129
130 ($domain,$catchall)=(
131   $svc_domain->domain,
132   $svc_domain->catchall,
133 );
134
135 print qq!<INPUT TYPE="hidden" NAME="domain" VALUE="$domain">!;
136
137 #catchall
138 print qq!\n\nMail to <I>(anything)</I>@<B>$domain</B> forwards to <SELECT NAME="catchall" SIZE=1>!;
139 foreach $_ (keys %email) {
140   print "<OPTION", $_ eq $catchall ? " SELECTED" : "",
141         qq! VALUE="$_">$email{$_}!;
142 }
143 print "</SELECT>";
144
145         #formatting
146         print "</PRE>\n";
147
148 print qq!<CENTER><INPUT TYPE="submit" VALUE="Submit"></CENTER>!;
149
150 print <<END;
151
152     </FORM>
153   </BODY>
154 </HTML>
155 END
156
157 %>