agent virtualization, take one (stuff from "inactive" changeset snuck into cust_main...
[freeside.git] / httemplate / search / svc_domain.cgi
1 <%
2
3 my $conf = new FS::Conf;
4
5 my($query)=$cgi->keywords;
6 $query ||= ''; #to avoid use of unitialized value errors
7
8 my $orderby = 'ORDER BY svcnum';
9 my %svc_domain = ();
10 my @extra_sql = ();
11 if ( $query eq 'svcnum' ) {
12   #$orderby = 'ORDER BY svcnum';
13 } elsif ( $query eq 'domain' ) {
14   $orderby = 'ORDER BY domain';
15 } elsif ( $query eq 'UN_svcnum' ) { #UN searches need to be acl'ed (and need to
16                                     #fix $agentnums_sql
17   #$orderby = 'ORDER BY svcnum';
18   push @extra_sql, 'pkgnum IS NULL';
19 } elsif ( $query eq 'UN_domain' ) { #UN searches need to be acl'ed (and need to
20                                     #fix $agentnums_sql
21   $orderby = 'ORDER BY domain';
22   push @extra_sql, 'pkgnum IS NULL';
23 } elsif ( $cgi->param('svcpart') =~ /^(\d+)$/ ) {
24   #$orderby = 'ORDER BY svcnum';
25   push @extra_sql, "svcpart = $1";
26 } else {
27   $cgi->param('domain') =~ /^([\w\-\.]+)$/; 
28   $svc_domain{'domain'} = $1;
29 }
30
31 my $addl_from = ' LEFT JOIN cust_svc  USING ( svcnum  ) '.
32                 ' LEFT JOIN part_svc  USING ( svcpart ) '.
33                 ' LEFT JOIN cust_pkg  USING ( pkgnum  ) '.
34                 ' LEFT JOIN cust_main USING ( custnum ) ';
35
36 #here is the agent virtualization
37 push @extra_sql, $FS::CurrentUser::CurrentUser->agentnums_sql;
38
39 my $extra_sql = '';
40 if ( @extra_sql ) {
41   $extra_sql = ( keys(%svc_domain) ? ' AND ' : ' WHERE ' ).
42                join(' AND ', @extra_sql );
43 }
44
45 my $count_query = "SELECT COUNT(*) FROM svc_domain $addl_from ";
46 if ( keys %svc_domain ) {
47   $count_query .= ' WHERE '.
48                     join(' AND ', map "$_ = ". dbh->quote($svc_domain{$_}),
49                                       keys %svc_domain
50                         );
51 }
52 $count_query .= $extra_sql;
53
54 my $sql_query = {
55   'table'     => 'svc_domain',
56   'hashref'   => \%svc_domain,
57   'select'    => join(', ',
58                    'svc_domain.*',
59                     'cust_main.custnum',
60                     FS::UI::Web::cust_sql_fields(),
61                  ),
62   'extra_sql' => "$extra_sql $orderby",
63   'addl_from' => $addl_from,
64 };
65
66 my $link = [ "${p}view/svc_domain.cgi?", 'svcnum' ];
67
68 #smaller false laziness w/svc_*.cgi here
69 my $link_cust = sub {
70   my $svc_x = shift;
71   $svc_x->custnum ? [ "${p}view/cust_main.cgi?", 'custnum' ] : '';
72 };
73
74 %><%= include( 'elements/search.html',
75                  'title'             => "Domain Search Results",
76                  'name'              => 'domains',
77                  'query'             => $sql_query,
78                  'count_query'       => $count_query,
79                  'redirect'          => $link,
80                  'header'            => [ '#',
81                                           'Service',
82                                           'Domain',
83                                           FS::UI::Web::cust_header(),
84                                         ],
85                  'fields'            => [ 'svcnum',
86                                           'svc',
87                                           'domain',
88                                           \&FS::UI::Web::cust_fields,
89                                         ],
90                  'links'             => [ $link,
91                                           $link,
92                                           $link,
93                                           ( map { $link_cust }
94                                                 FS::UI::Web::cust_header()
95                                           ),
96                                         ],
97               )
98 %>