From 2eb5fc5cdbe002fd17a4d3ee5bde71b4f5422f8b Mon Sep 17 00:00:00 2001 From: ivan Date: Mon, 2 May 2005 06:32:10 +0000 Subject: [PATCH] move httemplate/search/svc_domain to the new search template along with svc_www and svc_forward --- FS/FS/svc_Common.pm | 15 +++ httemplate/search/svc_domain.cgi | 206 ++++++++++++-------------------------- httemplate/search/svc_forward.cgi | 26 +---- httemplate/search/svc_www.cgi | 21 +++- 4 files changed, 104 insertions(+), 164 deletions(-) diff --git a/FS/FS/svc_Common.pm b/FS/FS/svc_Common.pm index db2fbbe86..80d5e21a6 100644 --- a/FS/FS/svc_Common.pm +++ b/FS/FS/svc_Common.pm @@ -6,6 +6,7 @@ use FS::Record qw( qsearch qsearchs fields dbh ); use FS::cust_svc; use FS::part_svc; use FS::queue; +use FS::cust_main; @ISA = qw( FS::Record ); @@ -546,6 +547,20 @@ sub clone_kludge_unsuspend { shift; } +=item cust_name + +Given a svc_ object that contains fields from cust_main (say, from a +JOINed search. See httemplate/search/svc_* for examples), returns the +equivalent of "$svc_x->cust_svc->cust_pkg->name" (but much more efficient), +or "(unlinked)" if this service is not linked to a customer. + +=cut + +sub cust_name { + my $svc_x = shift; + $svc_x->custnum ? FS::cust_main::name($svc_x) : '(unlinked)'; +} + =back =head1 BUGS diff --git a/httemplate/search/svc_domain.cgi b/httemplate/search/svc_domain.cgi index 948b1d9ae..8d6547ca8 100755 --- a/httemplate/search/svc_domain.cgi +++ b/httemplate/search/svc_domain.cgi @@ -4,158 +4,80 @@ my $conf = new FS::Conf; my($query)=$cgi->keywords; $query ||= ''; #to avoid use of unitialized value errors -my(@svc_domain,$sortby); + +my $orderby = 'ORDER BY svcnum'; +my $join = ''; +my %svc_domain = (); +my $extra_sql = ''; if ( $query eq 'svcnum' ) { - $sortby=\*svcnum_sort; - @svc_domain=qsearch('svc_domain',{}); + #$orderby = 'ORDER BY svcnum'; } elsif ( $query eq 'domain' ) { - $sortby=\*domain_sort; - @svc_domain=qsearch('svc_domain',{}); + $orderby = 'ORDER BY domain'; } elsif ( $query eq 'UN_svcnum' ) { - $sortby=\*svcnum_sort; - @svc_domain = grep qsearchs('cust_svc',{ - 'svcnum' => $_->svcnum, - 'pkgnum' => '', - }), qsearch('svc_domain',{}); + #$orderby = 'ORDER BY svcnum'; + $join = 'LEFT JOIN cust_svc USING ( svcnum )'; + $extra_sql = ' WHERE pkgnum IS NULL'; } elsif ( $query eq 'UN_domain' ) { - $sortby=\*domain_sort; - @svc_domain = grep qsearchs('cust_svc',{ - 'svcnum' => $_->svcnum, - 'pkgnum' => '', - }), qsearch('svc_domain',{}); + $orderby = 'ORDER BY domain'; + $join = 'LEFT JOIN cust_svc USING ( svcnum )'; + $extra_sql = ' WHERE pkgnum IS NULL'; } elsif ( $cgi->param('svcpart') =~ /^(\d+)$/ ) { - @svc_domain = - qsearch( 'svc_domain', {}, '', - " WHERE $1 = ( SELECT svcpart FROM cust_svc ". - " WHERE cust_svc.svcnum = svc_domain.svcnum ) " - ); - $sortby=\*svcnum_sort; + #$orderby = 'ORDER BY svcnum'; + $join = 'LEFT JOIN cust_svc USING ( svcnum )'; + $extra_sql = " WHERE svcpart = $1"; } else { $cgi->param('domain') =~ /^([\w\-\.]+)$/; - my($domain)=$1; - #push @svc_domain, qsearchs('svc_domain',{'domain'=>$domain}); - @svc_domain = qsearchs('svc_domain',{'domain'=>$domain}); + $join = ''; + $svc_domain{'domain'} = $1; } -if ( scalar(@svc_domain) == 1 ) { - print $cgi->redirect(popurl(2). "view/svc_domain.cgi?". $svc_domain[0]->svcnum); - #exit; -} elsif ( scalar(@svc_domain) == 0 ) { -%> - -<% - eidiot "No matching domains found!\n"; -} else { -%> - -<% - my($total)=scalar(@svc_domain); - print header("Domain Search Results",''), < - - Service # - Domain - - -END - -# my(%saw); # if we've multiple domains with the same - # svcnum, then we've a corrupt database - - foreach my $svc_domain ( -# sort $sortby grep(!$saw{$_->svcnum}++, @svc_domain) - sort $sortby (@svc_domain) - ) { - my($svcnum,$domain)=( - $svc_domain->svcnum, - $svc_domain->domain, - ); - - #don't display all accounts here - my $rowspan = 1; - - #my @svc_acct=qsearch('svc_acct',{'domsvc' => $svcnum}); - #my $rowspan = 0; - # - #my $n1 = ''; - #my($svc_acct, @rows); - #foreach $svc_acct ( - # sort {$b->getfield('username') cmp $a->getfield('username')} (@svc_acct) - #) { - # - # my (@forwards) = (); - # - # my($svcnum,$username)=( - # $svc_acct->svcnum, - # $svc_acct->username, - # ); - # - # my @svc_forward = qsearch( 'svc_forward', { 'srcsvc' => $svcnum } ); - # my $svc_forward; - # foreach $svc_forward (@svc_forward) { - # my($dstsvc,$dst) = ( - # $svc_forward->dstsvc, - # $svc_forward->dst, - # ); - # if ($dstsvc) { - # my $dst_svc_acct=qsearchs( 'svc_acct', { 'svcnum' => $dstsvc } ); - # my $destination=$dst_svc_acct->email; - # push @forwards, qq!$destination!, - # qq!! - # ; - # }else{ - # push @forwards, qq!$dst! - # ; - # } - # } - # - # push @rows, qq!$n1!, - # #print '', ( ($domuser eq '*') ? "(anything)" : $domuser ); - # ( ($username eq '*') ? "(anything)" : $username ), - # qq!\@$domain !, - # ; - # - # push @rows, @forwards; - # - # $rowspan += (scalar(@svc_forward) || 1); - # $n1 = ""; - #} - ##end of false laziness - # - # - - print < - $svcnum - $domain -END - - #print @rows; - print ""; - - } - - print < - - -END +my $count_query = "SELECT COUNT(*) FROM svc_domain $join $extra_sql"; +if ( keys %svc_domain ) { + $count_query .= ' WHERE '. + join(' AND ', map "$_ = ". dbh->quote($svc_domain{$_}), + keys %svc_domain + ); } -sub svcnum_sort { - $a->getfield('svcnum') <=> $b->getfield('svcnum'); -} - -sub domain_sort { - $a->getfield('domain') cmp $b->getfield('domain'); -} - - +my $sql_query = { + 'table' => 'svc_domain', + 'hashref' => \%svc_domain, + 'select' => join(', ', + 'svc_domain.*', + map "cust_main.$_", qw(custnum last first company) + ), + 'extra_sql' => "$extra_sql $orderby", + 'addl_from' => 'LEFT JOIN cust_svc USING ( svcnum )'. + 'LEFT JOIN cust_pkg USING ( pkgnum )'. + 'LEFT JOIN cust_main USING ( custnum )', +}; + +my $link = [ "${p}view/svc_domain.cgi", 'svcnum' ]; + +#smaller false laziness w/svc_*.cgi here +my $link_cust = sub { + my $svc_x = shift; + $svc_x->custnum ? [ "${p}view/cust_main.cgi?", 'custnum' ] : ''; +}; + +%><%= include ('elements/search.html', + 'title' => "Domain Search Results", + 'name' => 'domains', + 'query' => $sql_query, + 'count_query' => $count_query, + 'redirect' => $link, + 'header' => [ '#', + 'Domain', + 'Customer', + ], + 'fields' => [ 'svcnum', + 'domain', + \&FS::svc_Common::cust_name, + ], + 'links' => [ $link, + $link, + $link_cust, + ], + ) %> diff --git a/httemplate/search/svc_forward.cgi b/httemplate/search/svc_forward.cgi index f54822572..1c1c6e4dd 100755 --- a/httemplate/search/svc_forward.cgi +++ b/httemplate/search/svc_forward.cgi @@ -4,7 +4,7 @@ my $conf = new FS::Conf; my($query)=$cgi->keywords; $query ||= ''; #to avoid use of unitialized value errors -my($orderby); +my $orderby; if ( $query eq 'svcnum' ) { $orderby = 'ORDER BY svcnum'; } else { @@ -69,26 +69,10 @@ my $link_dst = sub { } }; -my $format_cust = sub { - my $svc_forward = shift; - - if ( $svc_forward->custnum ) { - #false laziness w/FS::cust_main::name - my $name = $svc_forward->get('last'). ', '. $svc_forward->first; - $name = $svc_forward->company. " ($name)" if $svc_forward->company; - $name; - } else { - '(unlinked)'; - } -}; - +#smaller false laziness w/svc_*.cgi here my $link_cust = sub { - my $svc_forward = shift; - if ( $svc_forward->custnum ) { - [ "${p}view/cust_main.cgi?", 'custnum' ]; - } else { - ''; - } + my $svc_x = shift; + $svc_x->custnum ? [ "${p}view/cust_main.cgi?", 'custnum' ] : ''; }; %><%= include ('elements/search.html', @@ -105,7 +89,7 @@ my $link_cust = sub { 'fields' => [ 'svcnum', $format_src, $format_dst, - $format_cust, + \&FS::svc_Common::cust_name, ], 'links' => [ $link, $link_src, diff --git a/httemplate/search/svc_www.cgi b/httemplate/search/svc_www.cgi index 5ae72f8b3..de1f5dd78 100755 --- a/httemplate/search/svc_www.cgi +++ b/httemplate/search/svc_www.cgi @@ -15,27 +15,46 @@ my $count_query = 'SELECT COUNT(*) FROM svc_www'; my $sql_query = { 'table' => 'svc_www', 'hashref' => {}, + 'select' => join(', ', + 'svc_www.*', + map "cust_main.$_", qw(custnum last first company) + ), 'extra_sql' => $orderby, + 'addl_from' => 'LEFT JOIN cust_svc USING ( svcnum )'. + 'LEFT JOIN cust_pkg USING ( pkgnum )'. + 'LEFT JOIN cust_main USING ( custnum )', }; my $link = [ "${p}view/svc_www.cgi?", 'svcnum', ]; #my $dlink = [ "${p}view/svc_www.cgi?", 'svcnum', ]; my $ulink = [ "${p}view/svc_acct.cgi?", 'usersvc', ]; +#smaller false laziness w/svc_*.cgi here +my $link_cust = sub { + my $svc_x = shift; + $svc_x->custnum ? [ "${p}view/cust_main.cgi?", 'custnum' ] : ''; +}; %><%= include( 'elements/search.html', 'title' => 'Virtual Host Search Results', 'name' => 'virtual hosts', 'query' => $sql_query, 'count_query' => $count_query, - 'header' => [ '#', 'Zone', 'User', ], + 'redirect' => $link, + 'header' => [ '#', + 'Zone', + 'User', + 'Customer', + ], 'fields' => [ 'svcnum', sub { $_[0]->domain_record->zone }, sub { $_[0]->svc_acct->email }, + \&FS::svc_Common::cust_name, ], 'links' => [ $link, '', $ulink, + $link_cust, ], ) %> -- 2.11.0