X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=httemplate%2Fsearch%2Fsvc_acct.cgi;h=e28e00e6127fab71e3598ca10748d5afb6ce8e4f;hb=336d87dc8c7c105d3d9cd41c3590acc09964281d;hp=64085ea93ec10577dc9a0ffbfb94746131d3e1c5;hpb=e6b57805f6b3e76448ab9b6d280f2c53bc1410f3;p=freeside.git diff --git a/httemplate/search/svc_acct.cgi b/httemplate/search/svc_acct.cgi index 64085ea93..e28e00e61 100755 --- a/httemplate/search/svc_acct.cgi +++ b/httemplate/search/svc_acct.cgi @@ -1,54 +1,62 @@ <% -# -use strict; -use vars qw( $cgi @svc_acct $sortby $query $mydomain ); -use CGI; -use CGI::Carp qw(fatalsToBrowser); -use FS::UID qw(cgisuidsetup); -use FS::Record qw(qsearch qsearchs dbdef); -use FS::CGI qw(header idiot popurl table); -use FS::svc_acct; -use FS::cust_main; +my $mydomain = ''; -$mydomain = ''; +my $conf = new FS::Conf; +my $maxrecords = $conf->config('maxsearchrecordsperpage'); -$cgi = new CGI; -&cgisuidsetup($cgi); +my $orderby = ''; #removeme -($query)=$cgi->keywords; +my $limit = ''; +$limit .= "LIMIT $maxrecords" if $maxrecords; + +my $offset = $cgi->param('offset') || 0; +$limit .= " OFFSET $offset" if $offset; + +my $total; + +my($query)=$cgi->keywords; $query ||= ''; #to avoid use of unitialized value errors -#this tree is a little bit redundant + +my $unlinked = ''; +if ( $query =~ /^UN_(.*)$/ ) { + $query = $1; + my $empty = driver_name =~ /^Pg$/i ? qq('') : qq(""); + $unlinked = " + WHERE 0 < + ( SELECT count(*) FROM cust_svc + WHERE cust_svc.svcnum = svc_acct.svcnum + AND ( pkgnum IS NULL OR pkgnum = 0 OR pkgnum = $empty ) + ) + "; +} + +my(@svc_acct, $sortby); if ( $query eq 'svcnum' ) { $sortby=\*svcnum_sort; - @svc_acct=qsearch('svc_acct',{}); + $orderby = 'ORDER BY svcnum'; } elsif ( $query eq 'username' ) { $sortby=\*username_sort; - @svc_acct=qsearch('svc_acct',{}); + $orderby = 'ORDER BY username'; } elsif ( $query eq 'uid' ) { $sortby=\*uid_sort; - @svc_acct=grep $_->uid ne '', qsearch('svc_acct',{}); -} elsif ( $query eq 'UN_svcnum' ) { - $sortby=\*svcnum_sort; - @svc_acct = grep qsearchs('cust_svc',{ - 'svcnum' => $_->svcnum, - 'pkgnum' => '', - }), qsearch('svc_acct',{}); -} elsif ( $query eq 'UN_username' ) { - $sortby=\*username_sort; - @svc_acct = grep qsearchs('cust_svc',{ - 'svcnum' => $_->svcnum, - 'pkgnum' => '', - }), qsearch('svc_acct',{}); -} elsif ( $query eq 'UN_uid' ) { - $sortby=\*uid_sort; - @svc_acct = grep qsearchs('cust_svc',{ - 'svcnum' => $_->svcnum, - 'pkgnum' => '', - }), qsearch('svc_acct',{}); + $orderby = ( $unlinked ? 'AND' : 'WHERE' ). ' uid IS NOT NULL ORDER BY uid'; } else { $sortby=\*uid_sort; - &usernamesearch; + @svc_acct = @{&usernamesearch}; +} + +if ( $query eq 'svcnum' || $query eq 'username' || $query eq 'uid' ) { + + my $statement = "SELECT COUNT(*) FROM svc_acct $unlinked"; + my $sth = dbh->prepare($statement) + or die dbh->errstr. " doing $statement"; + $sth->execute or die "Error executing \"$statement\": ". $sth->errstr; + + $total = $sth->fetchrow_arrayref->[0]; + + @svc_acct = qsearch('svc_acct', {}, '', "$unlinked $orderby $limit"); + } if ( scalar(@svc_acct) == 1 ) { @@ -56,12 +64,45 @@ if ( scalar(@svc_acct) == 1 ) { print $cgi->redirect(popurl(2). "view/svc_acct.cgi?$svcnum"); #redirect #exit; } elsif ( scalar(@svc_acct) == 0 ) { #error +%> + +<% idiot("Account not found"); } else { - my($total)=scalar(@svc_acct); - print $cgi->header( '-expires' => 'now' ), - header("Account Search Results",''), - "$total matching accounts found", +%> + +<% + $total ||= scalar(@svc_acct); + + #begin pager + my $pager = ''; + if ( $total != scalar(@svc_acct) && $maxrecords ) { + unless ( $offset == 0 ) { + $cgi->param('offset', $offset - $maxrecords); + $pager .= 'Previous '; + } + my $poff; + my $page; + for ( $poff = 0; $poff < $total; $poff += $maxrecords ) { + $page++; + if ( $offset == $poff ) { + $pager .= qq!$page !; + } else { + $cgi->param('offset', $poff); + $pager .= qq!$page !; + } + } + unless ( $offset + $maxrecords > $total ) { + $cgi->param('offset', $offset + $maxrecords); + $pager .= 'Next '; + } + } + #end pager + + print header("Account Search Results",menubar('Main Menu'=>popurl(2))), + "$total matching accounts found

$pager", &table(), < # @@ -101,7 +142,7 @@ END my $conf = new FS::Conf; unless ( $mydomain = $conf->config('domain') ) { die "No legacy domain config file and no svc_domain.svcnum record ". - "for svc_acct.domsvc: ". $cust_svc->domsvc; + "for svc_acct.domsvc: ". $svc_acct->domsvc; } } $domain = "$mydomain*"; @@ -166,14 +207,14 @@ END } - print ''; + print "$pager
"; if ( $mydomain ) { print "
* The $mydomain domain ". "is contained in your legacy domain ". "configuration file. ". "You should run the bin/fs-migrate-svc_acct_sm script ". - "to create a proper svc_domain record for this domain." + "to create a proper svc_domain record for this domain."; } print ''; @@ -194,12 +235,11 @@ sub uid_sort { sub usernamesearch { - $cgi->param('username') =~ /^([\w\d\-]+)$/; #untaint username_text + $cgi->param('username') =~ /^([\w\-\.\&]+)$/; #untaint username_text my($username)=$1; - @svc_acct=qsearch('svc_acct',{'username'=>$username}); + [ qsearch('svc_acct',{'username'=>$username}) ]; } - %>