import rt 2.0.14
[freeside.git] / httemplate / search / svc_acct.cgi
index 8d53296..549231d 100755 (executable)
@@ -1,4 +1,3 @@
-<!-- $Id: svc_acct.cgi,v 1.13 2002-01-30 14:18:09 ivan Exp $ -->
 <%
 
 my $mydomain = '';
@@ -22,25 +21,35 @@ $query ||= ''; #to avoid use of unitialized value errors
 my $unlinked = '';
 if ( $query =~ /^UN_(.*)$/ ) {
   $query = $1;
-  $unlinked = '
-    WHERE 0 <
-      ( SELECT count(*) FROM cust_svc
-          WHERE cust_svc.svcnum = svc_acct.svcnum
-            AND pkgnum IS NULL
-      )
-  ';
+  my $empty = driver_name eq 'Pg' ? qq('') : qq("");
+  if ( driver_name eq 'mysql' ) {
+    $unlinked = "LEFT JOIN cust_svc ON cust_svc.svcnum = svc_acct.svcnum
+                 WHERE cust_svc.pkgnum IS NULL
+                    OR cust_svc.pkgnum = 0
+                    OR cust_svc.pkgnum = $empty";
+  } else {
+    $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 $tblname = driver_name eq 'mysql' ? 'svc_acct.' : '';
 my(@svc_acct, $sortby);
 if ( $query eq 'svcnum' ) {
   $sortby=\*svcnum_sort;
-  $orderby = 'ORDER BY svcnum';
+  $orderby = "ORDER BY ${tblname}svcnum";
 } elsif ( $query eq 'username' ) {
   $sortby=\*username_sort;
-  $orderby = 'ORDER BY username';
+  $orderby = "ORDER BY ${tblname}username";
 } elsif ( $query eq 'uid' ) {
   $sortby=\*uid_sort;
-  $orderby = ( $unlinked ? 'AND' : 'WHERE' ). ' uid IS NOT NULL ORDER BY uid';
+  $orderby = ( $unlinked ? 'AND' : 'WHERE' ).
+             " ${tblname}uid IS NOT NULL ORDER BY ${tblname}uid";
 } else {
   $sortby=\*uid_sort;
   @svc_acct = @{&usernamesearch};
@@ -64,8 +73,14 @@ if ( scalar(@svc_acct) == 1 ) {
   print $cgi->redirect(popurl(2). "view/svc_acct.cgi?$svcnum");  #redirect
   #exit;
 } elsif ( scalar(@svc_acct) == 0 ) { #error
+%>
+<!-- mason kludge -->
+<%
   idiot("Account not found");
 } else {
+%>
+<!-- mason kludge -->
+<%
   $total ||= scalar(@svc_acct);
 
   #begin pager
@@ -95,7 +110,7 @@ if ( scalar(@svc_acct) == 1 ) {
   }
   #end pager
 
-  print header("Account Search Results",''),
+  print header("Account Search Results",menubar('Main Menu'=>popurl(2))),
         "$total matching accounts found<BR><BR>$pager",
         &table(), <<END;
       <TR>
@@ -136,7 +151,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 = "<i>$mydomain</i><FONT COLOR=\"#FF0000\">*</FONT>";
@@ -229,10 +244,50 @@ sub uid_sort {
 
 sub usernamesearch {
 
-  $cgi->param('username') =~ /^([\w\d\-]+)$/; #untaint username_text
-  my($username)=$1;
+  my @svc_acct;
+
+  my %username_type;
+  foreach ( $cgi->param('username_type') ) {
+    $username_type{$_}++;
+  }
+
+  $cgi->param('username') =~ /^([\w\-\.\&]+)$/; #untaint username_text
+  my $username = $1;
+
+  if ( $username_type{'Exact'} || $username_type{'Fuzzy'} ) {
+    push @svc_acct, qsearch( 'svc_acct',
+                             { 'username' => { 'op'    => 'ILIKE',
+                                               'value' => $username } } );
+  }
+
+  if ( $username_type{'Substring'} || $username_type{'All'} ) {
+    push @svc_acct, qsearch( 'svc_acct',
+                             { 'username' => { 'op'    => 'ILIKE',
+                                               'value' => "%$username%" } } );
+  }
+
+  if ( $username_type{'Fuzzy'} || $username_type{'All'} ) {
+    &FS::svc_acct::check_and_rebuild_fuzzyfiles;
+    my $all_username = &FS::svc_acct::all_username;
+
+    my %username;
+    if ( $username_type{'Fuzzy'} || $username_type{'All'} ) { 
+      foreach ( amatch($username, [ qw(i) ], @$all_username) ) {
+        $username{$_}++; 
+      }
+    }
+
+    #if ($username_type{'Sound-alike'}) {
+    #}
+
+    foreach ( keys %username ) {
+      push @svc_acct, qsearch('svc_acct',{'username'=>$_});
+    }
+
+  }
 
-  [ qsearch('svc_acct',{'username'=>$username}) ];
+  #[ qsearch('svc_acct',{'username'=>$username}) ];
+  \@svc_acct;
 
 }