- fix Mason profiling to pass-through images (for graph/)
[freeside.git] / httemplate / search / sql.cgi
1 <%
2
3 my $conf = new FS::Conf;
4 my $maxrecords = $conf->config('maxsearchrecordsperpage');
5
6 my $limit = '';
7 $limit .= "LIMIT $maxrecords" if $maxrecords;
8
9 my $offset = $cgi->param('offset') || 0;
10 $limit .= " OFFSET $offset" if $offset;
11
12 my $total;
13
14 my $sql = $cgi->param('sql');
15 $sql =~ s/^\s*SELECT//i;
16
17 my $count_sql = $sql;
18 $count_sql =~ s/^(.*)\s+FROM\s/COUNT(*) FROM /i;
19
20 my $sth = dbh->prepare("SELECT $count_sql")
21   or eidiot dbh->errstr. " doing $count_sql\n";
22 $sth->execute or eidiot "Error executing \"$count_sql\": ". $sth->errstr;
23
24 $total = $sth->fetchrow_arrayref->[0];
25
26 my $sth = dbh->prepare("SELECT $sql $limit")
27   or eidiot dbh->errstr. " doing $sql\n";
28 $sth->execute or eidiot "Error executing \"$sql\": ". $sth->errstr;
29 my $rows = $sth->fetchall_arrayref;
30
31 %>
32 <!-- mason kludge -->
33 <%
34
35   #begin pager
36   my $pager = '';
37   if ( $total != scalar(@$rows) && $maxrecords ) {
38     unless ( $offset == 0 ) {
39       $cgi->param('offset', $offset - $maxrecords);
40       $pager .= '<A HREF="'. $cgi->self_url.
41                 '"><B><FONT SIZE="+1">Previous</FONT></B></A> ';
42     }
43     my $poff;
44     my $page;
45     for ( $poff = 0; $poff < $total; $poff += $maxrecords ) {
46       $page++;
47       if ( $offset == $poff ) {
48         $pager .= qq!<FONT SIZE="+2">$page</FONT> !;
49       } else {
50         $cgi->param('offset', $poff);
51         $pager .= qq!<A HREF="!. $cgi->self_url. qq!">$page</A> !;
52       }
53     }
54     unless ( $offset + $maxrecords > $total ) {
55       $cgi->param('offset', $offset + $maxrecords);
56       $pager .= '<A HREF="'. $cgi->self_url.
57                 '"><B><FONT SIZE="+1">Next</FONT></B></A> ';
58     }
59   }
60   #end pager
61
62   print header('Query Results', menubar('Main Menu'=>$p) ).
63         "$total total rows<BR><BR>$pager". table().
64         "<TR>";
65   print "<TH>$_</TH>" foreach @{$sth->{NAME}};
66   print "</TR>";
67
68   foreach $row ( @$rows ) {
69     print "<TR>";
70     print "<TD>$_</TD>" foreach @$row;
71     print "</TR>";
72   }
73
74   print "</TABLE>$pager</BODY></HTML>";
75
76 %>